Skip to content

Stageholic/Lab3

Repository files navigation

快递物流管理系统

基于领域驱动设计(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个步骤) ✅ 完整的模拟系统,支持自定义任务数量和异常概率 ✅ 实时任务执行和状态更新

扩展流程支持

分拣异常处理

  • 信息错误异常:通知客户重新填写信息
  • 自动异常解决机制

运输异常处理

  • 天气/交通/道路异常:标记不可用路径,自动重新规划路线
  • 车辆故障异常:自动从车辆池重新分配车辆
  • 自动异常解决机制

派送异常处理

  • 地址/联系信息错误:通知客户更新信息
  • 收件人不在家:包裹返回起始站,重新发起派送
  • 包裹破损:终止派送,通知发件人和收件人
  • 自动异常解决机制(除包裹破损外)

基本能力

✅ 包裹状态管理与追溯 ✅ 运输调度与任务管理 ✅ 派送任务执行支持 ✅ 车辆池管理(每个站点维护可用车辆) ✅ 不可用路径管理(动态标记和重新规划) ✅ 自动资源分配(确保任何时候都有足够的派送员) ✅ 详细的日志记录(运输任务分段显示、完整异常历史)

编译和运行

使用 Maven 编译

# 编译项目
mvn clean compile

运行程序

方式1:快速启动脚本(推荐)

项目提供了跨平台的启动脚本,无需手动输入命令:

Windows系统:

run_simulation.bat

Linux/Mac系统:

chmod +x run_simulation.sh
./run_simulation.sh

方式2:交互式系统

支持客户、系统管理员、司机、派送员等多种角色,以及完整的模拟系统。

# 运行交互式系统
java -cp target/classes com.logistics.LogisticsSystemInteractive

功能说明:

  • 模拟系统(核心功能):

    • 自定义任务数量:启动模拟时可设置要创建的包裹订单数量
    • 可配置异常概率:设置0.0-1.0之间的异常发生概率
    • 实时任务执行:自动执行运输和派送任务
    • 完整异常处理:自动处理并解决各类异常(除包裹破损外)
    • 任务状态监控:查看进行中、已完成的任务
    • 完整重置功能:重置模拟时清除所有数据,可重新开始
  • 客户角色

    • 发起包裹寄送请求(终端输入收件人信息、包裹信息等)
    • 查看自己的所有订单
    • 根据运单号追踪包裹
    • 查看订单详细信息(包括运输任务分段、异常历史等)
  • 系统管理员角色

    • 查看所有订单信息
    • 查看有异常的订单
    • 查看订单详细信息(包括异常和解决方案)
    • 查看进行中和已完成的任务
  • 司机角色

    • 查看分配的运输任务
    • 完成运输任务
  • 派送员角色

    • 查看分配的派送任务
    • 完成派送任务

方式3:演示程序

自动演示完整流程,验证模型功能。

# 运行演示程序
java -cp target/classes com.logistics.LogisticsSystemDemo

模型验证

根据需求文档要求,模型需要以某种方式进行验证。项目提供了完整的演示程序来验证模型是否能够支持所有功能。

快速验证命令

# 一键编译并运行验证
mvn clean compile exec:java

验证内容

演示程序会自动验证:

  1. 正常流程(8个步骤)

    • 包裹创建和运单生成
    • 路径规划
    • 分拣和运输任务创建
    • 运输执行
    • 派送任务分配
    • 签收
  2. 扩展流程

    • 包裹分拣异常处理(信息错误,自动解决)
    • 运输路线变更(路径不可用,自动重新规划)
    • 车辆故障处理(自动重新分配车辆)
    • 派送异常处理(地址错误、收件人不在家、包裹破损)
  3. 基本能力

    • 包裹状态管理与追溯
    • 运输调度与任务管理(负载均衡)
    • 派送任务执行支持(负载均衡)
    • 车辆池管理
    • 不可用路径管理
    • 自动资源分配
  4. 模拟系统功能

    • 自定义任务数量创建
    • 可配置异常概率
    • 实时任务执行和状态更新
    • 自动异常处理和解决
    • 完整的日志记录

交互式系统功能

