Browse Source

Merge branch 'dongxiaoqin_0220'

dongxiaoqin 1 year ago
parent
commit
02ac060811

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

+ 16 - 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\MasterWorker;
 use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker\MasterWorkerTeam;
+use app\common\model\service_area\ServiceArea;
 use app\common\logic\BaseLogic;
 use app\common\logic\BaseLogic;
 use think\facade\Db;
 use think\facade\Db;
 
 
@@ -51,6 +52,12 @@ class MasterWorkerTeamLogic extends BaseLogic
                 }
                 }
                 $params['goods_category_ids'] = implode(',',$ids);
                 $params['goods_category_ids'] = implode(',',$ids);
             }
             }
+            
+            $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('该租户已有团队');
             MasterWorkerTeam::where('tenant_id', $params['tenant_id'])->value('id') && throw new \Exception('该租户已有团队');
             $masterWorkerTeam = MasterWorkerTeam::create([
             $masterWorkerTeam = MasterWorkerTeam::create([
@@ -58,6 +65,7 @@ class MasterWorkerTeamLogic extends BaseLogic
                 'master_worker_id' => $params['master_worker_id'],
                 'master_worker_id' => $params['master_worker_id'],
                 'tenant_id' => $params['tenant_id']??0,
                 'tenant_id' => $params['tenant_id']??0,
                 'city' => $params['city']??0,
                 'city' => $params['city']??0,
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name']??'',
                 'area_name' => $params['area_name']??'',
                 'lon' => $params['lon']??0,
                 'lon' => $params['lon']??0,
                 'lat' => $params['lat']??0,
                 'lat' => $params['lat']??0,
@@ -102,6 +110,13 @@ class MasterWorkerTeamLogic extends BaseLogic
             if(($masterWorkerTeam['master_worker_id'] != $params['master_worker_id']) && $masterWorker['team_id']){
             if(($masterWorkerTeam['master_worker_id'] != $params['master_worker_id']) && $masterWorker['team_id']){
                 throw new \Exception('该师傅已加入团队,请先退出团队');
                 throw new \Exception('该师傅已加入团队,请先退出团队');
             }
             }
+
+            $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']){
             if($params['goods_category_ids']){
                 foreach ($params['goods_category_ids'] as $val){
                 foreach ($params['goods_category_ids'] as $val){
                     is_array($val)?($ids[] = end($val)):($ids[] = $val);
                     is_array($val)?($ids[] = end($val)):($ids[] = $val);
@@ -121,6 +136,7 @@ class MasterWorkerTeamLogic extends BaseLogic
                 'master_worker_id' => $params['master_worker_id'],
                 'master_worker_id' => $params['master_worker_id'],
                 'tenant_id' => $params['tenant_id']??0,
                 'tenant_id' => $params['tenant_id']??0,
                 'city' => $params['city'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'area_name' => $params['area_name'],
                 'lon' => $params['lon'],
                 'lon' => $params['lon'],
                 'lat' => $params['lat'],
                 'lat' => $params['lat'],

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

@@ -26,6 +26,7 @@ use app\common\logic\BaseLogic;
 use app\common\service\ConfigService;
 use app\common\service\ConfigService;
 use think\facade\Config;
 use think\facade\Config;
 use think\facade\Db;
 use think\facade\Db;
+use app\common\model\service_area\ServiceArea;
 
 
 
 
 /**
 /**
@@ -151,6 +152,9 @@ class MasterWorkerRegisterLogic extends BaseLogic
             $passwordSalt = Config::get('project.unique_identification');
             $passwordSalt = Config::get('project.unique_identification');
             $password = create_password($params['mobile'], $passwordSalt);
             $password = create_password($params['mobile'], $passwordSalt);
             $avatar = ConfigService::get('default_image', 'user_avatar');
             $avatar = ConfigService::get('default_image', 'user_avatar');
+
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            
             $masterWorker = MasterWorker::create([
             $masterWorker = MasterWorker::create([
                 'sn' => $userSn,
                 'sn' => $userSn,
                 'worker_number' => $number,
                 'worker_number' => $number,
@@ -165,6 +169,7 @@ class MasterWorkerRegisterLogic extends BaseLogic
                 'lat' => $params['lat']??0,
                 'lat' => $params['lat']??0,
                 'province' => $params['province']??0,
                 'province' => $params['province']??0,
                 'city' => $params['city']??0,
                 'city' => $params['city']??0,
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name']??'',
                 'area_name' => $params['area_name']??'',
                 'tenant_id' => $params['tenant_id']??0,
                 'tenant_id' => $params['tenant_id']??0,
                 'category_ids' => $params['category_ids']??'',
                 '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) {
             foreach ($value['electronic_fence'] as $polygon) {
                 if (isPointInPolygon($point, $polygon)) {
                 if (isPointInPolygon($point, $polygon)) {
                     return [
                     return [
+                        'id'=>$value['id'],
                         'city'=>$value['city'],
                         'city'=>$value['city'],
                         'county'=>$value['county'],
                         'county'=>$value['county'],
                         'area_name'=>$value['area_name']
                         'area_name'=>$value['area_name']
@@ -147,6 +148,7 @@ class ServiceOrderLogic extends BaseLogic
                 'province' => $areas['province']??0,
                 'province' => $areas['province']??0,
                 'city' => $areas['city']??0,
                 'city' => $areas['city']??0,
                 'area_name' => $areas['area_name']??'',
                 'area_name' => $areas['area_name']??'',
+                'service_area_id' => $areas['id']??0,
 
 
                 'title' => $goods->goods_name,
                 'title' => $goods->goods_name,
                 'category_type' => $goods['category_type'],
                 '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);
                             $query->where('exec_time', 0)->whereOr('exec_time', '<', $fiveMinutesAgo);
                         })
                         })
                         ->where('appointment_time','between', [$startTime, $endTime])
                         ->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')
                         ->order('create_time','asc')
                         ->limit($size)
                         ->limit($size)
                         ->select()
                         ->select()
@@ -123,6 +123,7 @@ class AutomaticDispatch extends Command
                 ['work_status', '=', 0],
                 ['work_status', '=', 0],
                 ['accept_order_status', '=', 1],
                 ['accept_order_status', '=', 1],
                 ['city', '=', $item['city']],
                 ['city', '=', $item['city']],
+                ['service_area_id', '=', $item['service_area_id']],
                 ['tenant_id', '=', 0]
                 ['tenant_id', '=', 0]
             ])
             ])
             ->whereRaw('FIND_IN_SET(' . $item['goods_category_id'] . ', a.category_ids)')
             ->whereRaw('FIND_IN_SET(' . $item['goods_category_id'] . ', a.category_ids)')
@@ -232,6 +233,7 @@ class AutomaticDispatch extends Command
         $worker = MasterWorkerTeam::where([
         $worker = MasterWorkerTeam::where([
             ['accept_order_status', '=', 1],
             ['accept_order_status', '=', 1],
             ['city', '=', $item['city']],
             ['city', '=', $item['city']],
+            ['service_area_id', '=', $item['service_area_id']],
         ])
         ])
         ->whereRaw($whereRaw)
         ->whereRaw($whereRaw)
         ->whereRaw('FIND_IN_SET(' . $item['goods_category_id'] . ', goods_category_ids)')
         ->whereRaw('FIND_IN_SET(' . $item['goods_category_id'] . ', goods_category_ids)')

+ 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\master_worker\MasterWorkerScore;
 use app\common\model\works\ServiceWorkAllocateWorkerLog;
 use app\common\model\works\ServiceWorkAllocateWorkerLog;
 use app\common\model\master_worker\MasterWorkerServiceTime;
 use app\common\model\master_worker\MasterWorkerServiceTime;
+use app\common\model\service_area\ServiceArea;
 
 
 class UpdateWorkerScore extends Command
 class UpdateWorkerScore extends Command
 {
 {
@@ -35,7 +36,7 @@ class UpdateWorkerScore extends Command
         $type = $input->getArgument('type');
         $type = $input->getArgument('type');
         
         
         if ($type == 'init') {
         if ($type == 'init') {
-            $this->initMasterWorkerScore();
+            $this->initMasterAreaId();
         } else {
         } else {
             //更新工程师评分
             //更新工程师评分
             $this->changeWorderScore();
             $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]);
+                }
+            }
+        }
+    }
+
     /**
     /**
      * 初始化工程师汇总评分数据,只执行一次即可
      * 初始化工程师汇总评分数据,只执行一次即可
      */
      */

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

@@ -33,5 +33,26 @@ class ServiceArea extends BaseModel
         'electronic_fence' => 'array',
         'electronic_fence' => 'array',
     ];
     ];
 
 
-    
+    /**
+     * 判断是否在某服务区 返回服务区城市信息
+     * @param $params
+     * @return bool
+     */
+    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 $value['id'];
+                }
+            }
+        }
+        return 0;
+    }
 }
 }

