From 2c86a8bd60deed0dd0e044bad6fb83f75d19a332 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 26 十月 2025 15:05:50 +0800
Subject: [PATCH] Merge branch 'feature-task'

---
 ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusValidator.java |   82 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusValidator.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusValidator.java
new file mode 100644
index 0000000..741eec1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusValidator.java
@@ -0,0 +1,82 @@
+package com.ruoyi.system.utils;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.springframework.stereotype.Component;
+import com.ruoyi.system.domain.enums.TaskStatus;
+
+/**
+ * 浠诲姟鐘舵�佹祦杞獙璇佸櫒
+ * 
+ * @author ruoyi
+ */
+@Component
+public class TaskStatusValidator {
+    
+    private static final Map<TaskStatus, Set<TaskStatus>> ALLOWED_TRANSITIONS = new HashMap<>();
+    
+    static {
+        // PENDING -> DEPARTING, CANCELLED
+        Set<TaskStatus> pendingTransitions = new HashSet<>();
+        pendingTransitions.add(TaskStatus.DEPARTING);
+        pendingTransitions.add(TaskStatus.CANCELLED);
+        ALLOWED_TRANSITIONS.put(TaskStatus.PENDING, pendingTransitions);
+        
+        // DEPARTING -> ARRIVED, CANCELLED
+        Set<TaskStatus> departingTransitions = new HashSet<>();
+        departingTransitions.add(TaskStatus.ARRIVED);
+        departingTransitions.add(TaskStatus.CANCELLED);
+        ALLOWED_TRANSITIONS.put(TaskStatus.DEPARTING, departingTransitions);
+        
+        // ARRIVED -> RETURNING
+        Set<TaskStatus> arrivedTransitions = new HashSet<>();
+        arrivedTransitions.add(TaskStatus.RETURNING);
+        ALLOWED_TRANSITIONS.put(TaskStatus.ARRIVED, arrivedTransitions);
+        
+        // RETURNING -> COMPLETED
+        Set<TaskStatus> returningTransitions = new HashSet<>();
+        returningTransitions.add(TaskStatus.COMPLETED);
+        ALLOWED_TRANSITIONS.put(TaskStatus.RETURNING, returningTransitions);
+        
+        // IN_PROGRESS -> COMPLETED, CANCELLED, PENDING (鍏煎鏃ф暟鎹�)
+        Set<TaskStatus> inProgressTransitions = new HashSet<>();
+        inProgressTransitions.add(TaskStatus.COMPLETED);
+        inProgressTransitions.add(TaskStatus.CANCELLED);
+        inProgressTransitions.add(TaskStatus.PENDING);
+        ALLOWED_TRANSITIONS.put(TaskStatus.IN_PROGRESS, inProgressTransitions);
+        
+        // COMPLETED -> 涓嶅厑璁镐换浣曠姸鎬佸彉鏇�
+        ALLOWED_TRANSITIONS.put(TaskStatus.COMPLETED, new HashSet<>());
+        // CANCELLED -> 涓嶅厑璁镐换浣曠姸鎬佸彉鏇�
+        ALLOWED_TRANSITIONS.put(TaskStatus.CANCELLED, new HashSet<>());
+    }
+    
+    /**
+     * 楠岃瘉鐘舵�佹祦杞槸鍚﹀悎娉�
+     * 
+     * @param from 鍘熺姸鎬�
+     * @param to 鐩爣鐘舵��
+     * @return 鏄惁鍏佽娴佽浆
+     */
+    public boolean canTransition(TaskStatus from, TaskStatus to) {
+        if (from == null || to == null) {
+            return false;
+        }
+        return ALLOWED_TRANSITIONS.get(from).contains(to);
+    }
+    
+    /**
+     * 鑾峰彇鍏佽鐨勭姸鎬佹祦杞垪琛�
+     * 
+     * @param from 鍘熺姸鎬�
+     * @return 鍏佽鐨勭洰鏍囩姸鎬侀泦鍚�
+     */
+    public Set<TaskStatus> getAllowedTransitions(TaskStatus from) {
+        if (from == null) {
+            return new HashSet<>();
+        }
+        return ALLOWED_TRANSITIONS.get(from);
+    }
+}

--
Gitblit v1.9.1