作者 ZhengBing He

合并分支 'workorder' 到 'master'

Workorder



查看合并请求 !2384
@@ -58,7 +58,7 @@ class WorkOrderDing extends Command @@ -58,7 +58,7 @@ class WorkOrderDing extends Command
58 sleep(3); 58 sleep(3);
59 continue; 59 continue;
60 } 60 }
61 - $mobile = $log->engineer->mobile; 61 + $mobile = ManageHr::where('manage_id', $log->engineer_id)->value('mobile');
62 $response = Http::withBasicAuth( 62 $response = Http::withBasicAuth(
63 env('DINGDING_BASIC_USER'), 63 env('DINGDING_BASIC_USER'),
64 env('DINGDING_BASIC_PASS') 64 env('DINGDING_BASIC_PASS')
@@ -67,7 +67,7 @@ class WorkOrderDing extends Command @@ -67,7 +67,7 @@ class WorkOrderDing extends Command
67 $userid = $response->json()['data']['userid']; 67 $userid = $response->json()['data']['userid'];
68 $ding = new DingTalkService(); 68 $ding = new DingTalkService();
69 $resp = $ding->danliao(json_encode([ 69 $resp = $ding->danliao(json_encode([
70 - 'text' => "您有新的工单(ID: {$log->ticket_id}),请及时处理!", 70 + 'text' => "您有新的工单(ID: {$log->ticket_id}),请及时处理!处理时间:{$log->ticket->plan_end_at},提单时间:{$log->ticket->created_at}",
71 'title' => 'AI协同工单 - ' . $log->ticket->project->title, 71 'title' => 'AI协同工单 - ' . $log->ticket->project->title,
72 'picUrl' => 'https://hub.globalso.com/logocm.png', 72 'picUrl' => 'https://hub.globalso.com/logocm.png',
73 'messageUrl' => 'https://oa.quanqiusou.cn/afterorder?project_id=' . $log->ticket->project->uuid, 73 'messageUrl' => 'https://oa.quanqiusou.cn/afterorder?project_id=' . $log->ticket->project->uuid,
@@ -176,6 +176,7 @@ class AsideTicketController extends BaseController @@ -176,6 +176,7 @@ class AsideTicketController extends BaseController
176 // 分配工单参与人 176 // 分配工单参与人
177 $ticket->saveEngineers($request->input('engineer_ids', [])); 177 $ticket->saveEngineers($request->input('engineer_ids', []));
178 $nickname = ManageHr::where('manage_id', $this->manage['id'])->value('nickname') ?? mb_substr($ticket->submit_username, 0, 1) . '**'; 178 $nickname = ManageHr::where('manage_id', $this->manage['id'])->value('nickname') ?? mb_substr($ticket->submit_username, 0, 1) . '**';
  179 + if ($project->wechat_switch)
179 $project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!"); 180 $project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!");
180 return $ticket; 181 return $ticket;
181 }); 182 });
@@ -217,16 +218,23 @@ class AsideTicketController extends BaseController @@ -217,16 +218,23 @@ class AsideTicketController extends BaseController
217 $ticket->saveEngineers($request->input('engineer_ids')); 218 $ticket->saveEngineers($request->input('engineer_ids'));
218 219
219 // 其他字段有提交数据才修改,比如star plan_end_at 220 // 其他字段有提交数据才修改,比如star plan_end_at
  221 + $ticket->title = $request->input('title', $ticket->title);
  222 + $ticket->content = $request->input('content', $ticket->content);
220 $ticket->star = $request->input('star', $ticket->star); 223 $ticket->star = $request->input('star', $ticket->star);
221 $ticket->plan_end_at = $request->input('plan_end_at', $ticket->plan_end_at); 224 $ticket->plan_end_at = $request->input('plan_end_at', $ticket->plan_end_at);
222 - $ticket->reply = $request->input('reply', null);  
223 $ticket->status = $request->input('status', $ticket->status); 225 $ticket->status = $request->input('status', $ticket->status);
224 if ($ticket->status == Tickets::STATUS_COMPLETED) 226 if ($ticket->status == Tickets::STATUS_COMPLETED)
225 { 227 {
226 // 完成工单,把子任务里面未完成的工单改为完成 228 // 完成工单,把子任务里面未完成的工单改为完成
227 $ticket->end_at = now(); 229 $ticket->end_at = now();
228 - $ticket->logs()->where('status', '<', TicketLog::STATUS_COMPLETED) 230 + $ticket->logs()->where('status', '<', TicketLog::STATUS_COMPLETED)->where('is_engineer', 1)
229 ->update(['status' => TicketLog::STATUS_COMPLETED, 'end_at' => now()]); 231 ->update(['status' => TicketLog::STATUS_COMPLETED, 'end_at' => now()]);
  232 + // 推动微信通知
  233 + $project = $ticket->project;
  234 + if ($project->wechat_switch)
  235 + $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
  236 + $ticket->pushDing('finish');
  237 +
230 } 238 }
231 $ticket->save(); 239 $ticket->save();
232 return $ticket; 240 return $ticket;
@@ -261,6 +269,7 @@ class AsideTicketController extends BaseController @@ -261,6 +269,7 @@ class AsideTicketController extends BaseController
261 if (empty($project->wechat_group_id)) { 269 if (empty($project->wechat_group_id)) {
262 $this->response('该工单没有绑定的企微群', Code::USER_MODEL_NOTFOUND_ERROE); 270 $this->response('该工单没有绑定的企微群', Code::USER_MODEL_NOTFOUND_ERROE);
263 } 271 }
  272 + if ($project->wechat_switch)
264 $project->pushWechatGroupMsg(); 273 $project->pushWechatGroupMsg();
265 $this->response('success', Code::SUCCESS); 274 $this->response('success', Code::SUCCESS);
266 } 275 }
@@ -85,13 +85,18 @@ class AsideTicketLogController extends BaseController @@ -85,13 +85,18 @@ class AsideTicketLogController extends BaseController
85 $ticket->status = Tickets::STATUS_PROCESSING; 85 $ticket->status = Tickets::STATUS_PROCESSING;
86 }else 86 }else
87 { 87 {
88 - $ticket->status = Tickets::STATUS_COMPLETED;  
89 // 如果所有子任务都完成了,则将工单状态改为已完成 88 // 如果所有子任务都完成了,则将工单状态改为已完成
  89 + // todo 注意:建站期间的工单,所有人都完成后,不自动完成工单,需要项目经理验收修改工单状态
  90 + if (!($ticket->project->status == 1 && in_array($ticket->project->project_cate, [1, 2])))
  91 + {
  92 + $ticket->status = Tickets::STATUS_COMPLETED;
90 $ticket->end_at = now(); 93 $ticket->end_at = now();
91 $project = $ticket->project; 94 $project = $ticket->project;
  95 + if ($project->wechat_switch)
92 $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!"); 96 $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
93 $ticket->pushDing('finish'); 97 $ticket->pushDing('finish');
94 } 98 }
  99 + }
