From d05d46076c62c744cdbd84c84d6e19b42cda9259 Mon Sep 17 00:00:00 2001
From: lishenao <3065849776@qq.com>
Date: 星期三, 02 七月 2025 09:30:15 +0800
Subject: [PATCH] 入库管理,出库管理,库存管理后端接口修改

---
 src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java |  156 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 106 insertions(+), 50 deletions(-)

diff --git a/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java b/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
index 8c035f8..371dad2 100644
--- a/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
+++ b/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.SupplierManage;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.inventory.dto.StockinDto;
 import com.ruoyi.inventory.excel.StockInExcelDto;
@@ -13,6 +15,8 @@
 import com.ruoyi.inventory.pojo.StockManagement;
 import com.ruoyi.inventory.service.StockInService;
 import com.ruoyi.purchase.dto.PurchaseLedgerDto;
+import com.ruoyi.purchase.mapper.ProductRecordMapper;
+import com.ruoyi.purchase.pojo.ProductRecord;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,6 +32,10 @@
     private StockInMapper stockInMapper;
     @Autowired
     private StockManagementMapper stockManagementMapper;
+    @Autowired
+    private ProductRecordMapper productRecordMapper;
+    @Autowired
+    private SupplierManageMapper supplierManageMapper;
 
 
 //    鏂板鏂规硶
@@ -38,32 +46,41 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveStockin(StockIn stockIn) {
-        stockInMapper.insert(stockIn);
-        StockManagement stockManagement = new StockManagement();
-//        杩涜鍒ゆ柇鏄惁瀛樺湪鐩稿悓鐨勪骇鍝乮d鍜屼緵搴斿晢id
-        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(StockManagement::getProductId, stockIn.getProductId());
-        queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId());
-        StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
-        if (stockManagement1!= null) {
-            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() + stockIn.getInboundQuantity());
-            stockManagement1.setInboundTime(stockIn.getInboundTime());
-            stockManagement1.setBoundTime(new Date());
-            stockManagement1.setInboundPerson(stockIn.getInboundPerson());
-            System.out.println(stockManagement1+"22");
-            stockManagementMapper.updateById(stockManagement1);
+//闇�瑕佸厛鍒ゆ柇浜у搧璁板綍琛ㄤ腑鏄惁鏈夎浜у搧
+        ProductRecord productRecord = productRecordMapper.selectById(stockIn.getProductRecordid());
+        if (productRecord == null) {
+            throw new RuntimeException("浜у搧璁板綍琛ㄤ腑娌℃湁璇ヤ骇鍝�");
         }
-        else {
-            stockManagement.setProductId(stockIn.getProductId());
-            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
-            stockManagement.setBoundTime(stockIn.getInboundTime());
-            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
-            stockManagement.setInboundPerson(stockIn.getInboundPerson());
+//        闇�瑕佸厛鍒ゆ柇渚涘簲鍟嗚〃涓槸鍚︽湁璇ヤ緵搴斿晢
+        SupplierManage supplierManage = supplierManageMapper.selectById(stockIn.getSupplierId());
+        if (supplierManage == null) {
+            throw new RuntimeException("渚涘簲鍟嗚〃涓病鏈夎渚涘簲鍟�");
+        }
+//        闇�瑕佸厛鍒ゆ柇搴撳瓨绠$悊琛ㄤ腑鏄惁鏈夎浜у搧
+        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(StockManagement::getProductRecordid, stockIn.getProductRecordid());
+        queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId());
+        queryWrapper.eq(StockManagement::getUserId, stockIn.getUserId());
+        StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper);
+        if (stockManagement == null) {
+//            濡傛灉娌℃湁璇ヤ骇鍝侊紝闇�瑕佸厛鏂板搴撳瓨绠$悊琛�
+            stockManagement = new StockManagement();
+            stockManagement.setProductRecordid(stockIn.getProductRecordid());
             stockManagement.setSupplierId(stockIn.getSupplierId());
-            stockManagement.setTenantId(stockIn.getTenantId());
+            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
+            stockManagement.setInboundTime(stockIn.getInboundTime());
             stockManagement.setBoundTime(new Date());
+            stockManagement.setUserId(stockIn.getUserId());
             stockManagementMapper.insert(stockManagement);
         }
+//        濡傛灉鏈夎浜у搧锛岄渶瑕佸厛鏇存柊搴撳瓨绠$悊琛�
+            stockManagement.setStockQuantity(stockManagement.getStockQuantity() + stockIn.getInboundQuantity());
+            stockManagement.setInboundTime(stockIn.getInboundTime());
+            stockManagement.setBoundTime(new Date());
+            stockManagement.setUserId(stockIn.getUserId());
+            stockManagementMapper.updateById(stockManagement);
+//            闇�瑕佸厛鏂板搴撳瓨鍏ュ簱琛�
+            stockInMapper.insert(stockIn);
     }
 
     @Override//鏍规嵁id鑾峰彇搴撳瓨鍏ュ簱淇℃伅
@@ -71,39 +88,78 @@
         StockIn stockIn = stockInMapper.selectById(id);
         return stockIn;
     }
-
-    @Override//鏇存柊搴撳瓨鍏ュ簱淇℃伅
+    @Override
     @Transactional(rollbackFor = Exception.class)
