From a647bc8a43c0212f482bee0630ebd14dca120a8a Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 14:13:28 +0800
Subject: [PATCH] feat: CRM 发票/合同导入、MES 质检批量导入与检测台账、回款与报价校验、权限码细化
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java | 44 +++++++++++++++++++++++++++++++-------------
1 files changed, 31 insertions(+), 13 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 448dae2..4852463 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
@@ -327,46 +327,58 @@
CrmContractImportExcelVO head = rows.get(0);
// 1. 涓昏〃蹇呭~
if (StrUtil.isBlank(head.getName())) {
- throw new IllegalArgumentException("鍚堝悓鍚嶇О涓嶈兘涓虹┖");
+ throw new IllegalArgumentException("鍚堝悓鍚嶇О涓嶈兘涓虹┖锛氳濉啓妯℃澘涓琛岀殑銆屽悎鍚屽悕绉般�嶅垪锛�"
+ + "鑻ュ悓涓�寮犲悎鍚岀殑澶氳浣跨敤浜嗗悎骞跺崟鍏冩牸锛岄渶濉啓鍦ㄥ悎骞跺尯鍩熺殑棣栬");
}
if (StrUtil.isBlank(head.getCustomerName())) {
- throw new IllegalArgumentException("瀹㈡埛鍚嶇О涓嶈兘涓虹┖");
+ throw new IllegalArgumentException("瀹㈡埛鍚嶇О涓嶈兘涓虹┖锛氳濉啓妯℃澘涓琛岀殑銆屽鎴峰悕绉般�嶅垪锛�"
+ + "鑻ュ悓涓�寮犲悎鍚岀殑澶氳浣跨敤浜嗗悎骞跺崟鍏冩牸锛岄渶濉啓鍦ㄥ悎骞跺尯鍩熺殑棣栬");
}
Long customerId = customerIdMap.get(head.getCustomerName().trim());
if (customerId == null) {
- throw new IllegalArgumentException("瀹㈡埛涓嶅瓨鍦細" + head.getCustomerName());
+ throw new IllegalArgumentException("瀹㈡埛涓嶅瓨鍦細" + head.getCustomerName()
+ + "銆傝鍏堝湪銆孋RM 瀹㈡埛绠$悊銆嶄腑鍒涘缓璇ュ鎴凤紙鍚嶇О闇�涓庢ā鏉垮畬鍏ㄤ竴鑷达級锛屾垨淇敼妯℃澘涓殑瀹㈡埛鍚嶇О鍚庨噸鏂板鍏�");
}
customerService.validateCustomer(customerId);
// 2. 鏄庣粏
- List<CrmContractSaveReqVO.Product> products = new ArrayList<>();
+ List<CrmContractProductDO> productDOs = new ArrayList<>();
for (CrmContractImportExcelVO row : rows) {
if (StrUtil.isBlank(row.getProductCode())) {
- throw new IllegalArgumentException("浜у搧缂栫爜涓嶈兘涓虹┖");
+ throw new IllegalArgumentException("浜у搧缂栫爜涓嶈兘涓虹┖锛氳濉啓妯℃澘涓琛岀殑銆屼骇鍝佺紪鐮併�嶅垪");
}
CommonResult<MdmItemRespDTO> itemResult = mdmItemApi.getItemByCode(row.getProductCode().trim());
MdmItemRespDTO item = itemResult == null ? null : itemResult.getData();
if (item == null) {
- throw new IllegalArgumentException("浜у搧涓嶅瓨鍦細" + row.getProductCode());
+ throw new IllegalArgumentException("浜у搧涓嶅瓨鍦細" + row.getProductCode()
+ + "銆傝鍏堝湪銆岀墿鏂欑鐞嗐�嶄腑缁存姢璇ョ墿鏂欙紙缂栫爜闇�涓庢ā鏉垮畬鍏ㄤ竴鑷达級锛屾垨淇敼妯℃澘涓殑浜у搧缂栫爜鍚庨噸鏂板鍏�");
}
- if (row.getCount() == null || row.getCount() <= 0) {
- throw new IllegalArgumentException("浜у搧[" + row.getProductCode() + "]鐨勬暟閲忓繀椤讳负姝f暣鏁�");
+ if (row.getCount() == null) {
+ throw new IllegalArgumentException("浜у搧[" + row.getProductCode()
+ + "]鐨勬暟閲忎笉鑳戒负绌猴細璇峰~鍐欐ā鏉夸腑璇ヨ鐨勩�屾暟閲忋�嶅垪");
+ }
+ if (row.getCount().compareTo(BigDecimal.ZERO) <= 0) {
+ throw new IllegalArgumentException("浜у搧[" + row.getProductCode() + "]鐨勬暟閲忓繀椤诲ぇ浜� 0锛屽綋鍓嶄负 "
+ + row.getCount().stripTrailingZeros().toPlainString() + "銆傝淇敼妯℃澘鍚庨噸鏂板鍏�");
}
BigDecimal contractPrice = row.getContractPrice() != null ? row.getContractPrice()
: (item.getSalesPrice() != null ? item.getSalesPrice() : BigDecimal.ZERO);
- CrmContractSaveReqVO.Product product = new CrmContractSaveReqVO.Product();
+ CrmContractProductDO product = new CrmContractProductDO();
product.setItemId(item.getId());
+ product.setItemUnitId(item.getUnitMeasureId());
product.setItemPrice(item.getSalesPrice() != null ? item.getSalesPrice() : contractPrice);
product.setContractPrice(contractPrice);
product.setCount(row.getCount());
- products.add(product);
+ product.setTotalPrice(MoneyUtils.priceMultiply(contractPrice, row.getCount()));
+ productDOs.add(product);
}
// 3. 鍚堝悓缂栧彿
String no = StrUtil.isNotBlank(head.getNo()) ? head.getNo().trim()
: noRedisDAO.generate(CrmNoRedisDAO.CONTRACT_NO_PREFIX);
if (contractMapper.selectByNo(no) != null) {
- throw new IllegalArgumentException("鍚堝悓缂栧彿宸插瓨鍦細" + no);
+ throw new IllegalArgumentException("鍚堝悓缂栧彿宸插瓨鍦細" + no
+ + "銆傝淇敼妯℃澘涓殑鍚堝悓缂栧彿锛屾垨鍏堝湪绯荤粺涓垹闄よ缂栧彿鐨勫悎鍚屽悗閲嶆柊瀵煎叆");
}
// 4. 缁勮涓昏〃锛堣礋璐d汉=鐧诲綍鐢ㄦ埛锛涚姸鎬�=鏈彁浜わ級
@@ -384,7 +396,6 @@
contract.setAuditStatus(CrmAuditStatusEnum.DRAFT.getStatus());
// 5. 鏄庣粏钀藉簱 + 鑷姩绠椾环
- List<CrmContractProductDO> productDOs = validateContractProducts(products);
calculateTotalPrice(contract, productDOs);
contractMapper.insert(contract);
productDOs.forEach(product -> product.setContractId(contract.getId()));
@@ -472,7 +483,9 @@
if (quotation != null) {
crmSaleQuotationService.clearContractReference(quotation.getId());
}
- // 2.2 鍒犻櫎鏁版嵁鏉冮檺
+ // 2.3 鍒犻櫎鍚堝悓浜у搧鏄庣粏
+ contractProductMapper.delete(CrmContractProductDO::getContractId, id);
+ // 2.4 鍒犻櫎鏁版嵁鏉冮檺
crmPermissionService.deletePermission(CrmBizTypeEnum.CRM_CONTRACT.getType(), id);
// 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
@@ -644,6 +657,11 @@
}
@Override
+ public CrmContractDO getContractByNo(String no) {
+ return contractMapper.selectByNo(no);
+ }
+
+ @Override
public CrmContractDO validateContract(Long id) {
return validateContractExists(id);
}
--
Gitblit v1.9.3