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