From a4ed0f250009167453ca637ce042ef8e0b69f613 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 24 十月 2026 19:30:00 +0800
Subject: [PATCH] feat(aftersales): 增加售后退货流程管理功能

---
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java
index c509cce..a5e28fd 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java
@@ -6,6 +6,9 @@
 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.dal.dataobject.ticket.AfterSaleTicketDO;
+import cn.iocoder.yudao.module.aftersales.dal.dataobject.returnobj.AfterSaleReturnDO;
+import cn.iocoder.yudao.module.aftersales.dal.mysql.returnobj.AfterSaleReturnMapper;
+import cn.iocoder.yudao.module.aftersales.enums.AfterSaleReturnStatusEnum;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketItemDO;
 import cn.iocoder.yudao.module.aftersales.dal.mysql.ticket.AfterSaleTicketItemMapper;
 import cn.iocoder.yudao.module.aftersales.dal.mysql.ticket.AfterSaleTicketMapper;
@@ -41,6 +44,8 @@
     private AfterSaleTicketMapper ticketMapper;
     @Resource
     private AfterSaleTicketItemMapper ticketItemMapper;
+    @Resource
+    private AfterSaleReturnMapper returnMapper;
 
     @Resource
     private AfterSaleNoRedisDAO noRedisDAO;
@@ -178,6 +183,12 @@
         AfterSaleTicketDO ticket = validateTicketExists(id);
         validateTicketStatus(ticket, AfterSaleTicketStatusEnum.PROCESSING,
                 AfterSaleTicketStatusEnum.WAITING_RETURN, AfterSaleTicketStatusEnum.WAITING_REFUND);
+        if (ticket.getReturnId() != null) {
+            AfterSaleReturnDO returnDO = returnMapper.selectById(ticket.getReturnId());
+            if (returnDO == null || !AfterSaleReturnStatusEnum.REFUNDED.getStatus().equals(returnDO.getStatus())) {
+                throw exception(RETURN_TICKET_NOT_FINISHED);
+            }
+        }
         ticketMapper.updateById(new AfterSaleTicketDO().setId(id)
                 .setStatus(AfterSaleTicketStatusEnum.COMPLETED.getStatus())
                 .setResolvedTime(LocalDateTime.now()));
@@ -188,6 +199,14 @@
     public void closeTicket(Long id) {
         AfterSaleTicketDO ticket = validateTicketExists(id);
         validateTicketStatus(ticket, AfterSaleTicketStatusEnum.COMPLETED);
+        if (ticket.getReturnId() != null) {
+            AfterSaleReturnDO returnDO = returnMapper.selectById(ticket.getReturnId());
+            if (returnDO == null || !AfterSaleReturnStatusEnum.REFUNDED.getStatus().equals(returnDO.getStatus())) {
+                throw exception(RETURN_TICKET_NOT_FINISHED);
+            }
+            returnMapper.updateById(new AfterSaleReturnDO().setId(returnDO.getId())
+                    .setStatus(AfterSaleReturnStatusEnum.CLOSED.getStatus()));
+        }
         ticketMapper.updateById(new AfterSaleTicketDO().setId(id)
                 .setStatus(AfterSaleTicketStatusEnum.CLOSED.getStatus())
                 .setClosedTime(LocalDateTime.now()));

--
Gitblit v1.9.3