AsideTicketLogController.php
3.6 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
<?php
namespace App\Http\Controllers\Aside\WorkOrder;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Requests\Aside\WorkOrder\AsideTicketLogUpdateRequest;
use App\Models\WorkOrder\TicketLog;
use App\Models\WorkOrder\Tickets;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AsideTicketLogController extends BaseController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* A 端完结工单任务
*/
public function update(AsideTicketLogUpdateRequest $request, $id)
{
$log = TicketLog::find($id); // 拆分的子工单
if (!$log) {
$this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);
}
if ($log->engineer_id != $this->manage['id']) {
// 只能操作自己的工单
$this->response('没有权限操作该工单', Code::USER_PERMISSION_ERROE);
}
if ($log->status >= TicketLog::STATUS_COMPLETED) {
// 已经完成的工单不能再操作
$this->response('工单已完成,不能再操作', Code::USER_PERMISSION_ERROE);
}
$ticket = $log->ticket;
$result = DB::transaction(function () use ($request, $ticket, $log) {
if ($request->input('status') !== null)
{
$log->status = $request->input('status');
if ($log->status >= TicketLog::STATUS_COMPLETED)
{
// 我的工单标记为已完成
$log->end_at = now();
}
}
if ($request->input('reply') !== null)
$log->reply = $request->input('reply', '');
$log->save();
// 是否有未完成的子任务
$pending = $ticket->logs()
->where('status', '<', TicketLog::STATUS_COMPLETED)
->where('is_engineer', 1)
->count();
if ($pending)
{
$ticket->status = Tickets::STATUS_PROCESSING;
}else
{
// 如果所有子任务都完成了,则将工单状态改为已完成
// todo 注意:建站期间的工单,所有人都完成后,不自动完成工单,需要项目经理验收修改工单状态
if (!($ticket->project->status == 1 && in_array($ticket->project->project_cate, [1, 2])))
{
$ticket->status = Tickets::STATUS_COMPLETED;
$ticket->end_at = now();
$project = $ticket->project;
if ($project->wechat_switch)
$project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
$ticket->pushDing('finish');
}
}
$ticket->save();
return $log;
});
$this->response('success', Code::SUCCESS, $result->toArray());
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}