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