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.
homework/Certificate.java

173 lines
5.6 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;
import java.util.Objects;
import java.util.UUID;
/**
* 证书类:管理员工获得的证书
*/
public class Certificate {
private String certificateId; // 证书ID
private int employeeId; // 员工ID
private String title; // 证书名称
private String issuingAuthority; // 发证机构
private LocalDate issueDate; // 颁发日期
private LocalDate expiryDate; // 到期日期(可选)
private String description; // 证书描述
private String certificateUrl; // 证书电子版URL可选
private boolean isActive; // 是否有效
/**
* 构造函数
*/
public Certificate(int employeeId, String title, String issuingAuthority,
LocalDate issueDate) {
validateEmployeeId(employeeId);
validateTitle(title);
validateIssuingAuthority(issuingAuthority);
validateIssueDate(issueDate);
this.certificateId = generateCertificateId();
this.employeeId = employeeId;
this.title = title;
this.issuingAuthority = issuingAuthority;
this.issueDate = issueDate;
this.isActive = true; // 默认为有效证书
this.description = "";
this.certificateUrl = null;
}
/**
* 构造函数(包含到期日期)
*/
public Certificate(int employeeId, String title, String issuingAuthority,
LocalDate issueDate, LocalDate expiryDate) {
this(employeeId, title, issuingAuthority, issueDate);
if (expiryDate != null && expiryDate.isBefore(issueDate)) {
throw new IllegalArgumentException("到期日期不能早于颁发日期");
}
this.expiryDate = expiryDate;
// 如果有到期日期且已过期,则标记为无效
if (expiryDate != null && expiryDate.isBefore(LocalDate.now())) {
this.isActive = false;
}
}
// 生成证书ID
private String generateCertificateId() {
return "CERT-" + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
}
// 验证方法
private void validateEmployeeId(int employeeId) {
if (employeeId <= 0) {
throw new IllegalArgumentException("员工ID必须为正整数");
}
}
private void validateTitle(String title) {
if (title == null || title.trim().isEmpty()) {
throw new IllegalArgumentException("证书名称不能为空");
}
}
private void validateIssuingAuthority(String issuingAuthority) {
if (issuingAuthority == null || issuingAuthority.trim().isEmpty()) {
throw new IllegalArgumentException("发证机构不能为空");
}
}
private void validateIssueDate(LocalDate issueDate) {
if (issueDate == null || issueDate.isAfter(LocalDate.now())) {
throw new IllegalArgumentException("颁发日期不能晚于当前日期");
}
}
/**
* 检查证书是否过期
*/
public boolean isExpired() {
return expiryDate != null && expiryDate.isBefore(LocalDate.now());
}
/**
* 检查证书是否仍然有效
*/
public boolean isValid() {
return isActive && !isExpired();
}
/**
* 更新证书到期日期
*/
public void updateExpiryDate(LocalDate expiryDate) {
if (expiryDate != null && expiryDate.isBefore(issueDate)) {
throw new IllegalArgumentException("到期日期不能早于颁发日期");
}
this.expiryDate = expiryDate;
// 更新状态
if (expiryDate != null && expiryDate.isBefore(LocalDate.now())) {
this.isActive = false;
}
}
// Getter方法
public String getCertificateId() { return certificateId; }
public int getEmployeeId() { return employeeId; }
public String getTitle() { return title; }
public String getIssuingAuthority() { return issuingAuthority; }
public LocalDate getIssueDate() { return issueDate; }
public LocalDate getExpiryDate() { return expiryDate; }
public String getDescription() { return description; }
public String getCertificateUrl() { return certificateUrl; }
public boolean isActive() { return isActive; }
// Setter方法
public void setTitle(String title) {
validateTitle(title);
this.title = title;
}
public void setIssuingAuthority(String issuingAuthority) {
validateIssuingAuthority(issuingAuthority);
this.issuingAuthority = issuingAuthority;
}
public void setDescription(String description) {
this.description = description != null ? description : "";
}
public void setCertificateUrl(String certificateUrl) {
this.certificateUrl = certificateUrl;
}
public void activate() {
this.isActive = true;
}
public void deactivate() {
this.isActive = false;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Certificate that = (Certificate) o;
return certificateId.equals(that.certificateId);
}
@Override
public int hashCode() {
return Objects.hash(certificateId);
}
@Override
public String toString() {
return String.format("证书[ID: %s, 名称: %s, 员工ID: %d, 发证机构: %s, 状态: %s]",
certificateId, title, employeeId, issuingAuthority,
isValid() ? "有效" : "无效");
}
}