Просмотр исходного кода

修改工程师和团队负责人的服务区域ID

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

+ 21 - 0
app/adminapi/logic/master_worker/MasterWorkerLogic.php

@@ -19,6 +19,7 @@ use app\common\model\master_worker\MasterWorker;
 use app\common\logic\BaseLogic;
 use app\common\model\master_worker\MasterWorkerScore;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
+use app\common\model\service_area\ServiceArea;
 use think\db\Query;
 use think\facade\Config;
 use think\facade\Db;
@@ -44,6 +45,15 @@ 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'];
+            }
             $masterWorker = MasterWorker::create([
                 'sn' => $params['sn'],
                 'avatar' => $params['avatar'],
@@ -68,6 +78,7 @@ class MasterWorkerLogic extends BaseLogic
                 'distance' => $params['distance'],
                 'province' => $params['province'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'cooperation' => $params['cooperation']??0,
                 'time_period' => $params['time_period']??'',
@@ -115,6 +126,15 @@ 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'];
+            }
             $update = [
                 'sn' => $params['sn'],
                 'avatar' => $params['avatar'],
@@ -138,6 +158,7 @@ class MasterWorkerLogic extends BaseLogic
                 'distance' => $params['distance'],
                 'province' => $params['province'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money_usable' => $params['earnest_money_usable'],

+ 23 - 0
app/adminapi/logic/master_worker/MasterWorkerTeamLogic.php

@@ -17,6 +17,7 @@ namespace app\adminapi\logic\master_worker;
 
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorkerTeam;
+use app\common\model\service_area\ServiceArea;
 use app\common\logic\BaseLogic;
 use think\facade\Db;
 
@@ -51,6 +52,15 @@ 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'];
+            }
 
             MasterWorkerTeam::where('tenant_id', $params['tenant_id'])->value('id') && throw new \Exception('该租户已有团队');
             $masterWorkerTeam = MasterWorkerTeam::create([
@@ -58,6 +68,7 @@ class MasterWorkerTeamLogic extends BaseLogic
                 'master_worker_id' => $params['master_worker_id'],
                 'tenant_id' => $params['tenant_id']??0,
                 'city' => $params['city']??0,
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name']??'',
                 'lon' => $params['lon']??0,
                 'lat' => $params['lat']??0,
@@ -102,6 +113,17 @@ class MasterWorkerTeamLogic extends BaseLogic
             if(($masterWorkerTeam['master_worker_id'] != $params['master_worker_id']) && $masterWorker['team_id']){
                 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'];
+            }
+
             if($params['goods_category_ids']){
                 foreach ($params['goods_category_ids'] as $val){
                     is_array($val)?($ids[] = end($val)):($ids[] = $val);
@@ -121,6 +143,7 @@ class MasterWorkerTeamLogic extends BaseLogic
                 'master_worker_id' => $params['master_worker_id'],
                 'tenant_id' => $params['tenant_id']??0,
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'lon' => $params['lon'],
                 'lat' => $params['lat'],

+ 8 - 0
app/adminapi/logic/master_worker_register/MasterWorkerRegisterLogic.php

@@ -26,6 +26,7 @@ use app\common\logic\BaseLogic;
 use app\common\service\ConfigService;
 use think\facade\Config;
 use think\facade\Db;
+use app\common\model\service_area\ServiceArea;
 
 
 /**
@@ -151,6 +152,12 @@ class MasterWorkerRegisterLogic 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;
+            }
             $masterWorker = MasterWorker::create([
                 'sn' => $userSn,
                 'worker_number' => $number,
@@ -165,6 +172,7 @@ class MasterWorkerRegisterLogic extends BaseLogic
                 'lat' => $params['lat']??0,
                 'province' => $params['province']??0,
                 'city' => $params['city']??0,
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name']??'',
                 'tenant_id' => $params['tenant_id']??0,
                 'category_ids' => $params['category_ids']??'',

+ 2 - 0
app/api/logic/ServiceOrderLogic.php

@@ -58,6 +58,7 @@ class ServiceOrderLogic extends BaseLogic
             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']
@@ -147,6 +148,7 @@ class ServiceOrderLogic extends BaseLogic
                 'province' => $areas['province']??0,
                 'city' => $areas['city']??0,
                 'area_name' => $areas['area_name']??'',
+                'service_area_id' => $areas['id']??0,
 
                 'title' => $goods->goods_name,
                 'category_type' => $goods['category_type'],

+ 3 - 1
app/common/command/AutomaticDispatch.php

@@ -59,7 +59,7 @@ class AutomaticDispatch extends Command
                             $query->where('exec_time', 0)->whereOr('exec_time', '<', $fiveMinutesAgo);
                         })
                         ->where('appointment_time','between', [$startTime, $endTime])
-                        ->field('id,category_type,goods_category_id,lon,lat,province,city,title,appointment_time,address,mobile')
+                        ->field('id,category_type,goods_category_id,service_area_id,lon,lat,province,city,title,appointment_time,address,mobile')
                         ->order('create_time','asc')
                         ->limit($size)
                         ->select()
@@ -123,6 +123,7 @@ class AutomaticDispatch extends Command
                 ['work_status', '=', 0],
                 ['accept_order_status', '=', 1],
                 ['city', '=', $item['city']],
+                ['service_area_id', '=', $item['service_area_id']],
                 ['tenant_id', '=', 0]
             ])
             ->whereRaw('FIND_IN_SET(' . $item['goods_category_id'] . ', a.category_ids)')
@@ -232,6 +233,7 @@ class AutomaticDispatch extends Command
         $worker = MasterWorkerTeam::where([
             ['accept_order_status', '=', 1],
             ['city', '=', $item['city']],
+            ['service_area_id', '=', $item['service_area_id']],
         ])
         ->whereRaw($whereRaw)
         ->whereRaw('FIND_IN_SET(' . $item['goods_category_id'] . ', goods_category_ids)')

+ 24 - 1
app/common/model/service_area/ServiceArea.php

@@ -33,5 +33,28 @@ class ServiceArea extends BaseModel
         'electronic_fence' => 'array',
     ];
 
-    
+    /**
+     * 判断是否在某服务区 返回服务区城市信息
+     * @param $params
+     * @return bool
+     */
+    public static function isService($params):array
+    {
+        // 查询服务区所有的地点
+        $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 [];
+    }
 }

+ 13 - 0
app/tenantapi/logic/master_worker/MasterWorkerLogic.php

@@ -22,6 +22,7 @@ use app\common\logic\BaseLogic;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
 use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\service_area\ServiceArea;
 use app\common\service\ConfigService;
 use think\db\Query;
 use think\facade\Config;
@@ -66,6 +67,11 @@ 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;
+            }
 
             $masterWorker = MasterWorker::create([
                 'sn' => $userSn,
@@ -91,6 +97,7 @@ class MasterWorkerLogic extends BaseLogic
                 'distance' => $params['distance'],
                 'province' => $params['province'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money_usable' => $params['earnest_money_usable'],
@@ -171,6 +178,11 @@ 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;
+            }
             $params['team_id'] = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id')??"";
             MasterWorker::where('id', $params['id'])->update([
                 'sn' => $params['sn'],
@@ -195,6 +207,7 @@ class MasterWorkerLogic extends BaseLogic
                 'distance' => $params['distance'],
                 'province' => $params['province'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money_usable' => $params['earnest_money_usable'],

+ 1 - 1
app/workerapi/controller/InterviewController.php

@@ -74,7 +74,7 @@ class InterviewController extends BaseApiController
             'options' => [
                 '空调加氟',
                 '空调维修',
-                '冰箱','制冷设备','油烟机','洗衣机','甩干机','热水器','燃气灶','干洗机',
+                '冰箱','制冷设备','油烟机','洗衣机','甩干机','燃气热水器','电热水器','燃气灶','干洗机',
             ],
             'type' => 2,
         ]

+ 8 - 0
app/workerapi/logic/MasterWorkerRegisterLogic.php

@@ -6,6 +6,7 @@ use app\adminapi\logic\training\TrainingWorkerTaskLogic;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorkerScore;
 use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\service_area\ServiceArea;
 use app\common\logic\BaseLogic;
 use app\common\model\sale\Sale;
 use app\common\service\ConfigService;
@@ -46,6 +47,12 @@ class MasterWorkerRegisterLogic extends BaseLogic
             $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;
+            }
+
             /*系统自动填写工程师入驻信息(除身份证、银行卡外,代招人、时间段默认全选、合作形式默认全日接单、工作状态默认正常工作、
             结算类型是半月、半径默认5公里、服务类目为空、质保金比例默认15%、质保金缴纳方式分期抵扣、
             根据AI里面的回复确定清洗还是维修)。确认接单地址。*/
@@ -64,6 +71,7 @@ class MasterWorkerRegisterLogic extends BaseLogic
                 'distance' => 5000,
                 'province' => $masterWorkerRegister['province']??0,
                 'city' => $masterWorkerRegister['city']??0,
+                'service_area_id' => $service_area_id,
                 'area_name' => $masterWorkerRegister['area_name']??'',
                 'tenant_id' => 0,
                 'category_ids' => '',