From a57dceb3e6bc02e28a86f4de66f593706452c2b4 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期六, 07 十一月 2026 14:53:09 +0800
Subject: [PATCH] refactor: 需求10/23 改为基于 ERP 实现,修正此前 ERP 可用性误判
---
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/cancellation/AfterSaleCancellationService.java | 70 ++++++++++++++++++++++++++---------
1 files changed, 52 insertions(+), 18 deletions(-)
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/cancellation/AfterSaleCancellationService.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/cancellation/AfterSaleCancellationService.java
index f7ea701..582bc7c 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/cancellation/AfterSaleCancellationService.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/cancellation/AfterSaleCancellationService.java
@@ -12,6 +12,7 @@
import cn.iocoder.yudao.module.aftersales.dal.redis.no.AfterSaleNoRedisDAO;
import cn.iocoder.yudao.module.aftersales.service.returnobj.AfterSaleReturnService;
import cn.iocoder.yudao.module.crm.api.contract.CrmContractApi;
+import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
@@ -22,6 +23,7 @@
import java.util.Objects;
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.*;
/**
@@ -53,6 +55,7 @@
@Resource private AfterSaleNoRedisDAO noRedisDAO;
@Resource private AfterSaleReturnService returnService;
@Resource private CrmContractApi crmContractApi;
+ @Resource private ErpSaleOrderApi erpSaleOrderApi;
public PageResult<AfterSaleCancellationDO> page(PageParam page, String code, String type,
Integer status, Long customerId) {
@@ -133,7 +136,10 @@
}
/**
- * 瀹℃壒锛氶�氳繃鍚庢墽琛屼笅娓稿姩浣滐紱椹冲洖蹇呴』濉剰瑙併��
+ * 瀹℃壒锛氶┏鍥炲繀椤诲~鎰忚锛涢�氳繃鏃跺厛鎵ц涓嬫父鍔ㄤ綔锛屽叏閮ㄦ垚鍔熸墠钀藉鎵圭粨璁恒��
+ *
+ * <p>涓嬫父澶辫触锛堝閿�鍞鍗曚粛鏈夊叧鑱旂敓浜ц鍒掞級浼氭暣浣撳洖婊氾紝鍙楃悊鍗曚繚鎸併�屽緟瀹℃壒銆嶏紝
+ * 鐢辫皟鐢ㄦ柟鐪嬪埌鍏蜂綋鍘熷洜锛岄伩鍏嶅嚭鐜般�屽鎵归�氳繃浜嗕絾涓氬姟娌℃墽琛屻�嶇殑涓嶄竴鑷寸姸鎬併��
*
* @return 閫氳繃鏃剁敓鎴愮殑閫�璐у崟缂栧彿锛堥潪閫�璐х被鍨嬩负 null锛�
*/
@@ -146,27 +152,47 @@
AfterSaleCancellationDO task = get(req.getId());
if (!Objects.equals(task.getStatus(), ST_PENDING)) throw exception(CANCELLATION_APPROVE_FAIL_STATUS);
- int target = Boolean.TRUE.equals(req.getApproved()) ? ST_APPROVED : ST_REJECTED;
+ // 椹冲洖锛氬彧鏀圭姸鎬侊紝涓嶆墽琛屼笅娓�
+ if (!Boolean.TRUE.equals(req.getApproved())) {
+ if (mapper.update(null, new LambdaUpdateWrapper<AfterSaleCancellationDO>()
+ .eq(AfterSaleCancellationDO::getId, task.getId())
+ .eq(AfterSaleCancellationDO::getStatus, ST_PENDING)
+ .set(AfterSaleCancellationDO::getStatus, ST_REJECTED)
+ .set(AfterSaleCancellationDO::getApproverId, userId)
+ .set(AfterSaleCancellationDO::getApprovalTime, LocalDateTime.now())
+ .set(AfterSaleCancellationDO::getApprovalRemark, req.getRemark())) != 1) {
+ throw exception(CANCELLATION_APPROVE_FAIL_STATUS);
+ }
+ return null;
+ }
+
+ // 閫氳繃锛氬厛鎵ц涓嬫父鍔ㄤ綔锛堝紓甯哥洿鎺ユ姏鍑猴紝浜嬪姟鍥炴粴锛屽崟鎹粛涓哄緟瀹℃壒锛�
+ Long returnId = executeDownstream(task, userId);
+
+ // 涓嬫父鎴愬姛鍚庡啀钀藉鎵圭粨璁�
if (mapper.update(null, new LambdaUpdateWrapper<AfterSaleCancellationDO>()
.eq(AfterSaleCancellationDO::getId, task.getId())
.eq(AfterSaleCancellationDO::getStatus, ST_PENDING)
- .set(AfterSaleCancellationDO::getStatus, target)
+ .set(AfterSaleCancellationDO::getStatus, ST_APPROVED)
.set(AfterSaleCancellationDO::getApproverId, userId)
.set(AfterSaleCancellationDO::getApprovalTime, LocalDateTime.now())
- .set(AfterSaleCancellationDO::getApprovalRemark, req.getRemark())) != 1) {
+ .set(AfterSaleCancellationDO::getApprovalRemark, req.getRemark())
+ .set(AfterSaleCancellationDO::getExecuted, 1)) != 1) {
throw exception(CANCELLATION_APPROVE_FAIL_STATUS);
}
-
- if (!Boolean.TRUE.equals(req.getApproved())) return null;
- return executeDownstream(task, userId);
+ return returnId;
}
- /** 瀹℃壒閫氳繃鍚庣殑涓嬫父鍔ㄤ綔锛涘け璐ユ椂璁板綍鍘熷洜浣嗕笉鍥炴粴瀹℃壒缁撹锛屼究浜庝汉宸ヨˉ鍋氥�� */
+ /**
+ * 瀹℃壒閫氳繃鍚庣殑涓嬫父鍔ㄤ綔銆�
+ *
+ * <p>涓嶅悶寮傚父锛氫换涓�姝ュけ璐ョ洿鎺ユ姏鍑猴紝鐢� {@link #approve} 鐨勪簨鍔℃暣浣撳洖婊氾紝
+ * 淇濊瘉銆屽鎵归�氳繃銆嶄笌銆屼笅娓稿凡鎵ц銆嶆案杩滀竴鑷淬��
+ */
private Long executeDownstream(AfterSaleCancellationDO task, Long userId) {
Long returnId = null;
String remark;
- boolean ok = true;
- try {
+ {
switch (task.getType()) {
case "RETURN" -> {
var vo = new AfterSaleReturnSaveReqVO();
@@ -175,23 +201,31 @@
vo.setReturnType(task.getReturnType() == null ? 1 : task.getReturnType());
vo.setReturnReason(task.getReason());
returnId = returnService.createReturn(vo, userId);
- remark = "宸茬敓鎴愰��璐у崟 " + returnId;
+ if (task.getSaleOrderId() != null) {
+ erpSaleOrderApi.cancelSaleOrder(task.getSaleOrderId()).getCheckedData();
+ remark = "宸茬敓鎴愰��璐у崟 " + returnId
+ + "锛屽苟浣滃簾閿�鍞鍗� " + task.getSaleOrderId();
+ } else {
+ remark = "宸茬敓鎴愰��璐у崟 " + returnId;
+ }
}
case "CONTRACT_TERMINATE" -> {
crmContractApi.updateContractStatus(task.getContractId(), CRM_CONTRACT_INVALID).getCheckedData();
- remark = "宸蹭綔搴� CRM 鍚堝悓 " + task.getContractId();
+ // 鑻ュ叧鑱� ERP 閿�鍞鍗曪紝涓�骞朵綔搴燂紙浼氳鏈彇娑堢殑 MPS 璁″垝鎷︽埅锛�
+ if (task.getSaleOrderId() != null) {
+ erpSaleOrderApi.cancelSaleOrder(task.getSaleOrderId()).getCheckedData();
+ remark = "宸蹭綔搴� CRM 鍚堝悓 " + task.getContractId()
+ + "锛屽苟浣滃簾閿�鍞鍗� " + task.getSaleOrderId();
+ } else {
+ remark = "宸蹭綔搴� CRM 鍚堝悓 " + task.getContractId();
+ }
}
case "CONTRACT_CHANGE" -> remark = "鍙樻洿鍙楃悊宸查�氳繃锛汣RM 鍚堝悓鍐呭璇锋寜闄勪欢鍚屾缁存姢";
- default -> { ok = false; remark = "鏈煡鍙楃悊绫诲瀷锛�" + task.getType(); }
+ default -> throw invalidParamException("鏈煡鍙楃悊绫诲瀷锛�" + task.getType());
}
- } catch (Exception e) {
- ok = false;
- remark = "涓嬫父鎵ц澶辫触锛�" + e.getMessage();
- log.warn("閫�鍗曞彈鐞哰{}]涓嬫父鍔ㄤ綔澶辫触锛歿}", task.getCode(), e.getMessage());
}
var update = new AfterSaleCancellationDO();
update.setId(task.getId());
- update.setExecuted(ok ? 1 : 0);
update.setExecuteRemark(remark);
if (returnId != null) update.setReturnId(returnId);
mapper.updateById(update);
--
Gitblit v1.9.3