| | |
| | | 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; |
| | |
| | | private MesWmWarehouseLocationService locationService; |
| | | @Resource |
| | | private MesWmWarehouseAreaService areaService; |
| | | @Resource |
| | | private MesWmStockReserveService stockReserveService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | 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())); |
| | |
| | | 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())); |
| | |
| | | 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())); |