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> ALLOWED_TRANSITIONS = new HashMap<>(); static { // PENDING -> IN_PROGRESS, CANCELLED Set pendingTransitions = new HashSet<>(); pendingTransitions.add(TaskStatus.IN_PROGRESS); pendingTransitions.add(TaskStatus.CANCELLED); ALLOWED_TRANSITIONS.put(TaskStatus.PENDING, pendingTransitions); // IN_PROGRESS -> COMPLETED, CANCELLED, PENDING Set 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 getAllowedTransitions(TaskStatus from) { if (from == null) { return new HashSet<>(); } return ALLOWED_TRANSITIONS.get(from); } }