UploadedFile.java
4.3 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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// ai/entity/UploadedFile.java
package com.aigeo.ai.entity;
import org.hibernate.annotations.JdbcTypeCode;
import java.sql.Types;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import com.aigeo.common.enums.FileType;
import com.aigeo.common.enums.FileStatus;
import java.time.LocalDateTime;
/**
* 上传文件实体类,对应数据库表 ai_uploaded_files
*
* 管理系统中上传的文件信息,包括文件元数据、存储路径、
* 文件类型、大小、校验和等信息,支持多租户和版本控制
*
* @author AIGEO Team
* @since 1.0.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ai_uploaded_files", indexes = {
@Index(name = "idx_uploaded_files_company", columnList = "company_id"),
@Index(name = "idx_uploaded_files_user", columnList = "user_id"),
@Index(name = "idx_uploaded_files_type", columnList = "file_type"),
@Index(name = "idx_uploaded_files_status", columnList = "status"),
@Index(name = "idx_uploaded_files_created", columnList = "created_at")
})
public class UploadedFile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
/**
* 公司ID,多租户标识
*/
@NotNull(message = "公司ID不能为空")
@Column(name = "company_id", nullable = false)
private Integer companyId;
/**
* 用户ID,文件上传者
*/
@NotNull(message = "用户ID不能为空")
@Column(name = "user_id", nullable = false)
private Integer userId;
/**
* 原始文件名
*/
@NotBlank(message = "文件名不能为空")
@Column(name = "file_name", nullable = false, length = 255)
private String fileName;
/**
* 文件存储路径
*/
@NotBlank(message = "文件路径不能为空")
@Column(name = "file_path", nullable = false, length = 500)
private String filePath;
/**
* 文件类型枚举
*/
@NotNull(message = "文件类型不能为空")
@Enumerated(EnumType.STRING)
@Column(name = "file_type", nullable = false, length = 50)
private FileType fileType;
/**
* 文件大小,单位字节
*/
@Column(name = "file_size")
private Long fileSize;
/**
* MIME类型
*/
@Column(name = "mime_type", length = 100)
private String mimeType;
/**
* 文件校验和,用于文件完整性验证
*/
@Column(length = 128)
private String checksum;
/**
* 文件版本号,支持文件版本管理
*/
@Builder.Default
private Integer version = 1;
/**
* 文件状态
*/
@Enumerated(EnumType.STRING)
@Column(length = 20)
@Builder.Default
private FileStatus status = FileStatus.UPLOADED;
/**
* 创建时间
*/
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
/**
* 创建时间自动设置
*/
@PrePersist
protected void onCreate() {
createdAt = LocalDateTime.now();
}
/**
* 获取文件大小的可读格式
* @return 格式化的文件大小字符串
*/
public String getFormattedFileSize() {
if (fileSize == null) return "未知";
if (fileSize < 1024) return fileSize + " B";
if (fileSize < 1024 * 1024) return String.format("%.1f KB", fileSize / 1024.0);
if (fileSize < 1024 * 1024 * 1024) return String.format("%.1f MB", fileSize / (1024.0 * 1024.0));
return String.format("%.1f GB", fileSize / (1024.0 * 1024.0 * 1024.0));
}
/**
* 检查文件是否为图片类型
* @return 是否为图片
*/
public boolean isImage() {
return fileType == FileType.IMAGE ||
(mimeType != null && mimeType.startsWith("image/"));
}
/**
* 检查文件是否为文档类型
* @return 是否为文档
*/
public boolean isDocument() {
return fileType == FileType.DOCUMENT ||
(mimeType != null && (mimeType.contains("pdf") ||
mimeType.contains("word") ||
mimeType.contains("text")));
}
}