/** * 证书类 * 表示员工获得的培训证书 * 遵循单一职责原则 */ 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 } }