| New file |
| | |
| | | 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); |
| | | } |
| | | } |