From 51401d2c54214af5b52b66e3e7bea22233efdda5 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 22 一月 2026 10:05:37 +0800
Subject: [PATCH] feat(sales): 入库出库接口

---
 src/main/java/com/ruoyi/stock/pojo/StockInventory.java                    |    9 ++
 src/main/java/com/ruoyi/stock/service/StockInventoryService.java          |    9 ++
 src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java                  |   19 ++++
 src/main/java/com/ruoyi/stock/pojo/StockInRecord.java                     |    4 
 src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java            |   10 ++
 src/main/resources/mapper/stock/StockInventoryMapper.xml                  |   34 ++++++++
 src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java |   18 ++++
 src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java                    |    2 
 src/main/java/com/ruoyi/stock/controller/StockInventoryController.java    |   34 ++++++++
 src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java  |   18 ++++
 src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java |   69 +++++++++++++++++
 src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java                   |    2 
 12 files changed, 224 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
index b564a09..0993470 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -1,5 +1,16 @@
 package com.ruoyi.stock.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.pojo.StockInventory;
+import com.ruoyi.stock.service.StockInventoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -13,6 +24,29 @@
  */
 @RestController
 @RequestMapping("/stockInventory")
+@Api(tags = "搴撳瓨琛�")
 public class StockInventoryController {
 
+    @Autowired
+    private StockInventoryService stockInventoryService;
+
+    @GetMapping("/pagestockInventory")
+    @ApiOperation("鍒嗛〉鏌ヨ搴撳瓨")
+    public R pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
+        IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.pagestockInventory(page, stockInventoryDto);
+        return R.ok(stockInventoryDtoIPage);
+    }
+
+    @PostMapping("/addstockInventory")
+    @ApiOperation("鏂板搴撳瓨")
+    public R addstockInventory(StockInventoryDto stockInventoryDto) {
+        return R.ok(stockInventoryService.addstockInventory(stockInventoryDto));
+    }
+
+
+    @PostMapping("/subtractStockInventory")
+    @ApiOperation("鎵e噺搴撳瓨")
+    public R subtractStockInventory(StockInventoryDto stockInventoryDto) {
+        return R.ok(stockInventoryService.subtractStockInventory(stockInventoryDto));
+    }
 }
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
index 312eec9..2ac682c 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -1,7 +1,9 @@
 package com.ruoyi.stock.dto;
 
 import com.ruoyi.stock.pojo.StockInRecord;
+import lombok.Data;
 
