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 +++++++++++++------
 src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java                   |    2 
 src/main/resources/mapper/inventory/StockManagementMapper.xml                  |   28 ++-
 src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java                  |    4 
 src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java        |   88 ++++++----
 src/main/resources/mapper/inventory/StockOutMapper.xml                         |   26 ++-
 src/main/java/com/ruoyi/inventory/dto/StockinDto.java                          |    8 
 src/main/java/com/ruoyi/inventory/pojo/StockOut.java                           |    7 
 src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java           |    2 
 src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java                  |    4 
 src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java |   66 ++++++++
 src/main/java/com/ruoyi/inventory/service/StockManagementService.java          |    5 
 src/main/java/com/ruoyi/inventory/service/StockInService.java                  |    2 
 src/main/java/com/ruoyi/inventory/dto/StockoutDto.java                         |    4 
 src/main/resources/mapper/inventory/StockInMapper.xml                          |   30 ++-
 src/main/java/com/ruoyi/inventory/pojo/StockManagement.java                    |    8 
 src/main/java/com/ruoyi/inventory/controller/StockManagementController.java    |    4 
 src/main/java/com/ruoyi/inventory/pojo/StockIn.java                            |    6 
 src/main/java/com/ruoyi/inventory/controller/StockOutController.java           |    2 
 19 files changed, 314 insertions(+), 138 deletions(-)

diff --git a/src/main/java/com/ruoyi/inventory/controller/StockManagementController.java b/src/main/java/com/ruoyi/inventory/controller/StockManagementController.java
index 3a38b4f..fba713f 100644
--- a/src/main/java/com/ruoyi/inventory/controller/StockManagementController.java
+++ b/src/main/java/com/ruoyi/inventory/controller/StockManagementController.java
@@ -47,4 +47,8 @@
     public void stockmanageExport(HttpServletResponse response, StockManagementDto stockManagementDto) {
         stockManagementService.stockManageExport(response, stockManagementDto);
     }
+    @RequestMapping("/stockout")
+    public AjaxResult stockout(@RequestBody StockManagement stockManagement) {
+        return success(stockManagementService.stockout(stockManagement));
+    }
 }
diff --git a/src/main/java/com/ruoyi/inventory/controller/StockOutController.java b/src/main/java/com/ruoyi/inventory/controller/StockOutController.java
index d201d66..c850bff 100644
--- a/src/main/java/com/ruoyi/inventory/controller/StockOutController.java
+++ b/src/main/java/com/ruoyi/inventory/controller/StockOutController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.inventory.dto.StockoutDto;
 import com.ruoyi.inventory.mapper.StockManagementMapper;
 import com.ruoyi.inventory.pojo.StockIn;
+import com.ruoyi.inventory.pojo.StockManagement;
 import com.ruoyi.inventory.pojo.StockOut;
 import com.ruoyi.inventory.service.StockOutService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,4 +61,5 @@
         stockOutService.delStockOut(ids);
         return AjaxResult.success();
     }
+
 }
diff --git a/src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java b/src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java
index b92308b..e896ca0 100644
--- a/src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java
+++ b/src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java
@@ -33,4 +33,8 @@
      * 瑙勬牸鍨嬪彿
      */
     private String specificationModel;
+    /**
+     * 鍏ュ簱浜�
+     */
+    private String nickname;
 }
diff --git a/src/main/java/com/ruoyi/inventory/dto/StockinDto.java b/src/main/java/com/ruoyi/inventory/dto/StockinDto.java
index c325f5e..6cc55e0 100644
--- a/src/main/java/com/ruoyi/inventory/dto/StockinDto.java
+++ b/src/main/java/com/ruoyi/inventory/dto/StockinDto.java
@@ -13,6 +13,10 @@
 import java.util.Date;
 @Data
 public class StockinDto extends StockIn{
+    /**
+     * 鍏ュ簱浜�
+     */
+    private String nickname;
 
     @ApiModelProperty(value = "浜у搧澶х被")
     private String productCategory;
@@ -45,8 +49,4 @@
     private BigDecimal taxExclusiveTotalPrice;
     @ApiModelProperty(value = "渚涘簲鍟嗗悕绉�")
     private String supplierName;
-    @TableField(exist = false)
-    private Date startTime;
-    @TableField(exist = false)
-    private Date endTime;
 }
