10 天以前 67c5d3ea86cfaad45c0150b96949dbcb6729b4d0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
@@ -14,9 +14,11 @@
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productissue.MesWmProductIssueMapper;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductIssueStatusEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockReserveBizTypeEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
import cn.iocoder.yudao.module.mes.service.wm.stockreserve.MesWmStockReserveService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
@@ -63,6 +65,8 @@
    private MesWmWarehouseLocationService locationService;
    @Resource
    private MesWmWarehouseAreaService areaService;
    @Resource
    private MesWmStockReserveService stockReserveService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -143,6 +147,22 @@
            throw exception(WM_PRODUCT_ISSUE_DETAIL_QUANTITY_MISMATCH);
        }
        // 创建库存占用(按明细占用库存)
        List<MesWmProductIssueDetailDO> details = issueDetailService.getProductIssueDetailListByIssueId(id);
        for (MesWmProductIssueDetailDO detail : details) {
            if (detail.getMaterialStockId() != null && detail.getQuantity() != null) {
                stockReserveService.createReserve(
                        detail.getMaterialStockId(),
                        MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(),
                        id,
                        issue.getCode(),
                        detail.getId(),
                        detail.getItemId(),
                        detail.getQuantity()
                );
            }
        }
        // 执行拣货(待拣货 → 待执行领出)
        issueMapper.updateById(new MesWmProductIssueDO()
                .setId(id).setStatus(MesWmProductIssueStatusEnum.APPROVED.getStatus()));
@@ -166,10 +186,13 @@
            throw exception(WM_PRODUCT_ISSUE_DETAIL_QUANTITY_MISMATCH);
        }
        // 2. 遍历所有明细,创建库存事务(扣减库存 + 记录流水)
        // 2. 确认占用转出库(释放占用量)
        stockReserveService.confirmReserveToOutbound(MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(), id);
        // 3. 遍历所有明细,创建库存事务(扣减库存 + 记录流水)
        createTransactionList(issue);
        // 3. 更新出库单状态 + 领料日期
        // 4. 更新出库单状态 + 领料日期
        issueMapper.updateById(new MesWmProductIssueDO()
                .setId(id).setStatus(MesWmProductIssueStatusEnum.FINISHED.getStatus())
                .setIssueDate(LocalDateTime.now()));
@@ -216,6 +239,9 @@
            throw exception(WM_PRODUCT_ISSUE_CANCEL_NOT_ALLOWED);
        }
        // 释放库存占用
        stockReserveService.releaseReserve(MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(), id);
        // 取消
        issueMapper.updateById(new MesWmProductIssueDO()
                .setId(id).setStatus(MesWmProductIssueStatusEnum.CANCELED.getStatus()));