|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Aside\WorkOrder;
|
|
|
|
|
|
|
|
use App\Enums\Common\Code;
|
|
|
|
use App\Http\Controllers\Aside\BaseController;
|
|
|
|
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
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* A端工单列表
|
|
|
|
* 显示有我参与的工单列表
|
|
|
|
*/
|
|
|
|
public function index(WorkOrderListRequest $request)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* A端工程师工单列表, 查询我的工单
|
|
|
|
*/
|
|
|
|
$request->validated();
|
|
|
|
# manage_id 或 engineer_id 是我
|
|
|
|
$lists = WorkOrderLog::with([
|
|
|
|
'workOrder.logs.manager:id,name',
|
|
|
|
'workOrder.project:id,company,title',
|
|
|
|
])
|
|
|
|
->where('manage_id', $this->manage['id'])
|
|
|
|
->when($request->input('project_id') !== null, function ($query) use ($request) {
|
|
|
|
// project_id 查 workOrder
|
|
|
|
return $query->whereHas('workOrder', function ($q) use ($request) {
|
|
|
|
$q->where('project_id', $request->input('project_id'));
|
|
|
|
});
|
|
|
|
})
|
|
|
|
->when($request->input('status') !== null, function ($query) use ($request) {
|
|
|
|
// status 查 workOrder
|
|
|
|
return $query->whereHas('workOrder', function ($q) use ($request) {
|
|
|
|
$q->where('status', $request->input('status'));
|
|
|
|
});
|
|
|
|
})
|
|
|
|
->when($request->input('search'), function ($query) use ($request) {
|
|
|
|
// search 查 workOrder
|
|
|
|
return $query->whereHas('workOrder', function ($q) use ($request) {
|
|
|
|
$q->where('product', 'like', '%' . $request->input('search') . '%')
|
|
|
|
->orWhere('content', 'like', '%' . $request->input('search') . '%');
|
|
|
|
});
|
|
|
|
})
|
|
|
|
->orderBy('id', 'desc')
|
|
|
|
->paginate($this->row, ['*'], 'page', $this->page);
|
|
|
|
$this->response('success', Code::SUCCESS, $lists);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param WorkOrderListRequest $request
|
|
|
|
* @return void
|
|
|
|
* A端管理员的工单列表
|
|
|
|
*/
|
|
|
|
public function manager(WorkOrderListRequest $request)
|
|
|
|
{
|
|
|
|
$request->validated();
|
|
|
|
// 管理员查看所有工单
|
|
|
|
$lists = WorkOrder::with([
|
|
|
|
'user:id,name',
|
|
|
|
'manager:id,name',
|
|
|
|
'engineer:id,name',
|
|
|
|
'logs.manager:id,name',
|
|
|
|
'project:id,company:title',
|
|
|
|
])
|
|
|
|
->when($request->input('project_id') !== null, function ($query) use ($request) {
|
|
|
|
return $query->where('project_id', $request->input('project_id'));
|
|
|
|
})
|
|
|
|
->when($request->input('status') !== null, function ($query) use ($request) {
|
|
|
|
return $query->where('status', $request->input('status'));
|
|
|
|
})
|
|
|
|
->when($request->input('search'), function ($query) use ($request) {
|
|
|
|
return $query->where('product', 'like', '%' . $request->input('search') . '%')
|
|
|
|
->orWhere('content', 'like', '%' . $request->input('search') . '%');
|
|
|
|
})
|
|
|
|
->orderBy('id', 'desc')
|
|
|
|
->paginate($this->row, ['*'], 'page', $this->page);
|
|
|
|
$this->response('success', Code::SUCCESS, $lists);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A端工单详情
|
|
|
|
*
|
|
|
|
* @param int $id
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
*/
|
|
|
|
public function show($id)
|
|
|
|
{
|
|
|
|
$workOrder = WorkOrder::with([
|
|
|
|
'logs.manager:id,name',
|
|
|
|
'user:id,name',
|
|
|
|
'manager:id,name',
|
|
|
|
'engineer:id,name',
|
|
|
|
'project:id,company:title',
|
|
|
|
])->find($id);
|
|
|
|
|
|
|
|
if (!$workOrder)
|
|
|
|
$this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);
|
|
|
|
|
|
|
|
// TODO 判断是否有查看工单详情权限,待添加
|
|
|
|
$this->response('success', Code::SUCCESS, $workOrder->toArray());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A端操作工单,工程师操作的是工单日志
|
|
|
|
* - 工程师:回复工单,自动��拆分给自己的子任务改为完成
|
|
|
|
* - 工单第一对接人:
|
|
|
|
* - 邀请工程师处理工单
|
|
|
|
* - 修改工单状态
|
|
|
|
* 若全部子任务完成,则将工单状态改为完成
|
|
|
|
*/
|
|
|
|
public function update(WorkOrderUpdateRequest $request, $id)
|
|
|
|
{
|
|
|
|
$request->validated();
|
|
|
|
$log = WorkOrderLog::find($id); // 拆分的子工单
|
|
|
|
if (!$log) {
|
|
|
|
$this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);
|
|
|
|
}
|
|
|
|
if ($log->manage_id != $this->manage['id']) {
|
|
|
|
// 只能操作自己的工单
|
|
|
|
$this->response('没有权限操作该工单', Code::USER_PERMISSION_ERROE);
|
|
|
|
}
|
|
|
|
$workOrder = $log->workOrder;
|
|
|
|
$result = DB::transaction(function () use ($request, $workOrder, $log) {
|
|
|
|
if ($request->input('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');
|
|
|
|
if ($request->input('status') !== null)
|
|
|
|
{
|
|
|
|
$log->status = $request->input('status');
|
|
|
|
if ($log->status >= WorkOrder::STATUS_COMPLETED)
|
|
|
|
{
|
|
|
|
// 我的工单标记为已完成
|
|
|
|
$log->status = $request->input('status');
|
|
|
|
$log->end_at = now();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$log->save();
|
|
|
|
// 是否有未完成的子任务
|
|
|
|
$pending = $workOrder->logs()
|
|
|
|
->where('status', '<', WorkOrderLog::STATUS_COMPLETED)
|
|
|
|
->count();
|
|
|
|
if ($pending)
|
|
|
|
{
|
|
|
|
$workOrder->status = WorkOrder::STATUS_PROCESSING;
|
|
|
|
}else
|
|
|
|
{
|
|
|
|
$workOrder->status = WorkOrder::STATUS_COMPLETED;
|
|
|
|
// 如果所有子任务都完成了,则将工单状态改为已完成
|
|
|
|
$workOrder->end_at = now();
|
|
|
|
}
|
|
|
|
$workOrder->save();
|
|
|
|
return $log;
|
|
|
|
});
|
|
|
|
$this->response('success', Code::SUCCESS, $result->toArray());
|
|
|
|
}
|
|
|
|
|
|
|
|
} |