From fce7a8df22ab7b5b0be0fb5151c40abbfbab6be8 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 02 七月 2026 10:49:14 +0800
Subject: [PATCH] 1.修复编译问题

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java |    8 ++++++--
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java         |   18 +++++++++++++-----
 yudao-module-crm/pom.xml                                                                                              |    6 ++++++
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java       |   18 ++++++++++--------
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java               |    5 +++--
 5 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/yudao-module-crm/pom.xml b/yudao-module-crm/pom.xml
index 87a8ed6..982d2b3 100644
--- a/yudao-module-crm/pom.xml
+++ b/yudao-module-crm/pom.xml
@@ -93,5 +93,11 @@
             <groupId>cn.iocoder.boot</groupId>
             <artifactId>yudao-spring-boot-starter-test</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-module-mdm</artifactId>
+            <version>2026.06-jdk25-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
index a2a70b4..01b1a2d 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
@@ -19,7 +19,8 @@
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
 import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
@@ -69,9 +70,10 @@
     @Resource
     private CrmBusinessService businessService;
     @Resource
-    private CrmProductService productService;
-    @Resource
     private CrmReceivableService receivableService;
+
+    @Resource
+    private MdmItemApi mdmItemApi;
 
     @Resource
     private AdminUserApi adminUserApi;
@@ -118,12 +120,12 @@
         CrmContractRespVO contractVO = buildContractDetailList(singletonList(contract)).get(0);
         // 鎷兼帴浜у搧椤�
         List<CrmContractProductDO> businessProducts = contractService.getContractProductListByContractId(contractVO.getId());
-        Map<Long, CrmProductDO> productMap = productService.getProductMap(
-                convertSet(businessProducts, CrmContractProductDO::getProductId));
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
+                convertSet(businessProducts, CrmContractProductDO::getItemId));
         contractVO.setProducts(BeanUtils.toBean(businessProducts, CrmContractRespVO.Product.class, businessProductVO ->
-                MapUtils.findAndThen(productMap, businessProductVO.getProductId(),
-                        product -> businessProductVO.setProductName(product.getName())
-                                .setProductNo(product.getNo()).setProductUnit(product.getUnit()))));
+                MapUtils.findAndThen(itemMap, businessProductVO.getItemId(),
+                        item -> businessProductVO.setItemCode(item.getCode())
+                                .setItemName(item.getName()).setItemBarCode(item.getBarCode()))));
         return contractVO;
     }
 
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
index e1f2713..1414b4b 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
@@ -38,8 +38,10 @@
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
 @Tag(name = "绠$悊鍚庡彴 - CRM 閿�鍞姤浠峰崟")
