From 69e0f44e279f7763fa9c9a4d105f154db39ee1d8 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 23 五月 2026 11:38:02 +0800
Subject: [PATCH] feat(sales): 添加每件数量字段支持及多业务流程优化

---
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java |   42 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 35 insertions(+), 7 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 b112549..69a0820 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -13,13 +13,13 @@
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.procurementrecord.bean.vo.ShippingProductVo;
 import com.ruoyi.procurementrecord.utils.StockUtils;
-import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingApproveDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.dto.ShippingProductDetailDto;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
 import com.ruoyi.sales.mapper.ShippingProductDetailMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import com.ruoyi.sales.pojo.ShippingProductDetail;
 import com.ruoyi.sales.service.ShippingInfoService;
@@ -28,6 +28,7 @@
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -96,12 +97,6 @@
         if (CollectionUtils.isEmpty(shippingInfos)) return false;
         // 鍒犻櫎闄勪欢
         commonFileService.deleteByBusinessIds(ids, FileNameType.SHIP.getValue());
-        // 鎵e凡鍙戣揣搴撳瓨
-        for (ShippingInfo shippingInfo : shippingInfos) {
-            if ("宸插彂璐�".equals(shippingInfo.getStatus())) {
-                stockUtils.deleteStockOutRecord(shippingInfo.getId(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode());
-            }
-        }
         // 鍒犻櫎鍙戣揣瀹℃壒
         if (CollectionUtils.isNotEmpty(shippingInfos)) {
             for (ShippingInfo shippingInfo : shippingInfos) {
@@ -111,6 +106,8 @@
                     List<Long> list = one.stream().map(ApproveProcess::getId).toList();
                     approveProcessService.delByIds(list);
                 }
+                // 鎵e凡鍙戣揣搴撳瓨
+                stockUtils.deleteStockOutRecord(shippingInfo.getId(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode());
             }
         }
         //鍒犻櫎鍙戣揣鏄庣粏
@@ -132,6 +129,10 @@
 
     @Override
     public boolean add(ShippingInfoDto req) {
+        if (CollectionUtils.isEmpty(req.getBatchNoDetailList())) {
+            throw new RuntimeException("鍙戣揣鏄庣粏涓嶈兘涓虹┖");
+        }
+//        normalizeShippingQuantity(req.getBatchNoDetailList(), req.getSalesLedgerProductId());
         this.save(req);
         req.getBatchNoDetailList().forEach(item -> item.setShippingInfoId(req.getId()));
         shippingProductDetailMapper.insert(req.getBatchNoDetailList());
@@ -158,4 +159,31 @@
         shippingApproveDto.setShippingProductDetailDtoList(dateilByShippingNo);
         return shippingApproveDto;
     }
+
+    /**
+     * 姝e父鍖栧彂璐ф暟閲�
+     * @param shippingProductDetails
+     * @param salesLedgerProductId
+     */
+    private void normalizeShippingQuantity(List<ShippingProductDetail> shippingProductDetails, Long salesLedgerProductId) {
+        if (CollectionUtils.isEmpty(shippingProductDetails)) {
+            return;
+        }
+        BigDecimal singleQuantity = BigDecimal.ONE;
+        if (salesLedgerProductId != null) {
+            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(salesLedgerProductId);
+            if (salesLedgerProduct != null && salesLedgerProduct.getSingleQuantity() != null
+                    && salesLedgerProduct.getSingleQuantity().compareTo(BigDecimal.ZERO) > 0) {
+                singleQuantity = salesLedgerProduct.getSingleQuantity();
+            }
+        }
+        if (singleQuantity.compareTo(BigDecimal.ONE) == 0) {
+            return;
+        }
+        for (ShippingProductDetail shippingProductDetail : shippingProductDetails) {
+            if (shippingProductDetail.getQuantity() != null) {
+                shippingProductDetail.setQuantity(shippingProductDetail.getQuantity().multiply(singleQuantity));
+            }
+        }
+    }
 }

--
Gitblit v1.9.3