diff --git a/src/main/java/com/ruoyi/inventory/dto/StockoutDto.java b/src/main/java/com/ruoyi/inventory/dto/StockoutDto.java
index c3605b8..85ac947 100644
--- a/src/main/java/com/ruoyi/inventory/dto/StockoutDto.java
+++ b/src/main/java/com/ruoyi/inventory/dto/StockoutDto.java
@@ -35,4 +35,8 @@
      * 瑙勬牸鍨嬪彿
      */
     private String specificationModel;
+    /**
+     * 鍏ュ簱浜�
+     */
+    private String nickname;
 }
diff --git a/src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java b/src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java
index 7680b0a..4b3fee6 100644
--- a/src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java
+++ b/src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java
@@ -31,5 +31,5 @@
     @Excel(name = "绋庣巼")
     private BigDecimal taxRate;
     @Excel(name = "鍏ュ簱浜�")
-    private String inboundPerson;
+    private String nickname;
 }
diff --git a/src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java b/src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java
index 73f77ce..790678a 100644
--- a/src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java
+++ b/src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java
@@ -35,5 +35,5 @@
     @Excel(name = "绋庣巼")
     private BigDecimal taxRate;
     @Excel(name = "鍏ュ簱浜�")
-    private String inboundPerson;
+    private String nickname;
 }
diff --git a/src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java b/src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java
index f62d765..04e1d45 100644
--- a/src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java
+++ b/src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java
@@ -8,7 +8,7 @@
 @Data
 public class StockOutExcelDto {
     @Excel(name = "鍑哄簱鏃堕棿")
-    private String inboundTime;
+    private String outboundTime;
     @Excel(name = "鍑哄簱鎵规")
     private String inboundBatch;
     @Excel(name = "浜у搧澶х被")
@@ -28,6 +28,6 @@
     @Excel(name = "绋庣巼")
     private BigDecimal taxRate;
     @Excel(name = "鍑哄簱浜�")
-    private String outboundPerson;
+    private String nickname;
 
 }
diff --git a/src/main/java/com/ruoyi/inventory/pojo/StockIn.java b/src/main/java/com/ruoyi/inventory/pojo/StockIn.java
index 886682d..8eb7902 100644
--- a/src/main/java/com/ruoyi/inventory/pojo/StockIn.java
+++ b/src/main/java/com/ruoyi/inventory/pojo/StockIn.java
@@ -25,7 +25,7 @@
     /**
      * 浜у搧id
      */
-    private Long productId;
+    private Integer productRecordid;
 
     /**
      * 鍏ュ簱鏃堕棿
@@ -41,7 +41,7 @@
     /**
      * 渚涘簲鍟唅d
      */
-    private Long supplierId;
+    private Integer supplierId;
     /**
      * 鍏ュ簱鏁伴噺
      */
@@ -52,7 +52,7 @@
     /**
      * 鍏ュ簱浜�
      */
-    private String inboundPerson;
+    private Long userId;
 //    tenant_id
     /**
      * 绉熸埛ID
diff --git a/src/main/java/com/ruoyi/inventory/pojo/StockManagement.java b/src/main/java/com/ruoyi/inventory/pojo/StockManagement.java
index 0a25c1c..935bc91 100644
--- a/src/main/java/com/ruoyi/inventory/pojo/StockManagement.java
+++ b/src/main/java/com/ruoyi/inventory/pojo/StockManagement.java
@@ -25,15 +25,15 @@
     /**
      * 浜у搧id
      */
-    private Long productId;
+    private Integer productRecordid;
 
     /**
      * 褰撳墠搴撳瓨閲�
      */
     private Integer stockQuantity;
 
-
-    private Long supplierId;
+    private String inboundBatch;
+    private Integer supplierId;
 
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date boundTime;
@@ -43,7 +43,7 @@
     /**
      * 鍏ュ簱浜�
      */
-    private String inboundPerson;
+    private Long userId;
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
diff --git a/src/main/java/com/ruoyi/inventory/pojo/StockOut.java b/src/main/java/com/ruoyi/inventory/pojo/StockOut.java
index d3a90a1..47c494a 100644
--- a/src/main/java/com/ruoyi/inventory/pojo/StockOut.java
+++ b/src/main/java/com/ruoyi/inventory/pojo/StockOut.java
@@ -24,7 +24,7 @@
     /**
      * 浜у搧id
      */
