From 0889e6b6045796115b254e34237a932d9241c0f8 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 10:54:50 +0800
Subject: [PATCH] 诚发五金:入库/调整/移库/调拨/退料/盘点不再要求手选库区库位,后端自动落到仓库默认库区库位

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java |   28 ++++++++++++++++++++++------
 1 files changed, 22 insertions(+), 6 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 a44b286..3ef59ed 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")
@@ -100,7 +104,6 @@
     @GetMapping("/get")
     @Operation(summary = "鑾峰緱宸ュ崟 BOM")
     @Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<MesProWorkOrderBomRespVO> getWorkOrderBom(@RequestParam("id") Long id) {
         MesProWorkOrderBomDO workOrderBom = workOrderBomService.getWorkOrderBom(id);
         if (workOrderBom == null) {
@@ -111,16 +114,27 @@
 
     @GetMapping("/page")
     @Operation(summary = "鑾峰緱宸ュ崟 BOM 鍒嗛〉")
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<PageResult<MesProWorkOrderBomRespVO>> getWorkOrderBomPage(@Valid MesProWorkOrderBomPageReqVO pageReqVO) {
         PageResult<MesProWorkOrderBomDO> pageResult = workOrderBomService.getWorkOrderBomPage(pageReqVO);
         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)
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<List<MesProWorkOrderItemRespVO>> getWorkOrderBomItemListByWorkOrderId(
             @RequestParam("workOrderId") Long workOrderId) {
         // 1. 鑾峰彇宸ュ崟
@@ -245,11 +259,13 @@
             }
             List<MesProWorkOrderBomDO> items = new ArrayList<>();
             for (MesProWorkOrderBomDO bom : bomList) {
-                if (bom.getProcessId().equals(process.getProcessId())) {
+                // 璺宠繃鏃犲伐搴忕紪鍙风殑鎶曟枡琛岋紙宸ュ崟 BOM 涓粎鎸夊伐搴忕淮鎶ゆ姇鏂欐槑缁嗭紝鏃犲伐搴忕殑琛屼笉鍙備笌灞曞紑锛�
+                // 涓� getProcessId 鍙兘涓� null锛岀洿鎺� equals 浼� NPE锛�
+                if (Objects.equals(bom.getProcessId(), process.getProcessId())) {
                     items.add(bom);
                 }
             }
-            processBomMap.put(process.getOutputItemId(), items);
+            processBomMap.put(Long.valueOf(process.getOutputItemId().split(",")[0].trim()), items);
         }
 
         // 2. 鍙栨渶鍚庝竴閬撳伐搴忥紙sort 鏈�澶э級浣滀负灞曞紑璧风偣锛岄�愬眰鍚戝墠閫掓帹
@@ -263,7 +279,7 @@
         // 3. 浠ユ渶鍚庝竴閬撳伐搴忕殑鎶曟枡涓鸿捣鐐�
         Map<Long, BigDecimal> currentLayer = new LinkedHashMap<>();
         for (MesProWorkOrderBomDO bom : bomList) {
-            if (bom.getProcessId().equals(lastProcess.getProcessId())) {
+            if (Objects.equals(bom.getProcessId(), lastProcess.getProcessId())) {
                 currentLayer.merge(bom.getItemId(), bom.getQuantity(), BigDecimal::add);
             }
         }

--
Gitblit v1.9.3