liyong
2026-04-27 da068b4738f50cdb37a8aa27d417283b2a4f11a8
feat(stock): 添加产品模型ID查询功能并优化库存服务

- 在ProductModelMapper中新增selectProductModelById方法用于根据ID查询产品模型
- 为库存服务注入ProductModelMapper依赖
- 在库存出库逻辑中验证产品模型存在性并提供详细错误信息
- 优化库存不足和产品不存在的错误提示信息
- 修复代码中的空行和格式问题
- 优化库存冻结和解冻操作的数量比较逻辑
已修改3个文件
35 ■■■■ 文件已修改
src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/basic/ProductModelMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -7,6 +7,7 @@
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import org.apache.ibatis.annotations.Param;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
@@ -26,4 +27,6 @@
    ProductModel selectLatestRecord();
    List<Map<String, Object>> getProductAndModelList();
    ProductModel selectProductModelById(@NotBlank(message = "不能为空")@Param("productModelId") Long productModelId);
}
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -5,9 +5,10 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -47,11 +48,13 @@
@AllArgsConstructor
public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
    private  StockInventoryMapper stockInventoryMapper;
    private StockInRecordService stockInRecordService;
    private StockOutRecordService stockOutRecordService;
    private StockUninventoryService stockUninventoryService;
    private SalesLedgerProductMapper salesLedgerProductMapper;
    private final StockInventoryMapper stockInventoryMapper;
    private final StockInRecordService stockInRecordService;
    private final StockOutRecordService stockOutRecordService;
    private final StockUninventoryService stockUninventoryService;
    private final SalesLedgerProductMapper salesLedgerProductMapper;
    private final ProductModelMapper productModelMapper;
    @Override
    public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
        return stockInventoryMapper.pagestockInventory(page, stockInventoryDto);
@@ -104,22 +107,30 @@
        stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
        stockOutRecordDto.setType("0");
        stockOutRecordService.add(stockOutRecordDto);
        ProductModel productModel = productModelMapper.selectProductModelById(stockInventoryDto.getProductModelId());
        if (ObjectUtils.isEmpty(productModel)) {
            throw new RuntimeException(String.format("产品名称:%s,规格型号:%s不存在",productModel.getProductName(), productModel.getModel()));
        }
        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
        if (ObjectUtils.isEmpty(oldStockInventory)) {
            throw new RuntimeException("产品库存不存在");
            throw new RuntimeException(String.format("产品库存不存在,产品名称:%s,规格型号:%s",
                    productModel.getProductName(), productModel.getModel()));
        }
        BigDecimal lockedQty = oldStockInventory.getLockedQuantity();
        if (lockedQty == null) {
            lockedQty = BigDecimal.ZERO;
        }
        if (stockInventoryDto.getQualitity().compareTo(oldStockInventory.getQualitity().subtract(lockedQty)) > 0) {
            throw new RuntimeException("库存不足无法出库");
            throw new RuntimeException(String.format("库存不足无法出库,产品名称:%s,规格型号:%s",
                    productModel.getProductName(), productModel.getModel()));
        }
        stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
        return true;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R importStockInventory(MultipartFile file) {
src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -121,5 +121,10 @@
        left join product p on p.id = pm.product_id
        order by p.id,pm.id desc
    </select>
    <select id="selectProductModelById" resultType="com.ruoyi.basic.pojo.ProductModel">
        select pm.model,p.product_name,pm.id from product_model pm
                 left join product p on p.id = pm.product_id
                 where pm.id = #{productModelId}
    </select>
</mapper>