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