From 76c84d95506998f546e6f3ebbf70414c0dd9da9d Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 15 五月 2026 17:15:15 +0800
Subject: [PATCH] refactor(stock): 优化库存记录服务中的仓库信息处理逻辑

---
 src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java |   99 +++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 78 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 316029b..11e28d0 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -10,7 +10,6 @@
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -23,12 +22,15 @@
 import com.ruoyi.stock.dto.StockUninventoryDto;
 import com.ruoyi.stock.execl.StockInventoryExportData;
 import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.mapper.WarehouseInfoMapper;
 import com.ruoyi.stock.pojo.StockInRecord;
 import com.ruoyi.stock.pojo.StockInventory;
+import com.ruoyi.stock.pojo.WarehouseInfo;
 import com.ruoyi.stock.service.StockInRecordService;
 import com.ruoyi.stock.service.StockInventoryService;
 import com.ruoyi.stock.service.StockOutRecordService;
 import com.ruoyi.stock.service.StockUninventoryService;
+import com.ruoyi.warehouse.service.impl.WarehouseServiceImpl;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -55,6 +57,8 @@
 @AllArgsConstructor
 public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
 
+    private final WarehouseServiceImpl warehouseServiceImpl;
+    private final WarehouseInfoMapper warehouseInfoMapper;
     private  StockInventoryMapper stockInventoryMapper;
     private StockInRecordService stockInRecordService;
     private StockOutRecordService stockOutRecordService;
@@ -74,16 +78,18 @@
     //鍏ュ簱璋冪敤
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
+    public StockInRecordDto addstockInventory(StockInventoryDto stockInventoryDto) {
+        Long warehouseInfoId = requireWarehouseInfoId(stockInventoryDto.getWarehouseInfoId());
         String batchNo = StringUtils.trim(stockInventoryDto.getBatchNo());
         if (StringUtils.isEmpty(batchNo)) {
             batchNo = generateAutoBatchNo(stockInventoryDto.getProductModelId());
         }
         stockInventoryDto.setBatchNo(batchNo);
-
-        LambdaQueryWrapper<StockInventory> eq = new QueryWrapper<StockInventory>().lambda()
-                .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId());
-        eq.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo());
+        LambdaQueryWrapper<StockInventory> eq = buildQualifiedInventoryQuery(
+                stockInventoryDto.getProductModelId(),
+                stockInventoryDto.getBatchNo(),
+                stockInventoryDto.getWarehouseInfoId()
+        );
         //鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
         StockInRecordDto stockInRecordDto = new StockInRecordDto();
         stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
@@ -92,6 +98,7 @@
         stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo());
         stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockInRecordDto.setType("0");
+        stockInRecordDto.setWarehouseInfoId(warehouseInfoId);
         stockInRecordService.add(stockInRecordDto);
         //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
         //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
@@ -104,26 +111,28 @@
             newStockInventory.setRemark(stockInventoryDto.getRemark());
             newStockInventory.setBatchNo(stockInventoryDto.getBatchNo());
             newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
+            newStockInventory.setWarehouseInfoId(stockInventoryDto.getWarehouseInfoId());
             newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
             stockInventoryMapper.insert(newStockInventory);
         }else {
              stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
         }
-        return true;
+        return stockInRecordDto;
     }
 
     //鍑哄簱璋冪敤
     @Override
     @Transactional(rollbackFor = Exception.class)
     public StockOutRecordDto subtractStockInventory(StockInventoryDto stockInventoryDto) {
-        LambdaQueryWrapper<StockInventory> eq = new QueryWrapper<StockInventory>().lambda()
-            .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId());
+        Long warehouseInfoId = requireWarehouseInfoId(stockInventoryDto.getWarehouseInfoId());
         if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) {
-            eq.isNull(StockInventory::getBatchNo);
             stockInventoryDto.setBatchNo(null);
-        } else {
-            eq.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo());
         }