+@Data
 public class StockInRecordDto extends StockInRecord {
     /**
      * 浜у搧鍚嶇О
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
new file mode 100644
index 0000000..709facf
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.stock.dto;
+
+import com.ruoyi.stock.pojo.StockInventory;
+import lombok.Data;
+
+@Data
+public class StockInventoryDto extends StockInventory {
+
+    private String productName;
+    private String model;
+    private String unit;
+
+
+    //鍏ュ簱绫诲瀷
+    private String recordType;
+
+    //鍏ュ簱绫诲瀷瀵瑰簲鐨刬d
+    private Long recordId;
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
index 74f4134..3463cc3 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
@@ -1,8 +1,12 @@
 package com.ruoyi.stock.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.stock.dto.StockInventoryDto;
 import com.ruoyi.stock.pojo.StockInventory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -15,4 +19,10 @@
 @Mapper
 public interface StockInventoryMapper extends BaseMapper<StockInventory> {
 
+    IPage<StockInventoryDto> pagestockInventory(Page page, @Param("ew") StockInventoryDto stockInventoryDto);
+
+
+    int updateAddStockInventory(@Param("ew") StockInventoryDto stockInventoryDto);
+
+    int updateSubtractStockInventory(@Param("ew") StockInventoryDto stockInventoryDto);
 }
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
index 1ac862a..98b3d4b 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -28,10 +28,10 @@
     @ApiModelProperty(value = "鍏ュ簱鏁伴噺")
     private BigDecimal stockInNum;
 
-    @ApiModelProperty(value = "璁板綍绫诲瀷")
+    @ApiModelProperty(value = "璁板綍绫诲瀷  閲囪喘鍏ュ簱/鐢熶骇鍏ュ簱/璐ㄩ噺鍏ュ簱/鑷畾涔夊叆搴�")
     private String recordType;
 
-    @ApiModelProperty(value = "璁板綍ID")
+    @ApiModelProperty(value = "璁板綍ID  salesProductId/ProductrMainId/qualityInspectId/0")
     private Long recordId;
 
     @ApiModelProperty(value = "浜у搧瑙勬牸ID")
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
index 4dcc34f..9f36343 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
@@ -10,6 +10,9 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import org.springframework.lang.Nullable;
+
+import javax.validation.constraints.NotBlank;
 
 /**
  * <p>
@@ -31,7 +34,8 @@
     private Long id;
 
     @ApiModelProperty("瑙勬牸id")
-    private Integer productModelId;
+    @NotBlank(message = "涓嶈兘涓虹┖")
+    private Long productModelId;
 
     @ApiModelProperty("鏁伴噺")
     private BigDecimal qualitity;
@@ -51,4 +55,7 @@
 
     @ApiModelProperty("棰勮鏁伴噺")
     private Integer warnNum;
+
+    @ApiModelProperty("绉熸埛id")
+    private Integer tenantId;
 }
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
index 0511e37..0ca3630 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
@@ -36,7 +36,7 @@
     private BigDecimal stockOutNum;
 
     @ApiModelProperty("鍏ュ簱鏉ユ簮id")
-    private Integer recordId;
+    private Long recordId;
 
     @ApiModelProperty("鍏ュ簱绫诲瀷")
     private String recordType;
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
index eb6c9b8..bc523e4 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -1,5 +1,9 @@
 package com.ruoyi.stock.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryDto;
 import com.ruoyi.stock.pojo.StockInventory;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -13,4 +17,9 @@
  */
 public interface StockInventoryService extends IService<StockInventory> {
 
+    IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto);
+
+    Boolean addstockInventory(StockInventoryDto stockInventoryDto);
+
+    Boolean subtractStockInventory(StockInventoryDto stockInventoryDto);
 }
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index 894cab1..e360c95 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.stock.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;
@@ -8,8 +9,11 @@
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.staff.pojo.StaffOnJob;
 import com.ruoyi.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.dto.StockInventoryDto;
 import com.ruoyi.stock.mapper.StockInRecordMapper;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
 import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.pojo.StockInventory;
 import com.ruoyi.stock.service.StockInRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -21,6 +25,8 @@
 public class StockInRecordServiceImpl extends ServiceImpl<StockInRecordMapper, StockInRecord> implements StockInRecordService {
     @Autowired
     private StockInRecordMapper stockInRecordMapper;
+    @Autowired
+    private StockInventoryMapper stockInventoryMapper;
 
     @Override
     public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) {
@@ -55,6 +61,18 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int batchDelete(List<Long> ids) {
+        for (Long id : ids) {
+            StockInRecord stockInRecord = stockInRecordMapper.selectById(id);
+            StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, id));
+            if (stockInventory == null) {
+                throw new BaseException("璇ュ叆搴撹褰曚笅娌℃湁瀵瑰簲鐨勪骇鍝�,鏃犳硶鍒犻櫎!!!");
+            }else {
+                StockInventoryDto stockInRecordDto = new StockInventoryDto();
+                stockInRecordDto.setProductModelId(stockInventory.getProductModelId());
+                stockInRecordDto.setQualitity(stockInRecord.getStockInNum());
+                stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto);
+            }
+        }
         return stockInRecordMapper.deleteBatchIds(ids);
     }
 }
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 f59a5cb..da7f4b4 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -1,10 +1,23 @@
 package com.ruoyi.stock.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.dto.StockOutRecordDto;
+import com.ruoyi.stock.pojo.StockInRecord;
 import com.ruoyi.stock.pojo.StockInventory;
 import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.service.StockInRecordService;
 import com.ruoyi.stock.service.StockInventoryService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.stock.service.StockOutRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -17,4 +30,60 @@
 @Service
 public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
 
