Prechádzať zdrojové kódy

不允许长期工程师转派

dongxiaoqin 10 mesiacov pred
rodič
commit
e9ed15fa75

+ 4 - 0
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -1093,6 +1093,10 @@ class ServiceWorkLogic extends BaseLogic
             if($worker->isEmpty()){
             if($worker->isEmpty()){
                 throw new \Exception('工程师不存在');
                 throw new \Exception('工程师不存在');
             }
             }
+            if ($worker->type == 2) {          
+                throw new \Exception('您当前无权限取消分配');  
+            }
+
             if ($work->tenant_id > 0) {
             if ($work->tenant_id > 0) {
                 //团队订单取消时,派单数量减1
                 //团队订单取消时,派单数量减1
                 $updateData = date("H",strtotime($work->appointment_time)) < 12 ? ['am_order' => Db::raw('am_order - 1')] : ['pm_order' => Db::raw('pm_order - 1')];
                 $updateData = date("H",strtotime($work->appointment_time)) < 12 ? ['am_order' => Db::raw('am_order - 1')] : ['pm_order' => Db::raw('pm_order - 1')];

+ 22 - 45
app/common/command/UpdateWorkerScore.php

@@ -20,6 +20,7 @@ use app\common\model\works\ServiceWorkAllocateWorkerLog;
 use app\common\model\master_worker\MasterWorkerServiceTime;
 use app\common\model\master_worker\MasterWorkerServiceTime;
 use app\common\model\works\ServiceWorkLog;
 use app\common\model\works\ServiceWorkLog;
 use app\common\model\service_area\ServiceArea;
 use app\common\model\service_area\ServiceArea;
+use app\common\model\dict\DictConfig;
 
 
 class UpdateWorkerScore extends Command
 class UpdateWorkerScore extends Command
 {
 {
@@ -47,44 +48,7 @@ class UpdateWorkerScore extends Command
         }
         }
 
 
     }
     }
-    /*
-    * 长期合作师傅综合评分 100分 (每一项默认20%)
-评分周期:每周,保修和返修统计前30天的数据
-
-1、用户评分 
-2、完单率 = 完结工单/总工单
-3、客户粘性率 = 工程师第一次联系客户时间-领单时间 和定义的时间进行比较 
-4、加单率 = 加单个数/派单数 
-5、上门率 = 已上门/总单数
-    */
-    protected function changeWorderScore()
-    {
-        $startTime = date('Y-m-d 00:00:00', strtotime('-7 days'));
-        $endTime = date('Y-m-d 23:59:59', strtotime('-1 days'));
-        $page = 0;
-        $size = 50;
-        while(true) {
-            $page++;
-            $offset = ($page - 1) * $size;
-            $list = MasterWorker::alias("a")
-                    ->leftJoin("master_worker_score b","a.id = b.worker_id")
-                    ->field('a.id,a.category_ids,b.comprehensive_score_history')
-                    ->limit($offset, $size)
-                    ->select()
-                    ->toArray();
-            if (!$list) {
-                break;
-            }
-            foreach($list as $item) {
-                $workId = $item['id'];
-                $this->updateComprehensiveScore($startTime,$endTime,$workId,$item['comprehensive_score_history']);
-
-                //更新工程师平均服务时长
-                $this->updateServiceTime($startTime,$endTime,$item);
-            }
-        }
-    }
-
+   
     /**
     /**
      * 初始化工程师服务区域ID
      * 初始化工程师服务区域ID
      */
      */
@@ -138,7 +102,7 @@ class UpdateWorkerScore extends Command
     7、返修率 = 返修工单/已完成工单
     7、返修率 = 返修工单/已完成工单
     8、加单率 = 加单个数/派单数
     8、加单率 = 加单个数/派单数
     */
     */