+        LambdaQueryWrapper<StockInventory> eq = buildQualifiedInventoryQuery(
+                stockInventoryDto.getProductModelId(),
+                stockInventoryDto.getBatchNo(),
+                stockInventoryDto.getWarehouseInfoId()
+        );
         //  鏂板鍑哄簱璁板綍
         StockOutRecordDto stockOutRecordDto = new StockOutRecordDto();
         stockOutRecordDto.setRecordId(stockInventoryDto.getRecordId());
@@ -133,6 +142,7 @@
         stockOutRecordDto.setApprovalStatus(0);
         stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockOutRecordDto.setType("0");
+        stockOutRecordDto.setWarehouseInfoId(warehouseInfoId);
         Long id = stockOutRecordService.add(stockOutRecordDto);
         stockInventoryDto.setId(id);
 
@@ -156,6 +166,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public StockInRecordDto addStockInRecordOnly(StockInventoryDto stockInventoryDto) {
+        Long warehouseInfoId = requireWarehouseInfoId(stockInventoryDto.getWarehouseInfoId());
         String batchNo = StringUtils.trim(stockInventoryDto.getBatchNo());
         if (StringUtils.isEmpty(batchNo)) {
             batchNo = generateAutoBatchNo(stockInventoryDto.getProductModelId());
@@ -170,6 +181,7 @@
         stockInRecordDto.setApprovalStatus(0);
         stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockInRecordDto.setType("0");
+        stockInRecordDto.setWarehouseInfoId(warehouseInfoId);
         stockInRecordDto.setRemark(stockInventoryDto.getRemark());
         Long add = stockInRecordService.add(stockInRecordDto);
         stockInRecordDto.setId( add);
@@ -254,14 +266,16 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean addStockOutRecordOnly(StockInventoryDto stockInventoryDto) {
-        LambdaQueryWrapper<StockInventory> eq = new LambdaQueryWrapper<>();
-        eq.eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId());
+    public StockOutRecordDto addStockOutRecordOnly(StockInventoryDto stockInventoryDto) {
         if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) {
-            eq.isNull(StockInventory::getBatchNo);
-        } else {
-            eq.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo());
+            stockInventoryDto.setBatchNo(null);
         }
+        Long warehouseInfoId = requireWarehouseInfoId(stockInventoryDto.getWarehouseInfoId());
+        LambdaQueryWrapper<StockInventory> eq = buildQualifiedInventoryQuery(
+                stockInventoryDto.getProductModelId(),
+                stockInventoryDto.getBatchNo(),
+                warehouseInfoId
+        );
         StockInventory stockInventory = stockInventoryMapper.selectOne(eq);
         if (stockInventory == null) {
             throw new ServiceException("搴撳瓨璁板綍涓嶅瓨鍦�");
@@ -273,6 +287,7 @@
         BigDecimal pendingOut = stockInventoryMapper.selectPendingOutQuantity(
                 stockInventoryDto.getProductModelId(),
                 stockInventoryDto.getBatchNo(),
+                warehouseInfoId,
                 "0"
         );
         if (pendingOut == null) {
@@ -289,9 +304,35 @@
         stockOutRecordDto.setBatchNo(stockInventoryDto.getBatchNo());
         stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockOutRecordDto.setType("0");
+        stockOutRecordDto.setWarehouseInfoId(warehouseInfoId);
         stockOutRecordDto.setRemark(stockInventoryDto.getRemark());
-        stockOutRecordService.add(stockOutRecordDto);
-        return true;
+        Long add = stockOutRecordService.add(stockOutRecordDto);
+        stockInventoryDto.setId(add);
+        return stockOutRecordDto;
+    }
+
+    private Long requireWarehouseInfoId(Long warehouseInfoId) {
+        if (warehouseInfoId == null) {
+//            throw new ServiceException("浠撳簱涓嶈兘涓虹┖");
+            warehouseInfoId = 1L;
+        }
+        return warehouseInfoId;
+    }
+
+    private LambdaQueryWrapper<StockInventory> buildQualifiedInventoryQuery(Long productModelId, String batchNo, Long warehouseInfoId) {
+        LambdaQueryWrapper<StockInventory> wrapper = new QueryWrapper<StockInventory>().lambda()
+                .eq(StockInventory::getProductModelId, productModelId);
+        if (warehouseInfoId == null) {
+            wrapper.isNull(StockInventory::getWarehouseInfoId);
+        } else {
+            wrapper.eq(StockInventory::getWarehouseInfoId, warehouseInfoId);
+        }
+        if (StringUtils.isEmpty(batchNo)) {
+            wrapper.isNull(StockInventory::getBatchNo);
+        } else {
+            wrapper.eq(StockInventory::getBatchNo, batchNo);
+        }
+        return wrapper;
     }
 
     @Override
@@ -300,6 +341,7 @@
         try {
             // 鏌ヨ鎵�鏈夌殑浜у搧骞舵瀯寤烘槧灏勶紝鎻愰珮鏌ユ壘鏁堢巼
             List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectProduct();
+            List<WarehouseInfo> warehouseInfos = warehouseInfoMapper.selectList(null);
             Map<String, SalesLedgerProduct> productMap = new HashMap<>();
             for (SalesLedgerProduct product : salesLedgerProducts) {
                 // 浣跨敤浜у搧绫诲埆鍜岃鏍煎瀷鍙蜂綔涓洪敭
@@ -329,6 +371,14 @@
                         stockInventoryDto.setQualitity(dto.getQualifiedQuantity());
                         stockInventoryDto.setRemark(dto.getRemark());
                         stockInventoryDto.setWarnNum(dto.getWarnNum());
+                        stockInventoryDto.setBatchNo(dto.getBatchNo());
+                        stockInventoryDto.setWarehouseName(dto.getWarehouseName());
+                        Long warehouseInfoId = warehouseInfos.stream()
+                                .filter(warehouseInfo -> dto.getWarehouseName().equals(warehouseInfo.getWarehouseName()))
+                                .map(WarehouseInfo::getId)
+                                .findFirst()
+                                .orElseThrow(() -> new RuntimeException("绯荤粺鏈壘鍒颁粨搴擄細" + dto.getWarehouseName()));
+                        stockInventoryDto.setWarehouseInfoId(warehouseInfoId);
 
                         // 楠岃瘉鍚堟牸鍐荤粨鏁伴噺
                         if (ObjectUtils.isNotEmpty(dto.getQualifiedLockedQuantity())) {
@@ -349,9 +399,11 @@
                     if (dto.getUnQualifiedQuantity() != null && dto.getUnQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
                         StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
                         stockUninventoryDto.setRecordId(0L);
-                        stockUninventoryDto.setRecordType(StockInUnQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_IN.getCode());
+                        stockUninventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_IN.getCode());
                         stockUninventoryDto.setQualitity(dto.getUnQualifiedQuantity());
                         stockUninventoryDto.setRemark(dto.getRemark());
+                        stockUninventoryDto.setBatchNo(dto.getBatchNo());
+                        stockUninventoryDto.setWarehouseName(dto.getWarehouseName());
 
                         // 楠岃瘉涓嶅悎鏍煎喕缁撴暟閲�
                         if (ObjectUtils.isNotEmpty(dto.getUnQualifiedLockedQuantity())) {
@@ -448,4 +500,9 @@
     public IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, StockInventoryDto stockInventoryDto) {
         return stockInventoryMapper.pagestockInventoryNoQua(page, stockInventoryDto);
     }
+
+    @Override
+    public boolean updateLocked(Long productModelId, String batchNo, boolean b) {
+        return stockInventoryMapper.updateLocked(productModelId, batchNo, b) > 0;
+    }
 }

--
Gitblit v1.9.3