From 87d725aa16dcdcdd19f28cd3f3f162e950fd1d2f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 09:13:20 +0800
Subject: [PATCH] feat(aftersales): 工单助手 App 闭环(签到/转派/升级/处理记录/进度/统计)

---
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketService.java |   74 +++++++++++++++++++++++++++++++++---
 1 files changed, 67 insertions(+), 7 deletions(-)

diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketService.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketService.java
index 7c3a9d0..f4e7840 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketService.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketService.java
@@ -1,10 +1,16 @@
 package cn.iocoder.yudao.module.aftersales.service.ticket;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketEscalateReqVO;
+import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketHandleReqVO;
 import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketPageReqVO;
 import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketSaveReqVO;
+import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketSignInReqVO;
+import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketStatisticsRespVO;
+import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketTransferReqVO;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketDO;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketItemDO;
+import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketLogDO;
 import jakarta.validation.Valid;
 
 import java.util.Collection;
@@ -74,10 +80,11 @@
     /**
      * 鍒嗛厤澶勭悊浜�
      *
-     * @param id              宸ュ崟缂栧彿
-     * @param handlerUserId   澶勭悊浜虹敤鎴风紪鍙�
+     * @param id            宸ュ崟缂栧彿
+     * @param handlerUserId 澶勭悊浜虹敤鎴风紪鍙�
+     * @param operatorUserId 鎿嶄綔浜虹敤鎴风紪鍙�
      */
-    void assignTicket(Long id, Long handlerUserId);
+    void assignTicket(Long id, Long handlerUserId, Long operatorUserId);
 
     /**
      * 闂鍒ゅ畾锛堢‘瀹氶棶棰樼被鍨嬨�佸垎绫汇�佷弗閲嶇▼搴︼級
@@ -86,28 +93,81 @@
      * @param issueType     闂绫诲瀷
      * @param issueCategory 闂鍒嗙被
      * @param severityLevel 涓ラ噸绋嬪害
+     * @param operatorUserId 鎿嶄綔浜虹敤鎴风紪鍙�
      */
-    void classifyTicket(Long id, Integer issueType, String issueCategory, Integer severityLevel);
+    void classifyTicket(Long id, Integer issueType, String issueCategory, Integer severityLevel, Long operatorUserId);
 
     /**
      * 瀹岀粨宸ュ崟
      *
      * @param id 宸ュ崟缂栧彿
+     * @param operatorUserId 鎿嶄綔浜虹敤鎴风紪鍙�
      */
-    void resolveTicket(Long id);
+    void resolveTicket(Long id, Long operatorUserId);
 
     /**
      * 鍏抽棴宸ュ崟
      *
      * @param id 宸ュ崟缂栧彿
+     * @param operatorUserId 鎿嶄綔浜虹敤鎴风紪鍙�
      */
-    void closeTicket(Long id);
+    void closeTicket(Long id, Long operatorUserId);
 
     /**
      * 鍙栨秷宸ュ崟
      *
      * @param id 宸ュ崟缂栧彿
+     * @param operatorUserId 鎿嶄綔浜虹敤鎴风紪鍙�
      */
-    void cancelTicket(Long id);
+    void cancelTicket(Long id, Long operatorUserId);
+
+    /**
+     * 鐜板満绛惧埌锛堣褰曚綅缃俊鎭紝淇濋殰鏈嶅姟鐪熷疄鎬э級
+     *
+     * @param reqVO  绛惧埌淇℃伅
+     * @param userId 鎿嶄綔浜虹敤鎴风紪鍙�
+     */
+    void signInTicket(@Valid AfterSaleTicketSignInReqVO reqVO, Long userId);
+
+    /**
+     * 杞淳宸ュ崟
+     *
+     * @param reqVO  杞淳淇℃伅
+     * @param userId 鎿嶄綔浜虹敤鎴风紪鍙�
+     */
+    void transferTicket(@Valid AfterSaleTicketTransferReqVO reqVO, Long userId);
+
+    /**
+     * 鍗囩骇宸ュ崟
+     *
+     * @param reqVO  鍗囩骇淇℃伅
+     * @param userId 鎿嶄綔浜虹敤鎴风紪鍙�
+     */
+    void escalateTicket(@Valid AfterSaleTicketEscalateReqVO reqVO, Long userId);
+
+    /**
+     * 鏂板澶勭悊璁板綍
+     *
+     * @param reqVO  澶勭悊璁板綍
+     * @param userId 鎿嶄綔浜虹敤鎴风紪鍙�
+     */
+    void addHandleRecord(@Valid AfterSaleTicketHandleReqVO reqVO, Long userId);
+
+    /**
+     * 鑾峰緱宸ュ崟鎿嶄綔/杩涘害璁板綍鍒楄〃
+     *
+     * @param ticketId 宸ュ崟缂栧彿
+     * @return 璁板綍鍒楄〃
+     */
+    List<AfterSaleTicketLogDO> getTicketLogList(Long ticketId);
+
+    /**
+     * 鑾峰緱宸ュ崟鍔╂墜缁熻
+     *
+     * @param sceneType 鍦烘櫙绫诲瀷
+     * @param userId    鐢ㄦ埛缂栧彿
+     * @return 缁熻缁撴灉
+     */
+    AfterSaleTicketStatisticsRespVO getTicketStatistics(Integer sceneType, Long userId);
 
 }

--
Gitblit v1.9.3