基于领域驱动设计(DDD)的快递物流管理系统实现。
src/main/java/com/logistics/
├── domain/ # 领域层
│ ├── model/ # 领域模型
│ │ ├── Parcel.java # 包裹实体(聚合根)
│ │ ├── Waybill.java # 运单值对象
│ │ ├── Branch.java # 网点实体
│ │ ├── TransportTask.java # 运输任务实体(聚合根)
│ │ ├── DeliveryTask.java # 派送任务实体(聚合根)
│ │ ├── Vehicle.java # 车辆实体
│ │ ├── Driver.java # 司机实体
│ │ ├── DeliveryPerson.java # 派送员实体
│ │ └── ... # 其他值对象和枚举
│ └── service/ # 领域服务
│ ├── RoutePlanningService.java # 路径规划服务
│ ├── SortingService.java # 分拣服务
│ ├── DispatchingService.java # 调度服务
│ ├── DeliveryTaskAssignmentService.java # 派送任务分配服务
│ ├── ParcelTrackingService.java # 包裹追踪服务
│ └── ExceptionHandlingService.java # 异常处理服务
└── application/ # 应用层
└── service/ # 应用服务
├── ParcelManagementService.java # 包裹管理服务
├── TransportDispatchingService.java # 运输调度服务
└── DeliveryManagementService.java # 派送管理服务
✅ 包裹处理与运输调度的完整流程(8个步骤) ✅ 完整的模拟系统,支持自定义任务数量和异常概率 ✅ 实时任务执行和状态更新
✅ 分拣异常处理
- 信息错误异常:通知客户重新填写信息
- 自动异常解决机制
✅ 运输异常处理
- 天气/交通/道路异常:标记不可用路径,自动重新规划路线
- 车辆故障异常:自动从车辆池重新分配车辆
- 自动异常解决机制
✅ 派送异常处理
- 地址/联系信息错误:通知客户更新信息
- 收件人不在家:包裹返回起始站,重新发起派送
- 包裹破损:终止派送,通知发件人和收件人
- 自动异常解决机制(除包裹破损外)
✅ 包裹状态管理与追溯 ✅ 运输调度与任务管理 ✅ 派送任务执行支持 ✅ 车辆池管理(每个站点维护可用车辆) ✅ 不可用路径管理(动态标记和重新规划) ✅ 自动资源分配(确保任何时候都有足够的派送员) ✅ 详细的日志记录(运输任务分段显示、完整异常历史)
# 编译项目
mvn clean compile项目提供了跨平台的启动脚本,无需手动输入命令:
Windows系统:
run_simulation.batLinux/Mac系统:
chmod +x run_simulation.sh
./run_simulation.sh支持客户、系统管理员、司机、派送员等多种角色,以及完整的模拟系统。
# 运行交互式系统
java -cp target/classes com.logistics.LogisticsSystemInteractive功能说明:
-
模拟系统(核心功能):
- 自定义任务数量:启动模拟时可设置要创建的包裹订单数量
- 可配置异常概率:设置0.0-1.0之间的异常发生概率
- 实时任务执行:自动执行运输和派送任务
- 完整异常处理:自动处理并解决各类异常(除包裹破损外)
- 任务状态监控:查看进行中、已完成的任务
- 完整重置功能:重置模拟时清除所有数据,可重新开始
-
客户角色:
- 发起包裹寄送请求(终端输入收件人信息、包裹信息等)
- 查看自己的所有订单
- 根据运单号追踪包裹
- 查看订单详细信息(包括运输任务分段、异常历史等)
-
系统管理员角色:
- 查看所有订单信息
- 查看有异常的订单
- 查看订单详细信息(包括异常和解决方案)
- 查看进行中和已完成的任务
-
司机角色:
- 查看分配的运输任务
- 完成运输任务
-
派送员角色:
- 查看分配的派送任务
- 完成派送任务
自动演示完整流程,验证模型功能。
# 运行演示程序
java -cp target/classes com.logistics.LogisticsSystemDemo根据需求文档要求,模型需要以某种方式进行验证。项目提供了完整的演示程序来验证模型是否能够支持所有功能。
# 一键编译并运行验证
mvn clean compile exec:java演示程序会自动验证:
-
正常流程(8个步骤)
- 包裹创建和运单生成
- 路径规划
- 分拣和运输任务创建
- 运输执行
- 派送任务分配
- 签收
-
扩展流程
- 包裹分拣异常处理(信息错误,自动解决)
- 运输路线变更(路径不可用,自动重新规划)
- 车辆故障处理(自动重新分配车辆)
- 派送异常处理(地址错误、收件人不在家、包裹破损)
-
基本能力
- 包裹状态管理与追溯
- 运输调度与任务管理(负载均衡)
- 派送任务执行支持(负载均衡)
- 车辆池管理
- 不可用路径管理
- 自动资源分配
-
模拟系统功能
- 自定义任务数量创建
- 可配置异常概率
- 实时任务执行和状态更新
- 自动异常处理和解决
- 完整的日志记录
-
发起包裹寄送请求
- 从终端输入寄件人信息(姓名、电话、地址)
- 输入收件人信息(姓名、电话、地址)
- 输入包裹信息(重量、尺寸、描述)
- 选择起始网点
- 系统自动随机生成目的地和路径
- 系统可能随机生成异常情况(30%概率)
-
查看我的订单
- 查看所有自己发起的订单
- 显示订单详细信息(收件人、包裹信息、当前位置、状态等)
- 显示异常信息(如有)
-
包裹追踪
- 根据运单号查询包裹
- 显示当前状态、位置、历史轨迹
-
查看所有订单
- 显示系统中所有订单的详细信息
- 包括运输任务、派送任务、异常信息等
-
查看异常订单
- 筛选出所有有异常的订单
- 显示异常类型、原因、解决方案建议
-
订单详情查询
- 根据运单号查询订单完整信息
- 包括所有相关任务和异常处理情况
- 自定义任务数量:启动模拟时可设置要创建的包裹订单数量
- 可配置异常概率:设置0.0-1.0之间的异常发生概率(例如0.3表示30%)
- 实时任务执行:
- 自动创建运输任务和派送任务
- 自动执行任务(运输5-10秒,派送5-10秒)
- 自动处理异常并解决(除包裹破损外)
- 任务状态监控:
- 查看进行中的订单和任务
- 查看已完成的订单和任务
- 查看详细的运输任务信息(分段显示,包含司机信息)
- 查看完整的异常历史记录
- 完整重置功能:重置模拟时清除所有数据,可重新开始
- 随机路径生成:系统会根据起始网点随机选择目的地,并可能生成包含0-2个中转站的路径
- 随机异常生成:根据用户设置的异常概率随机生成异常(分拣异常、运输异常、派送异常)
-
Parcel Aggregate(包裹聚合)
- 聚合根:Parcel
- 包含:Waybill、TrackingRecord、ExceptionInfo
-
TransportTask Aggregate(运输任务聚合)
- 聚合根:TransportTask
- 关联:Vehicle、Driver
-
DeliveryTask Aggregate(派送任务聚合)
- 聚合根:DeliveryTask
- 关联:DeliveryPerson
- RoutePlanningService:路径规划,支持不可用路径过滤和重新规划
- SortingService:包裹分拣
- DispatchingService:运输调度,支持负载均衡
- DeliveryTaskAssignmentService:派送任务分配,支持负载均衡
- ParcelTrackingService:包裹追踪
- ExceptionHandlingService:异常处理,支持自动解决机制
- VehiclePoolService:车辆池管理,为每个站点维护可用车辆
- UnavailableRouteService:不可用路径管理,动态标记和查询不可用路径
- RandomExceptionGenerator:随机异常生成器
- RandomRouteGenerator:随机路径生成器
- Java 11+
- Maven 3.6+
- ✅ 实现了完整的异常处理逻辑(分拣、运输、派送三大类异常)
- ✅ 实现了自动异常解决机制(除包裹破损外,所有异常自动解决)
- ✅ 实现了车辆池管理(支持车辆故障时自动重新分配)
- ✅ 实现了不可用路径管理(支持路径不可用时自动重新规划)
- ✅ 实现了可配置的异常概率(用户可自定义0.0-1.0)
- ✅ 实现了详细的日志记录(运输任务分段显示、完整异常历史)
- ✅ 实现了自动资源分配(确保任何时候都有足够的派送员)
- ✅ 实现了完整的模拟系统(支持自定义任务数量、实时执行、状态监控)
- ✅ 修复了包裹在中转站被多次分拣的问题
- ✅ 修复了包裹到达最终目的地后未创建派送任务的问题
- ✅ 修复了包裹卡在SORTED状态的问题(资源不足时的重试机制)
- ✅ 修复了包裹卡在ARRIVED状态的问题(自动创建派送任务)
- ✅ 修复了车辆故障时的异常处理问题
- ✅ 修复了"收件人不在家"异常的状态更新问题
- 领域驱动设计(DDD)
- 单一职责原则
- 聚合根管理聚合边界
- 值对象不可变性
- 领域服务处理跨聚合逻辑