From 97f048ce14db07ee41ca05f9c7010dfe132150e4 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 11:06:59 +0800
Subject: [PATCH] feat(mes): 补生产准备检查与仓储收发存汇总接口,附 CFWJ 演示数据种子脚本
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java | 48 ++++++++++++++++++++++++++++++++++++++----------
1 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java
index a0ce794..9fc60b5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java
@@ -25,6 +25,7 @@
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemTypeService;
import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
+import cn.iocoder.yudao.module.mes.service.pro.material.MesProMaterialRequirementService;
import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductBomService;
import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderBomService;
@@ -32,6 +33,7 @@
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
@@ -72,6 +74,8 @@
private MesWmMaterialStockMapper materialStockMapper;
@Resource
private ErpPurchaseOrderApi purchaseOrderApi;
+ @Resource
+ private MesProMaterialRequirementService materialRequirementService;
@PostMapping("/create")
@Operation(summary = "鍒涘缓宸ュ崟 BOM")
@@ -115,6 +119,19 @@
return success(new PageResult<>(buildWorkOrderBomRespVOList(pageResult.getList()), pageResult.getTotal()));
}
+ @GetMapping("/item-list-preview")
+ @Operation(summary = "鎸変骇鍝佸拰鏁伴噺棰勮杈呮枡闇�姹傦紙鏂板宸ュ崟鏃跺垽鏂簱瀛樻槸鍚﹀厖瓒筹級")
+ @Parameters({
+ @Parameter(name = "productId", description = "浜у搧缂栧彿", required = true),
+ @Parameter(name = "quantity", description = "鐢熶骇鏁伴噺", required = true)
+ })
+ @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
+ public CommonResult<List<MesProWorkOrderItemRespVO>> previewItemList(
+ @RequestParam("productId") Long productId,
+ @RequestParam("quantity") BigDecimal quantity) {
+ return success(materialRequirementService.getItemListByProduct(productId, quantity));
+ }
+
@GetMapping("/item-list-by-work-order-id")
@Operation(summary = "鑾峰緱宸ュ崟鐗╂枡闇�姹傚垪琛�")
@Parameter(name = "workOrderId", description = "宸ュ崟缂栧彿", required = true)
@@ -126,19 +143,15 @@
return success(Collections.emptyList());
}
- // 2. 鑾峰彇宸ュ崟宸ュ簭鍒楄〃锛堝惈鍚勫伐搴忕殑鎶曟枡鏄庣粏涓庝骇鍑哄搧锛�
- List<MesProWorkOrderProcessDO> processList = workOrderProcessService
- .getWorkOrderProcessListByWorkOrderId(workOrderId);
- if (CollUtil.isEmpty(processList)) {
-
- return success(Collections.emptyList());
- }
-
- // 3. 鑾峰彇宸ュ崟 BOM 琛岋紙鍚勫伐搴忕殑鎶曟枡璁板綍锛屾寜 processId 鍒嗙粍浣跨敤锛�
+ // 2. 鑾峰彇宸ュ崟 BOM 琛岋紙鍚勫伐搴忕殑鎶曟枡璁板綍锛屽崟鑰楀彛寰勶級
List<MesProWorkOrderBomDO> bomList = workOrderBomService.getWorkOrderBomListByWorkOrderId(workOrderId);
if (CollUtil.isEmpty(bomList)) {
return success(Collections.emptyList());
}
+
+ // 3. 鑾峰彇宸ュ崟宸ュ簭鍒楄〃锛堝惈鍚勫伐搴忕殑鎶曟枡鏄庣粏涓庝骇鍑哄搧锛�
+ List<MesProWorkOrderProcessDO> processList = workOrderProcessService
+ .getWorkOrderProcessListByWorkOrderId(workOrderId);
// 4. 閫氳繃浜у搧ID鍙嶆煡宸ヨ壓璺嚎锛堝伐鍗� routeId 鍙兘涓虹┖锛�
Long routeId = null;
@@ -150,7 +163,22 @@
}
// 5. 鎸夊伐搴忎骇鍑洪摼閫愬眰灞曞紑 BOM锛屽緱鍒板彾瀛愮墿鏂欙紙姣忓崟浣嶆垚鍝佺殑鐢ㄩ噺锛�
- Map<Long, BigDecimal> leafItems = buildWorkOrderItems(processList, bomList, routeId);
+ Map<Long, BigDecimal> leafItems = CollUtil.isEmpty(processList)
+ ? Collections.emptyMap()
+ : buildWorkOrderItems(processList, bomList, routeId);
+ // 5.1 鍥為��锛氬伐鍗曟病鏈夊伐搴忥紝鎴栨姇鏂欐湭鎸傚湪鏈�鍚庝竴閬撳伐搴忎笂锛堜緥濡傛姇鏂欓厤缃湪棣栭亾閰嶆枡宸ュ簭锛夋椂锛�
+ // 閫愬眰灞曞紑浼氬緱鍒扮┖缁撴灉銆傛鏃舵寜鍏ㄩ儴鎶曟枡琛屾眹鎬诲崟鑰楋紝涓庛�屾寜宸ュ崟鐢熸垚棰嗘枡鍗曘�嶇殑鍙栨暟鍙e緞淇濇寔涓�鑷达紝
+ // 鍚﹀垯宸ュ崟鏄庢槑鏈夋姇鏂欍�侀鏂欎篃棰嗚繃浜嗭紝鎵撳嵃棰嗘枡鍗曞嵈鏄剧ず銆屾殏鏃犺緟鏂欓渶姹傘�嶃��
+ if (CollUtil.isEmpty(leafItems)) {
+ Map<Long, BigDecimal> allBomItems = new LinkedHashMap<>();
+ for (MesProWorkOrderBomDO bom : bomList) {
+ if (bom.getItemId() == null || bom.getQuantity() == null) {
+ continue;
+ }
+ allBomItems.merge(bom.getItemId(), bom.getQuantity(), BigDecimal::add);
+ }
+ leafItems = allBomItems;
+ }
if (CollUtil.isEmpty(leafItems)) {
return success(Collections.emptyList());
}
--
Gitblit v1.9.3