From 3a192b1f2ba665b4d149f35c1576707a7e140064 Mon Sep 17 00:00:00 2001 From: elf <360197197@qq.com> Date: Mon, 13 Dec 2021 13:54:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PromoteLimitRuleController.class.php | 140 +++++++-- .../Admin/View/PromoteLimitRule/form.html | 297 +++++++++++++----- .../Admin/View/PromoteLimitRule/records.html | 122 ++++--- .../Base/Service/PromoteService.class.php | 61 ++-- Data/update.sql | 6 +- 5 files changed, 470 insertions(+), 156 deletions(-) diff --git a/Application/Admin/Controller/PromoteLimitRuleController.class.php b/Application/Admin/Controller/PromoteLimitRuleController.class.php index 8246a553e..38ab43f62 100644 --- a/Application/Admin/Controller/PromoteLimitRuleController.class.php +++ b/Application/Admin/Controller/PromoteLimitRuleController.class.php @@ -17,14 +17,22 @@ class PromoteLimitRuleController extends ThinkController $row = I('row', 10); $companyId = I('company_id', 0); $promoteId = I('promote_id', 0); + $account = I('account', ''); + $baseGameId = I('base_game_id', -1); + $batchNo = I('batch_no', ''); - $conditions = []; + $conditions = ['_string' => '1=1']; $promoteIds = []; - if ($promoteId !== 0) { - $promoteIds = [$promoteId]; + if ($account != '') { + $promote = M('promote', 'tab_')->field(['id'])->where(['account' => $account])->find(); + if ($promote) { + $promoteIds = [$promote['id']]; + } else { + $conditions['_string'] .= ' and 1=0'; + } } if ($companyId !== 0) { - $companyPromoteIds = M('promote', 'tab_')->field(['id'])->where(['company_id' => $companyId, 'level' => 1])->getField('id', true); + $companyPromoteIds = M('promote', 'tab_')->field(['id'])->where(['company_id' => $companyId])->getField('id', true); if (count($companyPromoteIds) > 0) { $promoteIds = count($promoteIds) ? array_intersect($companyPromoteIds, $promoteIds) : $companyPromoteIds; $promoteIds[] = 0; @@ -35,10 +43,16 @@ class PromoteLimitRuleController extends ThinkController if (count($promoteIds)) { $conditions['promote_id'] = ['in', $promoteIds]; } + if ($baseGameId != -1) { + $conditions['base_game_id'] = $baseGameId; + } + if ($batchNo != '') { + $conditions['batch_no'] = $batchNo; + } $query = M('promote_limit_rules', 'tab_')->where($conditions); $countQuery = clone $query; - $rules = $query->page($page, $row)->select(); + $rules = $query->order('id desc')->page($page, $row)->select(); $count = $countQuery->count(); $recordPromotes = []; @@ -49,8 +63,12 @@ class PromoteLimitRuleController extends ThinkController if (count($recordCompanyIds) > 0) { $recordCompanys = M('promote_company', 'tab_')->field(['id', 'company_name', 'company_belong'])->where(['id' => ['in', $recordCompanyIds]])->select(); } + + $baseGames = M('base_game', 'tab_')->where(['id' => ['in', array_column($rules, 'base_game_id')]])->select(); + $recordPromotes = index_by_column('id', $recordPromotes); $recordCompanys = index_by_column('id', $recordCompanys); + $baseGames = index_by_column('id', $baseGames); } @@ -63,6 +81,9 @@ class PromoteLimitRuleController extends ThinkController 'promote_account' => $recordPromotes[$rule['promote_id']]['account'], 'company_name' => $recordCompanys[$recordPromotes[$rule['promote_id']]['company_id']]['company_name'], 'company_belong' => $companyTypes[$recordCompanys[$recordPromotes[$rule['promote_id']]['company_id']]['company_belong']], + 'base_game_name' => $rule['base_game_id'] > 0 ? $baseGames[$rule['base_game_id']]['name'] : '所有游戏', + 'with_sub' => $rule['with_sub'] == 1 ? '是' : '否', + 'batch_no' => $rule['batch_no'], 'limit_rule' => $this->getDisplayRule($rule), ]; } @@ -72,6 +93,9 @@ class PromoteLimitRuleController extends ThinkController if($page) { $this->assign('_page', $page); } + $baseGames = M('base_game', 'tab_')->select(); + + $this->assign('baseGames', $baseGames); $this->assign('records', $records); $this->assign('companys', $companys); $this->display(); @@ -102,6 +126,10 @@ class PromoteLimitRuleController extends ThinkController $promote = M('promote', 'tab_')->where(['id' => $record['promote_id']])->field(['id', 'company_id', 'account'])->find(); $company = M('promote_company', 'tab_')->where(['id' => $promote['company_id']])->field(['id', 'company_name'])->find(); } + + $baseGames = M('base_game', 'tab_')->select(); + + $this->assign('baseGames', $baseGames); $this->assign('promote', $promote); $this->assign('company', $company); $this->assign('companys', $companys); @@ -112,7 +140,11 @@ class PromoteLimitRuleController extends ThinkController public function save() { $id = I('id', 0); - $promoteId = I('promote_id', 0); + $baseGameId = I('base_game_id', 0); + $account = I('account', ''); + $accountsStr = I('accounts', ''); + $limitType = I('limit_type', 1); + $withSub = I('with_sub', 1); $startedAt = I('started_at', ''); $endedAt = I('ended_at', ''); @@ -124,62 +156,122 @@ class PromoteLimitRuleController extends ThinkController } $record = null; + $promotes = []; if ($id > 0) { $record = M('promote_limit_rules', 'tab_')->where(['id' => $id])->find(); if (!$record) { return $this->error('修改记录不存在'); } } else { - if (empty($promoteId)) { - return $this->error('请选择会长'); - } - $promoteRecord = M('promote_limit_rules', 'tab_')->where(['promote_id' => $promoteId])->find(); - if ($promoteRecord) { - return $this->error('该会长已经设定限制规则,请前往更新'); + try { + $accounts = []; + if ($limitType == 1) { + $accounts = [$account]; + } else { + $accounts = $this->parseAccountsStr($accountsStr); + } + $promotes = $this->getPromotes($accounts); + } catch (\Exception $e) { + return $this->error($e->getMessage()); } } if ($record) { + + $promote = M('promote', 'tab_')->field(['id'])->where(['account' => $account])->find(); + $data = []; + $data['promote_id'] = $promote['id']; + $data['base_game_id'] = $baseGameId; + $data['with_sub'] = $withSub; $data['started_at'] = $startedAt; $data['ended_at'] = $endedAt; $data['update_time'] = time(); M('promote_limit_rules', 'tab_')->where(['id' => $id])->save($data); - addOperationLog([ - 'op_type' => 1, - 'key'=> $promoteId . '/' . $startedAt . '/' . $endedAt, - 'op_name' => '修改推广限制', - 'url' => U('PresidentDeposit/edit', ['id'=>$id]), 'menu'=>'推广员-推广员管理-推广限制-修改推广限制' - ]); } else { $data = []; - $data['promote_id'] = $promoteId; + $data['base_game_id'] = $baseGameId; + $data['with_sub'] = $withSub; $data['started_at'] = $startedAt; $data['ended_at'] = $endedAt; + $data['batch_no'] = date('Ymdhis') . rand(1000, 9999); $data['create_time'] = time(); $data['update_time'] = time(); - M('promote_limit_rules', 'tab_')->add($data); + + $records = []; + foreach ($promotes as $promote) { + $records[] = array_merge($data, ['promote_id' => $promote['id']]); + } + M('promote_limit_rules', 'tab_')->addAll($records); + } + + if ($id > 0) { + addOperationLog([ + 'op_type' => 1, + 'key'=> '', + 'op_name' => '修改推广限制', + 'url' => U('PromoteLimitRule/save'), 'menu'=>'推广员-推广员管理-推广限制-修改推广限制', + 'content' => json_encode(I('post.')) + ]); + } else { addOperationLog([ 'op_type' => 0, - 'key'=> $promoteId . '/' . $startedAt . '/' . $endedAt, + 'key'=> '', 'op_name' => '新增推广限制', - 'url' => U('PresidentDeposit/edit', ['promote_id'=>$promoteId]), 'menu'=>'推广员-推广员管理-推广限制-新增推广限制' + 'url' => U('PromoteLimitRule/save'), 'menu'=>'推广员-推广员管理-推广限制-新增推广限制', + 'content' => json_encode(I('post.')) ]); } return $this->success('保存成功', U('records')); } + + private function parseAccountsStr($accountsStr) + { + if ($accountsStr == '') { + throw new \Exception('推广员账号数量不能为0'); + } + $accountArr = json_decode($accountsStr, true); + $accounts = []; + foreach ($accountArr as $key => $item) { + $accounts[] = trim($item['推广账号']); + } + return array_unique($accounts); + } + private function getPromotes($accounts) + { + $promotes = M('promote', 'tab_')->field(['id', 'account'])->where(['account' => ['in', $accounts]])->select(); + if (count($accounts) != count($promotes)) { + $promotes = index_by_column('account', $promotes); + $noExistAcounts = []; + foreach ($accounts as $account) { + if (!isset($promotes[$account])) { + $noExistAcounts[] = $account; + } + } + throw new \Exception('含有不存在的推广账号: ' . implode(',', $noExistAcounts)); + } + return $promotes; + } + public function delete() { $id = I('id', 0); - M('promote_limit_rules', 'tab_')->where(['id' => $id])->delete(); + $batchNo = I('batch_no', ''); + $conditions = []; + if ($id > 0) { + $conditions['id'] = $id; + } elseif ($batchNo != '') { + $conditions['batch_no'] = $batchNo; + } + M('promote_limit_rules', 'tab_')->where($conditions)->delete(); addOperationLog([ 'op_type' => 2, 'key' => $id, 'op_name' => '删除会长推广限制', - 'url' => U('PresidentDeposit/delete', ['id' => $id]), + 'url' => U('PresidentDeposit/delete', ['id' => $id, 'batch' => $batchNo]), 'menu' => '推广员-推广员管理-推广限制-删除推广限制' ]); diff --git a/Application/Admin/View/PromoteLimitRule/form.html b/Application/Admin/View/PromoteLimitRule/form.html index 2912f2344..f82893324 100644 --- a/Application/Admin/View/PromoteLimitRule/form.html +++ b/Application/Admin/View/PromoteLimitRule/form.html @@ -65,6 +65,14 @@ .iconfont-unselected:hover { background-color: #ababab; } + .data_list table th { + line-height: 30px; + height: 30px; + } + .data_list table td { + line-height: 30px; + height: 30px; + }
*推广公司: | -- - {$company.company_name} - - | +
*是否包含下级: | ++ + + + + | +
开始时间: | ++ + | +
结束时间: | ++ + | +