客户功能

  1. 发起包裹寄送请求

    • 从终端输入寄件人信息(姓名、电话、地址)
    • 输入收件人信息(姓名、电话、地址)
    • 输入包裹信息(重量、尺寸、描述)
    • 选择起始网点
    • 系统自动随机生成目的地和路径
    • 系统可能随机生成异常情况(30%概率)
  2. 查看我的订单

    • 查看所有自己发起的订单
    • 显示订单详细信息(收件人、包裹信息、当前位置、状态等)
    • 显示异常信息(如有)
  3. 包裹追踪

    • 根据运单号查询包裹
    • 显示当前状态、位置、历史轨迹

系统管理员功能

  1. 查看所有订单

    • 显示系统中所有订单的详细信息
    • 包括运输任务、派送任务、异常信息等
  2. 查看异常订单

    • 筛选出所有有异常的订单
    • 显示异常类型、原因、解决方案建议
  3. 订单详情查询

    • 根据运单号查询订单完整信息
    • 包括所有相关任务和异常处理情况

模拟系统功能

  • 自定义任务数量:启动模拟时可设置要创建的包裹订单数量
  • 可配置异常概率:设置0.0-1.0之间的异常发生概率(例如0.3表示30%)
  • 实时任务执行
    • 自动创建运输任务和派送任务
    • 自动执行任务(运输5-10秒,派送5-10秒)
    • 自动处理异常并解决(除包裹破损外)
  • 任务状态监控
    • 查看进行中的订单和任务
    • 查看已完成的订单和任务
    • 查看详细的运输任务信息(分段显示,包含司机信息)
    • 查看完整的异常历史记录
  • 完整重置功能:重置模拟时清除所有数据,可重新开始

随机生成功能

  • 随机路径生成:系统会根据起始网点随机选择目的地,并可能生成包含0-2个中转站的路径
  • 随机异常生成:根据用户设置的异常概率随机生成异常(分拣异常、运输异常、派送异常)

领域模型设计

核心聚合

  1. Parcel Aggregate(包裹聚合)

    • 聚合根:Parcel
    • 包含:Waybill、TrackingRecord、ExceptionInfo
  2. TransportTask Aggregate(运输任务聚合)

    • 聚合根:TransportTask
    • 关联:Vehicle、Driver
  3. DeliveryTask Aggregate(派送任务聚合)

    • 聚合根:DeliveryTask
    • 关联:DeliveryPerson

领域服务

  • RoutePlanningService:路径规划,支持不可用路径过滤和重新规划
  • SortingService:包裹分拣
  • DispatchingService:运输调度,支持负载均衡
  • DeliveryTaskAssignmentService:派送任务分配,支持负载均衡
  • ParcelTrackingService:包裹追踪
  • ExceptionHandlingService:异常处理,支持自动解决机制
  • VehiclePoolService:车辆池管理,为每个站点维护可用车辆
  • UnavailableRouteService:不可用路径管理,动态标记和查询不可用路径
  • RandomExceptionGenerator:随机异常生成器
  • RandomRouteGenerator:随机路径生成器

技术栈

  • Java 11+
  • Maven 3.6+

主要改进和修复

功能增强

  • ✅ 实现了完整的异常处理逻辑(分拣、运输、派送三大类异常)
  • ✅ 实现了自动异常解决机制(除包裹破损外,所有异常自动解决)
  • ✅ 实现了车辆池管理(支持车辆故障时自动重新分配)
  • ✅ 实现了不可用路径管理(支持路径不可用时自动重新规划)
  • ✅ 实现了可配置的异常概率(用户可自定义0.0-1.0)
  • ✅ 实现了详细的日志记录(运输任务分段显示、完整异常历史)
  • ✅ 实现了自动资源分配(确保任何时候都有足够的派送员)
  • ✅ 实现了完整的模拟系统(支持自定义任务数量、实时执行、状态监控)

Bug修复

  • ✅ 修复了包裹在中转站被多次分拣的问题
  • ✅ 修复了包裹到达最终目的地后未创建派送任务的问题
  • ✅ 修复了包裹卡在SORTED状态的问题(资源不足时的重试机制)
  • ✅ 修复了包裹卡在ARRIVED状态的问题(自动创建派送任务)
  • ✅ 修复了车辆故障时的异常处理问题
  • ✅ 修复了"收件人不在家"异常的状态更新问题

设计原则

  • 领域驱动设计(DDD)
  • 单一职责原则
  • 聚合根管理聚合边界
  • 值对象不可变性
  • 领域服务处理跨聚合逻辑

About

Logistics Management System - DDD Implementation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages