$params['work_sn'], 'service_work_id' => $params['service_work_id'], 'master_worker_id' => $params['master_worker_id'], 'issue_approval' => $params['issue_approval'], 'complaint_status' => $params['complaint_status'], 'responsible' => $params['responsible'], 'complaint_details' => $params['complaint_details'], 'complaint_images' => $params['complaint_images'], 'finished_time' => strtotime($params['finished_time']), 'approval_admin_id' => $params['approval_admin_id'], 'approval_time' => strtotime($params['approval_time']), ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 编辑 * @param array $params * @return bool * @author likeadmin * @date 2024/07/10 15:06 */ public static function edit(array $params): bool { Db::startTrans(); try { //查询是否完成返修 $returnModel = ReturnWork::where('issue_work_id', $params['id'])->findOrEmpty(); if($params['issue_approval'] == 4) { if(!$returnModel->isEmpty() && $returnModel->return_work_status != 2){ throw new \Exception("返修工单编号:".$returnModel->work_sn.'未返修完成'); } } $issueWork = IssueWork::where('id', $params['id'])->update([ 'work_sn' => $params['work_sn'], 'service_work_id' => $params['service_work_id'], 'master_worker_id' => $params['master_worker_id'], 'issue_approval' => $params['issue_approval'], 'complaint_status' => $params['complaint_status'], 'responsible' => $params['responsible'], 'complaint_details' => $params['complaint_details'], 'complaint_images' => $params['complaint_images'], 'finished_time' => strtotime($params['finished_time']), 'approval_admin_id' =>$params['approval_admin_id'], 'approval_time' => time(), ]); // 投诉- 非完成状态时工程师的质保金可用金额 被冻结 if($issueWork->is_refunded_payment == 0 && !in_array($issueWork->issue_approval,[5,4])){ if(RetentionMoneyLogic::warrantyDepositFreeze($issueWork)){ // 原工程师返修收成款是否被冻结 is_refunded_payment $issueWork->is_refunded_payment = 1; $issueWork->save(); } } // 投诉完成-质保金可用金额 解冻 if($issueWork->is_refunded_payment == 1 && $issueWork->issue_approval == 4){ $serviceWork = ServiceWork::where('id',$issueWork->service_work_id)->findOrEmpty(); if(!$serviceWork->isEmpty()){ $is_zero = false; // 查询出该投诉的冻结金额 master_worker_freeze_amount_log issue_work_id master_worker_id $amount = MasterWorkerFreezeAmountLog::where([ 'action'=>WorkerAccountLogEnum::INC,'source'=>1, 'issue_work_id'=>$issueWork->id,'master_worker_id'=>$issueWork->master_worker_id])->value('amount'); // 是否存在返修工单? $work = ReturnWork::where('issue_work_id',$issueWork->id)->findOrEmpty(); if(!$work->isEmpty()){ // 最新师傅 if($issueWork->master_worker_id != $work->master_worker_id){ // 加账户余额 收益 $change_amount = MasterWorkerAccountLog::where([ 'change_object'=>WorkerAccountLogEnum::UM,'change_type'=>WorkerAccountLogEnum::UM_INC_ADMIN, 'action'=>WorkerAccountLogEnum::INC,'worker_id'=>$issueWork->master_worker_id, 'work_sn'=>$issueWork->work_sn])->value('change_amount'); // 存在则按返修工单中的最新师傅 计算收益 $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 = '工单号:'.$issueWork->work_sn.',返修单号:'.$work->work_sn.',收益金额:'.$change_amount.',原因:返修工单新工程师收益'; WorkerAccountLogLogic::addAccountLog($serviceWork,$change_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC,$remark,$extra); $is_zero = true; } } /*to_freeze source remark work_id amount worker_id issue_work_id*/ // 对原工程师的 质保金解冻质保金 / 清零 RetentionMoneyLogic::warrantyDepositRelease([ 'to_freeze'=>2, 'source'=>1, 'remark'=>'对原工程师的质保金解冻质保金/清零', 'work_id'=>$work->service_work_id,'worker_id'=>$issueWork->master_worker_id, 'issue_work_id'=>$issueWork->id, 'amount'=>$amount, ],$is_zero); } } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 删除 * @param array $params * @return bool * @author likeadmin * @date 2024/07/10 15:06 */ public static function delete(array $params): bool { return IssueWork::destroy($params['id']); } /** * @notes 获取详情 * @param $params * @return array * @author likeadmin * @date 2024/07/10 15:06 */ public static function detail($params): array { return IssueWork::with(['masterWorker','user'])->append(['complaint_type_text'])->findOrEmpty($params['id'])->toArray(); } }