|
|
@@ -21,6 +21,7 @@ use app\common\model\master_worker\MasterWorker;
|
|
|
use app\common\lists\ListsSearchInterface;
|
|
|
use app\common\model\works\ServiceWork;
|
|
|
use think\db\Query;
|
|
|
+use think\facade\Db;
|
|
|
use think\facade\Log;
|
|
|
|
|
|
/**
|
|
|
@@ -33,7 +34,7 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
public $count = 0;
|
|
|
public $lon = 0;
|
|
|
public $lat = 0;
|
|
|
-
|
|
|
+ //所有派单限制条件: 师傅保护期 师傅可用金额限制(除去保护期师傅) 师傅接单状态 订单产品分类 订单坐标筛选 订单坐标距离排序
|
|
|
/**
|
|
|
* @notes 设置搜索条件
|
|
|
* @return \string[][]
|
|
|
@@ -42,6 +43,7 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
*/
|
|
|
public function setSearch(): array
|
|
|
{
|
|
|
+ // 派单搜索条件 - 师傅接单状态
|
|
|
return [
|
|
|
'=' => ['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'],
|
|
|
|
|
|
@@ -66,14 +68,14 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
if(isset($this->params['max_work_number']) && is_numeric($this->params['max_work_number'])){
|
|
|
$where[] =[ 'mw.work_total','<= ',$this->params['max_work_number']];
|
|
|
}
|
|
|
- $goods_category_id = 0;
|
|
|
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($this->lon, $this->lat,$goods_category_id);
|
|
|
+ // 派单搜索条件 - 师傅保护期 师傅可用金额限制(除去保护期师傅) 订单产品分类 订单坐标筛选(暂不按距离筛选只按距离排序)
|
|
|
+ $ids = DistributeLeafletsService::getIntersection($goods_category_id??0);
|
|
|
$where[] = [ 'mw.id','IN',$ids];
|
|
|
Log::debug('MasterWorker-where:'.json_encode($where));
|
|
|
return $where;
|
|
|
@@ -89,24 +91,21 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
*/
|
|
|
public function lists(): array
|
|
|
{
|
|
|
- $list = MasterWorker::alias('mw')
|
|
|
+ $fields = ['mw.*','mwr.maintain_exp_type','mwr.other_exp_type'];
|
|
|
+ $orders = ['mw.id' => 'desc'];
|
|
|
+ // 派单搜索条件 - 订单坐标距离排序
|
|
|
+ if($this->lat && $this->lon){
|
|
|
+ $fields[] = Db::raw('ROUND(6371 * 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';
|
|
|
+ }
|
|
|
+ return MasterWorker::alias('mw')
|
|
|
->join('master_worker_register mwr', 'mwr.worker_id = mw.id')
|
|
|
->where($this->searchWhere)
|
|
|
->where($this->queryWhere())
|
|
|
- ->field([
|
|
|
- 'mw.*',
|
|
|
- 'mwr.maintain_exp_type',
|
|
|
- 'mwr.other_exp_type',
|
|
|
- ])
|
|
|
+ ->field($fields)
|
|
|
->limit($this->limitOffset, $this->limitLength)
|
|
|
- ->order(['mw.id' => 'desc'])
|
|
|
- ->select()
|
|
|
- ->toArray();
|
|
|
- $list && $distances = DistributeLeafletsService::locationIds($this->lon, $this->lat,0,array_keys(array_column($list, 'distance','id')));
|
|
|
- foreach ($list as &$item){
|
|
|
- $item['user_distance'] = $distances[$item['id']]??0;
|
|
|
- }
|
|
|
- return $list;
|
|
|
+ ->order($orders)
|
|
|
+ ->select()->toArray();
|
|
|
}
|
|
|
|
|
|
|