From 6e312c64c056acf479a6dd8393dd42a80b69b7d4 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 02 七月 2026 10:25:07 +0800
Subject: [PATCH] 1.新增销售报价 2.crm整合mdm

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
index b997a26..7e423f1 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -34,6 +34,8 @@
 import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
 import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderCreateReqDTO;
 import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderRespDTO;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import com.mzt.logapi.context.LogRecordContext;
 import com.mzt.logapi.service.impl.DiffParseFunction;
@@ -49,6 +51,7 @@
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
@@ -100,6 +103,8 @@
     private BpmProcessInstanceApi bpmProcessInstanceApi;
     @Resource
     private ErpSaleOrderApi saleOrderApi;
+    @Resource
+    private MdmItemApi mdmItemApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -213,11 +218,19 @@
     }
 
     private List<CrmContractProductDO> validateContractProducts(List<CrmContractSaveReqVO.Product> list) {
-        // 1. 鏍¢獙浜у搧瀛樺湪
-        productService.validProductList(convertSet(list, CrmContractSaveReqVO.Product::getProductId));
+        // 1. 鏍¢獙鐗╂枡瀛樺湪涓斿惎鐢�
+        List<Long> itemIds = convertSet(list, CrmContractSaveReqVO.Product::getItemId);
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(itemIds);
         // 2. 杞寲涓� CrmContractProductDO 鍒楄〃
-        return convertList(list, o -> BeanUtils.toBean(o, CrmContractProductDO.class,
-                item -> item.setTotalPrice(MoneyUtils.priceMultiply(item.getContractPrice(), item.getCount()))));
+        return convertList(list, o -> BeanUtils.toBean(o, CrmContractProductDO.class, item -> {
+            MdmItemRespDTO mdmItem = itemMap.get(item.getItemId());
+            if (mdmItem == null) {
+                throw exception(PRODUCT_NOT_EXISTS);
+            }
+            item.setItemUnitId(mdmItem.getUnitMeasureId());
+            item.setItemPrice(mdmItem.getSalesPrice());
+            item.setTotalPrice(MoneyUtils.priceMultiply(item.getContractPrice(), item.getCount()));
+        }));
     }
 
     private void calculateTotalPrice(CrmContractDO contract, List<CrmContractProductDO> contractProducts) {
@@ -455,7 +468,7 @@
         List<ErpSaleOrderCreateReqDTO.Item> items = contractProducts.stream()
                 .map(cp -> {
                     ErpSaleOrderCreateReqDTO.Item item = new ErpSaleOrderCreateReqDTO.Item();
-                    item.setProductId(cp.getProductId());
+                    item.setItemId(cp.getItemId());
                     item.setProductPrice(cp.getContractPrice());
                     item.setCount(cp.getCount());
                     return item;

--
Gitblit v1.9.3