From 4bc513be11e671caf20ec6013a51dee42c2ed96e Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期六, 07 十一月 2026 18:31:26 +0800
Subject: [PATCH] fix(crm): 禁止物料类合同开票

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java |   28 +++++++++++++++++-----------
 1 files changed, 17 insertions(+), 11 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 a0c3b54..7d122c8 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
@@ -33,7 +33,6 @@
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
 import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
-import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 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;
@@ -48,6 +47,7 @@
 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.mdm.enums.MdmItemTypeEnum;
 import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@@ -115,8 +115,6 @@
     @Resource
     private CrmCustomerService customerService;
     @Resource
-    private CrmCustomerApi customerApi;
-    @Resource
     private CrmBusinessService businessService;
     @Resource
     private CrmContactService contactService;
@@ -170,6 +168,9 @@
         crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(contract.getOwnerUserId())
                 .setBizType(CrmBizTypeEnum.CRM_CONTRACT.getType()).setBizId(contract.getId())
                 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
+        // 3.1 瀹㈡埛璐熻矗浜鸿嚜鍔ㄦ嫢鏈夎鍚堝悓鐨勮鍐欐潈闄�
+        crmPermissionService.createPermissionForCustomerOwner(CrmBizTypeEnum.CRM_CONTRACT.getType(),
+                contract.getId(), contract.getCustomerId(), contract.getOwnerUserId());
 
         // 4. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
         LogRecordContext.putVariable("contract", contract);
@@ -481,10 +482,10 @@
                 return PageResult.empty();
             }
         }
-        // 2. 鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑瀹㈡埛 ID 鍒楄〃
-        List<Long> permittedCustomerIds = customerApi.getPermittedCustomerIds();
-        // 3. 鏌ヨ鍒嗛〉
-        return contractMapper.selectPage(pageReqVO, userId, config, permittedCustomerIds);
+        // 2. 鏌ヨ鍒嗛〉
+        // 鍚堝悓鍙鎬у畬鍏ㄧ敱 appendPermissionCondition 鎺у埗锛堝悎鍚屽洟闃� 鈭� 瀹㈡埛鍥㈤槦锛夛紝
+        // 涓嶅啀棰濆鎸夈�屾湁鏉冮檺鐨勫鎴枫�嶈繃婊わ紝鍚﹀垯涓嶅湪瀹㈡埛鍥㈤槦銆佷絾灞炰簬鍚堝悓璐熻矗浜�/鍚堝悓鍥㈤槦鐨勭敤鎴蜂細琚敊璇繃婊ゆ帀
+        return contractMapper.selectPage(pageReqVO, userId, config);
     }
 
     @Override
@@ -584,16 +585,18 @@
         createReqDTO.setRemark("鐢卞悎鍚屻��" + contract.getNo() + "銆戣嚜鍔ㄧ敓鎴�");
 
         // 5. 鏋勫缓璁㈠崟椤�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
+                convertSet(contractProducts, CrmContractProductDO::getItemId));
         List<ErpSaleOrderCreateReqDTO.Item> items = contractProducts.stream()
                 .map(cp -> {
                     ErpSaleOrderCreateReqDTO.Item item = new ErpSaleOrderCreateReqDTO.Item();
                     item.setProductId(cp.getItemId());
                     item.setProductPrice(cp.getContractPrice());
                     item.setCount(cp.getCount());
-                    // 鍚堝悓浜у搧榛樿闇�瑕佺敓浜э細璁㈠崟瀹℃壒閫氳繃鍚庢墠鑳借嚜鍔ㄥ垱寤� MPS锛�
-                    // 鍚﹀垯銆屽悎鍚� 鈫� 璁㈠崟 鈫� 鐢熶骇銆嶉摼璺湪鍚堝悓鏉ユ簮鐨勮鍗曚笂浼氭柇鎺夈��
-                    // 鑻ヤ釜鍒骇鍝佷负澶栬喘/杞敭锛屽彲鍦ㄩ攢鍞鍗曟槑缁嗕腑鎶娿�岄渶瑕佺敓浜с�嶆敼涓哄惁銆�
-                    item.setNeedProduction(1);
+                    // 鍙湁浜у搧鎵嶈繘鍏ョ敓浜ц鍒掞紱娓╂帶绛夊璐墿鏂欏彲闅忓悎鍚岃繘鍏ラ攢鍞鍗曪紝
+                    // 浣嗕笉鑳藉垱寤� MPS锛屽惁鍒欎細瀵艰嚧鏁寸瑪閿�鍞鍗曞鎵瑰洖婊氥��
+                    MdmItemRespDTO mdmItem = itemMap.get(cp.getItemId());
+                    item.setNeedProduction(mdmItem != null && MdmItemTypeEnum.isProduct(mdmItem.getItemType()) ? 1 : 0);
                     return item;
                 })
                 .toList();
@@ -728,6 +731,9 @@
             if (!products.isEmpty() || contract.getTotalPrice() == null) calculateTotalPrice(contract, validateContractProducts(products));
             contractMapper.insert(contract);
             crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CONTRACT.getType()).setBizId(contract.getId()).setUserId(ownerId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
+            // 瀹㈡埛璐熻矗浜鸿嚜鍔ㄦ嫢鏈夎鍚堝悓鐨勮鍐欐潈闄�
+            crmPermissionService.createPermissionForCustomerOwner(CrmBizTypeEnum.CRM_CONTRACT.getType(),
+                    contract.getId(), customer.getId(), ownerId);
         } else {
             contract.setId(existing.getId());
             List<CrmContractProductDO> amountDetails = products.isEmpty()

--
Gitblit v1.9.3