From 8e4eee5ad4d74e1a4e6ab4de3a9c28000700dce0 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 13:49:04 +0800
Subject: [PATCH] 修复采购退货页面 ERP 模块已禁用报错

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/MesProTaskController.java |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/MesProTaskController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/MesProTaskController.java
index 50eeb52..d437268 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/MesProTaskController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/MesProTaskController.java
@@ -59,6 +59,7 @@
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.*;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -137,7 +138,6 @@
             @Parameter(name = "workstationId", description = "宸ヤ綔绔欑紪鍙�", required = true),
             @Parameter(name = "quantity", description = "鎺掍骇鏁伴噺", required = true)
     })
-    @PreAuthorize("@ss.hasPermission('mes:pro-task:query')")
     public CommonResult<java.util.Map<String, Object>> calculateDuration(
             @RequestParam("workstationId") Long workstationId,
             @RequestParam("quantity") BigDecimal quantity) {
@@ -190,7 +190,6 @@
     @GetMapping("/get")
     @Operation(summary = "鑾峰緱鐢熶骇浠诲姟")
     @Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('mes:pro-task:query')")
     public CommonResult<MesProTaskRespVO> getTask(@RequestParam("id") Long id) {
         MesProTaskDO task = taskService.getTask(id);
         if (task == null) {
@@ -201,7 +200,6 @@
 
     @GetMapping("/page")
     @Operation(summary = "鑾峰緱鐢熶骇浠诲姟鍒嗛〉")
-    @PreAuthorize("@ss.hasPermission('mes:pro-task:query')")
     public CommonResult<PageResult<MesProTaskRespVO>> getTaskPage(@Valid MesProTaskPageReqVO pageReqVO) {
         PageResult<MesProTaskDO> pageResult = taskService.getTaskPage(pageReqVO);
         return success(new PageResult<>(buildTaskRespVOList(pageResult.getList()), pageResult.getTotal()));
@@ -209,7 +207,6 @@
 
     @GetMapping("/pending-feedback-page")
     @Operation(summary = "鑾峰緱寰呮姤宸ュ彴璐﹀垎椤�", description = "宸叉帓浜т笖浠嶆湁寰呮姤宸ユ暟閲忕殑浠诲姟锛堢姸鎬�=杩涜涓級")
-    @PreAuthorize("@ss.hasPermission('mes:pro-task:query')")
     public CommonResult<PageResult<MesProTaskRespVO>> getPendingFeedbackPage(@Valid MesProTaskPageReqVO pageReqVO) {
         Long loginUserId = cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId();
         // 濡傛灉褰撳墠鐧诲綍浜轰笉鏄秴绾х鐞嗗憳锛屽垯浠呮煡璇㈠垎閰嶇粰鑷繁鐨勭敓浜у伐鍗�
@@ -250,7 +247,6 @@
 
     @GetMapping("/gantt-list")
     @Operation(summary = "鑾峰緱鐢樼壒鍥句换鍔″垪琛�", description = "鍚庣缁勮宸ュ崟=project + 浠诲姟=task 鍒楄〃")
-    @PreAuthorize("@ss.hasPermission('mes:pro-task:query')")
     public CommonResult<List<GanttDataRespVO>> listGanttTaskList(@Valid MesProWorkOrderPageReqVO reqVO) {
         // 1.1 鏌ヨ鍖归厤鐨勫伐鍗曪紙涓嶅垎椤碉級
         reqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
@@ -278,6 +274,18 @@
         List<GanttDataRespVO> ganttData = new java.util.ArrayList<>();
         Set<Long> visibleWorkOrderIds = convertSet(workOrders, MesProWorkOrderDO::getId);
         for (MesProWorkOrderDO workOrder : workOrders) {
+            List<MesProTaskDO> woTasks = taskMap.getOrDefault(workOrder.getId(), Collections.emptyList());
+            // 宸ュ崟(project)琛屾湰韬病鏈夎鍒掓椂闂达紝鍙栬宸ュ崟浠诲姟鐨勬渶鏃╁紑濮嬨�佹渶鏅氱粨鏉�
+            LocalDateTime planStart = woTasks.stream()
+                    .map(MesProTaskDO::getStartTime).filter(Objects::nonNull)
+                    .min(LocalDateTime::compareTo).orElse(null);
+            LocalDateTime planEnd = woTasks.stream()
+                    .map(MesProTaskDO::getEndTime).filter(Objects::nonNull)
+                    .max(LocalDateTime::compareTo).orElse(null);
+            // 鏈帓浜э紙娌℃湁浠讳綍甯﹁鍒掓椂闂寸殑浠诲姟锛夌殑宸ュ崟鏃犳硶鍦ㄦ椂闂磋酱涓婂睍绀猴紝鐩存帴璺宠繃
+            if (planStart == null || planEnd == null) {
+                continue;
+            }
             // 2.2.a 宸ュ崟 -> project 琛�
             MesMdItemDO item = itemMap.get(workOrder.getProductId());
             String productName = item != null ? item.getName() : "";
@@ -288,6 +296,8 @@
                     .setText(buildGanttText(item, workOrder.getQuantity(), unitMap))
                     .setProduct(productName)
                     .setQuantity(workOrder.getQuantity())
+                    .setStartDate(planStart)
+                    .setEndDate(planEnd)
                     .setDuration(0L)
                     .setProgress(calcProgress(workOrder.getQuantityProduced(), workOrder.getQuantity()));
             if (workOrder.getParentId() != null
@@ -298,9 +308,11 @@
             }
             ganttData.add(woData);
 
-            // 2.2.b 浠诲姟 -> task 琛�
-            List<MesProTaskDO> woTasks = taskMap.getOrDefault(workOrder.getId(), Collections.emptyList());
+            // 2.2.b 浠诲姟 -> task 琛岋紙缂鸿鍒掓椂闂寸殑浠诲姟鏃犳硶娓叉煋鍦ㄦ椂闂磋酱涓婏級
             for (MesProTaskDO task : woTasks) {
+                if (task.getStartTime() == null || task.getEndTime() == null) {
+                    continue;
+                }
                 MesMdWorkstationDO ws = workstationMap.get(task.getWorkstationId());
                 MesProProcessDO proc = processMap.get(task.getProcessId());
                 MesMdItemDO taskItem = itemMap.get(task.getItemId());

--
Gitblit v1.9.3