作者 ZhengBing He

ok

... ... @@ -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());
}
}
... ...
... ... @@ -26,18 +26,9 @@ class WorkOrderUpdateRequest extends FormRequest
{
return [
'status' => 'nullable|in:0,1,2,3|integer',
'engineer_id' => 'nullable|integer',
'engineer_ids' => 'nullable|array',
'content' => 'nullable|string',
'files' => 'nullable|array',
];
}
public function withValidator($validator)
{
$validator->after(function ($validator) {
$status = $this->input('status');
$engineerId = $this->input('engineer_id');
if (is_null($status) && is_null($engineerId)) {
$validator->errors()->add('status', 'status 和 engineer_id 不能全是空');
}
});
}
}
... ...
... ... @@ -251,7 +251,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::get('/', [Aside\WorkOrder\WorkOrderController::class, 'index'])->name('admin.workorder.index')->summary('A端工程师的工单列表');
Route::get('/manager', [Aside\WorkOrder\WorkOrderController::class, 'manager'])->name('admin.workorder.manager')->summary('A端管理员的工单列表');
Route::get('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'show'])->name('admin.workorder.show')->summary('A端工单详情');
Route::put('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'update'])->name('admin.workorder.update')->summary('A端更新工单');
Route::post('/{id}', [Aside\WorkOrder\WorkOrderController::class, 'update'])->name('admin.workorder.update')->summary('A端更新工单');
});
//服务器配置
Route::prefix('devops')->group(function () {
... ...
... ... @@ -275,7 +275,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::get('/', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'index'])->name('workorder.index')->summary('B端售后工单列表');
Route::post('/', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'store'])->name('workorder.store')->summary('B端创建工单');
Route::get('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'show'])->name('workorder.show')->summary('B端查看工单');
Route::put('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'update'])->name('workorder.update')->summary('B端完结工单');
Route::post('/{id}', [\App\Http\Controllers\Bside\WorkOrder\WorkOrderController::class, 'update'])->name('workorder.update')->summary('B端完结工单');
});
//产品
... ...