+    @Autowired
+    private  StockInventoryMapper stockInventoryMapper;
+
+    @Autowired
+    private StockInRecordService stockInRecordService;
+    @Autowired
+    private StockOutRecordService stockOutRecordService;
+
+    @Override
+    public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
+        return stockInventoryMapper.pagestockInventory(page, stockInventoryDto);
+    }
+
+    //鍏ュ簱璋冪敤
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
+        //鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
+        StockInRecordDto stockInRecordDto = new StockInRecordDto();
+        stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
+        stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
+        stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
+        stockInRecordService.add(stockInRecordDto);
+        //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
+        //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
+        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+        if (ObjectUtils.isEmpty(oldStockInventory)) {
+            StockInventory newStockInventory = new StockInventory();
+            newStockInventory.setProductModelId(stockInventoryDto.getProductModelId());
+            newStockInventory.setQualitity(stockInventoryDto.getQualitity());
+            newStockInventory.setVersion(1);
+            stockInventoryMapper.insert(newStockInventory);
+        }else {
+             stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
+        }
+        return true;
+    }
+
+    //鍑哄簱璋冪敤
+    @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());
+        stockOutRecordService.add(stockOutRecordDto);
+        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+        if (ObjectUtils.isEmpty(oldStockInventory)) {
+            throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
+        }else {
+            stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
+        }
+        return true;
+    }
 }
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
index d5c9c44..7d88f35 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -1,14 +1,18 @@
 package com.ruoyi.stock.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.common.exception.base.BaseException;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.stock.dto.StockInventoryDto;
 import com.ruoyi.stock.dto.StockOutRecordDto;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
 import com.ruoyi.stock.mapper.StockOutRecordMapper;
 import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.pojo.StockInventory;
 import com.ruoyi.stock.pojo.StockOutRecord;
 import com.ruoyi.stock.service.StockOutRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +32,8 @@
 public class StockOutRecordServiceImpl extends ServiceImpl<StockOutRecordMapper, StockOutRecord> implements StockOutRecordService {
     @Autowired
     private StockOutRecordMapper stockOutRecordMapper;
+    @Autowired
+    private StockInventoryMapper stockInventoryMapper;
 
     @Override
     public IPage<StockOutRecordDto> listPage(Page page, StockOutRecordDto stockOutRecordDto) {
@@ -58,6 +64,18 @@
 
     @Override
     public int batchDelete(List<Long> ids) {
+        for (Long id : ids) {
+            StockOutRecord stockOutRecord = stockOutRecordMapper.selectById(id);
+            StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, id));
+            if (stockInventory == null) {
+                throw new BaseException("璇ュ叆搴撹褰曚笅娌℃湁瀵瑰簲鐨勪骇鍝�,鏃犳硶鍒犻櫎!!!");
+            }else {
+                StockInventoryDto stockInRecordDto = new StockInventoryDto();
+                stockInRecordDto.setProductModelId(stockInventory.getProductModelId());
+                stockInRecordDto.setQualitity(stockOutRecord.getStockOutNum());
+                stockInventoryMapper.updateAddStockInventory(stockInRecordDto);
+            }
+        }
         return stockOutRecordMapper.deleteBatchIds(ids);
     }
 }
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 5d493dc..52a855a 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -13,5 +13,39 @@
         <result column="locked_quantity" property="lockedQuantity" />
         <result column="warn_num" property="warnNum" />
     </resultMap>
+    <update id="updateAddStockInventory">
+        update stock_inventory
+        <set>
+            <if test="qualitity != null">
+                qualitity = qualitity + #{ew.qualitity},
+            </if>
+           <if test="version != null">
+               version = version + 1,
+            </if>
+        </set>
+        where product_model_id = #{ew.productModelId}
+    </update>
+    <update id="updateSubtractStockInventory">
+        update stock_inventory
+        <set>
+            <if test="qualitity != null">
+                qualitity = qualitity - #{ew.qualitity},
+            </if>
+            <if test="version != null">
+                version = version + 1,
+            </if>
+        </set>
+        where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity}
+    </update>
+    <select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
+        select si.*,
+               pm.model,
+               pm.unit,
+               p.product_name
+        from stock_inventory si
+                 left join product_model pm on si.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        where 1 = 1
+    </select>
 
 </mapper>

--
Gitblit v1.9.3