From 14c80fbd16a51a355138345ecf69df9ca37746bf Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期五, 06 十一月 2026 09:18:32 +0800
Subject: [PATCH] 完善售后退货联动和订单作废保护

---
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java
index ed5fcd6..75c14df 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java
@@ -20,6 +20,8 @@
 import cn.iocoder.yudao.module.aftersales.service.permission.bo.AfterSalePermissionCreateReqBO;
 import cn.iocoder.yudao.module.mes.api.returnsales.MesWmReturnSalesApi;
 import cn.iocoder.yudao.module.mes.api.returnsales.dto.MesWmReturnSalesCreateReqDTO;
+import cn.iocoder.yudao.module.mes.api.returnsales.dto.MesWmReturnSalesLineCreateDTO;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -33,6 +35,7 @@
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.invalidParamException;
 import static cn.iocoder.yudao.module.aftersales.enums.ErrorCodeConstants.*;
 
 /**
@@ -62,6 +65,8 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createReturn(AfterSaleReturnSaveReqVO createReqVO, Long userId) {
+        if (Integer.valueOf(3).equals(createReqVO.getReturnType()))
+            throw invalidParamException("浠呴��娆炬祦绋嬪皻鏈帴鍏ヨ储鍔″鏍革紝鏆備笉鑳藉垱寤洪��璐х敵璇�");
         // 1. 鏍¢獙宸ュ崟瀛樺湪
         AfterSaleTicketDO ticket = ticketMapper.selectById(createReqVO.getTicketId());
         if (ticket == null) {
@@ -122,6 +127,18 @@
         if (!AfterSaleReturnStatusEnum.DRAFT.getStatus().equals(returnDO.getStatus())) {
             throw exception(RETURN_APPROVE_FAIL);
         }
+        if (Integer.valueOf(3).equals(returnDO.getReturnType()))
+            throw invalidParamException("浠呴��娆炬祦绋嬪皻鏈帴鍏ヨ储鍔″鏍革紝鏆備笉鑳藉悓姝ヤ负瀹炵墿閫�璐у崟");
+        List<AfterSaleReturnItemDO> items = returnItemMapper.selectListByReturnId(id);
+        if (CollUtil.isEmpty(items) || items.stream().anyMatch(item -> item.getItemId() == null
+                || item.getReturnQuantity() == null || item.getReturnQuantity().signum() <= 0))
+            throw invalidParamException("璇峰厛濉啓鏈夋晥鐨勯��璐х墿鏂欏強鏁伴噺");
+        // 鍦ㄤ簨鍔′腑鎶㈠崰鑽夌鐘舵�侊紝閬垮厤骞跺彂瀹℃牳閲嶅鐢熸垚閫�璐у崟銆�
+        if (returnMapper.update(null, new LambdaUpdateWrapper<AfterSaleReturnDO>()
+                .eq(AfterSaleReturnDO::getId, id)
+                .eq(AfterSaleReturnDO::getStatus, AfterSaleReturnStatusEnum.DRAFT.getStatus())
+                .set(AfterSaleReturnDO::getStatus, AfterSaleReturnStatusEnum.AUDITING.getStatus())) != 1)
+            throw exception(RETURN_APPROVE_FAIL);
 
         // 2. 鑾峰彇鍏宠仈宸ュ崟锛堢敤浜庤幏鍙栭攢鍞鍗曞彿绛夊啑浣欎俊鎭級
         AfterSaleTicketDO ticket = ticketMapper.selectById(returnDO.getTicketId());
@@ -138,13 +155,22 @@
         mesReqDTO.setRemark("鍞悗宸ュ崟閫�璐� - 宸ュ崟鍙�: " + (ticket != null ? ticket.getNo() : ""));
         mesReqDTO.setAfterSaleReturnId(returnDO.getId());
         Long mesReturnId = mesWmReturnSalesApi.createReturnSales(mesReqDTO);
+        if (mesReturnId == null) throw invalidParamException("MES 閫�璐у崟鍒涘缓澶辫触");
+        for (AfterSaleReturnItemDO item : items) {
+            var line = new MesWmReturnSalesLineCreateDTO();
+            line.setReturnId(mesReturnId); line.setItemId(item.getItemId()); line.setQuantity(item.getReturnQuantity());
+            line.setBatchId(item.getBatchId()); line.setBatchCode(item.getBatchCode()); line.setRemark(item.getRemark());
+            Long lineId = mesWmReturnSalesApi.createReturnSalesLine(line);
+            if (lineId == null || returnItemMapper.updateById(new AfterSaleReturnItemDO().setId(item.getId()).setMesReturnLineId(lineId)) != 1)
+                throw invalidParamException("MES 閫�璐ф槑缁嗗悓姝ュけ璐�");
+        }
 
         // 4. 鏇存柊閫�璐х敵璇风姸鎬�
-        returnMapper.updateById(new AfterSaleReturnDO().setId(id)
+        if (returnMapper.updateById(new AfterSaleReturnDO().setId(id)
                 .setStatus(AfterSaleReturnStatusEnum.APPROVED.getStatus())
                 .setMesReturnId(mesReturnId)
                 .setMesReturnCode(returnDO.getNo())
-                .setAuditTime(LocalDateTime.now()));
+                .setAuditTime(LocalDateTime.now())) != 1) throw invalidParamException("鏇存柊閫�璐х敵璇峰け璐�");
     }
 
     @Override

--
Gitblit v1.9.3