['mw.sn', 'mw.real_name', 'mw.account', 'mw.password', 'mw.mobile', 'mw.sex', 'mw.channel', 'mw.is_disable', 'mw.is_new_user', 'mw.create_time', 'mw.update_time', 'mw.accept_order_status', 'mw.cooperation','mw.audit_state', 'mw.work_status'], //'in' => ['mw.time_period'] ]; } public function queryWhere(){ $where = []; if(isset($this->params['time_period']) && !empty($this->params['time_period'])){ $sqls = []; foreach ($this->params['time_period'] as $item) { $sqls[] = "FIND_IN_SET({$item}, time_period) > 0"; } $query_sql = implode(' OR ', $sqls); Log::write('query_sql:'.$query_sql); $period_ids = MasterWorker::where('time_period','<>', '')->whereRaw($query_sql)->column('id'); $where[] = [ 'mw.id','IN',$period_ids?:[0]]; } // 用户昵称 if (isset($this->params['nickname']) && !empty($this->params['nickname'])) { $where[] = ['mw.nickname|mw.worker_number', 'like','%' .$this->params['nickname'] . '%']; } if (isset($this->params['worker_number']) && !empty($this->params['worker_number'])) { $where[] = ['mw.worker_number', 'like','%' .$this->params['worker_number'] . '%']; } if (isset($this->params['worker_exp_type']) && !empty($this->params['worker_exp_type'])) { $where[] = ['mwr.maintain_exp_type', '=', $this->params['worker_exp_type']]; } if(isset($this->params['min_work_number']) && is_numeric($this->params['min_work_number'])){ $where[] =[ 'mw.work_total','>=',$this->params['min_work_number']]; } if(isset($this->params['max_work_number']) && is_numeric($this->params['max_work_number'])){ $where[] =[ 'mw.work_total','<= ',$this->params['max_work_number']]; } if(isset($this->params['order_id']) && $this->params['order_id']){ $lon_lat = (ServiceWork::where('id',$this->params['order_id'])->column("lon,lat,goods_category_id"))[0]; $this->lon = $lon_lat['lon']; $this->lat = $lon_lat['lat']; $goods_category_id = $lon_lat['goods_category_id']; // 派单搜索条件 - 工程师保护期 工程师可用金额限制(除去保护期工程师) 订单产品分类 订单坐标筛选(暂不按距离筛选只按距离排序) $ids = DistributeLeafletsService::getIntersection($goods_category_id??0); $where[] = [ 'mw.id','IN',$ids]; $where[] = [ 'mw.work_status','=',0]; } Log::debug('MasterWorker-where:'.json_encode($where)); return $where; } /** * @notes 获取列表 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author likeadmin * @date 2024/07/10 18:17 */ public function lists(): array { $fields = ['mw.*','mwr.maintain_exp_type','mwr.other_exp_type']; $orders = ['mw.id' => 'desc']; $queryWhere = $this->queryWhere(); //dd($queryWhere,$this->searchWhere); // 派单搜索条件 - 订单坐标距离排序 if($this->lat && $this->lon){ $fields[] = Db::raw('ROUND(6371* 1000 * ACOS(COS(RADIANS('.$this->lat.')) * COS(RADIANS(mw.lat)) * COS(RADIANS(mw.lon) - RADIANS('.$this->lon.')) + SIN(RADIANS('.$this->lat.')) * SIN(RADIANS(mw.lat))), 2) AS user_distance'); $orders = 'user_distance'; } $list = MasterWorker::alias('mw') ->join('master_worker_register mwr', 'mwr.worker_id = mw.id') ->where($this->searchWhere) ->where($queryWhere) ->field($fields) ->limit($this->limitOffset, $this->limitLength) ->order($orders) ->select()->toArray(); $workCount = array_column(ServiceWork::where('master_worker_id','>',0) ->whereNotIn('work_status', [7,8,9]) ->whereIn('master_worker_id', array_column($list, 'id')) ->field(['master_worker_id',Db::raw('COUNT(id) as work_total')]) ->group('master_worker_id') ->select()->toArray(),'work_total','master_worker_id'); foreach ($list as &$item) { $item['work_total'] = $workCount[$item['id']]??0; } return $list; } /** * @notes 获取数量 * @return int * @author likeadmin * @date 2024/07/10 18:17 */ public function count(): int { return MasterWorker::alias('mw') ->join('master_worker_register mwr', 'mwr.worker_id = mw.id') ->field([ 'mw.*']) ->where($this->searchWhere)->where($this->queryWhere()) ->count(); //return $this->count; } }