From cbadfd8e691ab335965202a984db16e55ac8e42c Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 30 十月 2026 17:51:06 +0800
Subject: [PATCH] 诚发五金:按技术方案重构业务功能并补齐库结构

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java |   80 ++++++++++++++++++++++++++--------------
 1 files changed, 52 insertions(+), 28 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java
index 37ab219..c94d823 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java
@@ -12,23 +12,29 @@
 import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.*;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.factory.MesMdFactoryDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO;
-import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderProductionStatusEnum;
+import cn.iocoder.yudao.module.mes.service.md.factory.MesMdFactoryService;
 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
+import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkshopService;
 import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
 import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
 import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO;
 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.servlet.http.HttpServletResponse;
@@ -68,6 +74,12 @@
     private MesProTaskService taskService;
     @Resource
     private MesProProcessService processService;
+    @Resource
+    private AdminUserApi adminUserApi;
+    @Resource
+    private MesMdFactoryService factoryService;
+    @Resource
+    private MesMdWorkshopService workshopService;
 
     @PostMapping("/create")
     @Operation(summary = "鍒涘缓鐢熶骇宸ュ崟")
@@ -96,7 +108,6 @@
     @GetMapping("/get")
     @Operation(summary = "鑾峰緱鐢熶骇宸ュ崟")
     @Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<MesProWorkOrderRespVO> getWorkOrder(@RequestParam("id") Long id) {
         MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(id);
         if (workOrder == null) {
@@ -107,7 +118,6 @@
 
     @GetMapping("/page")
     @Operation(summary = "鑾峰緱鐢熶骇宸ュ崟鍒嗛〉")
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<PageResult<MesProWorkOrderRespVO>> getWorkOrderPage(@Valid MesProWorkOrderPageReqVO pageReqVO) {
         PageResult<MesProWorkOrderDO> pageResult = workOrderService.getWorkOrderPage(pageReqVO);
         return success(new PageResult<>(buildWorkOrderRespVOList(pageResult.getList()), pageResult.getTotal()));
@@ -115,14 +125,12 @@
 
     @GetMapping("/approve-process-list")
     @Operation(summary = "鑾峰彇瀹℃壒鎶ュ伐鐨勬祦绋嬪畾涔夊垪琛�")
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<List<Map<String, Object>>> getWorkOrderApproveProcessDefinitionList() {
         return success(workOrderService.getWorkOrderApproveProcessDefinitionList());
     }
 
     @GetMapping("/schedule-page")
     @Operation(summary = "鑾峰緱鐢熶骇宸ュ崟璋冨害鐘舵�佸垎椤�")
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<PageResult<MesProWorkOrderRespVO>> getWorkOrderSchedulePage(@Valid MesProWorkOrderPageReqVO pageReqVO) {
         PageResult<MesProWorkOrderDO> pageResult = workOrderService.getWorkOrderSchedulePage(pageReqVO);
         return success(new PageResult<>(buildWorkOrderRespVOList(pageResult.getList()), pageResult.getTotal()));
@@ -149,6 +157,28 @@
         return success(true);
     }
 
+    @PutMapping("/update-batch")
+    @Operation(summary = "鏇存柊宸ュ崟鐢熶骇鎵规", description = "鏈畬宸ョ殑宸ュ崟锛堝惈鐢熶骇涓級閮藉彲浠ョ淮鎶ゆ壒娆″彿")
+    @Parameters({
+            @Parameter(name = "id", description = "缂栧彿", required = true),
+            @Parameter(name = "batchCode", description = "鎵规鍙�", required = true)
+    })
+    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
+    public CommonResult<Boolean> updateWorkOrderBatch(@RequestParam("id") Long id,
+                                                      @RequestParam("batchCode") String batchCode) {
+        workOrderService.updateWorkOrderBatch(id, batchCode);
+        return success(true);
+    }
+
+    @PutMapping("/start")
+    @Operation(summary = "鍚姩鐢熶骇", description = "宸茬‘璁ゅ伐鍗曞紑宸ワ紝鍐欏叆瀹為檯寮�宸ユ椂闂达紝宸ュ崟杩涘叆鐢熶骇涓�")
+    @Parameter(name = "id", description = "缂栧彿", required = true)
+    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
+    public CommonResult<Boolean> startWorkOrder(@RequestParam("id") Long id) {
+        workOrderService.startWorkOrder(id);
+        return success(true);
+    }
+
     @PutMapping("/finish")
     @Operation(summary = "瀹屾垚宸ュ崟")
     @Parameter(name = "id", description = "缂栧彿", required = true)
@@ -170,7 +200,6 @@
     @GetMapping("/progress/{id}")
     @Operation(summary = "鑾峰彇宸ュ崟杩涘害璇︽儏")
     @Parameter(name = "id", description = "缂栧彿", required = true)
-    @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
     public CommonResult<MesProWorkOrderProgressRespVO> getWorkOrderProgress(@PathVariable("id") Long id) {
         return success(workOrderService.getWorkOrderProgress(id));
     }
@@ -203,6 +232,12 @@
                 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
         Map<Long, MesProWorkOrderDO> parentMap = workOrderService.getWorkOrderMap(
                 convertSet(list, MesProWorkOrderDO::getParentId));
+        Map<Long, MesMdFactoryDO> factoryMap = factoryService.getFactoryMap(
+                convertSet(list, MesProWorkOrderDO::getFactoryId));
+        Map<Long, MesMdWorkshopDO> workshopMap = workshopService.getWorkshopMap(
+                convertSet(list, MesProWorkOrderDO::getWorkshopId));
+        Map<Long, AdminUserRespDTO> startUserMap = adminUserApi.getUserMap(
+                convertSet(list, MesProWorkOrderDO::getStartUserId));
                 
         // 鑾峰彇鎵�鏈夊叧鑱旂殑宸ュ崟宸ュ簭鍜屼换鍔�
         List<MesProWorkOrderProcessDO> allProcesses = workOrderProcessService.getWorkOrderProcessListByWorkOrderIds(workOrderIds);
@@ -228,6 +263,13 @@
                     supplier -> vo.setVendorName(supplier.getName()));
             MapUtils.findAndThen(parentMap, vo.getParentId(),
                     parent -> vo.setParentCode(parent.getCode()));
+            MapUtils.findAndThen(factoryMap, vo.getFactoryId(),
+                    factory -> vo.setFactoryName(factory.getName()));
+            MapUtils.findAndThen(workshopMap, vo.getWorkshopId(),
+                    workshop -> vo.setWorkshopName(workshop.getName()));
+            MapUtils.findAndThen(startUserMap, vo.getStartUserId(),
+                    user -> vo.setStartUserName(user.getNickname()));
+            vo.setStarted(vo.getActualStartTime() != null);
 
             // 璁$畻瀹屽伐杩涘害 (quantityProduced / quantity * 100)
             BigDecimal produced = vo.getQuantityProduced() != null ? vo.getQuantityProduced() : BigDecimal.ZERO;
@@ -237,14 +279,12 @@
                 vo.setCompletionProgress(produced.compareTo(BigDecimal.ZERO) > 0 ? new BigDecimal("100.00") : BigDecimal.ZERO);
             }
                     
-            // 璁$畻杩涘害鍜岀姸鎬�
+            // 璁$畻宸ュ簭杩涘害
             List<MesProWorkOrderProcessDO> processes = woProcessMap.getOrDefault(vo.getId(), Collections.emptyList());
             List<MesProTaskDO> tasks = woTaskMap.getOrDefault(vo.getId(), Collections.emptyList());
-            
+
             List<MesProWorkOrderProcessProgressVO> progressList = new ArrayList<>();
-            boolean allCompleted = !processes.isEmpty();
-            boolean anyStarted = false;
-            
+
             Map<Long, List<MesProTaskDO>> processTaskMap = convertMultiMap(tasks, MesProTaskDO::getProcessId);
             
             for (MesProWorkOrderProcessDO process : processes) {
@@ -263,25 +303,9 @@
                     progressVO.setProgress(totalProduced.compareTo(BigDecimal.ZERO) > 0 ? new BigDecimal("100.00") : BigDecimal.ZERO);
                 }
                 progressList.add(progressVO);
-                
-                if (totalProduced.compareTo(BigDecimal.ZERO) > 0) {
-                    anyStarted = true;
-                }
-                if (totalQty.compareTo(BigDecimal.ZERO) == 0 || totalProduced.compareTo(totalQty) < 0) {
-                    allCompleted = false;
-                }
             }
-            
+
             vo.setProcessProgressList(progressList);
-            if (processes.isEmpty()) {
-                vo.setProductionStatus(MesProWorkOrderProductionStatusEnum.WAITING.getStatus()); // 寰呯敓浜�
-            } else if (allCompleted) {
-                vo.setProductionStatus(MesProWorkOrderProductionStatusEnum.FINISHED.getStatus()); // 鐢熶骇瀹屾垚
-            } else if (anyStarted) {
-                vo.setProductionStatus(MesProWorkOrderProductionStatusEnum.PRODUCING.getStatus()); // 鐢熶骇涓�
-            } else {
-                vo.setProductionStatus(MesProWorkOrderProductionStatusEnum.WAITING.getStatus()); // 寰呯敓浜�
-            }
         });
     }
 

--
Gitblit v1.9.3