WebsiteProject.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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
package com.aigeo.website.entity;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
/**
* 网站项目实体类
* 对应数据库表:ai_website_projects
*
* 管理企业网站项目的完整生命周期,包括:
* - 项目创建和基本信息管理
* - 状态跟踪和进度监控
* - 域名和SEO配置
* - 统计数据收集和分析
*
* @author AIGEO Team
* @since 1.0.0
*/
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "ai_website_projects", indexes = {
@Index(name = "idx_website_projects_company", columnList = "company_id"),
@Index(name = "idx_website_projects_user", columnList = "user_id"),
@Index(name = "idx_website_projects_status", columnList = "status"),
@Index(name = "idx_website_projects_created", columnList = "created_at")
})
public class WebsiteProject {
/**
* 主键ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
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 = "project_name", nullable = false)
private String projectName;
/**
* 网站名称(显示名称)
*/
@Column(name = "site_name")
private String siteName;
/**
* 项目状态
*/
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 20)
private WebsiteProjectStatus status;
/**
* 域名
*/
@Column(name = "domain", length = 255)
private String domain;
/**
* 网站类型
*/
@Column(name = "type", length = 50)
private String type;
/**
* 访问量统计
*/
@Column(name = "view_count")
@Builder.Default
private Integer viewCount = 0;
/**
* 页面浏览量统计
*/
@Column(name = "page_views")
@Builder.Default
private Integer pageViews = 0;
/**
* 配置快照(JSON格式)
*/
@Column(name = "config_snapshot", columnDefinition = "json")
private String configSnapshot;
/**
* 创建时间
*/
@CreationTimestamp
@Column(name = "created_at", updatable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
/**
* 更新时间
*/
@UpdateTimestamp
@Column(name = "updated_at")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
/**
* 获取项目名称
* @return 项目名称
*/
public String getName() {
return this.projectName;
}
/**
* 获取域名
* @return 域名
*/
public String getDomain() {
return this.domain != null ? this.domain : this.siteName;
}
/**
* 设置域名
* @param domain 域名
*/
public void setDomain(String domain) {
this.domain = domain;
}
/**
* 设置访问量
* @param viewCount 访问量
*/
public void setViewCount(Integer viewCount) {
this.viewCount = viewCount;
}
/**
* 设置页面浏览量
* @param pageViews 页面浏览量
*/
public void setPageViews(Integer pageViews) {
this.pageViews = pageViews;
}
/**
* 检查项目是否已发布
* @return 是否已发布
*/
public boolean isPublished() {
return WebsiteProjectStatus.LIVE.equals(this.status);
}
/**
* 检查项目是否处于开发中
* @return 是否处于开发中
*/
public boolean isUnderDevelopment() {
return WebsiteProjectStatus.DEVELOPMENT.equals(this.status) ||
WebsiteProjectStatus.TESTING.equals(this.status);
}
}