From f2c7576cbd050824ec78233483e06fc375382bfb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 02 四月 2026 17:04:03 +0800
Subject: [PATCH] yys 1.客户档案导入-维护人,维护时间默认当前 2.销售报价审核非必填,产品选择方式也要改 3.销售产品增加物料号字段 4.产品维护增加录入时间,修改时间 6.发货审核不需要了 7.BI的生产核算分析不要了,增加生产订单当前工序 3.库存导入模板规格改成图纸编号,产品名称可以为空,加个库位 4.库存管理外购改为标准件 5.bom产品唯一 6.产品根据bom计算子项数量(只统计二级)

---
 src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java |   67 +++++++++++++++++++++++++--------
 1 files changed, 51 insertions(+), 16 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 b15f881..fcec502 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -5,7 +5,8 @@
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -25,6 +26,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -50,27 +52,48 @@
     }
 
     //鍏ュ簱璋冪敤
+
+    /**
+     *
+     * @param stockInventoryDto
+     * @param isProduction  鏄惁鐢熶骇鍏ュ簱 1-鏄� 2-鍚︼紙鐢熶骇闇�瑕佸鏍告墠鑳藉叆搴擄級
+     * @return
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
+    public Boolean addstockInventory(StockInventoryDto stockInventoryDto,Integer isProduction) {
         //鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
         StockInRecordDto stockInRecordDto = new StockInRecordDto();
         stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
         stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
-        stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
+        if(isProduction == 1){
+            stockInRecordDto.setWaitAuditNum(stockInventoryDto.getQualitity());
+        }else{
+            stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
+        }
         stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockInRecordDto.setType("0");
+        stockInRecordDto.setStockLocation(stockInventoryDto.getStockLocation());
+        stockInRecordDto.setStatus(isProduction);
         stockInRecordService.add(stockInRecordDto);
+        if(isProduction == 1){
+            return false;
+        }
         //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
         //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
-        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>()
+                .lambda()
+                .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
+                .eq(StockInventory::getStockLocation, stockInventoryDto.getStockLocation()));
         if (ObjectUtils.isEmpty(oldStockInventory)) {
             StockInventory newStockInventory = new StockInventory();
             newStockInventory.setProductModelId(stockInventoryDto.getProductModelId());
             newStockInventory.setQualitity(stockInventoryDto.getQualitity());
             newStockInventory.setVersion(1);
             newStockInventory.setRemark(stockInventoryDto.getRemark());
+            newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
             newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
+            newStockInventory.setStockLocation(stockInventoryDto.getStockLocation());
             stockInventoryMapper.insert(newStockInventory);
         }else {
              stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
@@ -82,23 +105,30 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean subtractStockInventory(StockInventoryDto stockInventoryDto) {
-            //  鏂板鍑哄簱璁板綍
+        //  鏂板鍑哄簱璁板綍
         StockOutRecordDto stockOutRecordDto = new StockOutRecordDto();
         stockOutRecordDto.setRecordId(stockInventoryDto.getRecordId());
         stockOutRecordDto.setRecordType(stockInventoryDto.getRecordType());
         stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity());
         stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockOutRecordDto.setType("0");
+        stockOutRecordDto.setStockLocation(stockInventoryDto.getStockLocation());
         stockOutRecordService.add(stockOutRecordDto);
-        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
-        if (stockInventoryDto.getQualitity().compareTo( oldStockInventory.getQualitity().subtract(oldStockInventory.getLockedQuantity()))>0) {
+        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>()
+                .lambda()
+                .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
+                .eq(StockInventory::getStockLocation, stockInventoryDto.getStockLocation()));
+        if (ObjectUtils.isEmpty(oldStockInventory)) {
+            throw new RuntimeException("搴撲綅銆�" + stockInventoryDto.getStockLocation() + "銆戜骇鍝佸簱瀛樹笉瀛樺湪");
+        }
+        BigDecimal lockedQty = oldStockInventory.getLockedQuantity();
+        if (lockedQty == null) {
+            lockedQty = BigDecimal.ZERO;
+        }
+        if (stockInventoryDto.getQualitity().compareTo(oldStockInventory.getQualitity().subtract(lockedQty)) > 0) {
             throw new RuntimeException("搴撳瓨涓嶈冻鏃犳硶鍑哄簱");
         }
-        if (ObjectUtils.isEmpty(oldStockInventory)) {
-            throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
-        }else {
-            stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
-        }
+        stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
         return true;
     }
 
@@ -117,15 +147,20 @@
             list.forEach(dto -> {
                 boolean matched = false;
                 for (SalesLedgerProduct item : salesLedgerProducts) {
-                    if (item.getProductCategory().equals(dto.getProductName()) &&
-                            item.getSpecificationModel().equals(dto.getModel())) {
+                    if (item.getSpecificationModel().equals(dto.getModel())) {
                         StockInventoryDto stockInventoryDto = new StockInventoryDto();
                         stockInventoryDto.setRecordId(0L);
-                        stockInventoryDto.setRecordType(StockQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
+                        stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
                         stockInventoryDto.setQualitity(dto.getQualitity());
                         stockInventoryDto.setRemark(dto.getRemark());
+                        stockInventoryDto.setWarnNum(dto.getWarnNum());
+                        if (ObjectUtils.isNotEmpty(dto.getLockedQuantity())&&dto.getLockedQuantity().compareTo(dto.getQualitity())>0) {
+                            throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫簱瀛樻暟閲�");
+                        }
+                        stockInventoryDto.setLockedQuantity(dto.getLockedQuantity());
                         stockInventoryDto.setProductModelId(item.getProductModelId());
-                        this.addstockInventory(stockInventoryDto);
+                        stockInventoryDto.setStockLocation(dto.getStockLocation());
+                        this.addstockInventory(stockInventoryDto,2);
                         matched = true;
                         break; // 鎵惧埌鍖归厤椤瑰悗璺冲嚭寰幆
                     }

--
Gitblit v1.9.3