gaoluyang
3 天以前 d39e4f7d839167c16425086dfa2f8747bccfdff9
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/scrap/MesWmScrapReceiptController.java
@@ -42,6 +42,49 @@
    @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')")