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 -> IN_PROGRESS, CANCELLED
|
Set<TaskStatus> pendingTransitions = new HashSet<>();
|
pendingTransitions.add(TaskStatus.IN_PROGRESS);
|
pendingTransitions.add(TaskStatus.CANCELLED);
|
ALLOWED_TRANSITIONS.put(TaskStatus.PENDING, pendingTransitions);
|
|
// 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);
|
}
|
}
|