liyong
2026-05-11 67fd075db23af8c66af86a291cd83863794aaf86
fix(stock): 解决库存盘点期间出入库操作冲突问题

- 在StockInRecordServiceImpl中添加库存锁定检查,防止盘点期间入库操作
- 在StockOutRecordServiceImpl中添加库存锁定检查,防止盘点期间出库操作
- 修复StockInventoryCheckPlanServiceImpl中的库存锁定状态更新逻辑
- 修正StockInventoryMapper.xml中的updateLocked方法参数映射
- 在库存查询SQL中添加锁定状态过滤条件,确保只查询未锁定库存
已修改4个文件
19 ■■■■■ 文件已修改
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/stock/StockInventoryMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -5,8 +5,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.ReviewStatusEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
@@ -24,12 +25,12 @@
import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockInRecordService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
@Service
@@ -192,6 +193,9 @@
                if ("0".equals(stockInRecord.getType())) {
                    // 合格入库 -> 先查库存,存在则更新,不存在则新增
                    StockInventory stockInventory = getStockInventory(stockInRecord.getProductModelId(), stockInRecord.getBatchNo());
                    if (stockInventory.getLocked().equals( true)&&!stockInRecord.getRecordType().equals(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_IN.getCode())) {
                        throw new BaseException("正在库存盘点,无法入库,入库批次:" + stockInRecord.getInboundBatches());
                    }
                    StockInventoryDto stockInventoryDto = new StockInventoryDto();
                    stockInventoryDto.setProductModelId(stockInRecord.getProductModelId());
                    stockInventoryDto.setBatchNo(stockInRecord.getBatchNo());
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java
@@ -140,7 +140,7 @@
                stockOutRecordService.batchApprove(Collections.singletonList(stock.getId()), 1);
            }
            //更新库存锁定状态
            stockInventoryService.updateLocked(stockInventoryDto.getProductModelId(),stockInventoryDto.getBatchNo(), true);
            stockInventoryService.updateLocked(stockInventoryDto.getProductModelId(),stockInventoryDto.getBatchNo(), false);
        }
        stockInventoryCheckItemMapper.updateById(stockInventoryCheckPlanDto.getCheckItems());
        plan.setStatus(2);
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -177,6 +177,9 @@
                    if (stockInventory == null) {
                        throw new BaseException("合格库存记录不存在,出库批次:" + stockOutRecord.getOutboundBatches());
                    }
                    if (stockInventory.getLocked().equals( true)&&!stockOutRecord.getRecordType().equals(StockOutQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_OUT.getCode())) {
                        throw new BaseException("正在库存盘点,无法出库,出库批次:" + stockOutRecord.getOutboundBatches());
                    }
                    StockInventoryDto stockInventoryDto = new StockInventoryDto();
                    stockInventoryDto.setProductModelId(stockOutRecord.getProductModelId());
                    stockInventoryDto.setBatchNo(stockOutRecord.getBatchNo());
src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -66,12 +66,12 @@
    <update id="updateLocked">
        update stock_inventory
        set locked = #{locked}
        where product_model_id = #{ew.productModelId}
        where product_model_id = #{productModelId}
        <if test="batchNo == null">
            and batch_no is null
        </if>
            <if test="batchNo != null">
                and batch_no = #{ew.batchNo}
                and batch_no = #{batchNo}
            </if>
    </update>
    <select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
@@ -487,7 +487,7 @@
        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
        where 1 = 1 and si.locked = 0
        <if test="ew.productName != null and ew.productName !=''">
            and p.product_name like concat('%',#{ew.productName},'%')
        </if>