'1=1']; $promoteIds = []; 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])->getField('id', true); if (count($companyPromoteIds) > 0) { $promoteIds = count($promoteIds) ? array_intersect($companyPromoteIds, $promoteIds) : $companyPromoteIds; $promoteIds[] = 0; } else { $promoteIds = [0]; } } 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->order('id desc')->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(); } $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); } $companyTypes = PromoteCompanyService::$belongs; $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']], '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), ]; } $companys = M('promote_company', 'tab_')->field(['id', 'company_name'])->select(); $page = set_pagination($count, $row); 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(); } 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(); } $baseGames = M('base_game', 'tab_')->select(); $this->assign('baseGames', $baseGames); $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); $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', ''); $startedAt = $startedAt === '' ? null : $startedAt; $endedAt = $endedAt === '' ? null : $endedAt; if ($startedAt && $endedAt && strtotime($startedAt) > strtotime($endedAt)) { return $this->error('开始时间不能大于结束时间'); } $record = null; $promotes = []; if ($id > 0) { $record = M('promote_limit_rules', 'tab_')->where(['id' => $id])->find(); if (!$record) { return $this->error('修改记录不存在'); } } else { 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); } else { $data = []; $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(); $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'=> '', 'op_name' => '新增推广限制', '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); $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, 'batch' => $batchNo]), 'menu' => '推广员-推广员管理-推广限制-删除推广限制' ]); $this->ajaxReturn([ 'status' => 1, 'message' => '删除成功' ]); } public function batchDelete() { $ids = I('ids', []); if (count($ids) == 0) { $this->ajaxReturn([ 'status' => 0, 'message' => '无选中项' ]); } M('promote_limit_rules', 'tab_')->where(['id' => ['in', $ids]])->delete(); addOperationLog([ 'op_type' => 2, 'key' => implode(',', $ids), 'op_name' => '批量删除会长推广限制', 'url' => U('PresidentDeposit/batchDelete', ['ids' => implode(',', $ids)]), '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 ] ]); } }