WorkOrderController.php
5.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php
namespace App\Http\Controllers\Bside\WorkOrder;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Requests\Aside\WorkOrder\WorkOrderListRequest;
use App\Http\Requests\Bside\WorkOrder\WorkOrderCreateRequest;
use App\Http\Requests\Bside\WorkOrder\WorkOrderUpdateRequest;
use App\Models\Project\Project;
use App\Models\WorkOrder\WorkOrder;
use App\Models\WorkOrder\WorkOrderLog;
use Illuminate\Support\Facades\DB;
class WorkOrderController extends BaseController
{
/**
* B端售后工单列表
*
* @return \Illuminate\Http\Response
*/
public function index(WorkOrderListRequest $request)
{
$request->validated();
$where = [
'project_id' => $this->user['project_id'],
];
// 分页查询
$lists = WorkOrder::with([
'manager:id,name',
])
->where($where)
->when($request->input('status'), 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);
}
/**
* B端用户提交工单
*
* @return \Illuminate\Http\Response
*/
public function store(WorkOrderCreateRequest $request)
{
$request->validated();
$result = DB::transaction(function () use ($request) {
$workOrder = new WorkOrder;
$workOrder->product = $request->input('product');
$workOrder->content = $request->input('content');
$workOrder->files = json_encode($request->input('files'));
$workOrder->project_user_id = $this->user['id'];
$workOrder->project_id = $this->user['project_id'];
$workOrder->engineer_id = 0;
if ($this->project['type'] == 3){
// 项目类型是优化推广,项目负责人找优化
$seo = Project::find($this->user['project_id'])->deploy_optimize;
$workOrder->manage_id = $seo->manager_mid ?? $seo->optimist_mid ?? 0;
}else{
// 非优化推广项目,项目负责人找技术组长
$build = Project::find($this->user['project_id'])->deploy_build;
$workOrder->manage_id = $build->leader_mid ?? 0;
}
$workOrder->save();
// 添加工单日志
$log = new WorkOrderLog();
$log->manage_id = $workOrder->manage_id;
$workOrder->logs()->save($log);
return $workOrder;
});
$this->response('success', Code::SUCCESS, $result->toArray());
}
/**
* Display the specified resource.
*
* @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',
])->find($id);
if (!$workOrder) {
$this->response('工单未找到', 404);
}
if ($workOrder->project_id != $this->user['project_id'] && $workOrder->engineer_id != $this->user['id']) {
$this->response('无权限查看该工单', 403);
}
$this->response('success', Code::SUCCESS, $workOrder->toArray());
}
/**
* B端用户修改工单,只能是修改工单状态
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(WorkOrderUpdateRequest $request, $id)
{
$request->validated();
$workOrder = WorkOrder::find($id);
if (!$workOrder) {
$this->response('工单未找到', 404);
}
// b端只有自己项目下的账号可以更新工单
if ($workOrder->project_id != $this->user['project_id']) {
$this->response('无权限更新该工单', 403);
}
// 更新工单状态
$workOrder->status = WorkOrder::STATUS_COMPLETED;
$workOrder->save();
// B端完成工单,将所有未完成的子工单状态改为已完成。并记录完成时间
$workOrder->logs()->where('status', '<', WorkOrderLog::STATUS_COMPLETED)
->update(['status' => WorkOrderLog::STATUS_COMPLETED, 'end_at' => now()]);
$this->response('success', Code::SUCCESS);
}
public function destroy($id)
{
$workOrder = WorkOrder::find($id);
if (!$workOrder) {
$this->response('工单未找到', 404);
}
if ($workOrder->status >= WorkOrder::STATUS_COMPLETED)
$this->response('已完结的工单不能删除', 403);
if ($this->user['type'] != 1 && $workOrder->project_user_id != $this->user['id']) {
// 只有项目负责人可以删除工单
$this->response('无权限删除该工单', 403);
}
# 删除工单
$workOrder->delete();
$this->response('工单已删除', Code::SUCCESS);
}
}