function(Query $query){ $query->field('id,address,title'); }]) ->where('user_id',$params['user_id']) ->field(['id', 'work_sn','service_work_id','return_work_status','dispatch_time','create_time','appointment_time']) ->append(['return_work_status_text']) ->order(['id' => 'desc']) ->select() ->toArray(); } public static function detail($params) { $issue_work = ReturnWork::with(['serviceWork'=>function(Query $query){ $query->field('id,address,title,real_name,mobile'); },'worker'=>function(Query $query){ $query->field('id,avatar,real_name,worker_number,mobile'); }]) ->where(['id'=>$params['id'],'user_id'=>$params['user_id']]) ->where(['id'=>$params['id']]) ->field('id,work_sn,service_work_id,return_work_status,dispatch_time,master_worker_id,create_time,appointment_time') ->append(['return_work_status_text']) ->findOrEmpty()->toArray(); return $issue_work; } public static function confirmFinish($params):bool { Db::startTrans(); try{ $work = ReturnWork::where('work_sn',$params['work_sn'])->findOrEmpty(); if($work->isEmpty()){ throw new \Exception('返修工单不存在'); } if($work->user_id != $params['user_id']){ throw new \Exception('用户不正确'); } if($work->return_work_status != 3){ throw new \Exception('等待工程师确认服务完成'); } $work->return_work_status = 4; $work->save(); MasterWorker::setWorktotal('inc',$work->master_worker_id); //更新投诉状态 $issue = IssueWork::where('service_work_id',$work->service_work_id)->findOrEmpty(); if(!$issue->isEmpty()){ // 返修完成-工程师的账号余额、质保金可用金额 对应原工单 增加 if($issue->is_refunded_payment == 1 && $issue->issue_approval != 4){ $serviceWork = ServiceWork::where('id',$work->service_work_id)->findOrEmpty(); if(!$serviceWork->isEmpty()){ // 加余额 $change_amount = MasterWorkerAccountLog::where([ 'change_object'=>WorkerAccountLogEnum::UM,'change_type'=>WorkerAccountLogEnum::UM_INC_ADMIN, 'action'=>WorkerAccountLogEnum::INC,'worker_id'=>$issue->master_worker_id, 'work_sn'=>$issue->work_sn])->value('change_amount'); // 加质保金 $retentionAmount = MasterWorkerRetentionMoneyLog::where(['action'=>WorkerAccountLogEnum::INC, 'worker_id'=>$issue->master_worker_id,'work_id'=>$issue->service_work_id]) ->value('amount'); $settlement_amount = $change_amount + $retentionAmount; // 返修单-新工程师 缴纳质保金 $work->id $work->master_worker_id $masterWorkerInfo = MasterWorker::where('id', $work->master_worker_id)->findOrEmpty()->toArray(); if(!empty($masterWorkerInfo) && $masterWorkerInfo['retention_pay_status'] == 2 && ($masterWorkerInfo['earnest_money'] > $masterWorkerInfo['earnest_money_usable'])){ $retentionData['action'] = WorkerAccountLogEnum::INC; $retentionData['worker_id'] = $work->master_worker_id; $retentionData['work_id'] = $issue->service_work_id; $retentionData['return_work_id'] = $work->id; $amount = bcmul($settlement_amount, bcdiv($masterWorkerInfo['installment_ratio'], 100, 4),2); $retentionData['amount'] = $amount; $retentionData['remark'] = "返修单-分期缴纳质保金:该单实提成--{$settlement_amount},分期每单缴纳比例--{$masterWorkerInfo['installment_ratio']}%,缴纳金额--{$amount}"; $settlement_amount -= (float)$amount; $surplusMoney = RetentionMoneyLogic::add($retentionData); if($surplusMoney === false){ Log::info('返修单-分期缴纳质保金支付失败-'.RetentionMoneyLogic::getError(),$retentionData); $settlement_amount += (float)$amount; }else{ $settlement_amount += (float)$surplusMoney; } } $extra['ReturnWorkInfo'] = ['id'=>$work->id,'master_worker_id'=>$work->master_worker_id,'service_work_id'=>$work->service_work_id,'issue_work_id'=>$work->issue_work_id]; $remark = '工单号:'.$issue->work_sn.',返修单号:'.$work->work_sn.',收益金额:'.$settlement_amount.',原因:返修工单新工程师收益'; WorkerAccountLogLogic::addAccountLog($serviceWork,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC,$remark,$extra); } } $issue->issue_approval = 4; $issue->complaint_status = 2; $issue->responsible = 2; $issue->finished_time = time(); $issue->save(); } Db::commit(); return true; }catch(\Exception $e){ Db::rollback(); self::setError($e->getMessage()); return false; } } }