From 69b09c582f3d4aa77288ad1e9a9057183ae01f43 Mon Sep 17 00:00:00 2001 From: ELF <360197197@qq.com> Date: Mon, 15 Jun 2020 11:35:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=90=BD=E5=9C=B0=E9=A1=B5?= =?UTF-8?q?=E9=99=90=E5=88=B6=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PromoteLimitRuleController.class.php | 194 ++++++++++++++ .../Admin/View/PromoteLimitRule/form.html | 241 ++++++++++++++++++ .../Admin/View/PromoteLimitRule/records.html | 216 ++++++++++++++++ .../Base/Service/PromoteService.class.php | 24 ++ .../Home/Controller/HomeController.class.php | 13 +- .../Controller/PackageController.class.php | 11 +- 6 files changed, 696 insertions(+), 3 deletions(-) create mode 100644 Application/Admin/Controller/PromoteLimitRuleController.class.php create mode 100644 Application/Admin/View/PromoteLimitRule/form.html create mode 100644 Application/Admin/View/PromoteLimitRule/records.html diff --git a/Application/Admin/Controller/PromoteLimitRuleController.class.php b/Application/Admin/Controller/PromoteLimitRuleController.class.php new file mode 100644 index 000000000..2dcddbcc8 --- /dev/null +++ b/Application/Admin/Controller/PromoteLimitRuleController.class.php @@ -0,0 +1,194 @@ +where('1=1'); + if ($promoteId !== 0) { + $query->where(['promote_id' => $promoteId]); + } + if ($companyId !== 0) { + $promoteIds = M('promote', 'tab_')->field(['id'])->where(['company_id' => $companyId, 'level' => 1])->getField('id', true); + $query->where(['promote_id' => ['in', $promoteIds]]); + } + + $countQuery = clone $query; + $rules = $query->page($page, $row)->select(); + $count = $countQuery->count(); + + $recordPromotes = []; + $recordCompanys = []; + if (count($rules) > 0) { + $recordPromotes = M('promote', 'tab_')->field(['id', 'account', 'company_id'])->where(['id' => ['in', array_column($rules, 'promote_id')]])->select(); + $recordCompanyIds = array_column($recordPromotes, 'company_id'); + if (count($recordCompanyIds) > 0) { + $recordCompanys = M('promote_company', 'tab_')->field(['id', 'company_name', 'company_belong'])->where(['id' => ['in', $recordCompanyIds]])->select(); + } + $recordPromotes = index_by_column('id', $recordPromotes); + $recordCompanys = index_by_column('id', $recordCompanys); + } + + $companyTypes = [ + 0 => '内团', + 1 => '外团', + 2 => '外团-分发联盟', + ]; + + $records = []; + foreach ($rules as $rule) { + $records[] = [ + 'id' => $rule['id'], + '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']], + 'limit_rule' => $this->getDisplayRule($rule), + ]; + } + $companys = M('promote_company', 'tab_')->field(['id', 'company_name'])->select(); + + $page = set_pagination($count, $row); + if($page) { + $this->assign('_page', $page); + } + $this->assign('records', $records); + $this->assign('companys', $companys); + $this->display(); + } + + private function getDisplayRule($rule) + { + if ($rule['started_at'] === null && $rule['ended_at'] === null) { + return '永久'; + } elseif ($rule['started_at'] === null && $rule['ended_at'] !== null) { + return '从前 至 '.$rule['ended_at']; + } elseif ($rule['started_at'] !== null && $rule['ended_at'] === null) { + return $rule['started_at'] . ' 至 永久'; + } else { + return $rule['started_at'] . ' ~ ' . $rule['ended_at']; + } + } + + public function edit() + { + $this->meta_title = '编辑推广限制'; + $id = I('id', 0); + $companys = M('promote_company', 'tab_')->field(['id', 'company_name'])->select(); + $record = M('promote_limit_rules', 'tab_')->where(['id' => $id])->find(); + $promote = null; + $company = null; + if ($record) { + $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(); + } + $this->assign('promote', $promote); + $this->assign('company', $company); + $this->assign('companys', $companys); + $this->assign('record', $record); + $this->display('form'); + } + + public function save() + { + $id = I('id', 0); + $promoteId = I('promote_id', 0); + $startedAt = I('started_at', ''); + $endedAt = I('ended_at', ''); + + $startedAt = $startedAt === '' ? null : $startedAt; + $endedAt = $endedAt === '' ? null : $endedAt; + + if ($startedAt && $endedAt && strtotime($startedAt) > strtotime($endedAt)) { + return $this->error('开始时间不能大于结束时间'); + } + + $record = null; + if ($id > 0) { + $record = M('promote_limit_rules', 'tab_')->where(['id' => $id])->find(); + if (!$record) { + return $this->error('修改记录不存在'); + } + } else { + $promoteRecord = M('promote_limit_rules', 'tab_')->where(['promote_id' => $promoteId])->find(); + if ($promoteRecord) { + return $this->error('该会长已经设定限制规则,请前往更新'); + } + } + + if ($record) { + $data = []; + $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['started_at'] = $startedAt; + $data['ended_at'] = $endedAt; + $data['create_time'] = time(); + $data['update_time'] = time(); + M('promote_limit_rules', 'tab_')->add($data); + addOperationLog([ + 'op_type' => 0, + 'key'=> $promoteId . '/' . $startedAt . '/' . $endedAt, + 'op_name' => '新增推广限制', + 'url' => U('PresidentDeposit/edit', ['promote_id'=>$promoteId]), 'menu'=>'推广员-推广员管理-推广限制-新增推广限制' + ]); + } + + return $this->success('保存成功', U('records')); + } + + public function delete() + { + $id = I('id', 0); + M('promote_limit_rules', 'tab_')->where(['id' => $id])->delete(); + + addOperationLog([ + 'op_type' => 2, + 'key' => $id, + 'op_name' => '删除会长推广限制', + 'url' => U('PresidentDeposit/records', ['id' => $id]), + 'menu' => '推广员-推广员管理-推广限制-删除推广限制' + ]); + + $this->ajaxReturn([ + 'status' => 1, + 'message' => '删除成功' + ]); + } + + public function getPromotesByCompany() + { + $companyId = I('company_id', 0); + $promotes = M('promote', 'tab_')->field(['id', 'account'])->where(['level' => 1, 'company_id' => $companyId])->select(); + + $this->ajaxReturn([ + 'status' => 1, + 'message' => '获取成功', + 'data' => [ + 'promotes' => $promotes + ] + ]); + } +} diff --git a/Application/Admin/View/PromoteLimitRule/form.html b/Application/Admin/View/PromoteLimitRule/form.html new file mode 100644 index 000000000..2912f2344 --- /dev/null +++ b/Application/Admin/View/PromoteLimitRule/form.html @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + *推广公司: + + + {$company.company_name} + + + 请选择推广公司 + + selected>=$company['company_name']?> + + + + + + + *会长: + + + {$promote.account} + + + 请选择会长 + + + + + + 开始时间: + + + + + + 结束时间: + + + + + + + + + + + 确认 + + + 返回 + + + + + + + + + + + + + 已添加添加至常用设置 + + + + + + + if(C('COLOR_STYLE')=='blue_color') echo ''; + + + + + \ No newline at end of file diff --git a/Application/Admin/View/PromoteLimitRule/records.html b/Application/Admin/View/PromoteLimitRule/records.html new file mode 100644 index 000000000..096c11029 --- /dev/null +++ b/Application/Admin/View/PromoteLimitRule/records.html @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + 推广限制 + + + + + + 搜索: + + + + 请选择公司 + + =$company['company_name']?> + + + + + + 请选择会长 + + {$vo.account} + + + + + 搜索 + 添加 + + + + + + + + + + + + + + + + 推广公司 + 会长账号 + 内外团 + 限制时间 + 操作 + + + + + + + aOh! 暂时还没有内容! + + + + + + + {$data.company_name} + {$data.promote_account} + {$data.company_belong} + {$data.limit_rule} + + + 编辑 + 删除 + + + + + + + + + + + + + + {$_page|default=''} + + + + + + + + + 已添加添加至常用设置 + + + + + + + + + + \ No newline at end of file diff --git a/Application/Base/Service/PromoteService.class.php b/Application/Base/Service/PromoteService.class.php index a048db92d..a1645f115 100644 --- a/Application/Base/Service/PromoteService.class.php +++ b/Application/Base/Service/PromoteService.class.php @@ -1125,4 +1125,28 @@ class PromoteService { return $selfGameIds; } } + + public function checkPromoteLimitRule($promote) + { + $topPromote = $this->getTopPromote($promote); + $rule = M('promote_limit_rules', 'tab_')->where(['promote_id' => $topPromote['id']])->order('created_at desc')->limit(1)->find(); + if ($rule) { + if ($rule['started_at'] === null && $rule['ended_at'] === null) { + return false; + } elseif ($rule['started_at'] === null && $rule['ended_at'] !== null) { + if (time() < strtotime($rule['ended_at'] . ' 23:59:59')) { + return false; + } + } elseif ($rule['started_at'] !== null && $rule['ended_at'] === null) { + if (time() >= strtotime($rule['started_at'] . ' 00:00:00')) { + return false; + } + } else { + if (time() >= strtotime($rule['started_at'] . ' 00:00:00') && time() < strtotime($rule['ended_at'] . ' 23:59:59')) { + return false; + } + } + } + return true; + } } \ No newline at end of file diff --git a/Application/Home/Controller/HomeController.class.php b/Application/Home/Controller/HomeController.class.php index 345c8268a..c1c57599f 100644 --- a/Application/Home/Controller/HomeController.class.php +++ b/Application/Home/Controller/HomeController.class.php @@ -5,6 +5,7 @@ use Think\Controller; use User\Api\MemberApi; use Base\Facade\Request; use Base\Service\ApplyService; +use Base\Service\PromoteService; use Base\Service\PackageDownloadLogService; use Base\Tool\MobileDetect; @@ -170,6 +171,16 @@ class HomeController extends Controller $promoteId = $data['promote_id']; } + $promote = M('promote', 'tab_')->field(['id', 'parent_id', 'chain', 'level'])->where(['id' => $promoteId])->find(); + if (!$promote) { + $this->error('该链接已失效'); + } + + $promoteService = new PromoteService(); + if (!$promoteService->checkPromoteLimitRule($promote)) { + $this->error('链接已失效'); + } + $isWechat = Request::isWechat(); $isIOS = Request::isIOS() || Request::isIPadOS(); $isAndroid = Request::isAndroid(); @@ -208,8 +219,6 @@ class HomeController extends Controller $map = ['id' => intval($gameId)]; $game = M('game', 'tab_')->field($columns)->where($map)->find(); - $promote = M('promote', 'tab_')->field(['id', 'parent_id', 'chain', 'level'])->where(['id' => $promoteId])->find(); - if ($game['sdk_version'] == 1 && $isIOS) { $map = []; $map['relation_game_id'] = $game['relation_game_id']; diff --git a/Application/Home/Controller/PackageController.class.php b/Application/Home/Controller/PackageController.class.php index 41e70efce..6f664020d 100644 --- a/Application/Home/Controller/PackageController.class.php +++ b/Application/Home/Controller/PackageController.class.php @@ -54,6 +54,16 @@ class PackageController extends Controller $promoteId = $data['promote_id']; } + $promote = M('promote', 'tab_')->field(['id', 'parent_id', 'chain', 'level'])->where(['id' => $promoteId])->find(); + if (!$promote) { + $this->error('该链接已失效'); + } + + $promoteService = new PromoteService(); + if (!$promoteService->checkPromoteLimitRule($promote)) { + $this->error('链接已失效'); + } + $map = []; $map['status'] = 1; $map['enable_status'] = 1; @@ -65,7 +75,6 @@ class PackageController extends Controller $this->redirect("package/downloadError", ['message' => '该链接已经停止使用']); } - $promote = M('promote', 'tab_')->field(['id', 'parent_id', 'chain', 'level'])->where(['id' => $promoteId])->find(); $game = M('game','tab_')->field(['id', 'game_name', 'sdk_version', 'apply_auth'])->where(['id' => $apply['game_id']])->find(); if (Request::isMobile() || Request::isTablet()) {