|
|
/**
|
|
|
* 高级功能测试类,测试审批工作流和报表生成功能
|
|
|
*/
|
|
|
package com.orderprocessing;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
public class AdvancedFeaturesTest {
|
|
|
public static void main(String[] args) {
|
|
|
// 创建日志记录器
|
|
|
Logger logger = new ConsoleLogger();
|
|
|
|
|
|
System.out.println("=== 测试1: 订单审批工作流 ===");
|
|
|
testApprovalWorkflow(logger);
|
|
|
System.out.println();
|
|
|
|
|
|
System.out.println("=== 测试2: 订单数据分析和报表生成 ===");
|
|
|
testOrderReportGeneration(logger);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 测试订单审批工作流
|
|
|
*/
|
|
|
private static void testApprovalWorkflow(Logger logger) {
|
|
|
// 创建审批工作流
|
|
|
ApprovalWorkflow workflow = new ApprovalWorkflow(logger);
|
|
|
|
|
|
// 添加审批规则
|
|
|
workflow.addApprovalRule(new AmountBasedApprovalRule(5000, 1)); // 超过5000元需要1级审批
|
|
|
workflow.addApprovalRule(new AmountBasedApprovalRule(10000, 2)); // 超过10000元需要2级审批
|
|
|
|
|
|
// 创建测试订单
|
|
|
List<OrderItem> items1 = new ArrayList<>();
|
|
|
items1.add(new OrderItem("P001", "笔记本电脑", 1, 5999.0));
|
|
|
Order order1 = new Order("APPROVAL-001", "张三", items1);
|
|
|
|
|
|
List<OrderItem> items2 = new ArrayList<>();
|
|
|
items2.add(new OrderItem("P003", "高端服务器", 1, 15000.0));
|
|
|
Order order2 = new Order("APPROVAL-002", "李四", items2);
|
|
|
|
|
|
List<OrderItem> items3 = new ArrayList<>();
|
|
|
items3.add(new OrderItem("P002", "无线鼠标", 1, 99.0));
|
|
|
Order order3 = new Order("APPROVAL-003", "王五", items3);
|
|
|
|
|
|
// 测试审批流程
|
|
|
System.out.println("\n测试订单1审批(金额5999元,1级审批者):");
|
|
|
workflow.processApproval(order1, 1);
|
|
|
|
|
|
System.out.println("\n测试订单2审批(金额15000元,1级审批者):");
|
|
|
workflow.processApproval(order2, 1);
|
|
|
|
|
|
System.out.println("\n测试订单2审批(金额15000元,2级审批者):");
|
|
|
workflow.processApproval(order2, 2);
|
|
|
|
|
|
System.out.println("\n测试订单3审批(金额99元,任何级别):");
|
|
|
workflow.processApproval(order3, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 测试订单数据分析和报表生成
|
|
|
*/
|
|
|
private static void testOrderReportGeneration(Logger logger) {
|
|
|
// 创建订单报表生成器
|
|
|
OrderReportGenerator reportGenerator = new OrderReportGenerator(logger);
|
|
|
|
|
|
// 添加分析策略
|
|
|
reportGenerator.addAnalysisStrategy(new TotalSalesAnalysisStrategy());
|
|
|
reportGenerator.addAnalysisStrategy(new CustomerOrderAnalysisStrategy());
|
|
|
|
|
|
// 创建测试订单数据
|
|
|
List<Order> orders = createTestOrders();
|
|
|
|
|
|
// 使用单个策略生成报表
|
|
|
System.out.println("\n使用总销售额分析策略:");
|
|
|
Map<String, Object> salesReport = reportGenerator.generateReport(orders, "总销售额分析");
|
|
|
reportGenerator.printReportResults(salesReport);
|
|
|
|
|
|
System.out.println("\n使用客户订单分析策略:");
|
|
|
Map<String, Object> customerReport = reportGenerator.generateReport(orders, "客户订单分析");
|
|
|
reportGenerator.printReportResults(customerReport);
|
|
|
|
|
|
// 生成综合报表
|
|
|
System.out.println("\n生成综合报表:");
|
|
|
Map<String, Map<String, Object>> comprehensiveReport = reportGenerator.generateComprehensiveReport(orders);
|
|
|
|
|
|
for (Map.Entry<String, Map<String, Object>> entry : comprehensiveReport.entrySet()) {
|
|
|
System.out.println("\n策略: " + entry.getKey());
|
|
|
for (Map.Entry<String, Object> result : entry.getValue().entrySet()) {
|
|
|
System.out.println(result.getKey() + ": " + result.getValue());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建测试订单数据
|
|
|
*/
|
|
|
private static List<Order> createTestOrders() {
|
|
|
List<Order> orders = new ArrayList<>();
|
|
|
|
|
|
// 订单1:张三 - 已处理
|
|
|
List<OrderItem> items1 = new ArrayList<>();
|
|
|
items1.add(new OrderItem("P001", "笔记本电脑", 1, 5999.0));
|
|
|
Order order1 = new Order("ORD-001", "张三", items1);
|
|
|
order1.setStatus(Order.OrderStatus.PROCESSED);
|
|
|
orders.add(order1);
|
|
|
|
|
|
// 订单2:张三 - 已发货
|
|
|
List<OrderItem> items2 = new ArrayList<>();
|
|
|
items2.add(new OrderItem("P002", "无线鼠标", 2, 99.0));
|
|
|
Order order2 = new Order("ORD-002", "张三", items2);
|
|
|
order2.setStatus(Order.OrderStatus.SHIPPED);
|
|
|
orders.add(order2);
|
|
|
|
|
|
// 订单3:李四 - 已交付
|
|
|
List<OrderItem> items3 = new ArrayList<>();
|
|
|
items3.add(new OrderItem("P003", "显示器", 1, 1599.0));
|
|
|
Order order3 = new Order("ORD-003", "李四", items3);
|
|
|
order3.setStatus(Order.OrderStatus.DELIVERED);
|
|
|
orders.add(order3);
|
|
|
|
|
|
// 订单4:王五 - 已取消
|
|
|
List<OrderItem> items4 = new ArrayList<>();
|
|
|
items4.add(new OrderItem("P004", "键盘", 1, 199.0));
|
|
|
Order order4 = new Order("ORD-004", "王五", items4);
|
|
|
order4.setStatus(Order.OrderStatus.CANCELLED);
|
|
|
orders.add(order4);
|
|
|
|
|
|
// 订单5:李四 - 已处理
|
|
|
List<OrderItem> items5 = new ArrayList<>();
|
|
|
items5.add(new OrderItem("P005", "耳机", 1, 799.0));
|
|
|
Order order5 = new Order("ORD-005", "李四", items5);
|
|
|
order5.setStatus(Order.OrderStatus.PROCESSED);
|
|
|
orders.add(order5);
|
|
|
|
|
|
return orders;
|
|
|
}
|
|
|
} |