Bläddra i källkod

seo - 师傅保护期 师傅可用金额限制(除去保护期师傅) 师傅接单状态 订单产品分类 订单坐标筛选(暂不按距离筛选只按距离排序) 订单坐标距离排序

liugc 1 år sedan
förälder
incheckning
850c73e35f

+ 16 - 17
app/adminapi/lists/master_worker/MasterWorkerLists.php

@@ -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();
     }
 
 

+ 6 - 3
app/adminapi/service/DistributeLeafletsService.php

@@ -62,7 +62,7 @@ class DistributeLeafletsService
             ['work_status','=',0]
         ])->column('id');
     }
-    public static function getIntersection($lon, $lat,$goods_category_id)
+    public static function getIntersection($goods_category_id,$lon = 0, $lat = 0)
     {
         //self::protectionPeriodIds();
         //self::availableAmountIds();
@@ -70,9 +70,12 @@ class DistributeLeafletsService
 
         //self::locationIds($lon, $lat,1);
         //self::goodsCategoryIds($goods_category_id);
-        $intersectIds = array_intersect(self::locationIds($lon, $lat,1),self::goodsCategoryIds($goods_category_id));
+        //$intersectIds = array_intersect(self::locationIds($lon, $lat,1),self::goodsCategoryIds($goods_category_id));
+        //$result=array_intersect($mergeIds,$intersectIds);
 
-        $result=array_intersect($mergeIds,$intersectIds);
+        $categoryIds = self::goodsCategoryIds($goods_category_id);
+
+        $result=array_intersect($mergeIds,$categoryIds);
         return array_values($result);
     }
     public static function mastersDistance($masters,$customer_lon,$customer_lat,$radius = 0)

+ 1 - 1
app/adminapi/validate/master_worker/MasterWorkerValidate.php

@@ -96,7 +96,7 @@ class MasterWorkerValidate extends BaseValidate
      */
     public function sceneEdit()
     {
-        return $this->only(['id','sn','real_name','nickname','account','password','mobile','sex','channel','is_disable','login_ip','login_time','is_new_user','exp','lon','lat','distance']);
+        return $this->only(['id','sn','nickname','account','password','mobile','sex','channel','is_disable']);
     }
 
 

+ 1 - 8
app/common/service/wechat/WeChatOaService.php

@@ -174,12 +174,9 @@ class WeChatOaService
         foreach ($params['params'] as $item => $val) {
             $search = '${' . $item . '}';
             if(strpos($content, $search) !== false && !in_array($item, $arr)) {
-                //arr => 获的数组[nickname, order_sn] //顺序可能是乱的
                 $arr[] = $item;
             }
         }
-
-        //arr2 => 获得数组[nickname, order_sn] //调整好顺序的变量名数组
         $arr2 = [];
         if (!empty($arr)) {
             foreach ($arr as $v) {
@@ -187,16 +184,12 @@ class WeChatOaService
                 $arr2[$key] = $v;
             }
         }
-
-        //格式化 arr2 => 以小到大的排序的数组
         ksort($arr2);
         $arr3 = array_values($arr2);
-
-        //arr4 => 获取到变量数组的对应的值 [mofung, 123456789]
         $arr4 = [];
         foreach ($arr3 as $v2) {
             if(isset($params['params'][$v2])) {
-                $arr4[] = $params['params'][$v2] . "";
+                $arr4[$v2]['value'] = $params['params'][$v2] . "";
             }
         }
         return $arr4;

+ 21 - 18
app/workerapi/controller/LoginController.php

@@ -107,24 +107,27 @@ class LoginController extends BaseApiController
     }
     public function testWeChat()
     {
-        // 发送通知给平台配置的审核人
-        $noticeSetting = NoticeSetting::where('scene_id', NoticeEnum::WORKER_EXAMINE)->findOrEmpty()->toArray();
-        if($noticeSetting['oa_notice']['designated_user']??0 && $noticeSetting['oa_notice']['designated_user']){
-
-            (new WeChatOaService())->sendTemplateMessage([
-                'scene_id' => NoticeEnum::WORKER_EXAMINE,
-                'params' => [
-                    'user_id' => 0,
-                    'openid' => $noticeSetting['oa_notice']['designated_user'],
-                ]
-            ]);
-            /*event('Notice',  [
-                'scene_id' => NoticeEnum::WORKER_EXAMINE,
-                'params' => [
-                    'user_id' => 0,
-                    'openid' => $noticeSetting['oa_notice']['designated_user'],
-                ]
-            ]);*/
+        try {
+            // 发送通知给平台配置的审核人
+            $noticeSetting = NoticeSetting::where('scene_id', NoticeEnum::WORKER_EXAMINE)->findOrEmpty()->toArray();
+            if($noticeSetting['oa_notice']['designated_user']??0 && $noticeSetting['oa_notice']['designated_user']){
+                (new WeChatOaService())->sendTemplateMessage([
+                    'scene_id' => NoticeEnum::WORKER_EXAMINE,
+                    'params' => [
+                        'user_id' => 0,
+                        'openid' => $noticeSetting['oa_notice']['designated_user'],
+                    ]
+                ]);
+                /*event('Notice',  [
+                    'scene_id' => NoticeEnum::WORKER_EXAMINE,
+                    'params' => [
+                        'user_id' => 0,
+                        'openid' => $noticeSetting['oa_notice']['designated_user'],
+                    ]
+                ]);*/
+            }
+        } catch (\Exception  $e) {
+            dd($e->getMessage());
         }
     }
 }