13 小时以前 1b3fd46c7ccbf636208bcf098c5588441bb71f78
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/materialstock/MesWmMaterialStockServiceImpl.java
@@ -18,6 +18,7 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.materialstock.MesWmMaterialStockMapper;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockStateEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
@@ -186,6 +187,7 @@
                .batchId(batchId).batchCode(batchCode).vendorId(vendorId)
                .quantity(BigDecimal.ZERO) // 初始数量为 0,由 updateMaterialStockQuantity 更新
                .receiptTime(receiptTime != null ? receiptTime : LocalDateTime.now())
                .stockState(MesWmStockStateEnum.TEMP.getState())
                .frozen(false)
                .build();
        materialStockMapper.insert(newStock);
@@ -201,6 +203,11 @@
    }
    @Override
    public List<MesWmMaterialStockDO> getMaterialStockListByItemAndBatch(Long itemId, Long batchId) {
        return materialStockMapper.selectListByItemAndBatch(itemId, batchId);
    }
    @Override
    public void updateMaterialStockQuantity(Long id, BigDecimal quantity, boolean checkFlag) {
        // 更新库存数量(Mapper 层 CAS 防负库存;checkFlag=false 时允许负数)
        int updatedRows = materialStockMapper.updateQuantity(id, quantity, checkFlag);
@@ -210,6 +217,11 @@
    }
    @Override
    public void updateMaterialStockState(Long id, Integer stockState) {
        materialStockMapper.updateById(new MesWmMaterialStockDO().setId(id).setStockState(stockState));
    }
    @Override
    public void checkAreaMixingRule(Long areaId, Long itemId, Long batchId) {
        // 1.1 校验库位必须存在
        MesWmWarehouseAreaDO area = areaService.validateWarehouseAreaExists(areaId);