| | |
| | | @Resource private MesProWorkOrderMapper workOrderMapper; |
| | | @Resource private MesWmTransactionService transactionService; |
| | | @Resource private MesWmWarehouseAreaService areaService; |
| | | @Resource private cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService warehouseService; |
| | | @Resource private cn.iocoder.yudao.module.mdm.api.item.MdmItemApi itemApi; |
| | | |
| | | @GetMapping("/order-outputs") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-scrap-receipt:create')") |
| | | public CommonResult<List<OutputItem>> orderOutputs(@RequestParam("workOrderId") Long workOrderId) { |
| | | var order = workOrderMapper.selectById(workOrderId); |
| | | if (order == null || !java.util.Objects.equals(order.getStatus(), cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderStatusEnum.FINISHED.getStatus())) |
| | | throw new ServiceException(400, "仅已完成的生产订单可以登记废料"); |
| | | var list = receiptMapper.selectOrderOutputs(workOrderId, cn.iocoder.yudao.module.mes.enums.wm.MesWmProductProduceStatusEnum.FINISHED.getStatus()); |
| | | var items = itemApi.getItemMap(list.stream().map(OutputItem::getItemId).collect(java.util.stream.Collectors.toSet())); |
| | | list.forEach(output -> { var item = items.get(output.getItemId()); if (item != null) { output.setItemName(item.getName()); output.setItemCode(item.getCode()); } }); |
| | | return success(list); |
| | | } |
| | | |
| | | @PostMapping("/create-from-output") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-scrap-receipt:create')") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public CommonResult<Long> createFromOutput(@Valid @RequestBody CreateReq req) { |
| | | var locked = workOrderMapper.lockScheduleOrders(List.of(req.getWorkOrderId())); |
| | | if (locked.isEmpty() || !java.util.Objects.equals(locked.get(0).getStatus(), cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderStatusEnum.FINISHED.getStatus())) |
| | | throw new ServiceException(400, "仅已完成的生产订单可以登记废料"); |
| | | if (receiptMapper.selectOrderOutputs(req.getWorkOrderId(), cn.iocoder.yudao.module.mes.enums.wm.MesWmProductProduceStatusEnum.FINISHED.getStatus()).stream() |
| | | .noneMatch(item -> java.util.Objects.equals(item.getItemId(), req.getItemId()) |
| | | && java.util.Objects.equals(item.getBatchId(), req.getBatchId()) |
| | | && java.util.Objects.equals(cn.hutool.core.util.StrUtil.blankToDefault(item.getBatchCode(), ""), |
| | | cn.hutool.core.util.StrUtil.blankToDefault(req.getBatchCode(), "")))) |
| | | throw new ServiceException(400, "所选物料不是该订单的已完成产出"); |
| | | var warehouse = warehouseService.validateWarehouseExists(req.getWarehouseId()); |
| | | if (!java.util.Objects.equals("废料仓", warehouse.getWarehouseType()) && !java.util.Objects.equals("废料", warehouse.getWarehouseType())) |
| | | throw new ServiceException(400, "请选择仓库类型为废料仓的仓库"); |
| | | return create(req); |
| | | } |
| | | |
| | | @Data |
| | | public static class OutputItem { |
| | | private Long itemId; |
| | | private String itemCode; |
| | | private String itemName; |
| | | private Long batchId; |
| | | private String batchCode; |
| | | private BigDecimal quantity; |
| | | } |
| | | |
| | | @PostMapping("/create") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-scrap-receipt:create')") |