dongxiaoqin 1 год назад
Родитель
Сommit
7ebd8d5ccc

+ 8 - 16
app/adminapi/logic/master_worker/MasterWorkerLogic.php

@@ -45,14 +45,10 @@ class MasterWorkerLogic extends BaseLogic
     {
         Db::startTrans();
         try {
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                if (empty($serviceArea)) {
-                    self::setError('您所选的位置已超出服务区域!');
-                    return false;
-                }
-                $service_area_id = $serviceArea['id'];
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            if (!empty($params['lon']) && !empty($params['lat']) && !$service_area_id) {
+                self::setError('您所选的位置已超出服务区域!');
+                return false;
             }
             $masterWorker = MasterWorker::create([
                 'sn' => $params['sn'],
@@ -126,14 +122,10 @@ class MasterWorkerLogic extends BaseLogic
         }*/
         Db::startTrans();
         try {
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                if (empty($serviceArea)) {
-                    self::setError('您所选的位置已超出服务区域!');
-                    return false;
-                }
-                $service_area_id = $serviceArea['id'];
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            if (!empty($params['lon']) && !empty($params['lat']) && !$service_area_id) {
+                self::setError('您所选的位置已超出服务区域!');
+                return false;
             }
             $update = [
                 'sn' => $params['sn'],

+ 9 - 16
app/adminapi/logic/master_worker/MasterWorkerTeamLogic.php

@@ -52,14 +52,11 @@ class MasterWorkerTeamLogic extends BaseLogic
                 }
                 $params['goods_category_ids'] = implode(',',$ids);
             }
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                if (empty($serviceArea)) {
-                    self::setError('您所选的位置已超出服务区域!');
-                    return false;
-                }
-                $service_area_id = $serviceArea['id'];
+            
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            if (!empty($params['lon']) && !empty($params['lat']) && !$service_area_id) {
+                self::setError('您所选的位置已超出服务区域!');
+                return false;
             }
 
             MasterWorkerTeam::where('tenant_id', $params['tenant_id'])->value('id') && throw new \Exception('该租户已有团队');
@@ -114,14 +111,10 @@ class MasterWorkerTeamLogic extends BaseLogic
                 throw new \Exception('该师傅已加入团队,请先退出团队');
             }
 
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                if (empty($serviceArea)) {
-                    self::setError('您所选的位置已超出服务区域!');
-                    return false;
-                }
-                $service_area_id = $serviceArea['id'];
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            if (!empty($params['lon']) && !empty($params['lat']) && !$service_area_id) {
+                self::setError('您所选的位置已超出服务区域!');
+                return false;
             }
 
             if($params['goods_category_ids']){

+ 2 - 5
app/adminapi/logic/master_worker_register/MasterWorkerRegisterLogic.php

@@ -153,11 +153,8 @@ class MasterWorkerRegisterLogic extends BaseLogic
             $password = create_password($params['mobile'], $passwordSalt);
             $avatar = ConfigService::get('default_image', 'user_avatar');
 
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                $service_area_id = isset($serviceArea['id']) ?? 0;
-            }
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            
             $masterWorker = MasterWorker::create([
                 'sn' => $userSn,
                 'worker_number' => $number,

+ 30 - 1
app/common/command/UpdateWorkerScore.php

@@ -18,6 +18,7 @@ use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker\MasterWorkerScore;
 use app\common\model\works\ServiceWorkAllocateWorkerLog;
 use app\common\model\master_worker\MasterWorkerServiceTime;
+use app\common\model\service_area\ServiceArea;
 
 class UpdateWorkerScore extends Command
 {
@@ -35,7 +36,7 @@ class UpdateWorkerScore extends Command
         $type = $input->getArgument('type');
         
         if ($type == 'init') {
-            $this->initMasterWorkerScore();
+            $this->initMasterAreaId();
         } else {
             //更新工程师评分
             $this->changeWorderScore();
@@ -46,6 +47,34 @@ class UpdateWorkerScore extends Command
 
     }
 
+    /**
+     * 初始化工程师服务区域ID
+     */
+    protected function initMasterAreaId()
+    {
+        $last_id = 0;
+        while($last_id >= 0) {
+            $list = MasterWorker::where('lon','>',0)
+                        ->where('lat','>',0)
+                        ->where('id','>',$last_id)
+                        ->field('id,lon,lat')
+                        ->order('id','asc')
+                        ->limit(50)
+                        ->select()->toArray();
+            if (!$list) {
+                $last_id = -1;
+                break;
+            }
+            foreach($list as $item) {
+                $last_id = $item['id'];
+                $service_area_id = ServiceArea::serviceAreaId(['lon' => $item['lon'], 'lat' => $item['lat']]);
+                if ($service_area_id) {
+                    MasterWorker::where('id',$item['id'])->update(['service_area_id' => $service_area_id]);
+                }
+            }
+        }
+    }
+
     /**
      * 初始化工程师汇总评分数据,只执行一次即可
      */

+ 6 - 8
app/common/model/service_area/ServiceArea.php

@@ -38,23 +38,21 @@ class ServiceArea extends BaseModel
      * @param $params
      * @return bool
      */
-    public static function isService($params):array
+    public static function serviceAreaId($params):int
     {
+        if (empty($params['lon']) || empty($params['lat'])) {
+            return 0;
+        }
         // 查询服务区所有的地点
         $rules = ServiceArea::field(['id', 'province', 'city','county', 'area_name', 'electronic_fence'])->select()->toArray();
         $point=['lng'=> $params['lon'],'lat'=> $params['lat']];
         foreach ($rules as $value){
             foreach ($value['electronic_fence'] as $polygon) {
                 if (isPointInPolygon($point, $polygon)) {
-                    return [
-                        'id'=>$value['id'],
-                        'city'=>$value['city'],
-                        'county'=>$value['county'],
-                        'area_name'=>$value['area_name']
-                    ];
+                    return $value['id'];
                 }
             }
         }
-        return [];
+        return 0;
     }
 }

+ 4 - 10
app/tenantapi/logic/master_worker/MasterWorkerLogic.php

@@ -67,12 +67,9 @@ class MasterWorkerLogic extends BaseLogic
             //$passwordSalt = Config::get('project.unique_identification');
             //$password = create_password($params['mobile'], $passwordSalt);
             $avatar = ConfigService::get('default_image', 'user_avatar');
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                $service_area_id = isset($serviceArea['id']) ?? 0;
-            }
 
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            
             $masterWorker = MasterWorker::create([
                 'sn' => $userSn,
                 'worker_number' => $number,
@@ -178,11 +175,8 @@ class MasterWorkerLogic extends BaseLogic
         }
         Db::startTrans();
         try {
-            $service_area_id = 0;
-            if (!empty($params['lon']) && !empty($params['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $params['lon'], 'lat' => $params['lat']]);
-                $service_area_id = isset($serviceArea['id']) ?? 0;
-            }
+            
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
             $params['team_id'] = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id')??"";
             MasterWorker::where('id', $params['id'])->update([
                 'sn' => $params['sn'],

+ 2 - 6
app/workerapi/logic/MasterWorkerRegisterLogic.php

@@ -46,12 +46,8 @@ class MasterWorkerRegisterLogic extends BaseLogic
             $passwordSalt = Config::get('project.unique_identification');
             $password = create_password($masterWorkerRegister['mobile'], $passwordSalt);
             $avatar = ConfigService::get('default_image', 'user_avatar');
-
-            $service_area_id = 0;
-            if (!empty($masterWorkerRegister['lon']) && !empty($masterWorkerRegister['lat'])) {
-                $serviceArea = ServiceArea::isService(['lon' => $masterWorkerRegister['lon'], 'lat' => $masterWorkerRegister['lat']]);
-                $service_area_id = isset($serviceArea['id']) ?? 0;
-            }
+            
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
 
             /*系统自动填写工程师入驻信息(除身份证、银行卡外,代招人、时间段默认全选、合作形式默认全日接单、工作状态默认正常工作、
             结算类型是半月、半径默认5公里、服务类目为空、质保金比例默认15%、质保金缴纳方式分期抵扣、