From b4fc4408fae3f46edeb6c5421224c484bb149a89 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 15 六月 2026 16:22:40 +0800
Subject: [PATCH] 同一月份工资不可以发放多次

---
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 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 a3458b8..651cf9e 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -27,6 +27,7 @@
 import com.ruoyi.common.enums.ReviewStatusEnum;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.FreightUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -678,6 +679,7 @@
         // 鎵ц鏇存柊鎿嶄綔
         if (!updateList.isEmpty()) {
             for (SalesLedgerProduct product : updateList) {
+                FreightUtils.fillFreightAmount(product);
                 product.setType(ledgerType);
                 salesLedgerProductMapper.updateById(product);
             }
@@ -685,6 +687,7 @@
         // 鎵ц鎻掑叆鎿嶄綔
         if (!insertList.isEmpty()) {
             for (SalesLedgerProduct salesLedgerProduct : insertList) {
+                FreightUtils.fillFreightAmount(salesLedgerProduct);
                 salesLedgerProduct.setType(ledgerType);
                 Date entryDate = purchaseLedger.getEntryDate();
 
@@ -974,6 +977,7 @@
                 for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
                     SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
                     BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
+                    FreightUtils.fillFreightAmount(salesLedgerProduct);
                     salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
                     salesLedgerProduct.setType(2);
                     // 璁$畻涓嶅惈绋庢�讳环
@@ -1109,13 +1113,13 @@
                 throw new BaseException("鐞嗚鍏ュ簱鏁伴噺蹇呴』澶т簬0");
             }
 
-            BigDecimal approvedStockInNum = getApprovedPurchaseStockInNum(
+            BigDecimal occupiedStockInNum = getOccupiedPurchaseStockInNum(
                     purchaseLedger.getId(),
                     purchaseLedger.getPurchaseContractNumber(),
                     salesLedgerProduct.getId(),
                     salesLedgerProduct.getProductModelId()
             );
-            BigDecimal remainingStockInNum = salesLedgerProduct.getQuantity().subtract(approvedStockInNum);
+            BigDecimal remainingStockInNum = salesLedgerProduct.getQuantity().subtract(occupiedStockInNum);
             if (remainingStockInNum.compareTo(BigDecimal.ZERO) <= 0) {
                 throw new BaseException("浜у搧銆�" +  productModel.getModel() + "銆戝凡瀹屾垚鍏ュ簱");
             }
@@ -1147,15 +1151,17 @@
         return count;
     }
 
-    private BigDecimal getApprovedPurchaseStockInNum(Long purchaseLedgerId, String purchaseContractNumber, Long productId, Long productModelId) {
+    private BigDecimal getOccupiedPurchaseStockInNum(Long purchaseLedgerId, String purchaseContractNumber, Long productId, Long productModelId) {
         if (purchaseLedgerId == null || productId == null || productModelId == null || !StringUtils.hasText(purchaseContractNumber)) {
             return BigDecimal.ZERO;
         }
         List<StockInRecord> stockRecords = findDirectStockRecords(purchaseLedgerId, purchaseContractNumber, productModelId, productId);
         return stockRecords.stream()
                 .filter(Objects::nonNull)
-                .filter(item -> ReviewStatusEnum.APPROVED.getCode().equals(item.getApprovalStatus()))
-                .map(StockInRecord::getStockInNum)
+                .filter(item -> item.getApprovalStatus() == null
+                        || ReviewStatusEnum.PENDING_REVIEW.getCode().equals(item.getApprovalStatus())
+                        || ReviewStatusEnum.APPROVED.getCode().equals(item.getApprovalStatus()))
+                .map(item -> item.getTheoryStockInNum() != null ? item.getTheoryStockInNum() : item.getStockInNum())
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
     }

--
Gitblit v1.9.3