From 74a29854bb8ff92d2ff2fcb55fa5028609ec6a33 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 14 七月 2026 15:26:47 +0800
Subject: [PATCH] 采购删除导致审批报错+发货台账导入关联销售台账+生成出库记录
---
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 92 insertions(+), 18 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 d7ecd95..0155e1b 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -17,6 +17,7 @@
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -27,6 +28,7 @@
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
@@ -52,6 +54,8 @@
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
+import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.service.StockInRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.BeanUtils;
@@ -150,6 +154,10 @@
private PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper;
@Autowired
private SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper;
+ @Autowired
+ private StockUtils stockUtils;
+ @Autowired
+ private StockInRecordService stockInRecordService;
@Value("${file.upload-dir}")
private String uploadDir;
@@ -224,29 +232,37 @@
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
purchaseLedger.setRecorderName(sysUser.getNickName());
purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
- purchaseLedger.setApprovalStatus(1);
+ purchaseLedger.setApprovalStatus(3);
+
+ List<SalesLedgerProduct> productList = Optional.ofNullable(purchaseLedgerDto.getProductData()).orElse(Collections.emptyList());
// 3. 鏂板鎴栨洿鏂颁富琛�
- if (purchaseLedger.getId() == null) {
+ boolean isUpdate = purchaseLedger.getId() != null;
+ if (!isUpdate) {
purchaseLedgerMapper.insert(purchaseLedger);
} else {
- // 鍒犻櫎閲囪喘瀹℃牳锛岄噸鏂版彁浜�
- ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
- .eq(ApproveProcess::getApproveType, 5)
- .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber())
- .eq(ApproveProcess::getApproveDelete, 0)
- .last("limit 1"));
- if (one != null) {
- approveProcessService.delByIds(Collections.singletonList(one.getId()));
+ PurchaseLedger oldPurchase = purchaseLedgerMapper.selectById(purchaseLedger.getId());
+ if (oldPurchase == null) {
+ throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
}
+ if (CollectionUtils.isEmpty(productList)) {
+ throw new BaseException("浜у搧淇℃伅涓嶅瓨鍦�");
+ }
+ // 缂栬緫鍓嶅厛鍥炴粴鏃х殑搴撳瓨涓庤川妫�鍓綔鐢�
+ clearPurchaseSideEffectsBeforeEdit(oldPurchase.getId(), oldPurchase.getPurchaseContractNumber());
purchaseLedgerMapper.updateById(purchaseLedger);
}
- // 6.閲囪喘瀹℃牳鏂板
-// addApproveByPurchase(loginUser, purchaseLedger);
-
// 4. 澶勭悊瀛愯〃鏁版嵁
- List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
- if (productList != null && !productList.isEmpty()) {
+ if (!productList.isEmpty()) {
handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
+ }
+ for (SalesLedgerProduct salesLedgerProduct : productList) {
+ // 璐ㄦ
+ if (Boolean.TRUE.equals(salesLedgerProduct.getIsChecked())) {
+ addQualityInspect(purchaseLedger, salesLedgerProduct);
+ } else {
+ //鐩存帴鍏ュ簱
+ stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId());
+ }
}
//鏂板鍘熸潗鏂欐楠� 瀹℃壒涔嬪悗鎵嶇敓鎴愭楠�
// if (productList != null) {
@@ -291,6 +307,61 @@
qualityInspectParamMapper.insert(param);
});
}
+ }
+
+ private void clearPurchaseSideEffectsBeforeEdit(Long purchaseLedgerId, String purchaseContractNumber) {
+ clearPurchaseApproveProcess(purchaseContractNumber);
+ clearPurchaseQualityInspect(purchaseLedgerId);
+ clearPurchaseStockInRecord(purchaseLedgerId);
+ }
+
+ private void clearPurchaseApproveProcess(String purchaseContractNumber) {
+ ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
+ .eq(ApproveProcess::getApproveType, 5)
+ .eq(ApproveProcess::getApproveReason, purchaseContractNumber)
+ .eq(ApproveProcess::getApproveDelete, 0)
+ .last("limit 1"));
+ if (one != null) {
+ approveProcessService.delByIds(Collections.singletonList(one.getId()));
+ }
+ }
+
+ private void clearPurchaseQualityInspect(Long purchaseLedgerId) {
+ LambdaQueryWrapper<QualityInspect> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(QualityInspect::getPurchaseLedgerId, purchaseLedgerId)
+ .eq(QualityInspect::getInspectType, 0);
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(queryWrapper);
+ if (CollectionUtils.isEmpty(qualityInspects)) {
+ return;
+ }
+
+ boolean hasSubmittedInspect = qualityInspects.stream()
+ .anyMatch(item -> ObjectUtils.isNotEmpty(item.getInspectState()) && item.getInspectState().equals(1));
+ if (hasSubmittedInspect) {
+ throw new BaseException("瀛樺湪宸叉彁浜ょ殑璐ㄦ鍗曪紝涓嶅厑璁哥紪杈戦噰璐槑缁�");
+ }
+
+ List<Long> inspectIds = qualityInspects.stream()
+ .map(QualityInspect::getId)
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(inspectIds)) {
+ qualityInspectParamMapper.delete(new LambdaQueryWrapper<QualityInspectParam>()
+ .in(QualityInspectParam::getInspectId, inspectIds));
+ }
+ qualityInspectMapper.delete(queryWrapper);
+ }
+
+ private void clearPurchaseStockInRecord(Long purchaseLedgerId) {
+ List<StockInRecord> stockInRecords = stockInRecordService.list(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordId, purchaseLedgerId)
+ .eq(StockInRecord::getRecordType, StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode())
+ .eq(StockInRecord::getType, "0"));
+ if (CollectionUtils.isEmpty(stockInRecords)) {
+ return;
+ }
+ stockInRecordService.batchDelete(stockInRecords.stream()
+ .map(StockInRecord::getId)
+ .collect(Collectors.toList()));
}
private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
@@ -472,6 +543,7 @@
if (purchaseLedger.getApprovalStatus().equals(3)) {
throw new BaseException(purchaseLedger.getPurchaseContractNumber()+"宸茬粡瀹℃壒閫氳繃锛屼笉鍏佽鍒犻櫎");
}
+ clearPurchaseStockInRecord(id);
}
// 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐叆搴撹褰�
LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductQueryWrapper = new LambdaQueryWrapper<>();
@@ -777,7 +849,9 @@
if(salesLedger1 != null){
salesLedger.setSalesLedgerId(salesLedger1.getId());
}
- // 閲囪喘瀹℃牳
+ // 璁剧疆涓哄緟瀹℃壒鐘舵��
+ salesLedger.setApprovalStatus(3);
+ /* // 閲囪喘瀹℃牳 - 宸插簾寮冿紝涓嶅啀鍙戣捣瀹℃壒娴佺▼
// 閫氳繃鏄电О鑾峰彇鐢ㄦ埛ID
String[] split = salesLedger.getApproveUserIds().split("锛�");
List<Long> ids = new ArrayList<>();
@@ -790,7 +864,7 @@
}
// 灏嗛泦鍚堣浆涓哄瓧绗︿覆锛岄殧寮�
String collect = ids.stream().map(Object::toString).collect(Collectors.joining(","));
- salesLedger.setApproveUserIds(collect);
+ salesLedger.setApproveUserIds(collect); */
purchaseLedgerMapper.insert(salesLedger);
for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
@@ -861,7 +935,7 @@
salesLedgerProductMapper.insert(salesLedgerProduct);
}
// 閲囪喘瀹℃牳
- addApproveByPurchase(loginUser,salesLedger);
+// addApproveByPurchase(loginUser,salesLedger);
}
return AjaxResult.success("瀵煎叆鎴愬姛");
--
Gitblit v1.9.3