From b874abdeead386d24e0939b2e99e6d3bbbd4ec46 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 31 七月 2026 14:32:39 +0800
Subject: [PATCH] 商机金额修改
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java | 63 +++++++++++++++++++++++++++----
1 files changed, 54 insertions(+), 9 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
index 263b383..0aaa4ec 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
@@ -134,8 +134,9 @@
updateReqVO.setOwnerUserId(null).setStatusTypeId(null); // 涓嶅厑璁告洿鏂扮殑瀛楁
// 1.1 鏍¢獙瀛樺湪
CrmBusinessDO oldBusiness = validateBusinessExists(updateReqVO.getId());
- // 1.2 鏍¢獙浜у搧椤圭殑鏈夋晥鎬�
- List<CrmBusinessProductDO> businessProducts = validateBusinessProducts(updateReqVO.getProducts());
+ // 1.2 鏍¢獙浜у搧椤圭殑鏈夋晥鎬э紙浼犲叆鏃т骇鍝佸垪琛ㄧ敤浜庡悎骞� null 瀛楁锛�
+ List<CrmBusinessProductDO> oldProducts = businessProductMapper.selectListByBusinessId(updateReqVO.getId());
+ List<CrmBusinessProductDO> businessProducts = validateBusinessProducts(updateReqVO.getProducts(), oldProducts);
// 1.3 鏍¢獙鍏宠仈瀛楁
validateRelationDataExists(updateReqVO);
@@ -147,7 +148,7 @@
updateBusinessProduct(updateObj.getId(), businessProducts);
// 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
- updateReqVO.setOwnerUserId(oldBusiness.getOwnerUserId()); // 閬垮厤鎿嶄綔鏃ュ織鍑虹幇鈥滃垹闄よ礋璐d汉鈥濈殑鎯呭喌
+ updateReqVO.setOwnerUserId(oldBusiness.getOwnerUserId()); // 閬垮厤鎿嶄綔鏃ュ織鍑虹幇"鍒犻櫎璐熻矗浜�"鐨勬儏鍐�
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldBusiness, CrmBusinessSaveReqVO.class));
LogRecordContext.putVariable("businessName", oldBusiness.getName());
}
@@ -216,6 +217,18 @@
}
private List<CrmBusinessProductDO> validateBusinessProducts(List<CrmBusinessSaveReqVO.BusinessProduct> list) {
+ return validateBusinessProducts(list, Collections.emptyList());
+ }
+
+ /**
+ * 鏍¢獙浜у搧椤圭殑鏈夋晥鎬э紙鏇存柊鍦烘櫙鍚堝苟鏃ф暟鎹級
+ *
+ * @param list 鍓嶇浼犲叆鐨勪骇鍝佸垪琛�
+ * @param oldProducts 宸叉湁浜у搧鍒楄〃锛堢敤浜庡悎骞� null 瀛楁锛�
+ * @return 澶勭悊鍚庣殑浜у搧 DO 鍒楄〃
+ */
+ private List<CrmBusinessProductDO> validateBusinessProducts(List<CrmBusinessSaveReqVO.BusinessProduct> list,
+ List<CrmBusinessProductDO> oldProducts) {
// 1. 鏍¢獙鐗╂枡瀛樺湪
Set<Long> itemIds = convertSet(list, CrmBusinessSaveReqVO.BusinessProduct::getItemId);
Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(itemIds);
@@ -224,15 +237,47 @@
throw exception(PRODUCT_NOT_EXISTS);
}
}
- // 2. 杞寲涓� CrmBusinessProductDO 鍒楄〃
- return convertList(list, o -> BeanUtils.toBean(o, CrmBusinessProductDO.class,
- item -> item.setTotalPrice(MoneyUtils.priceMultiply(item.getBusinessPrice(), item.getCount()))));
+ // 2. 鏋勫缓鏃т骇鍝� Map锛堟寜 id 绱㈠紩锛�
+ Map<Long, CrmBusinessProductDO> oldProductMap = convertMap(oldProducts, CrmBusinessProductDO::getId);
+ // 3. 杞寲涓� CrmBusinessProductDO 鍒楄〃锛堝悎骞舵棫鏁版嵁锛�
+ return convertList(list, o -> {
+ CrmBusinessProductDO product = BeanUtils.toBean(o, CrmBusinessProductDO.class);
+ // 鏇存柊鍦烘櫙锛氬鏋滀骇鍝佸凡鏈� id 涓旀湁鏃ф暟鎹紝鍒欏悎骞� null 瀛楁
+ if (o.getId() != null && oldProductMap.containsKey(o.getId())) {
+ CrmBusinessProductDO old = oldProductMap.get(o.getId());
+ if (product.getBusinessPrice() == null) {
+ product.setBusinessPrice(old.getBusinessPrice());
+ }
+ if (product.getItemPrice() == null) {
+ product.setItemPrice(old.getItemPrice());
+ }
+ if (product.getCount() == null) {
+ product.setCount(old.getCount());
+ }
+ if (product.getItemUnitId() == null) {
+ product.setItemUnitId(old.getItemUnitId());
+ }
+ }
+ // 浼樺厛浣跨敤鍓嶇浼犲叆鐨� totalPrice锛屽惁鍒欓�氳繃 businessPrice * count 璁$畻
+ if (o.getTotalPrice() != null) {
+ product.setTotalPrice(o.getTotalPrice());
+ } else {
+ product.setTotalPrice(MoneyUtils.priceMultiply(product.getBusinessPrice(), product.getCount()));
+ }
+ return product;
+ });
}
private void calculateTotalPrice(CrmBusinessDO business, List<CrmBusinessProductDO> businessProducts) {
- business.setTotalProductPrice(getSumValue(businessProducts, CrmBusinessProductDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO));
- BigDecimal discountPrice = MoneyUtils.priceMultiplyPercent(business.getTotalProductPrice(), business.getDiscountPercent());
- business.setTotalPrice(business.getTotalProductPrice().subtract(discountPrice));
+ // totalProductPrice锛氫紭鍏堜娇鐢ㄥ墠绔紶鍏ュ�硷紝鍚﹀垯浠庝骇鍝佹眹鎬�
+ if (business.getTotalProductPrice() == null) {
+ business.setTotalProductPrice(getSumValue(businessProducts, CrmBusinessProductDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO));
+ }
+ // totalPrice锛氫紭鍏堜娇鐢ㄥ墠绔紶鍏ュ�硷紝鍚﹀垯鎸夋姌鎵h绠�
+ if (business.getTotalPrice() == null) {
+ BigDecimal discountPrice = MoneyUtils.priceMultiplyPercent(business.getTotalProductPrice(), business.getDiscountPercent());
+ business.setTotalPrice(business.getTotalProductPrice().subtract(discountPrice));
+ }
}
@Override
--
Gitblit v1.9.3