-    protected function changeTemporaryWorderScore()
+    protected function changeWorderScore()
     {
     {
         $startTime = date('Y-m-d 00:00:00', strtotime('-7 days'));
         $startTime = date('Y-m-d 00:00:00', strtotime('-7 days'));
         $endTime = date('Y-m-d 23:59:59', strtotime('-1 days'));
         $endTime = date('Y-m-d 23:59:59', strtotime('-1 days'));
@@ -158,7 +122,7 @@ class UpdateWorkerScore extends Command
             }
             }
             foreach($list as $item) {
             foreach($list as $item) {
                 $workId = $item['id'];
                 $workId = $item['id'];
-                if ($item['type'] == 1) {
+                if ($item['type'] == 2) {
                     $this->updateComprehensiveScore($startTime,$endTime,$workId,$item['comprehensive_score_history']);
                     $this->updateComprehensiveScore($startTime,$endTime,$workId,$item['comprehensive_score_history']);
                 } else {
                 } else {
                     $this->updateTemporaryComprehensiveScore($startTime,$endTime,$workId,$item['comprehensive_score_history']);
                     $this->updateTemporaryComprehensiveScore($startTime,$endTime,$workId,$item['comprehensive_score_history']);
@@ -239,23 +203,36 @@ class UpdateWorkerScore extends Command
                 $addRate = bcdiv($addWord, $completeOrder ,2);
                 $addRate = bcdiv($addWord, $completeOrder ,2);
                 $addRate = $addRate > 1 ? 1 : $addRate;
                 $addRate = $addRate > 1 ? 1 : $addRate;
             }
             }
-         
+            
             //客户粘性率(10分钟内)
             //客户粘性率(10分钟内)
             $avgTime = ServiceWork::where('master_worker_id',$workId)->where('work_status','>',1)->where('first_contact_time','>',0)->whereBetweenTime('create_time', $startTime, $endTime)->field('AVG(first_contact_time - receive_time) as avg_time')->find();
             $avgTime = ServiceWork::where('master_worker_id',$workId)->where('work_status','>',1)->where('first_contact_time','>',0)->whereBetweenTime('create_time', $startTime, $endTime)->field('AVG(first_contact_time - receive_time) as avg_time')->find();
             $avgTime = $avgTime['avg_time'] ? $avgTime['avg_time'] / 60 : 0;
             $avgTime = $avgTime['avg_time'] ? $avgTime['avg_time'] / 60 : 0;
             $viscosityRate = $avgTime <= 10  && $avgTime > 0 ? 1 : 0;
             $viscosityRate = $avgTime <= 10  && $avgTime > 0 ? 1 : 0;
             
             
             //上门率
             //上门率
-            $doorCount = ServiceWorkLog::where('master_worker_id',$workId)->where('opera_log','%like%','已上门')->whereBetweenTime('create_time', $startTime, $endTime)->count();
-            $doorRate = bcdiv($doorCount, $allOrder,2);
+            $doorCount = ServiceWorkLog::where('master_worker_id',$workId)->where('opera_log','like','%已上门%')->whereBetweenTime('create_time', $startTime, $endTime)->count();
+            
+            $doorRate = $allOrder > 0 ? bcdiv($doorCount, $allOrder,2) : 0;
 
 
             //工程师汇总评分 
             //工程师汇总评分 
             $comprehensiveScore = $commentScore + $completionRate + $viscosityRate + $addRate + $doorRate;
             $comprehensiveScore = $commentScore + $completionRate + $viscosityRate + $addRate + $doorRate;
-            $comprehensiveScore = bcdiv($comprehensiveScore, 8, 2) * 100;
+            $comprehensiveScore = bcdiv($comprehensiveScore, 5, 2) * 100;
             
             
+            //更新工程师等级晋升
+            $score = bcdiv($comprehensiveScore, 20, 1);
+
+            $content = DictConfig::where('value', 'promotion_level')->value('content');
+            $content = $content ? json_decode($content, true) : [];
+            foreach($content as $item) {
+                $value = explode("-",$item['value']);
+                if ($score >= $value[0] || (isset($value[1]) && $score >= $value[0] && $score <= $value[1])) {
+                    $promotion_level = $item['key'];
+                    MasterWorker::where('id',$workId)->update(['promotion_level' => $promotion_level]);
+                    break;
+                }
+            }
             $this->doComprehenSivescore($workId,$comprehensiveScore,$historyScore,$doorCount);
             $this->doComprehenSivescore($workId,$comprehensiveScore,$historyScore,$doorCount);
         } catch (\Exception $e) {
         } catch (\Exception $e) {
-            
             Log::write('更新长期合作工程师综合评分异常:'.$e->getMessage());
             Log::write('更新长期合作工程师综合评分异常:'.$e->getMessage());
             return false;
             return false;
         }
         }

+ 0 - 3
app/workerapi/controller/WorksController.php

@@ -383,9 +383,6 @@ class WorksController extends BaseApiController
             'user_id' => $this->userId,
             'user_id' => $this->userId,
             'user_info' => $this->userInfo
             'user_info' => $this->userInfo
         ]);
         ]);
-        if (isset($this->userInfo['type']) && $this->userInfo['type'] == 2) {            
-            return $this->fail('您当前无权限取消分配');
-        }
         $result = ServiceWorkLogic::cancelAllocation(['id'=>$params['id'],'master_worker_id'=>$this->userId],['admin_id'=>$this->userId,'name'=>'工程师-'.$this->userInfo['mobile']]);
         $result = ServiceWorkLogic::cancelAllocation(['id'=>$params['id'],'master_worker_id'=>$this->userId],['admin_id'=>$this->userId,'name'=>'工程师-'.$this->userInfo['mobile']]);
         if (false === $result) {
         if (false === $result) {
             return $this->fail(ServiceWorkLogic::getError());
             return $this->fail(ServiceWorkLogic::getError());