95 $ticket->save(); 100 $ticket->save();
96 return $log; 101 return $log;
97 }); 102 });
@@ -24,11 +24,14 @@ class AsideTicketUpdateRequest extends FormRequest @@ -24,11 +24,14 @@ class AsideTicketUpdateRequest extends FormRequest
24 public function rules() 24 public function rules()
25 { 25 {
26 return [ 26 return [
  27 + 'title' => 'required|string',
  28 + 'content' => 'required|string',
  29 + 'files' => 'nullable|array',
27 'status' => 'nullable|in:0,1,2,3|integer', 30 'status' => 'nullable|in:0,1,2,3|integer',
28 - 'reply' => 'nullable|string',  
29 'engineer_ids' => 'nullable|array', 31 'engineer_ids' => 'nullable|array',
30 'star' => 'nullable|in:1,2,3|integer', 32 'star' => 'nullable|in:1,2,3|integer',
31 'plan_end_at' => 'nullable|date', 33 'plan_end_at' => 'nullable|date',
  34 + 'reply' => 'nullable|string', // 弃用
32 ]; 35 ];
33 } 36 }
34 } 37 }
@@ -16,7 +16,7 @@ class Tickets extends Base @@ -16,7 +16,7 @@ class Tickets extends Base
16 const STATUS_PEDDING = 0; // 待处理 16 const STATUS_PEDDING = 0; // 待处理
17 const STATUS_PROCESSING = 1; // 处理中 17 const STATUS_PROCESSING = 1; // 处理中
18 const STATUS_COMPLETED = 2; // 已完成 18 const STATUS_COMPLETED = 2; // 已完成
19 - const STATUS_CLOSED = 3; // 已关闭 19 + const STATUS_CLOSED = 3; // 已关闭,已失效
20 20
21 /** 21 /**
22 * @return void 22 * @return void