-    private Long productId;
+    private Integer productRecordid;
 
     /**
      * 鍑哄簱鏃堕棿
@@ -39,7 +39,7 @@
     /**
      * 渚涘簲鍟嗗悕绉�
      */
-    private Long supplierId;
+    private Integer supplierId;
 
     /**
      * 鍏ュ簱鏁伴噺
@@ -51,7 +51,8 @@
     /**
      * 鍑哄簱浜�
      */
-    private String inboundPerson;
+    private Long userId;
+    private Integer stockmanageId;
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
diff --git a/src/main/java/com/ruoyi/inventory/service/StockInService.java b/src/main/java/com/ruoyi/inventory/service/StockInService.java
index 3229280..551a09e 100644
--- a/src/main/java/com/ruoyi/inventory/service/StockInService.java
+++ b/src/main/java/com/ruoyi/inventory/service/StockInService.java
@@ -19,7 +19,7 @@
 
     StockIn getStockInById(Long id);
 
-    int updateStockIn(StockIn stockIn);
+    boolean updateStockIn(StockIn stockIn);
 
     int delStockin(List<Integer> ids);
 //    PageInfo<StockinProcuct> getStockInPage(Integer pageNum, Integer pageSize, StockInQueryDTO query);
diff --git a/src/main/java/com/ruoyi/inventory/service/StockManagementService.java b/src/main/java/com/ruoyi/inventory/service/StockManagementService.java
index 1f8bbdc..4d75978 100644
--- a/src/main/java/com/ruoyi/inventory/service/StockManagementService.java
+++ b/src/main/java/com/ruoyi/inventory/service/StockManagementService.java
@@ -3,9 +3,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.dto.SupplierManageDto;
 import com.ruoyi.inventory.dto.StockManagementDto;
-import com.ruoyi.inventory.dto.StockinDto;
 import com.ruoyi.inventory.pojo.StockManagement;
 
 import javax.servlet.http.HttpServletResponse;
@@ -18,5 +16,6 @@
     int delStockManage(List<Integer> ids);
     IPage<StockManagement> selectStockManagePage(Page page, StockManagementDto stockManagementdto);
     void stockManageExport(HttpServletResponse response, StockManagementDto stockManagementdto);
-
+    int stockout(StockManagement stockManagement);
+    int addStockManage(StockManagement stockManagement);
 }
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<>();
diff --git a/src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java b/src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java
index 18a48dd..a19d90b 100644
--- a/src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java
@@ -1,15 +1,21 @@
 package com.ruoyi.inventory.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.excel.SupplierManageExcelDto;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.SupplierManage;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.inventory.dto.StockManagementDto;
 import com.ruoyi.inventory.excel.StockManagementExcelDto;
 import com.ruoyi.inventory.mapper.StockManagementMapper;
+import com.ruoyi.inventory.mapper.StockOutMapper;
 import com.ruoyi.inventory.pojo.StockManagement;
+import com.ruoyi.inventory.pojo.StockOut;
 import com.ruoyi.inventory.service.StockManagementService;
