From 9ae23153f640dee3accd6a870f7003aade5d651e Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Wed, 13 Aug 2025 17:00:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/scaffold/templates/workOrder.stub | 1 + app/ticket/logic/CategorieLogic.php | 8 +++++ app/ticket/logic/ConversationLogic.php | 14 ++++++++ app/ticket/service/ConversationService.php | 36 +++++++++++++++++++ app/ticket/service/TicketService.php | 3 ++ 5 files changed, 62 insertions(+) diff --git a/app/common/utils/scaffold/templates/workOrder.stub b/app/common/utils/scaffold/templates/workOrder.stub index c7b6ab0..9f592dd 100644 --- a/app/common/utils/scaffold/templates/workOrder.stub +++ b/app/common/utils/scaffold/templates/workOrder.stub @@ -80,6 +80,7 @@
  • 工单编号:{{code}}
  • 工单分类:{{category}}
  • 问题描述:{{content}}
  • + {{reply}}

    请点击下方按钮立即查看详情:

    diff --git a/app/ticket/logic/CategorieLogic.php b/app/ticket/logic/CategorieLogic.php index c11bd64..f9f1014 100644 --- a/app/ticket/logic/CategorieLogic.php +++ b/app/ticket/logic/CategorieLogic.php @@ -23,6 +23,14 @@ class CategorieLogic return Categorie::with('translation')->where($where)->get(); } + public function find($id) + { + return Categorie::with('translation') + ->where('status',1) + ->where('locale', locale()) + ->find($id); + } + public function add(array $data) { try { diff --git a/app/ticket/logic/ConversationLogic.php b/app/ticket/logic/ConversationLogic.php index d47a709..53a5a18 100644 --- a/app/ticket/logic/ConversationLogic.php +++ b/app/ticket/logic/ConversationLogic.php @@ -18,6 +18,7 @@ class ConversationLogic $current = $params['current'] ?? 1; return Conversation::where($where)->paginate($size, ['*'], 'page', $current); } + public function add(array $data) { try { @@ -43,4 +44,17 @@ class ConversationLogic throw new BusinessException('会话编辑失败,请稍后重试', 500); } } + + /** + * 获取工单最新一条记录 + * @param array $data + * @return Conversation|\Illuminate\Database\Eloquent\Model|object|null + */ + public function firstByTicket(int $ticketId) + { + $conversation = Conversation::where('ticket_id',$ticketId) + ->orderBy('id','desc') + ->first(); + return $conversation; + } } \ No newline at end of file diff --git a/app/ticket/service/ConversationService.php b/app/ticket/service/ConversationService.php index c9cbd17..ea52002 100644 --- a/app/ticket/service/ConversationService.php +++ b/app/ticket/service/ConversationService.php @@ -4,7 +4,10 @@ namespace app\ticket\service; use app\common\model\User; use app\common\service\OssService; +use app\ticket\logic\CategorieLogic; use app\ticket\logic\ConversationLogic; +use app\ticket\logic\TicketLogic; +use app\ticket\model\Conversation; use config\constants\Constants; use support\Db; use support\exception\BusinessException; @@ -44,6 +47,39 @@ class ConversationService if (empty($data['content'])) { throw new BusinessException('消息内容不能为空'); } + + $conversation = (new ConversationLogic())->firstByTicket($data['ticket_id']); + $categorie= (new CategorieLogic())->find($data['categorie_id']); + $categorieName = isset($categorie['translation']) ? $categorie['translation']['name'] : ''; + + $notice = [ + 'code' => $data['code'], + 'category' => $categorieName, + 'content' => $data['content'], + 'reply' => '', + ]; + if (empty($conversation)) { + $email = 'app@hnxinyouhe.com'; + }else{ + $tiket = (new TicketLogic)->find($conversation['ticket_id']); + if($data['user_id'] != $tiket['user_id']){ + $email = User::find($tiket['user_id'])->value('email'); + }else{ + $conversationLast = Conversation::where('user_id', '=', $conversation['user_id']) + ->where('ticket_id', '=', $conversation['ticket_id']) + ->where('user_id', '!=', $conversation['user_id']) + ->orderBy('id', 'desc') + ->first(); + $email = User::find($conversationLast['user_id'])->value('email','app@hnxinyouhe.com'); + } + $notice['content'] = $tiket['content']; + $notice['reply'] = '
  • 最新回复:' . $data['content'] . '
  • '; + } + \app\common\utils\email\MailSend::send($email, '【XYH】新的工单提醒', replaceTpl($notice, 'work_order')); + + unset($data['categorie_id']); + unset($data['code']); + return (new ConversationLogic())->add($data); } catch (\Throwable $e) { throw $e; diff --git a/app/ticket/service/TicketService.php b/app/ticket/service/TicketService.php index 5d451be..d12c4e7 100644 --- a/app/ticket/service/TicketService.php +++ b/app/ticket/service/TicketService.php @@ -45,6 +45,7 @@ class TicketService try { $attachment = $data['attachment']??[]; $logic = new TicketLogic(); + $data['code'] = $logic::generateSimpleTicketNo(); $result = $logic->add($data); if(!empty($attachment)){ (new AttachmentLogic())->adds($attachment, $result->id, $data['user_id']); @@ -53,6 +54,8 @@ class TicketService $cleanContent = trim(preg_replace('/\s+/', ' ', strip_tags($data['content'] ?? ''))); $conversation = [ 'ticket_id' => $result->id, + 'categorie_id' => $data['categorie_id'], + 'code' => $data['code'], 'content' => $cleanContent, 'user_id' => $data['user_id'], 'attachment' => $data['attachment'], From 5642089c62a163707a369706d0c7460fd6ee4943 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 18 Aug 2025 10:38:41 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ticket/service/ConversationService.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/ticket/service/ConversationService.php b/app/ticket/service/ConversationService.php index ea52002..fef9eab 100644 --- a/app/ticket/service/ConversationService.php +++ b/app/ticket/service/ConversationService.php @@ -59,7 +59,9 @@ class ConversationService 'reply' => '', ]; if (empty($conversation)) { - $email = 'app@hnxinyouhe.com'; + //$email = 'app@hnxinyouhe.com'; //公共邮箱 + $email = 'tuotuo@hnxinyouhe.com'; //范彩凤 + $email = 'beimanr@hnxinyouhe.com'; //范彩凤 }else{ $tiket = (new TicketLogic)->find($conversation['ticket_id']); if($data['user_id'] != $tiket['user_id']){ From ad619362b6feea30498cdd226d1b808771a232da Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 18 Aug 2025 11:20:35 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ticket/logic/CategorieLogic.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/ticket/logic/CategorieLogic.php b/app/ticket/logic/CategorieLogic.php index f9f1014..7eefaed 100644 --- a/app/ticket/logic/CategorieLogic.php +++ b/app/ticket/logic/CategorieLogic.php @@ -25,9 +25,9 @@ class CategorieLogic public function find($id) { - return Categorie::with('translation') - ->where('status',1) - ->where('locale', locale()) + return Categorie::with(['translation' => function ($query) { + $query->where('locale', locale()); + }])->where('status', 1) ->find($id); } From c32e768e411679d101936bbaaddedb2d552d8586 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 18 Aug 2025 11:32:33 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=9B=9E=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ticket/service/ConversationService.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/ticket/service/ConversationService.php b/app/ticket/service/ConversationService.php index fef9eab..fdd963b 100644 --- a/app/ticket/service/ConversationService.php +++ b/app/ticket/service/ConversationService.php @@ -49,11 +49,12 @@ class ConversationService } $conversation = (new ConversationLogic())->firstByTicket($data['ticket_id']); - $categorie= (new CategorieLogic())->find($data['categorie_id']); + $ticket = (new TicketLogic())->find($data['ticket_id']); + $categorie= (new CategorieLogic())->find($ticket['categorie_id']); $categorieName = isset($categorie['translation']) ? $categorie['translation']['name'] : ''; $notice = [ - 'code' => $data['code'], + 'code' => $ticket['code'], 'category' => $categorieName, 'content' => $data['content'], 'reply' => '', From d8b80aefeca274f2e35c820c5e19a565fc459d8c Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 18 Aug 2025 13:57:46 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ticket/service/ConversationService.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/ticket/service/ConversationService.php b/app/ticket/service/ConversationService.php index fdd963b..4417284 100644 --- a/app/ticket/service/ConversationService.php +++ b/app/ticket/service/ConversationService.php @@ -59,21 +59,21 @@ class ConversationService 'content' => $data['content'], 'reply' => '', ]; + //$emailDefault = 'app@hnxinyouhe.com'; //公共邮箱 + $emailDefault = 'tuotuo@hnxinyouhe.com'; //范彩凤 if (empty($conversation)) { - //$email = 'app@hnxinyouhe.com'; //公共邮箱 - $email = 'tuotuo@hnxinyouhe.com'; //范彩凤 - $email = 'beimanr@hnxinyouhe.com'; //范彩凤 + $email = $emailDefault; }else{ $tiket = (new TicketLogic)->find($conversation['ticket_id']); if($data['user_id'] != $tiket['user_id']){ $email = User::find($tiket['user_id'])->value('email'); }else{ - $conversationLast = Conversation::where('user_id', '=', $conversation['user_id']) - ->where('ticket_id', '=', $conversation['ticket_id']) - ->where('user_id', '!=', $conversation['user_id']) + $conversationLast = Conversation::where('ticket_id', '=', $conversation['ticket_id']) + ->where('user_id', '!=', $data['user_id']) ->orderBy('id', 'desc') ->first(); - $email = User::find($conversationLast['user_id'])->value('email','app@hnxinyouhe.com'); + + $email = (!empty($conversationLast['user_id']))?User::find($conversationLast['user_id'])->value('email',$emailDefault):$emailDefault; } $notice['content'] = $tiket['content']; $notice['reply'] = '
  • 最新回复:' . $data['content'] . '
  • ';