@@ -164,8 +166,10 @@
         // 1. 鏋勫缓鐗╂枡鏄庣粏
         if (CollUtil.isNotEmpty(productList)) {
             Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(convertSet(productList, CrmSaleQuotationProductDO::getItemId));
-            Map<Long, MdmUnitMeasureRespDTO> unitMap = mdmUnitMeasureApi.getUnitMeasureMap(
-                    convertSet(productList, CrmSaleQuotationProductDO::getItemUnitId));
+            Map<Long, MdmUnitMeasureRespDTO> unitMap = convertMap(
+                    mdmUnitMeasureApi.getUnitMeasureList(
+                            convertSet(productList, CrmSaleQuotationProductDO::getItemUnitId)).getCheckedData(),
+                    MdmUnitMeasureRespDTO::getId);
             respVO.setItems(BeanUtils.toBean(productList, CrmSaleQuotationRespVO.Item.class, item -> {
                 MdmItemRespDTO mdmItem = itemMap.get(item.getItemId());
                 if (mdmItem != null) {
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 7e423f1..1ce3f41 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
@@ -52,6 +52,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
@@ -219,7 +220,7 @@
 
     private List<CrmContractProductDO> validateContractProducts(List<CrmContractSaveReqVO.Product> list) {
         // 1. 鏍¢獙鐗╂枡瀛樺湪涓斿惎鐢�
-        List<Long> itemIds = convertSet(list, CrmContractSaveReqVO.Product::getItemId);
+        Set<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 -> {
@@ -468,7 +469,7 @@
         List<ErpSaleOrderCreateReqDTO.Item> items = contractProducts.stream()
                 .map(cp -> {
                     ErpSaleOrderCreateReqDTO.Item item = new ErpSaleOrderCreateReqDTO.Item();
-                    item.setItemId(cp.getItemId());
+                    item.setProductId(cp.getItemId());
                     item.setProductPrice(cp.getContractPrice());
                     item.setCount(cp.getCount());
                     return item;
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
index da476ff..6a3f4d8 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
@@ -20,12 +20,15 @@
 import cn.iocoder.yudao.module.crm.dal.mysql.quotation.CrmSaleQuotationMapper;
 import cn.iocoder.yudao.module.crm.dal.mysql.quotation.CrmSaleQuotationProductMapper;
 import cn.iocoder.yudao.module.crm.dal.redis.no.CrmNoRedisDAO;
+import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
+import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.enums.quotation.CrmSaleQuotationStatusEnum;
 import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
+import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
 import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
 import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
 import jakarta.annotation.Resource;
@@ -109,7 +112,11 @@
         quotationProducts.forEach(p -> p.setQuotationId(saleQuotation.getId()));
         saleQuotationProductMapper.insertBatch(quotationProducts);
         // 2.3 鍒涘缓鏁版嵁鏉冮檺
-        permissionService.createPermission(saleQuotation.getId(), userId);
+        permissionService.createPermission(new CrmPermissionCreateReqBO()
+                .setUserId(userId)
+                .setBizType(CrmBizTypeEnum.CRM_SALE_QUOTATION.getType())
+                .setBizId(saleQuotation.getId())
+                .setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
         return saleQuotation.getId();
     }
 
@@ -156,7 +163,7 @@
             // 2.2 鍒犻櫎鎶ヤ环鏄庣粏
             saleQuotationProductMapper.deleteByQuotationId(saleQuotation.getId());
             // 2.3 鍒犻櫎鏁版嵁鏉冮檺
-            permissionService.deletePermission(saleQuotation.getId());
+            permissionService.deletePermission(CrmBizTypeEnum.CRM_SALE_QUOTATION.getType(), saleQuotation.getId());
         });
     }
 
@@ -170,7 +177,7 @@
 
     private List<CrmSaleQuotationProductDO> validateQuotationItems(List<CrmSaleQuotationSaveReqVO.Item> list) {
         // 1. 鏍¢獙鐗╂枡瀛樺湪涓斿惎鐢�
-        List<Long> itemIds = convertSet(list, CrmSaleQuotationSaveReqVO.Item::getItemId);
+        Set<Long> itemIds = convertSet(list, CrmSaleQuotationSaveReqVO.Item::getItemId);
         Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(itemIds);
         // 2. 杞崲涓� CrmSaleQuotationProductDO 鍒楄〃
         return convertList(list, o -> BeanUtils.toBean(o, CrmSaleQuotationProductDO.class, item -> {
@@ -223,12 +230,13 @@
 
     private void calculateTotalPrice(CrmSaleQuotationDO saleQuotation, List<CrmSaleQuotationProductDO> items) {
         saleQuotation.setTotalProductPrice(getSumValue(items, CrmSaleQuotationProductDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO));
-        saleQuotation.setTotalTaxPrice(getSumValue(items, CrmSaleQuotationProductDO::getTaxPrice, BigDecimal::add, BigDecimal.ZERO));
+        BigDecimal totalTaxPrice = getSumValue(items, CrmSaleQuotationProductDO::getTaxPrice, BigDecimal::add, BigDecimal.ZERO);
+        saleQuotation.setTaxPrice(totalTaxPrice);
         // 璁$畻浼樻儬浠锋牸
         if (saleQuotation.getDiscountPercent() == null) {
             saleQuotation.setDiscountPercent(BigDecimal.ZERO);
         }
-        BigDecimal basePrice = saleQuotation.getTotalProductPrice().add(saleQuotation.getTotalTaxPrice());
+        BigDecimal basePrice = saleQuotation.getTotalProductPrice().add(totalTaxPrice);
         saleQuotation.setDiscountPrice(MoneyUtils.priceMultiplyPercent(basePrice, saleQuotation.getDiscountPercent()));
         saleQuotation.setTotalPrice(basePrice.subtract(saleQuotation.getDiscountPrice()));
     }

--
Gitblit v1.9.3