+import com.ruoyi.purchase.mapper.ProductRecordMapper;
+import com.ruoyi.purchase.pojo.ProductRecord;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -20,6 +26,14 @@
 public class StockManagementServiceImpl extends ServiceImpl<StockManagementMapper,StockManagement> implements StockManagementService {
     @Autowired
     private StockManagementMapper stockManagementMapper;
+    @Autowired
+    private StockOutMapper stockOutMapper;
+    @Autowired
+    private ProductRecordMapper productRecordMapper;
+    @Autowired
+    private SupplierManageMapper supplierManageMapper;
+
+
 
     @Override
     public int updateStockManagement(StockManagement stockManagement) {
@@ -43,4 +57,54 @@
         ExcelUtil<StockManagementExcelDto> util = new ExcelUtil<StockManagementExcelDto>(StockManagementExcelDto.class);
         util.exportExcel(response, stockManageList, "搴撳瓨瀵煎嚭");
     }
+
+    @Override
+    public int stockout(StockManagement stockManagement) {
+//        闇�瑕佽繘琛屽垽鏂紝搴撳瓨鏁伴噺鏄惁瓒冲
+        StockManagement stockManagement1 = stockManagementMapper.selectById(stockManagement.getId());
+        if (stockManagement1.getStockQuantity() < stockManagement.getStockQuantity()) {
+            throw new RuntimeException("搴撳瓨鏁伴噺涓嶈冻");
+        }else if (stockManagement1.getStockQuantity().equals(stockManagement.getStockQuantity())){
+//            鍑忓幓鐨勬暟閲忚鍦ㄥ嚭搴撹褰曡〃涓姞涓�鏉℃暟鎹�
+            StockOut stockOut = new StockOut();
+            stockOut.setInboundQuantity(stockManagement.getStockQuantity());
+            stockOut.setProductRecordid(stockManagement1.getProductRecordid());
+            stockOut.setSupplierId(stockManagement1.getSupplierId());
+            stockOut.setUserId(stockManagement.getUserId());
+            stockOut.setInboundTime(stockManagement1.getBoundTime());
+            stockOutMapper.insert(stockOut);
+            return stockManagementMapper.deleteById(stockManagement.getId());
+        }
+        else {
+            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() - stockManagement.getStockQuantity());
+            StockOut stockOut = new StockOut();
+            stockOut.setInboundQuantity(stockManagement.getStockQuantity());
+            stockOut.setProductRecordid(stockManagement1.getProductRecordid());
+            stockOut.setSupplierId(stockManagement1.getSupplierId());
+            stockOut.setUserId(stockManagement.getUserId());
+            stockOut.setInboundTime(stockManagement1.getBoundTime());
+            stockOutMapper.insert(stockOut);
+            return stockManagementMapper.updateById(stockManagement1);
+        }
+    }
+
+//    娣诲姞搴撳瓨鏂规硶
+    @Override
+    public int addStockManage(StockManagement stockManagement) {
+//        闇�瑕佽繘琛屽垽鏂�
+        LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(ProductRecord::getProductId, stockManagement.getProductRecordid());
+        ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1);
+        if (productRecord == null) {
+            throw new RuntimeException("浜у搧涓嶅瓨鍦�");
+        }
+        LambdaQueryWrapper<SupplierManage> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(SupplierManage::getId, stockManagement.getSupplierId());
+        SupplierManage supplierManage = supplierManageMapper.selectOne(queryWrapper2);
+        System.out.println(supplierManage+"11");
+        if (supplierManage == null) {
+            throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪");
+        }
+        return stockManagementMapper.insert(stockManagement);
+    }
 }
diff --git a/src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java b/src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java
index e7dfd58..d6e2383 100644
--- a/src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java
+++ b/src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.basic.excel.SupplierManageExcelDto;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.SupplierManage;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.inventory.dto.StockoutDto;
 import com.ruoyi.inventory.excel.StockOutExcelDto;
@@ -13,6 +15,8 @@
 import com.ruoyi.inventory.pojo.StockOut;
 import com.ruoyi.inventory.service.StockOutService;
 
+import com.ruoyi.purchase.mapper.ProductRecordMapper;
+import com.ruoyi.purchase.pojo.ProductRecord;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,6 +32,10 @@
     private StockOutMapper stockOutMapper;
     @Autowired
     private StockManagementMapper stockManagementMapper;
+    @Autowired
+    private ProductRecordMapper productRecordMapper;
+    @Autowired
+    private SupplierManageMapper supplierManageMapper;
 
 
     @Override
@@ -44,47 +52,56 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveStockout(StockOut stockOut) {
-//    杩涜鍒ゆ柇鏄惁瀛樺湪鐩稿悓鐨勪骇鍝乮d鍜屼緵搴斿晢id
-        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(StockManagement::getProductId, stockOut.getProductId());
-        queryWrapper.eq(StockManagement::getSupplierId, stockOut.getSupplierId());
-        StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
-        if (stockManagement1!= null) {
-//            鍒ゆ柇搴撳瓨鏁伴噺鏄惁澶т簬鍑哄簱鏁伴噺
-            if (stockManagement1.getStockQuantity() < stockOut.getInboundQuantity()) {
-                throw new RuntimeException("搴撳瓨鏁伴噺涓嶈冻");
-            }
-            stockOutMapper.insert(stockOut);
-            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() - stockOut.getInboundQuantity());
-            stockManagement1.setInboundTime(new Date());
-            stockManagementMapper.updateById(stockManagement1);
+//    杩涜鍒ゆ柇鏄惁瀛樺湪鐩稿悓鐨勪骇鍝乮d鍜屼緵搴斿晢id,瑕佸垽鏂璸roduct_id鍦ㄨ〃product_record涓槸鍚﹀瓨鍦紝鍥犱负stock_out琛ㄤ腑鐨刾roduct_id鏄痯roduct_record琛ㄤ腑鐨刾roduct_id鍏宠仈鐨�
+        LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(ProductRecord::getProductId, stockOut.getProductRecordid());
+        ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1);
+        if (productRecord == null) {
+            throw new RuntimeException("浜у搧涓嶅瓨鍦�");
         }
