From d2d106fc26e999f9ab11e4fad0b363150d4a6247 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 23 一月 2026 09:44:32 +0800
Subject: [PATCH] feat(sales): 不合格库存
---
src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java | 55 +++++++++++
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 85 +++++++++++++++++
src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java | 27 +++++
src/main/resources/mapper/stock/StockUninventoryMapper.xml | 52 ++++++++++
src/main/java/com/ruoyi/stock/service/StockUninventoryService.java | 24 ++++
src/main/java/com/ruoyi/stock/pojo/StockUninventory.java | 49 +++++++++
6 files changed, 292 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java
new file mode 100644
index 0000000..2bed6de
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java
@@ -0,0 +1,55 @@
+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.dto.StockUninventoryDto;
+import com.ruoyi.stock.service.StockInventoryService;
+import com.ruoyi.stock.service.StockUninventoryService;
+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;
+
+/**
+ * <p>
+ * 涓嶅悎鏍煎簱瀛樿〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-22 10:17:45
+ */
+@RestController
+@RequestMapping("/stockUninventory")
+public class StockUninventoryController {
+ @Autowired
+ private StockUninventoryService stockUninventoryService;
+
+ @GetMapping("/pagestockUninventory")
+ @ApiOperation("鍒嗛〉鏌ヨ搴撳瓨")
+ public R pagestockUninventory(Page page, StockUninventoryDto stockUninventoryDto) {
+ IPage<StockUninventoryDto> stockUninventoryDtoIPage = stockUninventoryService.pageStockUninventory(page, stockUninventoryDto);
+ return R.ok(stockUninventoryDtoIPage);
+ }
+
+ @PostMapping("/addstockUninventory")
+ @ApiOperation("鏂板搴撳瓨")
+ public R addstockUninventory(StockUninventoryDto stockUninventoryDto) {
+ stockUninventoryDto.setRecordType("涓嶅悎鏍艰嚜瀹氫箟鍏ュ簱");
+ stockUninventoryDto.setRecordId(0L);
+ return R.ok(stockUninventoryService.addStockUninventory(stockUninventoryDto));
+ }
+
+
+ @PostMapping("/subtractstockUninventory")
+ @ApiOperation("鎵e噺搴撳瓨")
+ public R subtractstockUninventory(StockUninventoryDto stockUninventoryDto) {
+ stockUninventoryDto.setRecordType("涓嶅悎鏍艰嚜瀹氫箟鍑哄簱");
+ stockUninventoryDto.setRecordId(0L);
+ return R.ok(stockUninventoryService.subtractStockUninventory(stockUninventoryDto));
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java
new file mode 100644
index 0000000..64ecc2c
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java
@@ -0,0 +1,27 @@
+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.StockUninventoryDto;
+import com.ruoyi.stock.pojo.StockUninventory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 涓嶅悎鏍煎簱瀛樿〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-22 10:17:45
+ */
+@Mapper
+public interface StockUninventoryMapper extends BaseMapper<StockUninventory> {
+
+ IPage<StockUninventoryDto> pageStockUninventory(Page page, @Param("ew") StockUninventoryDto stockUninventoryDto);
+
+ int updateSubtractStockUnInventory(StockUninventoryDto stockUninventoryDto);
+
+ int updateAddStockUnInventory(StockUninventoryDto stockUninventoryDto);
+}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java b/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
new file mode 100644
index 0000000..4496101
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
@@ -0,0 +1,49 @@
+package com.ruoyi.stock.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 涓嶅悎鏍煎簱瀛樿〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-22 10:17:45
+ */
+@Getter
+@Setter
+@TableName("stock_uninventory")
+@ApiModel(value = "StockUninventory瀵硅薄", description = "涓嶅悎鏍煎簱瀛樿〃")
+public class StockUninventory implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ private Long id;
+
+ @ApiModelProperty("瑙勬牸id")
+ private Long productModelId;
+
+ @ApiModelProperty("鏁伴噺")
+ private BigDecimal qualitity;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateTime;
+
+ @ApiModelProperty("鐗堟湰鍙�")
+ private Integer version;
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java b/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
new file mode 100644
index 0000000..e4b8d83
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.stock.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.stock.dto.StockUninventoryDto;
+import com.ruoyi.stock.pojo.StockUninventory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 涓嶅悎鏍煎簱瀛樿〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-22 10:17:45
+ */
+public interface StockUninventoryService extends IService<StockUninventory> {
+
+ IPage<StockUninventoryDto> pageStockUninventory(Page page, StockUninventoryDto stockUninventoryDto);
+
+ Integer addStockUninventory(StockUninventoryDto stockUninventoryDto);
+
+ Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto);
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
new file mode 100644
index 0000000..06096c5
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -0,0 +1,85 @@
+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.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.dto.StockOutRecordDto;
+import com.ruoyi.stock.dto.StockUninventoryDto;
+import com.ruoyi.stock.pojo.StockInventory;
+import com.ruoyi.stock.pojo.StockUninventory;
+import com.ruoyi.stock.mapper.StockUninventoryMapper;
+import com.ruoyi.stock.service.StockInRecordService;
+import com.ruoyi.stock.service.StockOutRecordService;
+import com.ruoyi.stock.service.StockUninventoryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * <p>
+ * 涓嶅悎鏍煎簱瀛樿〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-22 10:17:45
+ */
+@Service
+public class StockUninventoryServiceImpl extends ServiceImpl<StockUninventoryMapper, StockUninventory> implements StockUninventoryService {
+
+ private StockUninventoryMapper stockUninventoryMapper;
+ private StockOutRecordService stockOutRecordService;
+ private StockInRecordService stockInRecordService;
+
+ @Override
+ public IPage<StockUninventoryDto> pageStockUninventory(Page page, StockUninventoryDto stockUninventoryDto) {
+ return stockUninventoryMapper.pageStockUninventory(page, stockUninventoryDto);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Integer addStockUninventory(StockUninventoryDto stockUninventoryDto) {
+ //鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
+ StockInRecordDto stockInRecordDto = new StockInRecordDto();
+ stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId());
+ stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType());
+ stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity());
+ stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
+ stockInRecordDto.setType("1");
+ stockInRecordService.add(stockInRecordDto);
+ //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
+ //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
+ StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()));
+ if (ObjectUtils.isEmpty(oldStockUnInventory)) {
+ StockUninventory newStockUnInventory = new StockUninventory();
+ newStockUnInventory.setProductModelId(stockUninventoryDto.getProductModelId());
+ newStockUnInventory.setQualitity(stockUninventoryDto.getQualitity());
+ newStockUnInventory.setVersion(1);
+ stockUninventoryMapper.insert(newStockUnInventory);
+ }else {
+ stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto);
+ }
+ return 1;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto) {
+
+ // 鏂板鍑哄簱璁板綍
+ StockOutRecordDto stockOutRecordDto = new StockOutRecordDto();
+ stockOutRecordDto.setRecordId(stockUninventoryDto.getRecordId());
+ stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType());
+ stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity());
+ stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
+ stockOutRecordService.add(stockOutRecordDto);
+ StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()));
+ if (ObjectUtils.isEmpty(oldStockInventory)) {
+ throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
+ }else {
+ stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto);
+ }
+ return 1;
+ }
+}
diff --git a/src/main/resources/mapper/stock/StockUninventoryMapper.xml b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
new file mode 100644
index 0000000..22dcc3d
--- /dev/null
+++ b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.stock.mapper.StockUninventoryMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockUninventory">
+ <result column="id" property="id" />
+ <result column="product_model_id" property="productModelId" />
+ <result column="qualitity" property="qualitity" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="version" property="version" />
+ </resultMap>
+ <update id="updateSubtractStockUnInventory">
+ update stock_inventory
+ <set>
+ <if test="ew.qualitity != null">
+ qualitity = qualitity - #{ew.qualitity},
+ </if>
+ <if test="ew.version != null">
+ version = version + 1,
+ </if>
+ </set>
+ where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity}
+ </update>
+ <update id="updateAddStockUnInventory">
+ update stock_inventory
+ <set>
+ <if test="ew.qualitity != null">
+ qualitity = qualitity + #{ew.qualitity},
+ </if>
+ <if test="ew.version != null">
+ version = version + 1,
+ </if>
+ </set>
+ where product_model_id = #{ew.productModelId}
+ </update>
+ <select id="pageStockUninventory" resultType="com.ruoyi.stock.dto.StockUninventoryDto">
+ select su.*,
+ pm.model,
+ pm.unit,
+ p.product_name
+ from stock_uninventory su
+ left join product_model pm on su.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
+ where 1 = 1
+ <if test="ew.productName != null and ew.productName !=''">
+ and p.product_name like concat('%',#{ew.productName},'%')
+ </if>
+ </select>
+
+</mapper>
--
Gitblit v1.9.3