['sale_id'], ]; } public function queryWhereTime() { if(isset($this->params['time_range']) && $this->params['time_range']){ $startDateTime = strtotime($this->params['time_range'][0]); $endDateTime = strtotime($this->params['time_range'][1])+86400-1; } else { $startDateTime = strtotime(date('Y-m-01',time())); $endDateTime = time(); } return [$startDateTime,$endDateTime]; } /** * 获取数据权限 * $this->adminInfo['data_rules'] * province city admin_id sale_group_id sale_id property_head_id */ public function queryDataWhere(){ $where = []; $data_rules = $this->adminInfo['data_rules']; if (isset($data_rules['province']) && !empty($data_rules['province'])) { $where[] = ['province','in' ,$data_rules['province']]; } if (isset($data_rules['city']) && !empty($data_rules['city'])) { $where[] = ['city','in' ,$data_rules['city']]; } if (isset($data_rules['sale_group_id']) && !empty($data_rules['sale_group_id'])) { $sale_ids = Sale::where('sale_group_id','in',$data_rules['sale_group_id'])->column('id')??[]; $where[] = ['sale_id','in' ,$sale_ids]; } if (isset($data_rules['sale_id']) && !empty($data_rules['sale_id'])) { $where[] = ['sale_id','in' ,$data_rules['sale_id']]; } return $where; } /** * @notes 获取列表 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author likeadmin * @date 2024/12/15 10:53 */ public function lists(): array { $list = MasterWorkerRegister::with(['sale']) ->where('sale_id','>',0) ->where($this->searchWhere) ->whereBetween('create_time',$this->queryWhereTime()) ->where($this->queryDataWhere()) ->field([ 'sale_id', Db::raw("COUNT(id) AS register_count,SUM(CASE WHEN worker_id > 0 THEN 1 ELSE 0 END) AS settled_count"), Db::raw("'".($this->queryWhereTime()[0]??'')."' AS start_date"), Db::raw("'".($this->queryWhereTime()[1]??'')."' AS end_date"), ]) ->group('sale_id') ->limit($this->limitOffset, $this->limitLength) ->select()->toArray(); // tmp - 统计已完成所有必须任务工程师数 $sale_ids = array_column($list,'sale_id'); $passes_counts = []; foreach ($sale_ids as $sale_id) { $worker_ids = MasterWorkerRegister::where('sale_id','>',0)->where('worker_id','>',0) ->where('sale_id',$sale_id) ->where($this->searchWhere) ->whereBetween('create_time',$this->queryWhereTime()) ->where($this->queryDataWhere()) ->column('worker_id'); foreach ($worker_ids as $worker_id) { !isset($passes_counts[$sale_id]) && $passes_counts[$sale_id] = 0; $passes_counts[$sale_id] += $this->requiredMasterWorker($worker_id)?1:0; } } //dd($passes_counts); foreach ($list as &$item) { $item['passes_count'] = $passes_counts[$item['sale_id']]??0; } return $list; } /** * @notes 获取数量 * @return int * @author likeadmin * @date 2024/12/15 10:53 */ public function count(): int { return MasterWorkerRegister::with(['sale']) ->where('sale_id','>',0) ->where($this->searchWhere) ->whereBetween('create_time',$this->queryWhereTime()) ->where($this->queryDataWhere()) ->field(['sale_id']) ->group('sale_id') ->count(); } public function setExcelComplexFields(): array { $zh_cn_fields = [ '销售人员','所属组','注册数','入驻数','开始日期', '结束日期' ]; $data_fields = [ function($row){ return $row['sale']['sale_name']??''; }, function($row){ return $row['sale']['saleGroupInfo']['sale_name']??''; }, 'register_count','settled_count',function($row){ return $row['start_date']?date('Y-m-d',$row['start_date']):''; },function($row){ return $row['end_date']?date('Y-m-d',$row['end_date']):''; } ]; return [ 'zh_cn_fields' => $zh_cn_fields, 'data_fields' => $data_fields ]; } public function requiredMasterWorker($master_worker_id): bool { $masterWorker = MasterWorker::where('id',$master_worker_id)->findOrEmpty(); if(!$masterWorker->isEmpty()){ // 该工程师所有必须任务是否完成 $taskRequired = MasterWorkerLogic::taskRequired($master_worker_id,$masterWorker->identity_source); if($masterWorker->audit_state == 1 && $taskRequired){ return true; } } return false; } }