Merge branch 'master' of http://47.244.231.31:8099/zhl/globalso-v6
正在显示
6 个修改的文件
包含
36 行增加
和
21 行删除
| @@ -86,7 +86,7 @@ class RemainDay extends Command | @@ -86,7 +86,7 @@ class RemainDay extends Command | ||
| 86 | * @time :2025/4/2 10:48 | 86 | * @time :2025/4/2 10:48 |
| 87 | */ | 87 | */ |
| 88 | public function saveRemainDay(){ | 88 | public function saveRemainDay(){ |
| 89 | - $list = $this->project->list(['extend_type'=>Project::TYPE_ZERO,'type'=>['in',[Project::TYPE_TWO,Project::TYPE_THREE,Project::TYPE_FOUR]]],'id',['id','type','uptime','remain_day','is_remain_today','pause_days','finish_remain_day']); | 89 | + $list = $this->project->list(['extend_type'=>Project::TYPE_ZERO,'type'=>['in',[Project::TYPE_TWO,Project::TYPE_THREE,Project::TYPE_FOUR,Project::TYPE_SIX]]],'id',['id','type','uptime','remain_day','is_remain_today','pause_days','finish_remain_day','bm_finish_remain_day']); |
| 90 | foreach ($list as $item){ | 90 | foreach ($list as $item){ |
| 91 | $deploy_build = $this->deployBuild->read(['project_id'=>$item['id']],['service_duration','seo_service_duration','plan','seo_plan']); | 91 | $deploy_build = $this->deployBuild->read(['project_id'=>$item['id']],['service_duration','seo_service_duration','plan','seo_plan']); |
| 92 | echo 'start->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL; | 92 | echo 'start->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL; |
| @@ -123,19 +123,15 @@ class RemainDay extends Command | @@ -123,19 +123,15 @@ class RemainDay extends Command | ||
| 123 | //白帽版本的系统 | 123 | //白帽版本的系统 |
| 124 | if($deploy_build['seo_plan'] == 1){ | 124 | if($deploy_build['seo_plan'] == 1){ |
| 125 | if($deploy_build['seo_service_duration'] != 0){ | 125 | if($deploy_build['seo_service_duration'] != 0){ |
| 126 | - if($item['uptime']){ | ||
| 127 | - $diff = time() - strtotime($item['uptime']); | ||
| 128 | - $compliance_day = floor($diff / (60 * 60 * 24)); | 126 | + if($item['bm_finish_remain_day']){ |
| 127 | + $compliance_day = (int)$item['bm_finish_remain_day']; | ||
| 129 | $seo_remain_day = $deploy_build['seo_service_duration'] - $compliance_day; | 128 | $seo_remain_day = $deploy_build['seo_service_duration'] - $compliance_day; |
| 130 | }else{ | 129 | }else{ |
| 131 | $seo_remain_day = $deploy_build['seo_service_duration']; | 130 | $seo_remain_day = $deploy_build['seo_service_duration']; |
| 132 | } | 131 | } |
| 133 | -// if($seo_remain_day < 0){ | ||
| 134 | -// $seo_remain_day = 0; | ||
| 135 | -// } | ||
| 136 | if($deploy_build['plan'] == 0 && $seo_remain_day < 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常为0,放入未续费中 | 132 | if($deploy_build['plan'] == 0 && $seo_remain_day < 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常为0,放入未续费中 |
| 137 | // $this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]); | 133 | // $this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]); |
| 138 | - $this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]); | 134 | + $this->project->edit(['seo_remain_day'=>$seo_remain_day,'bm_finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]); |
| 139 | }else{ | 135 | }else{ |
| 140 | //同时包括白帽版本+默认版本的项目 | 136 | //同时包括白帽版本+默认版本的项目 |
| 141 | $this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]); | 137 | $this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]); |
| @@ -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') |
| @@ -66,8 +66,10 @@ class WorkOrderDing extends Command | @@ -66,8 +66,10 @@ class WorkOrderDing extends Command | ||
| 66 | if ($response->status() == 200) { | 66 | if ($response->status() == 200) { |
| 67 | $userid = $response->json()['data']['userid']; | 67 | $userid = $response->json()['data']['userid']; |
| 68 | $ding = new DingTalkService(); | 68 | $ding = new DingTalkService(); |
| 69 | + $created_at = date('m-d H', strtotime($log->ticket->created_at)); | ||
| 70 | + $plan_end_at = date('m-d H', strtotime($log->ticket->plan_end_at)); | ||
| 69 | $resp = $ding->danliao(json_encode([ | 71 | $resp = $ding->danliao(json_encode([ |
| 70 | - 'text' => "您有新的工单(ID: {$log->ticket_id}),请及时处理!", | 72 | + 'text' => "您有新工单{$log->ticket_id},{$created_at} 至 {$plan_end_at} 截止!", |
| 71 | 'title' => 'AI协同工单 - ' . $log->ticket->project->title, | 73 | 'title' => 'AI协同工单 - ' . $log->ticket->project->title, |
| 72 | 'picUrl' => 'https://hub.globalso.com/logocm.png', | 74 | 'picUrl' => 'https://hub.globalso.com/logocm.png', |
| 73 | 'messageUrl' => 'https://oa.quanqiusou.cn/afterorder?project_id=' . $log->ticket->project->uuid, | 75 | 'messageUrl' => 'https://oa.quanqiusou.cn/afterorder?project_id=' . $log->ticket->project->uuid, |
| @@ -176,7 +176,8 @@ class AsideTicketController extends BaseController | @@ -176,7 +176,8 @@ 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 | - $project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!"); | 179 | + if ($project->wechat_switch) |
| 180 | + $project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!"); | ||
| 180 | return $ticket; | 181 | return $ticket; |
| 181 | }); | 182 | }); |
| 182 | $this->response('success', Code::SUCCESS, $result->toArray()); | 183 | $this->response('success', Code::SUCCESS, $result->toArray()); |
| @@ -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,7 +269,8 @@ class AsideTicketController extends BaseController | @@ -261,7 +269,8 @@ 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 | } |
| 264 | - $project->pushWechatGroupMsg(); | 272 | + if ($project->wechat_switch) |
| 273 | + $project->pushWechatGroupMsg(); | ||
| 265 | $this->response('success', Code::SUCCESS); | 274 | $this->response('success', Code::SUCCESS); |
| 266 | } | 275 | } |
| 267 | 276 |
| @@ -85,12 +85,17 @@ class AsideTicketLogController extends BaseController | @@ -85,12 +85,17 @@ 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 | // 如果所有子任务都完成了,则将工单状态改为已完成 |
| 90 | - $ticket->end_at = now(); | ||
| 91 | - $project = $ticket->project; | ||
| 92 | - $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!"); | ||
| 93 | - $ticket->pushDing('finish'); | 89 | + // todo 注意:建站期间的工单,所有人都完成后,不自动完成工单,需要项目经理验收修改工单状态 |
| 90 | + if (!($ticket->project->status == 1 && in_array($ticket->project->project_cate, [1, 2]))) | ||
| 91 | + { | ||
| 92 | + $ticket->status = Tickets::STATUS_COMPLETED; | ||
| 93 | + $ticket->end_at = now(); | ||
| 94 | + $project = $ticket->project; | ||
| 95 | + if ($project->wechat_switch) | ||
| 96 | + $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!"); | ||
| 97 | + $ticket->pushDing('finish'); | ||
| 98 | + } | ||
| 94 | } | 99 | } |
| 95 | $ticket->save(); | 100 | $ticket->save(); |
| 96 | return $log; | 101 | return $log; |
| @@ -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 |
-
请 注册 或 登录 后发表评论