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/BaseApprover.java

57 lines
2.0 KiB

public abstract class BaseApprover implements Approver {
private String approverName;
private ApprovalLevel level;
private Logger logger;
public BaseApprover(String approverName, ApprovalLevel level, Logger logger) {
this.approverName = approverName;
this.level = level;
this.logger = logger;
}
@Override
public ApprovalLevel getRequiredLevel() {
return level;
}
@Override
public String getApproverName() {
return approverName;
}
protected Logger getLogger() {
return logger;
}
protected abstract boolean canApprove(Order order);
@Override
public boolean approve(Order order, ApprovalContext context) {
logger.info(getApproverName() + " 正在审批订单: " + order.getOrderId());
if (!canApprove(order)) {
logger.warn(getApproverName() + " 拒绝审批订单: " + order.getOrderId());
context.addApprovalRecord(this, false, "不符合审批条件");
context.setCurrentStatus(ApprovalStatus.REJECTED);
context.setRejectionReason("不符合" + getApproverName() + "的审批条件");
return false;
}
// 子类可以提供额外的审批逻辑
boolean approved = performApproval(order, context);
if (approved) {
logger.info(getApproverName() + " 已批准订单: " + order.getOrderId());
context.addApprovalRecord(this, true, "审批通过");
} else {
logger.warn(getApproverName() + " 已拒绝订单: " + order.getOrderId());
context.addApprovalRecord(this, false, "审批拒绝");
context.setCurrentStatus(ApprovalStatus.REJECTED);
context.setRejectionReason(getApproverName() + "拒绝了订单");
}
return approved;
}
protected abstract boolean performApproval(Order order, ApprovalContext context);
}