From 2cab2f69fe7efff3f1f014022be707a6648754e3 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 13 四月 2026 14:14:42 +0800
Subject: [PATCH] fix: 改为补充发货信息才扣减库存、销售订单缺失审批通过状态、审批流程编号重复

---
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java |  107 ++++++++++++-----------------------------------------
 1 files changed, 25 insertions(+), 82 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index 4cade95..5394ded 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -81,97 +81,40 @@
         if (byId == null) {
             throw new RuntimeException("鍙戣揣淇℃伅涓嶅瓨鍦�");
         }
-        return deductStockByOrder(byId.getSalesLedgerId(), req);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean deductStockByOrder(Long salesLedgerId, ShippingInfoDto req) throws IOException {
-        if (salesLedgerId == null) {
-            throw new RuntimeException("鍏宠仈璁㈠崟涓嶅彲涓虹┖");
+        //鎵e噺搴撳瓨
+        if(!"宸插彂璐�".equals(byId.getStatus())){
+            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
+            if (salesLedgerProduct != null) {
+                stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+            }
         }
+        byId.setExpressNumber(req.getExpressNumber());
+        byId.setExpressCompany(req.getExpressCompany());
+        byId.setStatus("宸插彂璐�");
+        byId.setShippingCarNumber(req.getShippingCarNumber());
+        byId.setShippingDate(req.getShippingDate());
+        boolean update = this.updateById(byId);
 
-        SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId);
-        if (salesLedger == null) {
-            throw new RuntimeException("鍏宠仈璁㈠崟涓嶅瓨鍦�");
-        }
-
-        // 妫�鏌ヨ璁㈠崟涓嬫槸鍚﹁繕鏈夋湭鍙戣揣鐨勮褰�
-        List<ShippingInfo> unsentShippings = this.list(new LambdaQueryWrapper<ShippingInfo>()
-                .eq(ShippingInfo::getSalesLedgerId, salesLedgerId)
-                .ne(ShippingInfo::getStatus, "宸插彂璐�"));
-
-        // 浠呭湪瀛樺湪鏈彂璐ц褰曟椂鎵ц搴撳瓨鎵e噺
-        if (CollectionUtils.isNotEmpty(unsentShippings)) {
-            // 鑾峰彇璇ヨ鍗曚笅鎵�鏈夌殑浜у搧淇℃伅杩涜姹囨�绘墸鍑�
-            List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
-                    .eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId));
-
-            if (CollectionUtils.isEmpty(products)) {
-                throw new RuntimeException("璇ヨ鍗曚笅鏃犱骇鍝佷俊鎭紝鏃犳硶鎵e噺搴撳瓨");
-            }
-
-            //  姹囨�婚渶姹傚苟鏍¢獙搴撳瓨
-            Map<Long, BigDecimal> modelQtyMap = new HashMap<>();
-            for (SalesLedgerProduct p : products) {
-                if (p.getProductModelId() == null) continue;
-                modelQtyMap.put(p.getProductModelId(), modelQtyMap.getOrDefault(p.getProductModelId(), BigDecimal.ZERO).add(p.getQuantity()));
-            }
-
-            for (Map.Entry<Long, BigDecimal> entry : modelQtyMap.entrySet()) {
-                Long modelId = entry.getKey();
-                BigDecimal totalNeeded = entry.getValue();
-
-                StockInventory stock = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>()
-                        .eq(StockInventory::getProductModelId, modelId));
-
-                if (stock == null) {
-                    throw new RuntimeException("浜у搧瑙勬牸ID:" + modelId + " 搴撳瓨璁板綍涓嶅瓨鍦�");
-                }
-
-                BigDecimal locked = stock.getLockedQuantity() == null ? BigDecimal.ZERO : stock.getLockedQuantity();
-                BigDecimal available = stock.getQualitity().subtract(locked);
-
-                if (totalNeeded.compareTo(available) > 0) {
-                    throw new RuntimeException("浜у搧瑙勬牸ID:" + modelId + " 鎬昏闇�姹� " + totalNeeded + "锛屽彲鐢ㄥ簱瀛� " + available + "锛屽簱瀛樺厖瓒虫牎楠屾湭閫氳繃");
-                }
-            }
-
-            //  鎵ц璁㈠崟涓嬫墍鏈変骇鍝佺殑搴撳瓨鎵e噺
-            for (SalesLedgerProduct p : products) {
-                if (p.getProductModelId() == null) continue;
-                // 浣跨敤 businessId = salesLedgerId 鎴栧綋鍓� req.getId()
-                stockUtils.substractStock(p.getProductModelId(), p.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), salesLedgerId);
+        // 鏇存柊璁㈠崟鐘舵�佷负 5-宸插彂璐� (濡傛灉鎵�鏈夊彂璐ц褰曢兘宸插彂璐�)
+        SalesLedger salesLedger = salesLedgerMapper.selectById(byId.getSalesLedgerId());
+        if (salesLedger != null && !Integer.valueOf(5).equals(salesLedger.getDeliveryStatus())) {
+            List<ShippingInfo> unsent = this.list(new LambdaQueryWrapper<ShippingInfo>()
+                    .eq(ShippingInfo::getSalesLedgerId, byId.getSalesLedgerId())
+                    .ne(ShippingInfo::getStatus, "宸插彂璐�"));
+            if (CollectionUtils.isEmpty(unsent)) {
+                salesLedger.setDeliveryStatus(5);
+                salesLedgerMapper.updateById(salesLedger);
             }
         }
 
-        //  鏇存柊璇ヨ鍗曚笅鎵�鏈夌殑鍙戣揣璁板綍鐘舵�佷负宸插彂璐�
-        LambdaUpdateWrapper<ShippingInfo> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.set(ShippingInfo::getStatus, "宸插彂璐�")
-                .eq(ShippingInfo::getSalesLedgerId, salesLedgerId);
-        
-        if (req != null) {
-            if (req.getExpressNumber() != null) updateWrapper.set(ShippingInfo::getExpressNumber, req.getExpressNumber());
-            if (req.getExpressCompany() != null) updateWrapper.set(ShippingInfo::getExpressCompany, req.getExpressCompany());
-            if (req.getShippingCarNumber() != null) updateWrapper.set(ShippingInfo::getShippingCarNumber, req.getShippingCarNumber());
-            if (req.getShippingDate() != null) updateWrapper.set(ShippingInfo::getShippingDate, req.getShippingDate());
-        }
-        this.update(updateWrapper);
-
-        //  鏇存柊璁㈠崟鐘舵�佷负 4-宸插彂璐�
-        if (!Integer.valueOf(4).equals(salesLedger.getDeliveryStatus())) {
-            salesLedger.setDeliveryStatus(4);
-            salesLedgerMapper.updateById(salesLedger);
-        }
-
-        //  杩佺Щ褰撳墠璁板綍娑夊強鐨勬枃浠�
-        if (req != null && req.getId() != null && CollectionUtils.isNotEmpty(req.getTempFileIds())) {
+        // 杩佺Щ鏂囦欢
+        if(CollectionUtils.isNotEmpty(req.getTempFileIds())){
             tempFileService.migrateTempFilesToFormal(req.getId(), req.getTempFileIds(), FileNameType.SHIP.getValue());
         }
-
-        return true;
+        return update ;
     }
 
+
     @Override
     public boolean delete(List<Long> ids) {
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()

--
Gitblit v1.9.3