-    public int updateStockIn(StockIn stockIn) {
-        StockIn stockIn1 = stockInMapper.selectById(stockIn.getId());
-//        杩涜鍒ゆ柇鏄惁瀛樺湪鐩稿悓鐨勪骇鍝乮d鍜屼緵搴斿晢id
-        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(StockManagement::getProductId, stockIn.getProductId());
-        queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId());
-        StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
-        if (stockManagement1!= null) {
-            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() - stockIn1.getInboundQuantity() + stockIn.getInboundQuantity());
-            stockManagement1.setInboundTime(stockIn.getInboundTime());
-            stockManagement1.setBoundTime(new Date());
-            stockManagement1.setInboundPerson(stockIn.getInboundPerson());
-            System.out.println(stockManagement1 + "22");
-            stockManagementMapper.updateById(stockManagement1);
-        }        else {
-            StockManagement stockManagement = new StockManagement();
-            stockManagement.setProductId(stockIn.getProductId());
-            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
-            stockManagement.setBoundTime(stockIn.getInboundTime());
-            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
-            stockManagement.setInboundPerson(stockIn.getInboundPerson());
-            stockManagement.setSupplierId(stockIn.getSupplierId());
-            stockManagement.setTenantId(stockIn.getTenantId());
-            stockManagement.setBoundTime(new Date());
-            System.out.println(stockManagement + "33");
-            stockManagementMapper.insert(stockManagement);
+    public boolean updateStockIn(StockIn stockIn) {
+        // 1. 鍙傛暟鏍¢獙
+        if (stockIn == null || stockIn.getId() == null) {
+            throw new IllegalArgumentException("鍏ュ簱璁板綍ID涓嶈兘涓虹┖");
         }
-        return stockInMapper.updateById(stockIn);
+
+        // 2. 鑾峰彇鍘熷璁板綍
+        StockIn original = stockInMapper.selectById(stockIn.getId());
+        if (original == null) {
+            throw new RuntimeException("瑕佷慨鏀圭殑鍏ュ簱璁板綍涓嶅瓨鍦紝ID: " + stockIn.getId());
+        }
+
+        // 3. 妫�鏌ュ叧鑱旀暟鎹�
+        // 3.1 妫�鏌ヤ骇鍝�
+        if (stockIn.getProductRecordid() != null &&
+                productRecordMapper.selectById(stockIn.getProductRecordid()) == null) {
+            throw new RuntimeException("浜у搧璁板綍涓嶅瓨鍦紝ID: " + stockIn.getProductRecordid());
+        }
+
+        // 3.2 妫�鏌ヤ緵搴斿晢
+        if (stockIn.getSupplierId() != null &&
+                supplierManageMapper.selectById(stockIn.getSupplierId()) == null) {
+            throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪锛孖D: " + stockIn.getSupplierId());
+        }
+
+        // 4. 纭畾鏈�缁堜娇鐢ㄧ殑鍚処D鍊�
+        Integer finalProductId = stockIn.getProductRecordid() != null ?
+                stockIn.getProductRecordid() : original.getProductRecordid();
+        Integer finalSupplierId = stockIn.getSupplierId() != null ?
+                stockIn.getSupplierId() : original.getSupplierId();
+        Long finalUserId = stockIn.getUserId() != null ?
+                stockIn.getUserId() : original.getUserId();
+
+        // 5. 澶勭悊搴撳瓨璁板綍锛堢‘淇濆瓨鍦ㄥ搴旇褰曪級
+        LambdaQueryWrapper<StockManagement> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StockManagement::getProductRecordid, finalProductId)
+                .eq(StockManagement::getSupplierId, finalSupplierId)
+                .eq(StockManagement::getUserId, finalUserId);
+
+        StockManagement stock = stockManagementMapper.selectOne(wrapper);
+
+        // 璁$畻鏁伴噺鍙樺寲锛堝鏋滄湁淇敼锛�
+        Integer quantityChange = stockIn.getInboundQuantity() != null ?
+                stockIn.getInboundQuantity() - original.getInboundQuantity() : 0;
+
+        if (stock == null) {
+            // 5.1 涓嶅瓨鍦ㄥ垯鍒涘缓鏂拌褰�
+            stock = new StockManagement();
+            stock.setProductRecordid(finalProductId);
+            stock.setSupplierId(finalSupplierId);
+            stock.setUserId(finalUserId);
+            // 鍒濆搴撳瓨 = 鍘熷搴撳瓨 + 鍙樺寲閲忥紙鑰冭檻淇敼鍚庣殑鍊硷級
+            stock.setStockQuantity(original.getInboundQuantity() + quantityChange);
+            stockManagementMapper.insert(stock);
+        } else if (quantityChange != 0) {
+            // 5.2 瀛樺湪涓旀暟閲忔湁鍙樺寲鍒欐洿鏂�
+            stock.setStockQuantity(stock.getStockQuantity() + quantityChange);
+            stockManagementMapper.updateById(stock);
+        }
+
+        // 6. 鏇存柊鍏ュ簱璁板綍
+        int updateResult = stockInMapper.updateById(stockIn);
+        if (updateResult <= 0) {
+            throw new RuntimeException("鍏ュ簱璁板綍鏇存柊澶辫触");
+        }
+
+        return updateResult > 0;
     }
 
+
     @Override
     public int delStockin(List<Integer> ids) {
         LambdaQueryWrapper<StockIn> delWrapper = new LambdaQueryWrapper<>();

--
Gitblit v1.9.3