TicketController.php
4.2 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
<?php
namespace App\Http\Controllers\Api\WorkOrder;
use App\Http\Controllers\Api\BaseController;
use App\Http\Requests\Api\WorkOrder\TicketStoreRequest;
use App\Models\WorkOrder\TicketLog;
use App\Models\WorkOrder\TicketProject;
use App\Models\WorkOrder\Tickets;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class TicketController extends BaseController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index($project_id, Request $request)
{
$project = TicketProject::where('uuid', $project_id)->first();
if (!$project) return $this->error('未找到项目', 404);
$page = (int)$request->input('page', 1);
$size = (int)$request->input('size', 10);
$tickets = Tickets::with([
'project.projectV6:id,company,version',
'logs.engineer:id,name',
])
->where('project_id', $project->id)
->where('submit_side', 2)
->orderBy('id', 'desc')
->paginate($size, ['*'], 'page', $page);
return response()->json(['data' => $tickets]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* B端用户在企微群里提交工单
*/
public function store($project_id, TicketStoreRequest $request)
{
$request->validated();
$project = TicketProject::where('uuid', $project_id)->first();
if (!$project) return response('未找到项目', 404);
if ($project->is_del) return response('项目状态异常', 400);
if (empty($project->first_engineer)) return response('项目未分配工单负责人', 400);
$result = DB::transaction(function () use ($request, $project) {
$ticket = new Tickets();
$ticket->project_id = $project->id;
$ticket->title = $request->input('title');
$ticket->content = $request->input('content');
// $files = [NULL]
$files = $request->input('files');
if (empty($files) || (is_array($files) && count(array_filter($files, function($v){ return !is_null($v); })) === 0)) {
$ticket->files = null;
} else {
$ticket->files = json_encode($files);
}
$ticket->submit_side = 2; // 2 for B-side submission
$ticket->submit_username = $request->input('submit_username');
$ticket->save();
$log = new TicketLog();
$log->engineer_id = $project->engineer_id; // 默认第一负责人
$ticket->logs()->save($log);
return $ticket;
});
return response()->json(['data' => $result]);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($project_id, $id)
{
$ticket = Tickets::with([
'logs.engineer:id,name',
'project.projectV6:id,company',
])
->find($id);
if (!$ticket) return response('工单未找到', 404);
if ($ticket->project->uuid !== $project_id) return response('无权限查看该工单', 403);
if ($ticket->project->is_del) return response('项目状态异常', 400);
return response()->json(['data' => $ticket]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
public function projectInfo($project_id)
{
$project = TicketProject::with([
'projectV6:id,company',
'assm:id,name',
'seom:id,name',
'first_engineer:id,name',
])
->where('uuid', $project_id)->first();
if (!$project) return $this->response('未找到项目', 404);
return response()->json(['data' => $project]);
}
}