| | |
| | | private MesWmWarehouseLocationService locationService; |
| | | @Resource |
| | | private MesWmWarehouseAreaService areaService; |
| | | @Resource |
| | | private cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceDetailService productProduceDetailService; |
| | | |
| | | @Override |
| | | public Long createProductReceipt(MesWmProductReceiptSaveReqVO createReqVO) { |
| | |
| | | } |
| | | |
| | | String code = "AUTO-PR-" + produce.getId(); |
| | | MesWmProductReceiptDO existing = productReceiptMapper.selectByCode(code); |
| | | MesWmProductReceiptDO existing = productReceiptMapper.selectByProduceId(produce.getId()); |
| | | if (existing == null) { |
| | | existing = productReceiptMapper.selectByCode(code); // 兼容执行迁移 SQL 前生成的历史单据 |
| | | } |
| | | if (existing != null) { |
| | | return existing.getId(); |
| | | } |
| | |
| | | .code(code) |
| | | .name("生产完成自动入库-" + workOrderCode) |
| | | .workOrderId(produce.getWorkOrderId()) |
| | | .produceId(produce.getId()) |
| | | .itemId(firstMdmItemId) |
| | | .receiptDate(LocalDateTime.now()) |
| | | .status(MesWmProductReceiptStatusEnum.PREPARE.getStatus()) |
| | |
| | | MesMdItemDO item = mdItemService.getItem(produceLine.getItemId()); |
| | | Long mdmItemId = item != null && item.getMdmItemId() != null |
| | | ? item.getMdmItemId() : produceLine.getItemId(); |
| | | List<cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceDetailDO> details = |
| | | productProduceDetailService.getProductProduceDetailListByLineId(produceLine.getId()); |
| | | Long warehouseId = CollUtil.isNotEmpty(details) ? details.get(0).getWarehouseId() : virtualWarehouse.getId(); |
| | | Long locationId = CollUtil.isNotEmpty(details) ? details.get(0).getLocationId() : virtualLocation.getId(); |
| | | Long areaId = CollUtil.isNotEmpty(details) ? details.get(0).getAreaId() : virtualArea.getId(); |
| | | MesWmMaterialStockDO stock = materialStockService.getMaterialStockByCompositeKey( |
| | | mdmItemId, virtualWarehouse.getId(), virtualLocation.getId(), virtualArea.getId(), |
| | | mdmItemId, warehouseId, locationId, areaId, |
| | | produceLine.getBatchId(), null); |
| | | productReceiptLineMapper.insert(MesWmProductReceiptLineDO.builder() |
| | | .receiptId(receipt.getId()) |
| | |
| | | throw exception(WM_PRODUCT_RECPT_NO_DETAIL); |
| | | } |
| | | |
| | | // 创建库存事务 |
| | | createTransactionList(receipt, details); |
| | | // 自动入库单来源产出单已按工艺路线仓库记账,此处仅完成业务单据,避免实际仓库重复入库。 |
| | | // 手工创建的产品入库单仍执行“虚拟线边库 OUT + 实际仓库 IN”。 |
| | | if (receipt.getProduceId() == null) { |
| | | createTransactionList(receipt, details); |
| | | } |
| | | |
| | | // 更新收货单状态 |
| | | productReceiptMapper.updateById(new MesWmProductReceiptDO() |