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

139 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.

/**
* 高级功能测试类,测试审批工作流和报表生成功能
*/
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;
}
}