liugc 1 год назад
Родитель
Сommit
0e5214c7ae
1 измененных файлов с 14 добавлено и 15 удалено
  1. 14 15
      app/adminapi/lists/master_worker/MasterWorkerLists.php

+ 14 - 15
app/adminapi/lists/master_worker/MasterWorkerLists.php

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