作者 ZhengBing He

合并分支 'workorder' 到 'master'

Workorder



查看合并请求 !2384
... ... @@ -58,7 +58,7 @@ class WorkOrderDing extends Command
sleep(3);
continue;
}
$mobile = $log->engineer->mobile;
$mobile = ManageHr::where('manage_id', $log->engineer_id)->value('mobile');
$response = Http::withBasicAuth(
env('DINGDING_BASIC_USER'),
env('DINGDING_BASIC_PASS')
... ... @@ -67,7 +67,7 @@ class WorkOrderDing extends Command
$userid = $response->json()['data']['userid'];
$ding = new DingTalkService();
$resp = $ding->danliao(json_encode([
'text' => "您有新的工单(ID: {$log->ticket_id}),请及时处理!",
'text' => "您有新的工单(ID: {$log->ticket_id}),请及时处理!处理时间:{$log->ticket->plan_end_at},提单时间:{$log->ticket->created_at}",
'title' => 'AI协同工单 - ' . $log->ticket->project->title,
'picUrl' => 'https://hub.globalso.com/logocm.png',
'messageUrl' => 'https://oa.quanqiusou.cn/afterorder?project_id=' . $log->ticket->project->uuid,
... ...
... ... @@ -176,7 +176,8 @@ class AsideTicketController extends BaseController
// 分配工单参与人
$ticket->saveEngineers($request->input('engineer_ids', []));
$nickname = ManageHr::where('manage_id', $this->manage['id'])->value('nickname') ?? mb_substr($ticket->submit_username, 0, 1) . '**';
$project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!");
if ($project->wechat_switch)
$project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!");
return $ticket;
});
$this->response('success', Code::SUCCESS, $result->toArray());
... ... @@ -217,16 +218,23 @@ class AsideTicketController extends BaseController
$ticket->saveEngineers($request->input('engineer_ids'));
// 其他字段有提交数据才修改,比如star plan_end_at
$ticket->title = $request->input('title', $ticket->title);
$ticket->content = $request->input('content', $ticket->content);
$ticket->star = $request->input('star', $ticket->star);
$ticket->plan_end_at = $request->input('plan_end_at', $ticket->plan_end_at);
$ticket->reply = $request->input('reply', null);
$ticket->status = $request->input('status', $ticket->status);
if ($ticket->status == Tickets::STATUS_COMPLETED)
{
// 完成工单,把子任务里面未完成的工单改为完成
$ticket->end_at = now();
$ticket->logs()->where('status', '<', TicketLog::STATUS_COMPLETED)
$ticket->logs()->where('status', '<', TicketLog::STATUS_COMPLETED)->where('is_engineer', 1)
->update(['status' => TicketLog::STATUS_COMPLETED, 'end_at' => now()]);
// 推动微信通知
$project = $ticket->project;
if ($project->wechat_switch)
$project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
$ticket->pushDing('finish');
}
$ticket->save();
return $ticket;
... ... @@ -261,7 +269,8 @@ class AsideTicketController extends BaseController
if (empty($project->wechat_group_id)) {
$this->response('该工单没有绑定的企微群', Code::USER_MODEL_NOTFOUND_ERROE);
}
$project->pushWechatGroupMsg();
if ($project->wechat_switch)
$project->pushWechatGroupMsg();
$this->response('success', Code::SUCCESS);
}
... ...
... ... @@ -85,12 +85,17 @@ class AsideTicketLogController extends BaseController
$ticket->status = Tickets::STATUS_PROCESSING;
}else
{
$ticket->status = Tickets::STATUS_COMPLETED;
// 如果所有子任务都完成了,则将工单状态改为已完成
$ticket->end_at = now();
$project = $ticket->project;
$project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
$ticket->pushDing('finish');
// 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;
... ...
... ... @@ -24,11 +24,14 @@ class AsideTicketUpdateRequest extends FormRequest
public function rules()
{
return [
'title' => 'required|string',
'content' => 'required|string',
'files' => 'nullable|array',
'status' => 'nullable|in:0,1,2,3|integer',
'reply' => 'nullable|string',
'engineer_ids' => 'nullable|array',
'star' => 'nullable|in:1,2,3|integer',
'plan_end_at' => 'nullable|date',
'reply' => 'nullable|string', // 弃用
];
}
}
... ...
... ... @@ -16,7 +16,7 @@ class Tickets extends Base
const STATUS_PEDDING = 0; // 待处理
const STATUS_PROCESSING = 1; // 处理中
const STATUS_COMPLETED = 2; // 已完成
const STATUS_CLOSED = 3; // 已关闭
const STATUS_CLOSED = 3; // 已关闭,已失效
/**
* @return void
... ...