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.

158 lines
4.1 KiB

/**
* 证书类
* 表示员工获得的培训证书
* 遵循单一职责原则
*/
package com.employeetraining.certificate;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
public class Certificate {
private String certificateId;
private String employeeId;
private String courseId;
private String certificateName;
private LocalDate issueDate;
private LocalDate expiryDate;
private String issuingAuthority;
private CertificateStatus status;
public Certificate() {
}
public Certificate(String certificateId, String employeeId, String courseId,
String certificateName, LocalDate issueDate,
LocalDate expiryDate, String issuingAuthority,
CertificateStatus status) {
this.certificateId = certificateId;
this.employeeId = employeeId;
this.courseId = courseId;
this.certificateName = certificateName;
this.issueDate = issueDate;
this.expiryDate = expiryDate;
this.issuingAuthority = issuingAuthority;
this.status = status;
}
// Getters and Setters
public String getCertificateId() {
return certificateId;
}
public void setCertificateId(String certificateId) {
this.certificateId = certificateId;
}
public String getEmployeeId() {
return employeeId;
}
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
public String getCourseId() {
return courseId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
public String getCertificateName() {
return certificateName;
}
public void setCertificateName(String certificateName) {
this.certificateName = certificateName;
}
public LocalDate getIssueDate() {
return issueDate;
}
public void setIssueDate(LocalDate issueDate) {
this.issueDate = issueDate;
}
public String getFormattedIssueDate() {
if (issueDate == null) {
return "N/A";
}
return issueDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
public LocalDate getExpiryDate() {
return expiryDate;
}
public void setExpiryDate(LocalDate expiryDate) {
this.expiryDate = expiryDate;
}
public String getFormattedExpiryDate() {
if (expiryDate == null) {
return "永久有效";
}
return expiryDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
public String getIssuingAuthority() {
return issuingAuthority;
}
public void setIssuingAuthority(String issuingAuthority) {
this.issuingAuthority = issuingAuthority;
}
public CertificateStatus getStatus() {
return status;
}
public void setStatus(CertificateStatus status) {
this.status = status;
}
/**
* 检查证书是否过期
*/
public boolean isExpired() {
return expiryDate != null && LocalDate.now().isAfter(expiryDate);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Certificate that = (Certificate) o;
return Objects.equals(certificateId, that.certificateId);
}
@Override
public int hashCode() {
return Objects.hash(certificateId);
}
@Override
public String toString() {
return "Certificate{" +
"certificateId='" + certificateId + '\'' +
", certificateName='" + certificateName + '\'' +
", status=" + status +
", issueDate=" + getFormattedIssueDate() +
", expiryDate=" + getFormattedExpiryDate() +
'}';
}
/**
* 证书状态枚举
*/
public enum CertificateStatus {
ACTIVE,
EXPIRED,
REVOKED,
PENDING
}
}