From d39e4f7d839167c16425086dfa2f8747bccfdff9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 17:39:01 +0800
Subject: [PATCH] feat: 打通销售采购财务闭环并完成累计业务优化
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/scrap/MesWmScrapReceiptController.java | 43 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/scrap/MesWmScrapReceiptController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/scrap/MesWmScrapReceiptController.java
index b77debc..60d9a9d 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/scrap/MesWmScrapReceiptController.java
+++ b/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')")
--
Gitblit v1.9.3