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.
yilai/ApprovalWorkflow.java

85 lines
2.8 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.

/**
* 订单审批工作流类,管理订单的审批流程
*/
package com.orderprocessing;
import java.util.ArrayList;
import java.util.List;
public class ApprovalWorkflow {
private List<ApprovalRule> rules;
private Logger logger;
/**
* 构造方法
* @param logger 日志记录器
*/
public ApprovalWorkflow(Logger logger) {
this.logger = logger;
this.rules = new ArrayList<>();
}
/**
* 添加审批规则
* @param rule 审批规则
*/
public void addApprovalRule(ApprovalRule rule) {
rules.add(rule);
logger.log("添加审批规则: " + rule.getDescription());
}
/**
* 检查订单是否需要审批,并获取所需的最高审批级别
* @param order 需要检查的订单
* @return 所需的最高审批级别如果不需要审批则返回0
*/
public int checkApprovalRequirements(Order order) {
logger.log("开始检查订单 " + order.getOrderId() + " 的审批需求");
int maxApprovalLevel = 0;
List<String> triggeredRules = new ArrayList<>();
for (ApprovalRule rule : rules) {
if (rule.requiresApproval(order)) {
triggeredRules.add(rule.getDescription());
maxApprovalLevel = Math.max(maxApprovalLevel, rule.getApprovalLevel());
}
}
if (maxApprovalLevel > 0) {
logger.log("订单 " + order.getOrderId() + " 需要 " + maxApprovalLevel + " 级审批");
for (String ruleDesc : triggeredRules) {
logger.log("触发规则: " + ruleDesc);
}
} else {
logger.log("订单 " + order.getOrderId() + " 不需要额外审批");
}
return maxApprovalLevel;
}
/**
* 处理订单审批流程
* @param order 需要审批的订单
* @param approverLevel 审批者级别
* @return 如果审批通过返回true否则返回false
*/
public boolean processApproval(Order order, int approverLevel) {
int requiredLevel = checkApprovalRequirements(order);
if (requiredLevel == 0) {
logger.log("订单 " + order.getOrderId() + " 自动审批通过");
return true;
}
if (approverLevel >= requiredLevel) {
logger.log("订单 " + order.getOrderId() + " 审批通过(审批者级别: " +
approverLevel + ", 所需级别: " + requiredLevel + "");
return true;
} else {
logger.log("订单 " + order.getOrderId() + " 审批失败:审批者级别不足(审批者级别: " +
approverLevel + ", 所需级别: " + requiredLevel + "");
return false;
}
}
}