From daf9f8dbb7ba36eb283221d2c6022039aefaf97d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 25 十月 2026 00:40:38 +0800
Subject: [PATCH] feat(aftersales): 售后退货单同步MES批次信息并优化工单处理流程
---
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java | 31 ++++++++++++++++++++++++++++---
1 files changed, 28 insertions(+), 3 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..09d3c68 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;
@@ -60,10 +65,12 @@
throw exception(TICKET_NO_EXISTS);
}
- // 2. 鎻掑叆宸ュ崟
+ // 2. 鎻掑叆宸ュ崟锛堝~浜嗗鐞嗕汉鍗宠涓哄凡鎸囨淳锛岀洿鎺ヨ繘鍏ュ鐞嗕腑锛�
AfterSaleTicketDO ticket = BeanUtils.toBean(createReqVO, AfterSaleTicketDO.class)
.setNo(no)
- .setStatus(AfterSaleTicketStatusEnum.DRAFT.getStatus())
+ .setStatus(createReqVO.getHandlerUserId() != null
+ ? AfterSaleTicketStatusEnum.PROCESSING.getStatus()
+ : AfterSaleTicketStatusEnum.DRAFT.getStatus())
.setOwnerUserId(userId);
ticketMapper.insert(ticket);
@@ -98,8 +105,12 @@
AfterSaleTicketDO ticket = validateTicketExists(updateReqVO.getId());
validateTicketStatus(ticket, AfterSaleTicketStatusEnum.DRAFT);
- // 2. 鏇存柊宸ュ崟
+ // 2. 鏇存柊宸ュ崟锛堣崏绋垮崟濉簡澶勭悊浜哄嵆瑙嗕负鎸囨淳锛岃繘鍏ュ鐞嗕腑锛�
AfterSaleTicketDO updateObj = BeanUtils.toBean(updateReqVO, AfterSaleTicketDO.class);
+ if (AfterSaleTicketStatusEnum.DRAFT.getStatus().equals(ticket.getStatus())
+ && updateReqVO.getHandlerUserId() != null) {
+ updateObj.setStatus(AfterSaleTicketStatusEnum.PROCESSING.getStatus());
+ }
ticketMapper.updateById(updateObj);
// 3. 鏇存柊鏄庣粏琛岋紙鍏堝垹鍚庡锛�
@@ -178,6 +189,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 +205,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