+ 7 - 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\MasterWorkerRetentionMoneyLog;
 use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker_register\MasterWorkerRegister;
 use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\service_area\ServiceArea;
 use app\common\service\ConfigService;
 use app\common\service\ConfigService;
 use think\db\Query;
 use think\db\Query;
 use think\facade\Config;
 use think\facade\Config;
@@ -67,6 +68,8 @@ class MasterWorkerLogic extends BaseLogic
             //$password = create_password($params['mobile'], $passwordSalt);
             //$password = create_password($params['mobile'], $passwordSalt);
             $avatar = ConfigService::get('default_image', 'user_avatar');
             $avatar = ConfigService::get('default_image', 'user_avatar');
 
 
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
+            
             $masterWorker = MasterWorker::create([
             $masterWorker = MasterWorker::create([
                 'sn' => $userSn,
                 'sn' => $userSn,
                 'worker_number' => $number,
                 'worker_number' => $number,
@@ -91,6 +94,7 @@ class MasterWorkerLogic extends BaseLogic
                 'distance' => $params['distance'],
                 'distance' => $params['distance'],
                 'province' => $params['province'],
                 'province' => $params['province'],
                 'city' => $params['city'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'area_name' => $params['area_name'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money_usable' => $params['earnest_money_usable'],
                 'earnest_money_usable' => $params['earnest_money_usable'],
@@ -171,6 +175,8 @@ class MasterWorkerLogic extends BaseLogic
         }
         }
         Db::startTrans();
         Db::startTrans();
         try {
         try {
+            
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
             $params['team_id'] = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id')??"";
             $params['team_id'] = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id')??"";
             MasterWorker::where('id', $params['id'])->update([
             MasterWorker::where('id', $params['id'])->update([
                 'sn' => $params['sn'],
                 'sn' => $params['sn'],
@@ -195,6 +201,7 @@ class MasterWorkerLogic extends BaseLogic
                 'distance' => $params['distance'],
                 'distance' => $params['distance'],
                 'province' => $params['province'],
                 'province' => $params['province'],
                 'city' => $params['city'],
                 'city' => $params['city'],
+                'service_area_id' => $service_area_id,
                 'area_name' => $params['area_name'],
                 'area_name' => $params['area_name'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money' => $params['earnest_money'],
                 'earnest_money_usable' => $params['earnest_money_usable'],
                 'earnest_money_usable' => $params['earnest_money_usable'],

+ 4 - 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\MasterWorker;
 use app\common\model\master_worker\MasterWorkerScore;
 use app\common\model\master_worker\MasterWorkerScore;
 use app\common\model\master_worker_register\MasterWorkerRegister;
 use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\service_area\ServiceArea;
 use app\common\logic\BaseLogic;
 use app\common\logic\BaseLogic;
 use app\common\model\sale\Sale;
 use app\common\model\sale\Sale;
 use app\common\service\ConfigService;
 use app\common\service\ConfigService;
@@ -45,6 +46,8 @@ class MasterWorkerRegisterLogic extends BaseLogic
             $passwordSalt = Config::get('project.unique_identification');
             $passwordSalt = Config::get('project.unique_identification');
             $password = create_password($masterWorkerRegister['mobile'], $passwordSalt);
             $password = create_password($masterWorkerRegister['mobile'], $passwordSalt);
             $avatar = ConfigService::get('default_image', 'user_avatar');
             $avatar = ConfigService::get('default_image', 'user_avatar');
+            
+            $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]);
 
 
             /*系统自动填写工程师入驻信息(除身份证、银行卡外,代招人、时间段默认全选、合作形式默认全日接单、工作状态默认正常工作、
             /*系统自动填写工程师入驻信息(除身份证、银行卡外,代招人、时间段默认全选、合作形式默认全日接单、工作状态默认正常工作、
             结算类型是半月、半径默认5公里、服务类目为空、质保金比例默认15%、质保金缴纳方式分期抵扣、
             结算类型是半月、半径默认5公里、服务类目为空、质保金比例默认15%、质保金缴纳方式分期抵扣、
@@ -64,6 +67,7 @@ class MasterWorkerRegisterLogic extends BaseLogic
                 'distance' => 5000,
                 'distance' => 5000,
                 'province' => $masterWorkerRegister['province']??0,
                 'province' => $masterWorkerRegister['province']??0,
                 'city' => $masterWorkerRegister['city']??0,
                 'city' => $masterWorkerRegister['city']??0,
+                'service_area_id' => $service_area_id,
                 'area_name' => $masterWorkerRegister['area_name']??'',
                 'area_name' => $masterWorkerRegister['area_name']??'',
                 'tenant_id' => 0,
                 'tenant_id' => 0,
                 'category_ids' => '',
                 'category_ids' => '',