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