|
@@ -21,6 +21,7 @@ use app\common\logic\ThirdOrderLogic;
|
|
|
use app\common\logic\WorkerAccountLogLogic;
|
|
use app\common\logic\WorkerAccountLogLogic;
|
|
|
use app\common\model\third\ThirdOrders;
|
|
use app\common\model\third\ThirdOrders;
|
|
|
use app\common\model\works\ServiceWorkDeterminedPrice;
|
|
use app\common\model\works\ServiceWorkDeterminedPrice;
|
|
|
|
|
+use app\workerapi\logic\MasterWorkerLogic;
|
|
|
use think\Exception;
|
|
use think\Exception;
|
|
|
use think\db\Query;
|
|
use think\db\Query;
|
|
|
use think\facade\Db;
|
|
use think\facade\Db;
|
|
@@ -467,14 +468,14 @@ class ServiceWorkLogic extends BaseLogic
|
|
|
if($work->work_status >=6 ){
|
|
if($work->work_status >=6 ){
|
|
|
throw new \Exception('工单状态只能修改待结算之前的');
|
|
throw new \Exception('工单状态只能修改待结算之前的');
|
|
|
}
|
|
}
|
|
|
- if($work->master_worker_id == $params['master_worker_id']){
|
|
|
|
|
|
|
+ if($work->master_worker_id == $params['master_worker_id'] && !isset($params['is_grab_order'])){
|
|
|
throw new \Exception('分配的工程师相同');
|
|
throw new \Exception('分配的工程师相同');
|
|
|
}
|
|
}
|
|
|
$worker = MasterWorker::where(['id'=>$params['master_worker_id'],'is_disable' =>0])->findOrEmpty();
|
|
$worker = MasterWorker::where(['id'=>$params['master_worker_id'],'is_disable' =>0])->findOrEmpty();
|
|
|
if($worker->isEmpty()){
|
|
if($worker->isEmpty()){
|
|
|
throw new \Exception('工程师不存在或被禁用');
|
|
throw new \Exception('工程师不存在或被禁用');
|
|
|
}
|
|
}
|
|
|
- if($worker->master_worker_id){
|
|
|
|
|
|
|
+ if($worker->master_worker_id && !isset($params['is_grab_order'])){
|
|
|
MasterWorker::setWorktotal('dec',$worker->master_worker_id);
|
|
MasterWorker::setWorktotal('dec',$worker->master_worker_id);
|
|
|
}
|
|
}
|
|
|
$work->master_worker_id = $params['master_worker_id'];
|
|
$work->master_worker_id = $params['master_worker_id'];
|
|
@@ -485,7 +486,7 @@ class ServiceWorkLogic extends BaseLogic
|
|
|
$work_log = [
|
|
$work_log = [
|
|
|
'work_id'=>$work->id,
|
|
'work_id'=>$work->id,
|
|
|
'master_worker_id'=>$work->master_worker_id,
|
|
'master_worker_id'=>$work->master_worker_id,
|
|
|
- 'type' => 0,
|
|
|
|
|
|
|
+ 'type' => isset($params['is_grab_order'])?3:0,
|
|
|
'opera_log'=>'后台用户['.$userInfo['admin_id'].']'.$userInfo['name'].'于'.date('Y-m-d H:i:s',time()).'分配了工程师'.'编号['.$worker->worker_number.']'.$worker->real_name
|
|
'opera_log'=>'后台用户['.$userInfo['admin_id'].']'.$userInfo['name'].'于'.date('Y-m-d H:i:s',time()).'分配了工程师'.'编号['.$worker->worker_number.']'.$worker->real_name
|
|
|
];
|
|
];
|
|
|
ServiceWorkerAllocateWorkerLogic::add($work_log);
|
|
ServiceWorkerAllocateWorkerLogic::add($work_log);
|
|
@@ -1206,5 +1207,37 @@ class ServiceWorkLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 工程师抢单
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function grabOrder($params): bool
|
|
|
|
|
+ {
|
|
|
|
|
+ if(MasterWorkerLogic::isReceivingOrders($params['master_worker_id'])){
|
|
|
|
|
+ Log::info('抢单失败:工程师不能接单:'.$params['id'].'--'.$params['master_worker_id']);
|
|
|
|
|
+ self::setError('未达到接单条件');
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ Db::startTrans();
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 抢单
|
|
|
|
|
+ $serviceWork = ServiceWork::where(['work_pay_status'=>1,'work_status'=>0,'service_status'=>0,'master_worker_id'=>0])
|
|
|
|
|
+ ->where('id',$params['id'])->update(['master_worker_id'=>$params['master_worker_id'],'work_status'=>1]);
|
|
|
|
|
+ Db::commit();
|
|
|
|
|
+ if($serviceWork == 1){
|
|
|
|
|
+ Log::info('抢单成功:'.$params['id'].'--'.$params['master_worker_id']);
|
|
|
|
|
+ $params['is_grab_order'] = 1;
|
|
|
|
|
+ self::allocateWorker($params,['admin_id'=>0,'name'=>'抢单工程师ID:'.$params['master_worker_id']]);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ Log::info('抢单失败:'.$params['id'].'--'.$params['master_worker_id']);
|
|
|
|
|
+ self::setError('抢单失败');
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
|
+ Db::rollback();
|
|
|
|
|
+ Log::info('抢单失败:'.$params['id'].'--'.$params['master_worker_id'].':'.$e->getMessage());
|
|
|
|
|
+ self::setError('抢单失败');
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|