FileStatus.java
3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.aigeo.common.enums;
import lombok.Getter;
/**
* 文件状态枚举
* 对应数据库字段:ai_uploaded_files.status
*
* 文件处理状态流程:
* - UPLOADED: 文件已上传,等待处理
* - PROCESSING: 文件正在处理中(扫描、转换等)
* - PROCESSED: 文件处理完成,可以正常使用
* - FAILED: 文件处理失败,需要重新上传或处理
* - DELETED: 文件已被标记为删除状态
*
* @author AIGEO Team
* @since 1.0.0
*/
@Getter
public enum FileStatus {
/**
* 已上传 - 文件刚上传完成,等待系统处理
*/
UPLOADED("uploaded", "已上传"),
/**
* 处理中 - 正在进行病毒扫描、格式转换等处理
*/
PROCESSING("processing", "处理中"),
/**
* 已处理 - 文件处理完成,可以正常使用
*/
PROCESSED("processed", "已处理"),
/**
* 处理失败 - 文件处理过程中出现错误
*/
FAILED("failed", "处理失败"),
/**
* 已删除 - 文件已被标记为删除状态
*/
DELETED("deleted", "已删除");
/**
* 数据库存储值
*/
private final String code;
/**
* 显示名称
*/
private final String displayName;
FileStatus(String code, String displayName) {
this.code = code;
this.displayName = displayName;
}
/**
* 根据代码获取枚举
* @param code 状态代码
* @return 对应的文件状态枚举
* @throws IllegalArgumentException 当代码不存在时抛出
*/
public static FileStatus fromCode(String code) {
for (FileStatus status : values()) {
if (status.code.equals(code)) {
return status;
}
}
throw new IllegalArgumentException("未知的文件状态代码: " + code);
}
/**
* 检查是否为终态(不会再发生状态变更)
* @return 是否为终态
*/
public boolean isFinalState() {
return this == PROCESSED || this == FAILED || this == DELETED;
}
/**
* 检查是否可以使用
* @return 文件是否可以正常使用
*/
public boolean isUsable() {
return this == PROCESSED;
}
/**
* 检查是否需要重新处理
* @return 是否需要重新处理
*/
public boolean needsReprocessing() {
return this == FAILED;
}
/**
* 检查是否正在处理中
* @return 是否正在处理
*/
public boolean isInProgress() {
return this == PROCESSING;
}
/**
* 获取下一个可能的状态
* @return 可能的下一状态数组
*/
public FileStatus[] getPossibleNextStates() {
switch (this) {
case UPLOADED:
return new FileStatus[]{PROCESSING, FAILED};
case PROCESSING:
return new FileStatus[]{PROCESSED, FAILED};
case PROCESSED:
return new FileStatus[]{DELETED};
case FAILED:
return new FileStatus[]{PROCESSING, DELETED};
case DELETED:
return new FileStatus[]{};
default:
return new FileStatus[]{};
}
}
}