-        else {
-            throw new RuntimeException("搴撳瓨涓嶅瓨鍦�");
+        LambdaQueryWrapper<SupplierManage> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(SupplierManage::getId, stockOut.getSupplierId());
+        SupplierManage supplierManage = supplierManageMapper.selectOne(queryWrapper2);
+        if (supplierManage == null) {
+            throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪");
+        }
+        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(StockManagement::getProductRecordid, stockOut.getProductRecordid());
+        queryWrapper.eq(StockManagement::getSupplierId, stockOut.getSupplierId());
+        StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper);
+        if (stockManagement != null) {
+            stockOut.setStockmanageId(stockManagement.getId());
+            stockOutMapper.insert(stockOut);
+        }else {
+            throw new RuntimeException("搴撳瓨涓笉瀛樺湪璇ヤ骇鍝佸拰渚涘簲鍟�");
         }
     }
 
     @Override
     public int updateStockOut(StockOut stockOut) {
-//        闇�瑕佽繘琛屽垽鏂湪搴撳瓨涓槸鍚﹀瓨鍦ㄨ浜у搧锛屽鏋滃瓨鍦紝灏辫繘琛屼慨鏀癸紝鍚﹀垯灏辨姏鍑哄紓甯�
-        StockOut stockOut1 = stockOutMapper.selectById(stockOut.getId());
-            LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(StockManagement::getProductId, stockOut.getProductId());
-            StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
-            if (stockManagement1!= null) {
-//                鍒ゆ柇搴撳瓨鏁伴噺鏄惁澶т簬鍑哄簱鏁伴噺
-                if (stockManagement1.getStockQuantity()+stockOut1.getInboundQuantity() < stockOut.getInboundQuantity()) {
-                    throw new RuntimeException("搴撳瓨鏁伴噺涓嶈冻");
-                }
-                stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() + stockOut1.getInboundQuantity() - stockOut.getInboundQuantity());
-                stockManagement1.setInboundTime(stockOut.getInboundTime());
-                stockManagement1.setBoundTime(new Date());
-                System.out.println(stockManagement1 + "22");
-                stockManagementMapper.updateById(stockManagement1);
-            } else {
-                throw new RuntimeException("搴撳瓨涓嶅瓨鍦�");
-            }
-        return stockOutMapper.updateById(stockOut);
+//      淇敼鐨勬椂鍊欒鍒ゆ柇鏄惁瀛樺湪鐩稿悓鐨勪骇鍝乮d鍜屼緵搴斿晢id
+        LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(ProductRecord::getProductId, stockOut.getProductRecordid());
+        ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1);
+        if (productRecord == null) {
+            throw new RuntimeException("浜у搧涓嶅瓨鍦�");
+        }
+        LambdaQueryWrapper<SupplierManage> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(SupplierManage::getId, stockOut.getSupplierId());
+        SupplierManage supplierManage = supplierManageMapper.selectOne(queryWrapper2);
+        if (supplierManage == null) {
+            throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪");
+        }
+        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(StockManagement::getProductRecordid, stockOut.getProductRecordid());
+        queryWrapper.eq(StockManagement::getSupplierId, stockOut.getSupplierId());
+        StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper);
+        if (stockManagement != null) {
+            stockOut.setStockmanageId(stockManagement.getId());
+            return stockOutMapper.updateById(stockOut);
+        }else {
+            throw new RuntimeException("搴撳瓨涓笉瀛樺湪璇ヤ骇鍝佸拰渚涘簲鍟�");
+        }
     }
 
     @Override
@@ -98,4 +115,5 @@
         ExcelUtil<StockOutExcelDto> util = new ExcelUtil<StockOutExcelDto>(StockOutExcelDto.class);
         util.exportExcel(response, stockoutList, "渚涘簲鍟嗗鍑�");
     }
+
 }
