From fdb632b25e13186c2af67e53e019acecaf363ac0 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期五, 29 五月 2026 16:32:34 +0800
Subject: [PATCH] feat: 采购合同号重复问题调整
---
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 113 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 84 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index b23148a..d3d7e32 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -669,6 +669,42 @@
if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("閲囪喘鍙拌处鏁版嵁涓虹┖锛�");
List<PurchaseLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("閲囪喘浜у搧鏁版嵁");
if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("閲囪喘浜у搧鏁版嵁涓虹┖锛�");
+
+ // 涓洪噰璐悎鍚屽彿涓虹┖鐨勬暟鎹嚜鍔ㄧ敓鎴愰噰璐悎鍚屽彿
+ for (PurchaseLedgerImportDto dto : salesLedgerImportDtoList) {
+ if (StringUtils.isBlank(dto.getPurchaseContractNumber())) {
+ dto.setPurchaseContractNumber(getPurchaseNo());
+ }
+ }
+
+ // 妫�鏌xcel涓槸鍚︽湁閲嶅鐨勯噰璐崟鍙凤紙鎺掗櫎绌哄�硷級
+ Map<String, Long> purchaseNoCountMap = salesLedgerImportDtoList.stream()
+ .filter(dto -> StringUtils.isNotBlank(dto.getPurchaseContractNumber()))
+ .collect(Collectors.groupingBy(PurchaseLedgerImportDto::getPurchaseContractNumber, Collectors.counting()));
+ List<String> duplicateInExcel = purchaseNoCountMap.entrySet().stream()
+ .filter(entry -> entry.getValue() > 1)
+ .map(Map.Entry::getKey)
+ .collect(Collectors.toList());
+ if (!duplicateInExcel.isEmpty()) {
+ return AjaxResult.error("Excel涓瓨鍦ㄩ噸澶嶇殑閲囪喘鍗曞彿锛�" + String.join("銆�", duplicateInExcel));
+ }
+
+ // 妫�鏌ユ暟鎹簱涓凡瀛樺湪鐨勯噰璐崟鍙�
+ List<String> purchaseNos = salesLedgerImportDtoList.stream()
+ .filter(dto -> StringUtils.isNotBlank(dto.getPurchaseContractNumber()))
+ .map(PurchaseLedgerImportDto::getPurchaseContractNumber)
+ .collect(Collectors.toList());
+ if (!purchaseNos.isEmpty()) {
+ List<PurchaseLedger> existingLedgers = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .in(PurchaseLedger::getPurchaseContractNumber, purchaseNos));
+ List<String> existingPurchaseNos = existingLedgers.stream()
+ .map(PurchaseLedger::getPurchaseContractNumber)
+ .collect(Collectors.toList());
+ if (!existingPurchaseNos.isEmpty()) {
+ return AjaxResult.error("浠ヤ笅閲囪喘鍗曞彿宸插瓨鍦細" + String.join("銆�", existingPurchaseNos));
+ }
+ }
+
// 渚涘簲鍟嗘暟鎹�
List<SupplierManage> customers = supplierManageMapper.selectList(new LambdaQueryWrapper<SupplierManage>().in(SupplierManage::getSupplierName,
salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getSupplierName).collect(Collectors.toList())));
@@ -676,13 +712,24 @@
// 褰曞叆浜烘暟鎹�
List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName,
salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getRecorderName).collect(Collectors.toList())));
- for (PurchaseLedgerImportDto salesLedgerImportDto : salesLedgerImportDtoList) {
- PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
- .eq(PurchaseLedger::getPurchaseContractNumber, salesLedgerImportDto.getPurchaseContractNumber())
- .last("limit 1"));
- if(purchaseLedger != null){
+ int successCount = 0;
+
+ // 寤虹珛閲囪喘鍗曞彿涓庝骇鍝佹暟鎹殑鏄犲皠鍏崇郴锛堝寘鎷嚜鍔ㄧ敓鎴愮殑閲囪喘鍗曞彿锛�
+ Map<String, List<PurchaseLedgerProductImportDto>> productMap = new HashMap<>();
+ for (PurchaseLedgerImportDto ledgerDto : salesLedgerImportDtoList) {
+ String purchaseContractNumber = ledgerDto.getPurchaseContractNumber();
+ // 濡傛灉閲囪喘鍗曞彿涓虹┖锛屼骇鍝佹暟鎹�氳繃鍏朵粬鏂瑰紡鍖归厤锛堝琛屽彿锛�
+ if (StringUtils.isBlank(purchaseContractNumber)) {
continue;
}
+ List<PurchaseLedgerProductImportDto> products = salesLedgerProductImportDtoList.stream()
+ .filter(productDto -> productDto.getPurchaseContractNumber() != null &&
+ productDto.getPurchaseContractNumber().equals(purchaseContractNumber))
+ .collect(Collectors.toList());
+ productMap.put(purchaseContractNumber, products);
+ }
+
+ for (PurchaseLedgerImportDto salesLedgerImportDto : salesLedgerImportDtoList) {
PurchaseLedger salesLedger = new PurchaseLedger();
BeanUtils.copyProperties(salesLedgerImportDto, salesLedger);
// 閫氳繃渚涘簲鍟嗗悕绉版煡璇D
@@ -700,35 +747,42 @@
throw new RuntimeException("褰曞叆浜�:" + salesLedger.getRecorderName() + ",鏃犲搴旂敤鎴凤紒");
salesLedger.setRecorderId(aLong);
// 閲囪喘浜у搧鏁版嵁缁戝畾锛岄�氳繃閲囪喘鍗曞彿鑾峰彇瀵瑰簲閲囪喘浜у搧鏁版嵁
- List<PurchaseLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream()
- .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getPurchaseContractNumber().equals(salesLedger.getPurchaseContractNumber()))
- .collect(Collectors.toList());
- if (CollectionUtils.isEmpty(salesLedgerProductImportDtos))
- throw new RuntimeException("閲囪喘鍗曞彿:" + salesLedgerImportDto.getPurchaseContractNumber() + ",鏃犲搴斾骇鍝佹暟鎹紒");
+ String purchaseContractNumber = salesLedgerImportDto.getPurchaseContractNumber();
+ List<PurchaseLedgerProductImportDto> salesLedgerProductImportDtos = productMap.get(purchaseContractNumber);
+ if (CollectionUtils.isEmpty(salesLedgerProductImportDtos)) {
+ // 濡傛灉浜у搧鏁版嵁涓殑閲囪喘鍗曞彿涓虹┖锛屾寜椤哄簭鍖归厤锛堥�傜敤浜庡鍏ユ椂浜у搧鏁版嵁閲囪喘鍗曞彿涔熶负绌虹殑鎯呭喌锛�
+ salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream()
+ .filter(dto -> StringUtils.isBlank(dto.getPurchaseContractNumber()))
+ .collect(Collectors.toList());
+ }
salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
.map(PurchaseLedgerProductImportDto::getTaxInclusiveTotalPrice)
.reduce(BigDecimal.ZERO,BigDecimal::add));
// 閫氳繃閿�鍞崟鍙风粦瀹氶攢鍞�
- SalesLedger salesLedger1 = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
- .eq(SalesLedger::getSalesContractNo, salesLedger.getSalesContractNo())
- .last("LIMIT 1"));
- if(salesLedger1 != null){
- salesLedger.setSalesLedgerId(salesLedger1.getId());
- }
- // 閲囪喘瀹℃牳
- // 閫氳繃鏄电О鑾峰彇鐢ㄦ埛ID
- String[] split = salesLedger.getApproveUserIds().split("锛�");
- List<Long> ids = new ArrayList<>();
- for (int i = 0; i < split.length; i++) {
- SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, split[i])
+ if (StringUtils.isNotBlank(salesLedger.getSalesContractNo())) {
+ SalesLedger salesLedger1 = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
+ .eq(SalesLedger::getSalesContractNo, salesLedger.getSalesContractNo())
.last("LIMIT 1"));
- if (sysUser != null) {
- ids.add(sysUser.getUserId());
+ if(salesLedger1 != null){
+ salesLedger.setSalesLedgerId(salesLedger1.getId());
}
}
- // 灏嗛泦鍚堣浆涓哄瓧绗︿覆锛岄殧寮�
- String collect = ids.stream().map(Object::toString).collect(Collectors.joining(","));
- salesLedger.setApproveUserIds(collect);
+ // 閲囪喘瀹℃牳
+ if (StringUtils.isNotBlank(salesLedger.getApproveUserIds())) {
+ // 閫氳繃鏄电О鑾峰彇鐢ㄦ埛ID
+ String[] split = salesLedger.getApproveUserIds().split("锛�");
+ List<Long> ids = new ArrayList<>();
+ for (int i = 0; i < split.length; i++) {
+ SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, split[i])
+ .last("LIMIT 1"));
+ if (sysUser != null) {
+ ids.add(sysUser.getUserId());
+ }
+ }
+ // 灏嗛泦鍚堣浆涓哄瓧绗︿覆锛岄殧寮�
+ String collect = ids.stream().map(Object::toString).collect(Collectors.joining(","));
+ salesLedger.setApproveUserIds(collect);
+ }
purchaseLedgerMapper.insert(salesLedger);
for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
@@ -760,13 +814,14 @@
}
// 閲囪喘瀹℃牳
addApproveByPurchase(loginUser,salesLedger);
+ successCount++;
}
- return AjaxResult.success("瀵煎叆鎴愬姛");
+ return AjaxResult.success("瀵煎叆鎴愬姛锛屽叡瀵煎叆" + successCount + "鏉℃暟鎹�");
} catch (Exception e) {
e.printStackTrace();
}
- return AjaxResult.success("瀵煎叆澶辫触");
+ return AjaxResult.error("瀵煎叆澶辫触");
}
@Override
--
Gitblit v1.9.3