0) { $setting = M('promote_grade_setting', 'tab')->where(['id' => $id])->find(); if (is_null($setting)) { throw new \Exception('记录不存在'); } if ($setting['company_id'] != $promote['company_id']) { throw new \Exception('不允许修改其他公司的配置'); } } $config = []; $config['reach_level'] = $params['level']; $config['grades'] = $params['grades']; $data = []; $data['company_id'] = $promote['company_id']; $data['status'] = 1; $data['config'] = json_encode($config); $data['create_time'] = time(); $data['update_time'] = time(); M('promote_grade_setting', 'tab_')->add($data); M('promote_grade_setting', 'tab_')->where(['id' => $id])->save($data); } private function checkGrades($grades) { } public function hadSetting($promote) { $setting = M('promote_grade_setting', 'tab_')->field(['id'])->where(['status' => 1, 'company_id' => $promote['company_id']])->find(); if ($setting) { return true; } return false; } public function searchGradeByPromotes($promotes, $params) { /** * @todo 通过设置获取 */ $settingLevel = 50; $month = $params['month'] ?? date('Y-m'); $promoteIds = array_column($promotes, 'id'); $beginTime = strtotime($month . '-01 00:00:00'); $endTime = strtotime($month . '-01 00:00:00') + 24*3600 - 1; $betweenTime = [$beginTime, $endTime]; $userSubSql = M('user', 'tab_') ->field(['id']) ->where(['register_time' => ['between', $betweenTime], 'promote_id' => ['in', $promoteIds]]) ->group('promote_id') ->select(false); $accountItems = M('user_play_info', 'tab_') ->field(['promote_id', 'count(DISTINCT user_id) num']) ->where([ 'role_level' => ['egt', $settingLevel], 'create_time' => ['between', $betweenTime], 'promote_id' => ['in', $promoteIds], '_string' => 'user_id in (' . $userSubSql . ')' ]) ->group('promote_id') ->select(); $accountItems = index_by_column('promote_id', $accountItems); $amountItems = M('spend', 'tab_') ->field(['promote_id', 'sum(pay_amount) amount']) ->where([ 'pay_time' => ['between', $betweenTime], 'pay_status' => 1, 'promote_id' => ['in', $promoteIds], '_string' => 'user_id in (' . $userSubSql . ')' ]) ->group('promote_id') ->select(); $amountItems = index_by_column('promote_id', $amountItems); $records = []; foreach ($promotes as $promote) { $amountItem = $amountItems[$promote['id']] ?? null; $accountItem = $accountItems[$promote['id']] ?? null; $records[] = [ 'amount' => $amountItem ? $amountItem['amount'] : 0, 'num' => $accountItem ? $accountItem['num'] : 0, 'real_name' => $promote['real_name'], 'account' => $promote['account'], 'promote_group' => $promote['promote_group'] ]; } return $records; } }