liyong
8 天以前 1ab2b329a40decba8ff7eefbeb158ff259aceb6d
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/materialstock/MesWmMaterialStockServiceImpl.java
@@ -243,22 +243,31 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long adjustMaterialStock(MesWmMaterialStockAdjustReqVO reqVO) {
    public Long adjustMaterialStockIn(MesWmMaterialStockAdjustReqVO reqVO) {
        return doAdjustMaterialStock(reqVO, true);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long adjustMaterialStockOut(MesWmMaterialStockAdjustReqVO reqVO) {
        return doAdjustMaterialStock(reqVO, false);
    }
    /**
     * 执行库存调整
     *
     * @param reqVO     调整请求
     * @param isInbound 是否为入库(true=入库,false=出库)
     * @return 库存记录ID
     */
    private Long doAdjustMaterialStock(MesWmMaterialStockAdjustReqVO reqVO, boolean isInbound) {
        // 1. 校验物料存在且启用
        MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
        // 2. 判断是入库还是出库
        BigDecimal quantity = reqVO.getQuantity();
        if (quantity == null || quantity.compareTo(BigDecimal.ZERO) == 0) {
            throw exception(WM_MATERIAL_STOCK_QUANTITY_INVALID);
        }
        boolean isInbound = quantity.compareTo(BigDecimal.ZERO) > 0;
        int bizType = isInbound ? MesBizTypeConstants.WM_STOCK_ADJUST_IN : MesBizTypeConstants.WM_STOCK_ADJUST_OUT;
        // 3. 校验库位混放规则
        // 2. 校验库位混放规则
        checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), reqVO.getBatchId());
        // 4. 获取或创建库存记录
        // 3. 获取或创建库存记录
        MesWmMaterialStockDO stock = getOrCreateMaterialStock(
                reqVO.getItemId(),
                reqVO.getWarehouseId(),
@@ -270,10 +279,14 @@
                LocalDateTime.now()
        );
        // 4. 计算变动数量:入库为正,出库为负
        BigDecimal quantity = isInbound ? reqVO.getQuantity() : reqVO.getQuantity().negate();
        // 5. 更新库存数量(出库时校验库存充足)
        updateMaterialStockQuantity(stock.getId(), quantity, !isInbound);
        // 6. 创建库存事务流水
        int bizType = isInbound ? MesBizTypeConstants.WM_STOCK_ADJUST_IN : MesBizTypeConstants.WM_STOCK_ADJUST_OUT;
        MesWmTransactionSaveReqDTO transaction = new MesWmTransactionSaveReqDTO()
                .setType(isInbound ? MesWmTransactionTypeEnum.IN.getType() : MesWmTransactionTypeEnum.OUT.getType())
                .setBizType(bizType)