|
...
|
...
|
@@ -8,6 +8,7 @@ use App\Http\Requests\Aside\WorkOrder\WorkOrderListRequest; |
|
|
|
use App\Http\Requests\Aside\WorkOrder\WorkOrderUpdateRequest;
|
|
|
|
use App\Models\WorkOrder\WorkOrder;
|
|
|
|
use App\Models\WorkOrder\WorkOrderLog;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
|
|
class WorkOrderController extends BaseController
|
|
|
|
{
|
|
...
|
...
|
@@ -91,31 +92,64 @@ class WorkOrderController extends BaseController |
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A端更新工单
|
|
|
|
* 要么更新状态,要么分配工程师
|
|
|
|
* A端操作工单,工程师操作的是工单日志
|
|
|
|
* - 工程师:回复工单,自动将拆分给自己的子任务改为完成
|
|
|
|
* - 工单第一对接人:
|
|
|
|
* - 邀请工程师处理工单
|
|
|
|
* - 修改工单状态
|
|
|
|
* 若全部子任务完成,则将工单状态改为完成
|
|
|
|
*/
|
|
|
|
public function update(WorkOrderUpdateRequest $request, $id)
|
|
|
|
{
|
|
|
|
$request->validated();
|
|
|
|
// 更新工单状态
|
|
|
|
$workOrder = WorkOrder::find($id);
|
|
|
|
if (!$workOrder) {
|
|
|
|
$log = WorkOrderLog::find($id); // 拆分的子工单
|
|
|
|
if (!$log) {
|
|
|
|
$this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);
|
|
|
|
}
|
|
|
|
if ($request->has('status'))
|
|
|
|
$workOrder->status = $request->input('status');
|
|
|
|
if ($request->has('engineer_id'))
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
// 利用唯一索引去重
|
|
|
|
$log = new WorkOrderLog();
|
|
|
|
$log->manage_id = $request->input('engineer_id');
|
|
|
|
$workOrder->logs()->save($log);
|
|
|
|
}catch (\Exception $exception){}
|
|
|
|
$workOrder->engineer_id = $request->input('engineer_id');
|
|
|
|
if ($log->manage_id != $this->manage['id']) {
|
|
|
|
// 只能操作自己的工单
|
|
|
|
$this->response('没有权限操作该工单', Code::USER_PERMISSION_ERROE);
|
|
|
|
}
|
|
|
|
$workOrder->save();
|
|
|
|
$this->response('success', Code::SUCCESS, $workOrder->toArray());
|
|
|
|
$workOrder = $log->workOrder;
|
|
|
|
$result = DB::transaction(function () use ($request, $workOrder, $log) {
|
|
|
|
if ($request->has('engineer_ids'))
|
|
|
|
{
|
|
|
|
// 有邀请工程师协同处理
|
|
|
|
foreach ($request->input('engineer_ids') as $engineer_id)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
// 利用唯一索引去重
|
|
|
|
$new_log = new WorkOrderLog();
|
|
|
|
$new_log->manage_id = $engineer_id;
|
|
|
|
$workOrder->logs()->save($new_log);
|
|
|
|
$workOrder->engineer_id = $engineer_id;
|
|
|
|
$workOrder->save();
|
|
|
|
}catch (\Exception $exception){}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($request->input('content'))
|
|
|
|
{
|
|
|
|
// 工程师在回复处理结果
|
|
|
|
$log->content = $request->input('content');
|
|
|
|
if ($request->input('files'))
|
|
|
|
$log->files = $request->input('files');
|
|
|
|
$log->status = WorkOrderLog::STATUS_COMPLETED;
|
|
|
|
$log->end_at = now();
|
|
|
|
$log->save();
|
|
|
|
// 如果所有的子任务都已完成, 则更新工单主表状态
|
|
|
|
$pending = $workOrder->logs()
|
|
|
|
->where('status', '<', WorkOrderLog::STATUS_COMPLETED)
|
|
|
|
->count();
|
|
|
|
if ($pending == 0)
|
|
|
|
{
|
|
|
|
$workOrder->status = WorkOrderLog::STATUS_COMPLETED;
|
|
|
|
$workOrder->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $log;
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->response('success', Code::SUCCESS, $result->toArray());
|
|
|
|
}
|
|
|
|
|
|
|
|
} |
...
|
...
|
|