diff --git a/src/main/resources/mapper/inventory/StockInMapper.xml b/src/main/resources/mapper/inventory/StockInMapper.xml
index fca267e..aa53b7d 100644
--- a/src/main/resources/mapper/inventory/StockInMapper.xml
+++ b/src/main/resources/mapper/inventory/StockInMapper.xml
@@ -39,7 +39,7 @@
     <select id="selectStockInWithProductInfo" resultType="com.ruoyi.inventory.dto.StockinDto">
         SELECT
         T1.id,
-        T1.product_id,
+        T1.product_recordid,
         T1.inbound_time,
         T1.inbound_batch,
         T1.supplier_id,
@@ -48,31 +48,29 @@
         T2.tax_inclusive_total_price,
         T2.tax_rate,
         T2.tax_exclusive_total_price,
-        T1.inbound_person,
+        T1.user_id,
         T1.tenant_id,
         T2.product_category,
         T2.specification_model,
         T2.unit,
-        T3.supplier_name
+        T3.supplier_name,
+        T4.nick_name
         FROM
         stock_in T1
         INNER JOIN
         product_record T2
         ON
-        T1.product_id = T2.product_id
+        T1.product_recordid = T2.id
         INNER JOIN
         supplier_manage T3
         ON
         T1.supplier_id = T3.id
