|
|
/**
|
|
|
* 订单审批工作流类,管理订单的审批流程
|
|
|
*/
|
|
|
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;
|
|
|
}
|
|
|
}
|
|
|
} |