You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import java.time.LocalDate;
/**
* 证书类 - 负责证书信息管理
* 遵循单一职责原则:只负责证书数据的存储和状态管理
*/
public class Certificate {
private String certificateId; // 证书ID
private String employeeId; // 员工ID
private String courseId; // 课程ID
private String courseName; // 课程名称
private LocalDate issueDate; // 颁发日期
private LocalDate expiryDate; // 过期日期
private String issuer; // 颁发机构
private String trainer; // 培训师
private double score; // 成绩
private boolean active; // 是否有效
private String certificateNumber; // 证书编号
private String description; // 证书描述
/**
* 构造函数 - 创建证书
*/
public Certificate(String certificateId, String employeeId, String courseId,
String courseName, String issuer, String trainer, double score) {
this.certificateId = certificateId;
this.employeeId = employeeId;
this.courseId = courseId;
this.courseName = courseName;
this.issuer = issuer;
this.trainer = trainer;
this.score = score;
this.issueDate = LocalDate.now();
this.active = true;
this.certificateNumber = generateCertificateNumber(certificateId, employeeId);
this.description = "";
}
/**
* 生成证书编号
*/
private String generateCertificateNumber(String certificateId, String employeeId) {
LocalDate now = LocalDate.now();
return String.format("CERT-%s-%s-%d",
employeeId, certificateId, now.getYear() * 10000 + now.getMonthValue() * 100 + now.getDayOfMonth());
}
/**
* 设置证书有效期
* @param years 有效期年数
*/
public void setValidYears(int years) {
if (years <= 0) {
throw new IllegalArgumentException("有效期必须大于0");
}
this.expiryDate = issueDate.plusYears(years);
}
/**
* 检查证书是否过期
* @return true如果证书已过期
*/
public boolean isExpired() {
if (expiryDate == null) {
return false; // 没有设置过期日期的证书永不过期
}
return LocalDate.now().isAfter(expiryDate);
}
/**
* 吊销证书
* @param reason 吊销原因
*/
public void revokeCertificate(String reason) {
this.active = false;
this.description = reason;
}
/**
* 恢复证书
*/
public void reinstateCertificate() {
if (!isExpired()) {
this.active = true;
} else {
throw new IllegalStateException("已过期的证书无法恢复");
}
}
/**
* 获取证书状态描述
* @return 证书状态描述
*/
public String getStatusDescription() {
if (!active) {
return "已吊销";
} else if (isExpired()) {
return "已过期";
} else {
return "有效";
}
}
/**
* 获取剩余有效天数
* @return 剩余有效天数如果不过期则返回null
*/
public Long getRemainingValidDays() {
if (expiryDate == null || isExpired()) {
return null;
}
return (long) LocalDate.now().until(expiryDate).getDays();
}
/**
* 获取成绩等级
* @return 成绩等级
*/
public String getScoreGrade() {
if (score >= 90) return "优秀";
else if (score >= 80) return "良好";
else if (score >= 70) return "中等";
else if (score >= 60) return "及格";
else return "不及格";
}
// Getter和Setter方法
public String getCertificateId() { return certificateId; }
public String getEmployeeId() { return employeeId; }
public String getCourseId() { return courseId; }
public String getCourseName() { return courseName; }
public void setCourseName(String courseName) { this.courseName = courseName; }
public LocalDate getIssueDate() { return issueDate; }
public LocalDate getExpiryDate() { return expiryDate; }
public String getIssuer() { return issuer; }
public void setIssuer(String issuer) { this.issuer = issuer; }
public String getTrainer() { return trainer; }
public void setTrainer(String trainer) { this.trainer = trainer; }
public double getScore() { return score; }
public boolean isActive() { return active; }
public String getCertificateNumber() { return certificateNumber; }
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
@Override
public String toString() {
return "Certificate{" +
"certificateId='" + certificateId + "'" +
", certificateNumber='" + certificateNumber + "'" +
", courseName='" + courseName + "'" +
", employeeId='" + employeeId + "'" +
", score=" + score + "(" + getScoreGrade() + ")" +
", issueDate=" + issueDate + "'" +
", expiryDate=" + (expiryDate != null ? expiryDate : "永不过期") + "'" +
", status=" + getStatusDescription() + "'" +
"}";
}
}