+        INNER JOIN sys_user T4
+        ON
+        T1.user_id = T4.user_id
         <where>
             <if test="stockinDto.supplierName != null and stockinDto.supplierName != ''">
                 AND T3.supplier_name LIKE CONCAT('%', #{stockinDto.supplierName}, '%')
-            </if>
-            <if test="stockinDto.startTime != null and stockinDto.startTime != ''">
-                AND T1.inbound_time &gt;= #{stockinDto.startTime}
-            </if>
-            <if test="stockinDto.endTime != null and stockinDto.endTime != ''">
-                AND T1.inbound_time &lt;= #{stockinDto.endTime}
             </if>
         </where>
         ORDER BY T1.inbound_time DESC
@@ -81,7 +79,7 @@
     <select id="stockinExportList" resultType="com.ruoyi.inventory.excel.StockInExcelDto">
         SELECT
         T1.id,
-        T1.product_id,
+        T1.product_recordid,
         T1.inbound_time,
         T1.inbound_batch,
         T1.supplier_id,
@@ -90,22 +88,26 @@
         T2.tax_inclusive_total_price,
         T2.tax_rate,
         T2.tax_exclusive_total_price,
-        T1.inbound_person,
+        T1.user_id,
         T1.tenant_id,
         T2.product_category,
         T2.specification_model,
         T2.unit,
-        T3.supplier_name
+        T3.supplier_name,
+        T4.nick_name
         FROM
         stock_in T1
         INNER JOIN
         product_record T2
         ON
-        T1.product_id = T2.product_id
+        T1.product_recordid = T2.id
         INNER JOIN
         supplier_manage T3
         ON
         T1.supplier_id = T3.id
+        INNER JOIN sys_user T4
+        ON
+        T1.user_id = T4.user_id
         <where>
             <if test="stockinDto.supplierName != null and stockinDto.supplierName != ''">
                 AND T3.supplier_name LIKE CONCAT('%', #{stockinDto.supplierName}, '%')
diff --git a/src/main/resources/mapper/inventory/StockManagementMapper.xml b/src/main/resources/mapper/inventory/StockManagementMapper.xml
index a1f6ef4..4bc349f 100644
--- a/src/main/resources/mapper/inventory/StockManagementMapper.xml
+++ b/src/main/resources/mapper/inventory/StockManagementMapper.xml
@@ -12,27 +12,33 @@
             T2.specification_model,
             T3.supplier_name,
             T1.id,
-            T1.product_id,
+            T1.product_recordid,
             T1.stock_quantity,
             T2.tax_inclusive_unit_price,
             T2.tax_inclusive_total_price,
             T2.tax_rate,
             T2.tax_exclusive_total_price,
-            T1.inbound_person,
+            T1.user_id,
             T1.supplier_id,
             T1.tenant_id,
             T1.bound_time,
-            T1.inbound_time
+            T1.inbound_time,
+            T4.nick_name,
+            T1.inbound_batch
         FROM
             stock_management T1
                 INNER JOIN
             product_record T2
             ON
-                T1.product_id = T2.product_id
+                T1.product_recordid = T2.id
                 INNER JOIN
             supplier_manage T3
             ON
                 T1.supplier_id = T3.id
+                INNER JOIN
+            sys_user T4
+            ON
+                T1.user_id = T4.user_id
         <where>
             <if test="stockManagementDto.supplierName != null and stockManagementDto.supplierName != ''">
                 AND T3.supplier_name LIKE CONCAT('%', #{stockManagementDto.supplierName}, '%')
@@ -47,27 +53,33 @@
         T2.specification_model,
         T3.supplier_name,
         T1.id,
-        T1.product_id,
+        T1.product_recordid,
         T1.stock_quantity,
         T2.tax_inclusive_unit_price,
         T2.tax_inclusive_total_price,
         T2.tax_rate,
         T2.tax_exclusive_total_price,
-        T1.inbound_person,
+        T1.user_id,
         T1.supplier_id,
         T1.tenant_id,
         T1.bound_time,
-        T1.inbound_time
+        T1.inbound_time,
+        T4.nick_name,
+        T1.inbound_batch
         FROM
         stock_management T1
         INNER JOIN
         product_record T2
         ON
-        T1.product_id = T2.product_id
+        T1.product_recordid = T2.id
         INNER JOIN
         supplier_manage T3
         ON
         T1.supplier_id = T3.id
+        INNER JOIN
+        sys_user T4
+        ON
+        T1.user_id = T4.user_id
         <where>
             <if test="stockManagementDto.supplierName != null and stockManagementDto.supplierName != ''">
                 AND T3.supplier_name LIKE CONCAT('%', #{stockManagementDto.supplierName}, '%')
diff --git a/src/main/resources/mapper/inventory/StockOutMapper.xml b/src/main/resources/mapper/inventory/StockOutMapper.xml
index a551498..024494e 100644
--- a/src/main/resources/mapper/inventory/StockOutMapper.xml
+++ b/src/main/resources/mapper/inventory/StockOutMapper.xml
@@ -7,7 +7,7 @@
     <select id="selectStockOutBypage" resultType="com.ruoyi.inventory.dto.StockoutDto">
         SELECT
         T1.id,
-        T1.product_id,
+        T1.product_recordid,
         T1.inbound_time,
         T1.inbound_batch,
         T1.supplier_id,
@@ -16,22 +16,27 @@
         T2.tax_inclusive_total_price,
         T2.tax_rate,
         T2.tax_exclusive_total_price,
-        T1.inbound_person,
+        T1.user_id,
         T1.tenant_id,
         T2.product_category,
         T2.specification_model,
         T2.unit,
-        T3.supplier_name
+        T3.supplier_name,
+        T4.nick_name
         FROM
         stock_out T1
         INNER JOIN
         product_record T2
         ON
-        T1.product_id = T2.product_id
+        T1.product_recordid = T2.id
         INNER JOIN
         supplier_manage T3
         ON
         T1.supplier_id = T3.id
+        INNER JOIN
+        sys_user T4
+        ON
+        T1.user_id = T4.user_id
         <where>
             <if test="stockOutdto.supplierName != null and stockOutdto.supplierName != ''">
                 AND T3.supplier_name LIKE CONCAT('%', #{stockOutdto.supplierName}, '%')
@@ -42,7 +47,7 @@
     <select id="stockoutExportList" resultType="com.ruoyi.inventory.excel.StockOutExcelDto">
         SELECT
         T1.id,
-        T1.product_id,
+        T1.productrecord_id,
         T1.inbound_time,
         T1.inbound_batch,
         T1.supplier_id,
@@ -51,22 +56,27 @@
         T2.tax_inclusive_total_price,
         T2.tax_rate,
         T2.tax_exclusive_total_price,
-        T1.inbound_person,
+        T1.user_id,
         T1.tenant_id,
         T2.product_category,
         T2.specification_model,
         T2.unit,
-        T3.supplier_name
+        T3.supplier_name,
+        T4.nick_name
         FROM
         stock_out T1
         INNER JOIN
         product_record T2
         ON
-        T1.product_id = T2.product_id
+        T1.productrecord_id = T2.id
         INNER JOIN
         supplier_manage T3
         ON
         T1.supplier_id = T3.id
+        INNER JOIN
+        sys_user T4
+        ON
+        T1.user_id = T4.user_id
         <where>
             <if test="stockOutdto.supplierName != null and stockOutdto.supplierName != ''">
                 AND T3.supplier_name LIKE CONCAT('%', #{stockOutdto.supplierName}, '%')

--
Gitblit v1.9.3