|
@@ -153,16 +153,17 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
{
|
|
{
|
|
|
$fields = ['mw.*','mwr.maintain_exp_type','mwr.other_exp_type'];
|
|
$fields = ['mw.*','mwr.maintain_exp_type','mwr.other_exp_type'];
|
|
|
$orders = ['mw.id' => 'desc'];
|
|
$orders = ['mw.id' => 'desc'];
|
|
|
- $having = '';
|
|
|
|
|
$queryWhere = $this->queryWhere();
|
|
$queryWhere = $this->queryWhere();
|
|
|
//dd($queryWhere,$this->searchWhere);
|
|
//dd($queryWhere,$this->searchWhere);
|
|
|
// 派单搜索条件 - 订单坐标距离排序
|
|
// 派单搜索条件 - 订单坐标距离排序
|
|
|
|
|
+ $distanceWhereSql = 'mw.id > 0';
|
|
|
if($this->lat && $this->lon){
|
|
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');
|
|
|
|
|
|
|
+ $user_distance = '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)';
|
|
|
|
|
+ $fields[] = Db::raw($user_distance.' AS user_distance');
|
|
|
$orders = 'user_distance';
|
|
$orders = 'user_distance';
|
|
|
- $having = '(user_distance - mw.distance) <= 0';
|
|
|
|
|
|
|
+ $distanceWhereSql = '('.$user_distance.' - mw.distance) <= 0';
|
|
|
if($this->range){
|
|
if($this->range){
|
|
|
- $having = 'user_distance <= '.$this->range;
|
|
|
|
|
|
|
+ $distanceWhereSql = '('.$user_distance.' <= '.$this->range;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
$list = MasterWorker::alias('mw')
|
|
$list = MasterWorker::alias('mw')
|
|
@@ -170,9 +171,9 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
->where($this->searchWhere)
|
|
->where($this->searchWhere)
|
|
|
->where($queryWhere)
|
|
->where($queryWhere)
|
|
|
->where($this->queryDataWhere())
|
|
->where($this->queryDataWhere())
|
|
|
|
|
+ ->whereRaw($distanceWhereSql)
|
|
|
->field($fields)
|
|
->field($fields)
|
|
|
->limit($this->limitOffset, $this->limitLength)
|
|
->limit($this->limitOffset, $this->limitLength)
|
|
|
- ->having($having)
|
|
|
|
|
->order($orders)
|
|
->order($orders)
|
|
|
->select()->toArray();
|
|
->select()->toArray();
|
|
|
$workCount = array_column(ServiceWork::where('master_worker_id','>',0)
|
|
$workCount = array_column(ServiceWork::where('master_worker_id','>',0)
|
|
@@ -199,26 +200,24 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
|
|
|
public function count(): int
|
|
public function count(): int
|
|
|
{
|
|
{
|
|
|
$fields = ['mw.*','mwr.maintain_exp_type','mwr.other_exp_type'];
|
|
$fields = ['mw.*','mwr.maintain_exp_type','mwr.other_exp_type'];
|
|
|
- $orders = ['mw.id' => 'desc'];
|
|
|
|
|
- $having = '';
|
|
|
|
|
$queryWhere = $this->queryWhere();
|
|
$queryWhere = $this->queryWhere();
|
|
|
// 派单搜索条件 - 订单坐标距离排序
|
|
// 派单搜索条件 - 订单坐标距离排序
|
|
|
|
|
+ $distanceWhereSql = 'mw.id > 0';
|
|
|
if($this->lat && $this->lon){
|
|
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';
|
|
|
|
|
- $having = '(user_distance - mw.distance) <= 0';
|
|
|
|
|
|
|
+ $user_distance = '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)';
|
|
|
|
|
+ $fields[] = Db::raw($user_distance.' AS user_distance');
|
|
|
|
|
+ $distanceWhereSql = '('.$user_distance.' - mw.distance) <= 0';
|
|
|
if($this->range){
|
|
if($this->range){
|
|
|
- $having = 'user_distance <= '.$this->range;
|
|
|
|
|
|
|
+ $distanceWhereSql = '('.$user_distance.' <= '.$this->range;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- return count(MasterWorker::alias('mw')
|
|
|
|
|
|
|
+ return MasterWorker::alias('mw')
|
|
|
->join('master_worker_register mwr', 'mwr.worker_id = mw.id')
|
|
->join('master_worker_register mwr', 'mwr.worker_id = mw.id')
|
|
|
->where($this->searchWhere)
|
|
->where($this->searchWhere)
|
|
|
->where($queryWhere)
|
|
->where($queryWhere)
|
|
|
->where($this->queryDataWhere())
|
|
->where($this->queryDataWhere())
|
|
|
|
|
+ ->whereRaw($distanceWhereSql)
|
|
|
->field($fields)
|
|
->field($fields)
|
|
|
- ->having($having)
|
|
|
|
|
- ->select()->toArray());
|
|
|
|
|
- //->count('mw.id');
|
|
|
|
|
|
|
+ ->count();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|