正在显示
4 个修改的文件
包含
57 行增加
和
32 行删除
| @@ -8,6 +8,7 @@ use App\Http\Requests\Aside\WorkOrder\WorkOrderListRequest; | @@ -8,6 +8,7 @@ use App\Http\Requests\Aside\WorkOrder\WorkOrderListRequest; | ||
| 8 | use App\Http\Requests\Aside\WorkOrder\WorkOrderUpdateRequest; | 8 | use App\Http\Requests\Aside\WorkOrder\WorkOrderUpdateRequest; |
| 9 | use App\Models\WorkOrder\WorkOrder; | 9 | use App\Models\WorkOrder\WorkOrder; |
| 10 | use App\Models\WorkOrder\WorkOrderLog; | 10 | use App\Models\WorkOrder\WorkOrderLog; |
| 11 | +use Illuminate\Support\Facades\DB; | ||
| 11 | 12 | ||
| 12 | class WorkOrderController extends BaseController | 13 | class WorkOrderController extends BaseController |
| 13 | { | 14 | { |
| @@ -91,31 +92,64 @@ class WorkOrderController extends BaseController | @@ -91,31 +92,64 @@ class WorkOrderController extends BaseController | ||
| 91 | } | 92 | } |
| 92 | 93 | ||
| 93 | /** | 94 | /** |
| 94 | - * A端更新工单 | ||
| 95 | - * 要么更新状态,要么分配工程师 | 95 | + * A端操作工单,工程师操作的是工单日志 |
| 96 | + * - 工程师:回复工单,自动将拆分给自己的子任务改为完成 | ||
| 97 | + * - 工单第一对接人: | ||
| 98 | + * - 邀请工程师处理工单 | ||
| 99 | + * - 修改工单状态 | ||
| 100 | + * 若全部子任务完成,则将工单状态改为完成 | ||
| 96 | */ | 101 | */ |
| 97 | public function update(WorkOrderUpdateRequest $request, $id) | 102 | public function update(WorkOrderUpdateRequest $request, $id) |
| 98 | { | 103 | { |
| 99 | $request->validated(); | 104 | $request->validated(); |
| 100 | - // 更新工单状态 | ||
| 101 | - $workOrder = WorkOrder::find($id); | ||
| 102 | - if (!$workOrder) { | 105 | + $log = WorkOrderLog::find($id); // 拆分的子工单 |
| 106 | + if (!$log) { | ||
| 103 | $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE); | 107 | $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE); |
| 104 | } | 108 | } |
| 105 | - if ($request->has('status')) | ||
| 106 | - $workOrder->status = $request->input('status'); | ||
| 107 | - if ($request->has('engineer_id')) | ||
| 108 | - { | ||
| 109 | - try { | ||
| 110 | - // 利用唯一索引去重 | ||
| 111 | - $log = new WorkOrderLog(); | ||
| 112 | - $log->manage_id = $request->input('engineer_id'); | ||
| 113 | - $workOrder->logs()->save($log); | ||
| 114 | - }catch (\Exception $exception){} | ||
| 115 | - $workOrder->engineer_id = $request->input('engineer_id'); | 109 | + if ($log->manage_id != $this->manage['id']) { |
| 110 | + // 只能操作自己的工单 | ||
| 111 | + $this->response('没有权限操作该工单', Code::USER_PERMISSION_ERROE); | ||
| 116 | } | 112 | } |
| 117 | - $workOrder->save(); | ||
| 118 | - $this->response('success', Code::SUCCESS, $workOrder->toArray()); | 113 | + $workOrder = $log->workOrder; |
| 114 | + $result = DB::transaction(function () use ($request, $workOrder, $log) { | ||
| 115 | + if ($request->has('engineer_ids')) | ||
| 116 | + { | ||
| 117 | + // 有邀请工程师协同处理 | ||
| 118 | + foreach ($request->input('engineer_ids') as $engineer_id) | ||
| 119 | + { | ||
| 120 | + try { | ||
| 121 | + // 利用唯一索引去重 | ||
| 122 | + $new_log = new WorkOrderLog(); | ||
| 123 | + $new_log->manage_id = $engineer_id; | ||
| 124 | + $workOrder->logs()->save($new_log); | ||
| 125 | + $workOrder->engineer_id = $engineer_id; | ||
| 126 | + $workOrder->save(); | ||
| 127 | + }catch (\Exception $exception){} | ||
| 128 | + } | ||
| 129 | + } | ||
| 130 | + if ($request->input('content')) | ||
| 131 | + { | ||
| 132 | + // 工程师在回复处理结果 | ||
| 133 | + $log->content = $request->input('content'); | ||
| 134 | + if ($request->input('files')) | ||
| 135 | + $log->files = $request->input('files'); | ||
| 136 | + $log->status = WorkOrderLog::STATUS_COMPLETED; | ||
| 137 | + $log->end_at = now(); | ||
| 138 | + $log->save(); | ||
| 139 | + // 如果所有的子任务都已完成, 则更新工单主表状态 | ||
| 140 | + $pending = $workOrder->logs() | ||
| 141 | + ->where('status', '<', WorkOrderLog::STATUS_COMPLETED) | ||
| 142 | + ->count(); | ||
| 143 | + if ($pending == 0) | ||
| 144 | + { | ||
| 145 | + $workOrder->status = WorkOrderLog::STATUS_COMPLETED; | ||
| 146 | + $workOrder->save(); | ||
| 147 | + } | ||
| 148 | + } | ||
| 149 | + return $log; | ||
| 150 | + }); | ||
| 151 | + | ||
| 152 | + $this->response('success', Code::SUCCESS, $result->toArray()); | ||
| 119 | } | 153 | } |
| 120 | 154 | ||
| 121 | } | 155 | } |
| @@ -26,18 +26,9 @@ class WorkOrderUpdateRequest extends FormRequest | @@ -26,18 +26,9 @@ class WorkOrderUpdateRequest extends FormRequest | ||
| 26 | { | 26 | { |
| 27 | return [ | 27 | return [ |
| 28 | 'status' => 'nullable|in:0,1,2,3|integer', | 28 | 'status' => 'nullable|in:0,1,2,3|integer', |
| 29 | - 'engineer_id' => 'nullable|integer', | 29 | + 'engineer_ids' => 'nullable|array', |
| 30 | + 'content' => 'nullable|string', | ||
| 31 | + 'files' => 'nullable|array', | ||
| 30 | ]; | 32 | ]; |
| 31 | } | 33 | } |
| 32 | - | ||
| 33 | - public function withValidator($validator) | ||
| 34 | - { | ||
| 35 | - $validator->after(function ($validator) { | ||
| 36 | - $status = $this->input('status'); | ||
| 37 | - $engineerId = $this->input('engineer_id'); | ||
| 38 | - if (is_null($status) && is_null($engineerId)) { | ||
| 39 | - $validator->errors()->add('status', 'status 和 engineer_id 不能全是空'); | ||
| 40 | - } | ||
| 41 | - }); | ||
| 42 | - } | ||
| 43 | } | 34 | } |
| @@ -251,7 +251,7 @@ Route::middleware(['aloginauth'])->group(function () { | @@ -251,7 +251,7 @@ Route::middleware(['aloginauth'])->group(function () { | ||
| 251 | Route::get('/', [Aside\WorkOrder\WorkOrderController::class, 'index'])->name('admin.workorder.index')->summary('A端工程师的工单列表'); | 251 | Route::get('/', [Aside\WorkOrder\WorkOrderController::class, 'index'])->name('admin.workorder.index')->summary('A端工程师的工单列表'); |
| 252 | Route::get('/manager', [Aside\WorkOrder\WorkOrderController::class, 'manager'])->name('admin.workorder.manager')->summary('A端管理员的工单列表'); | 252 | Route::get('/manager', [Aside\WorkOrder\WorkOrderController::class, 'manager'])->name('admin.workorder.manager')->summary('A端管理员的工单列表'); |
| 253 | Route::get('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'show'])->name('admin.workorder.show')->summary('A端工单详情'); | 253 | Route::get('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'show'])->name('admin.workorder.show')->summary('A端工单详情'); |
| 254 | - Route::put('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'update'])->name('admin.workorder.update')->summary('A端更新工单'); | 254 | + Route::post('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'update'])->name('admin.workorder.update')->summary('A端更新工单'); |
| 255 | }); | 255 | }); |
| 256 | //服务器配置 | 256 | //服务器配置 |
| 257 | Route::prefix('devops')->group(function () { | 257 | Route::prefix('devops')->group(function () { |
| @@ -275,7 +275,7 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -275,7 +275,7 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 275 | Route::get('/', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'index'])->name('workorder.index')->summary('B端售后工单列表'); | 275 | Route::get('/', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'index'])->name('workorder.index')->summary('B端售后工单列表'); |
| 276 | Route::post('/', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'store'])->name('workorder.store')->summary('B端创建工单'); | 276 | Route::post('/', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'store'])->name('workorder.store')->summary('B端创建工单'); |
| 277 | Route::get('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'show'])->name('workorder.show')->summary('B端查看工单'); | 277 | Route::get('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'show'])->name('workorder.show')->summary('B端查看工单'); |
| 278 | - Route::put('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'update'])->name('workorder.update')->summary('B端完结工单'); | 278 | + Route::post('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'update'])->name('workorder.update')->summary('B端完结工单'); |
| 279 | }); | 279 | }); |
| 280 | 280 | ||
| 281 | //产品 | 281 | //产品 |
-
请 注册 或 登录 后发表评论