['n.commission_config_id', 'n.master_worker_id', 'n.day_num', 'n.order_num', 'n.signing_date', 'n.signing_date_end'], ]; } public function queryWhere() { $where = []; if (isset($this->params['labels']) && !empty($this->params['labels'])) { $sqls = []; foreach ($this->params['labels'] as $item) { $sqls[] = "FIND_IN_SET({$item}, labels) > 0"; } $query_sql = implode(' OR ', $sqls); $period_ids = MasterWorker::where('labels','<>', '')->whereRaw($query_sql)->column('id'); $where[] = [ 'n.master_worker_id','in',$period_ids?:[0]]; } if (isset($this->params['mobile']) && !empty($this->params['mobile'])) { $mw_ids = MasterWorker::where('mobile', $this->params['mobile'])->column('id'); $where[] = [ 'n.master_worker_id','in',$mw_ids?:[0]]; } if (isset($this->params['worker_number']) && !empty($this->params['worker_number'])) { $mw_ids = MasterWorker::where([[ 'mw.worker_number','like','%'.$this->params['worker_number'].'%']])->column('id'); $where[] = [ 'n.master_worker_id','in',$mw_ids?:[0]]; } if (isset($this->params['real_name']) && !empty($this->params['real_name'])) { $mw_ids = MasterWorker::where([[ 'mw.worker_number','like','%'.$this->params['real_name'].'%']])->column('id'); $where[] = [ 'n.master_worker_id','in',$mw_ids?:[0]]; } $mwids = MasterWorkerCommissionConfig::where('voucher_status', 2)->column('master_worker_id'); $where[] = [ 'n.master_worker_id','in',$mwids?:[0]]; return $where; } /** * 获取数据权限 * $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[] = ['sw.province','in' ,$data_rules['province']]; $where[] = ['mw.province','in' ,$data_rules['province']]; } if (isset($data_rules['city']) && !empty($data_rules['city'])) { $where[] = ['sw.city','in' ,$data_rules['city']]; $where[] = ['mw.city','in' ,$data_rules['city']]; } 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/16 17:37 */ public function lists(): array { $lists = Db::name('master_worker_commission_notice')->alias('n') ->leftJoin('master_worker mw', 'n.master_worker_id = mw.id') ->leftJoin('service_work sw', 'n.master_worker_id = sw.master_worker_id AND sw.create_time >= n.signing_date AND sw.create_time <= n.signing_date_end') ->field([ 'n.id', 'n.commission_config_id', 'n.master_worker_id', 'n.day_num', 'n.order_num', 'n.signing_date', 'n.signing_date_end', 'mw.real_name', 'mw.nickname', 'mw.worker_number', 'mw.mobile','mw.labels','mw.remark', Db::raw("COUNT(CASE WHEN sw.service_status = 3 THEN sw.id ELSE null END) AS order_count"), Db::raw("MAX(CASE WHEN sw.service_status = 3 THEN sw.finished_time ELSE null END) max_time") ]) ->where($this->searchWhere) ->where($this->queryWhere()) ->where($this->queryDataWhere()) ->group('n.master_worker_id, n.id') ->limit($this->limitOffset, $this->limitLength) ->select()->toArray(); foreach ($lists as &$item) { $item['labels'] = $item['labels']?array_map(function ($item) { return intval($item); },explode(',',$item['labels'])):''; $item['allocate_num'] = ServiceWorkAllocateWorkerLog::where(['master_worker_id'=>$item['master_worker_id']])->count(); } return $lists; } /** * @notes 获取数量 * @return int * @author likeadmin * @date 2024/12/16 17:37 */ public function count(): int { return Db::name('master_worker_commission_notice')->alias('n') ->with('masterWorker') ->leftJoin('service_work sw', 'n.master_worker_id = sw.master_worker_id AND sw.create_time >= n.signing_date AND sw.create_time <= n.signing_date_end') ->field([ 'n.id', 'n.commission_config_id', 'n.master_worker_id', 'n.day_num', 'n.order_num', 'n.signing_date', 'n.signing_date_end', Db::raw("COUNT(sw.id) AS order_count"), Db::raw("MAX(sw.finished_time) max_time") ]) ->where($this->searchWhere) ->where($this->queryWhere()) ->where($this->queryDataWhere()) ->group('n.master_worker_id, n.id') ->count(); } public function setExcelComplexFields(): array { $zh_cn_fields = [ '工程师ID','工程师编号', '工程师姓名','工程师手机号','启动时间(签约时间)', '规则天数','应达标时间','单量规则', '标签','派单数', '工单数','是否达标','达标时间' ]; $data_fields = ['master_worker_id','worker_number','real_name','mobile',function ($row) { return $row['signing_date']?date('Y-m-d H:i:s',$row['signing_date']):''; },'day_num',function ($row) { return $row['signing_date_end']?date('Y-m-d H:i:s',$row['signing_date_end']):''; },'order_num','labels'=>function ($row) { if(!empty($row['labels'])){ $data_table_allLabels = array_column(\app\common\logic\TableDataLogic::allLabels(),'name','id'); foreach ($row['labels'] as &$val){ $val = $data_table_allLabels[$val]; } $row['labels'] = implode('、', $row['labels']); } return $row['labels']?:''; },'allocate_num','order_count',function ($row) { return ($row['order_num']>$row['order_count'])? '否' : '是'; },function ($row) { return ($row['order_num']>$row['order_count'])?'':($row['max_time']?date('Y-m-d H:i:s',$row['max_time']):''); }]; return [ 'zh_cn_fields' => $zh_cn_fields, 'data_fields' => $data_fields ]; } }