From 78e70bb892fd12843ead1b5bbbe5de2c23967ded Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 15 四月 2026 13:30:16 +0800
Subject: [PATCH] fix: 入库修改销售订单状态

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 87be01e..276e8c6 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -14,9 +14,11 @@
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.basic.pojo.CustomerRegions;
+import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.basic.service.ICustomerRegionsService;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.SaleEnum;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
@@ -46,6 +48,8 @@
 import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
 import com.ruoyi.sales.service.ISalesLedgerProductProcessService;
 import com.ruoyi.sales.service.ISalesLedgerService;
+import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.service.StockInventoryService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
@@ -125,6 +129,8 @@
 
     private final ISalesLedgerProcessRouteService salesLedgerProcessRouteService;
 
+    private final StockInventoryService stockInventoryService;
+
     @Autowired
     private SysDeptMapper sysDeptMapper;
     @Value("${file.upload-dir}")
@@ -197,6 +203,20 @@
         productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId());
         productWrapper.eq(SalesLedgerProduct::getType, 1);
         List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
+        Map<Long, ProductModel> productModelMap = Collections.emptyMap();
+        if (CollectionUtils.isNotEmpty(products)) {
+            List<Long> productModelIds = products.stream()
+                    .map(SalesLedgerProduct::getProductModelId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(productModelIds)) {
+                List<ProductModel> productModels = productModelMapper.selectBatchIds(productModelIds);
+                if (CollectionUtils.isNotEmpty(productModels)) {
+                    productModelMap = productModels.stream().collect(Collectors.toMap(ProductModel::getId, Function.identity()));
+                }
+            }
+        }
         for (SalesLedgerProduct product : products) {
             product.setOriginalNoInvoiceNum(product.getNoInvoiceNum());
             // 鎻愪緵涓存椂鏈紑绁ㄦ暟锛屾湭寮�绁ㄩ噾棰濅緵鍓嶆璁$畻
@@ -228,6 +248,20 @@
                 List<SalesLedgerProductProcess> processList = salesLedgerProductProcessService.listByIds(processIds);
                 processList.forEach(p -> p.setQuantity(processQuantityMap.get(p.getId())));
                 product.setSalesProductProcessList(processList);
+            }
+            ProductModel productModel = productModelMap.get(product.getProductModelId());
+            if (productModel != null) {
+                product.setThickness(productModel.getThickness());
+            }
+            if (product.getWidth() != null && product.getHeight() != null) {
+                BigDecimal pieceArea = product.getWidth().multiply(product.getHeight()).divide(new BigDecimal(1000000), 2, RoundingMode.HALF_UP);
+                if (product.getActualPieceArea() == null) {
+                    product.setActualPieceArea(pieceArea);
+                }
+                BigDecimal quantity = product.getQuantity() == null ? BigDecimal.ZERO : product.getQuantity();
+                if (product.getActualTotalArea() == null) {
+                    product.setActualTotalArea(pieceArea.multiply(quantity).setScale(2, RoundingMode.HALF_UP));
+                }
             }
         }
 
@@ -431,6 +465,8 @@
                 salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
                         .map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice)
                         .reduce(BigDecimal.ZERO, BigDecimal::add));
+                //  鍙戣揣鐘舵��
+                salesLedger.setDeliveryStatus(1);
                 salesLedgerMapper.insert(salesLedger);
 
                 for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
@@ -700,8 +736,13 @@
             if (salesLedger.getId() == null) {
                 String contractNo = generateSalesContractNo();
                 salesLedger.setSalesContractNo(contractNo);
+                salesLedger.setDeliveryStatus(1);
+                salesLedger.setStockStatus(0);
                 salesLedgerMapper.insert(salesLedger);
             } else {
+                if (salesLedger.getDeliveryStatus() == 5) {
+                    throw new ServiceException("璁㈠崟宸插彂璐�,绂佹缂栬緫");
+                }
                 salesLedgerMapper.updateById(salesLedger);
             }
 
@@ -836,7 +877,7 @@
                 //  娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
                 salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
                 // 娣诲姞鐢熶骇鏁版嵁
-                salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
+//                salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
             }
         }
     }
@@ -1465,4 +1506,42 @@
             return totalAmount;
         }
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void salesStock(SalesLedger salesLedger) {
+        if (salesLedger == null || salesLedger.getId() == null) {
+            throw new NullPointerException("鍏ュ簱澶辫触,璇烽�夋嫨闇�瑕佸叆搴撶殑閿�鍞鍗�");
+        }
+        //  鏌ヨ閿�鍞鍗曟槸鍚﹀瓨鍦�
+        SalesLedger ledger = baseMapper.selectById(salesLedger.getId());
+        if (ledger == null) {
+            throw new ServiceException("鍏ュ簱澶辫触,閿�鍞鍗曚笉瀛樺湪");
+        }
+        if (ledger.getStockStatus() == null) {
+            throw new ServiceException("鍏ュ簱澶辫触,閿�鍞鍗曞叆搴撶姸鎬佸紓甯�");
+        }
+        if (ledger.getStockStatus() == 1) {
+            throw new ServiceException("鍏ュ簱澶辫触,璇ラ攢鍞鍗曞凡鍏ュ簱,璇峰嬁閲嶅鍏ュ簱");
+        }
+        //  鏌ヨ閿�鍞鍗曠殑浜у搧
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId()));
+        if (salesLedgerProducts == null || salesLedgerProducts.isEmpty()) {
+            throw new ServiceException("鍏ュ簱澶辫触,鏈煡璇㈠埌璇ラ攢鍞鍗曠殑閿�鍞骇鍝�");
+        }
+        for (SalesLedgerProduct product : salesLedgerProducts) {
+            if (product.getProductModelId() == null) {
+                continue;
+            }
+            StockInventoryDto dto = new StockInventoryDto();
+            dto.setRecordId(product.getId());
+            dto.setRecordType(StockInQualifiedRecordTypeEnum.SALE_STOCK_IN.getCode());
+            dto.setQualitity(product.getQuantity());
+            dto.setProductModelId(product.getProductModelId());
+            stockInventoryService.addstockInventory(dto);
+        }
+        //  鏇存柊閿�鍞鍗曞叆搴撶姸鎬�
+        ledger.setStockStatus(1);
+        baseMapper.updateById(ledger);
+    }
 }

--
Gitblit v1.9.3