智能派单功能实现说明.md 3.6 KB

智能派单功能实现说明

功能概述

实现了自动扫描 WAITING 状态的订单,通过 ISmartDispatchService.recommendRiders 方法进行智能派单,并将订单和推荐的师傅关联保存到中间表中。

核心功能

1. 自动扫描和派单

  • 定时任务: AutoDispatchQuartz 每5分钟自动扫描等待状态的订单
  • 派单服务: OrderDispatchServiceImpl 实现智能派单逻辑
  • 状态管理: 订单状态从 WAITING(0) 更新为 ALLOCATED(6)

2. 中间表设计

  • 表名: kx_order_rider_recommend
  • 主要字段:
    • order_no: 订单编号
    • rider_id: 推荐的师傅ID
    • rider_name: 师傅姓名
    • match_score: 匹配度分数
    • recommend_order: 推荐排序(1表示最优推荐)
    • status: 推荐状态(0-待处理, 1-已分配, 2-师傅拒绝, 3-超时)

3. 管理功能

  • Controller: KxOrderRiderRecommendController 提供CRUD操作
  • 手动派单: 支持手动触发指定订单的派单功能
  • 查询功能: 根据订单号查询推荐的师傅列表

主要类文件

实体类和数据访问

  1. KxOrderRiderRecommend.java - 中间表实体类
  2. KxOrderRiderRecommendVo.java - 视图对象
  3. KxOrderRiderRecommendBo.java - 业务对象
  4. KxOrderRiderRecommendMapper.java - 数据访问接口
  5. KxOrderRiderRecommendMapper.xml - MyBatis映射文件

业务服务

  1. IOrderDispatchService.java - 派单服务接口
  2. OrderDispatchServiceImpl.java - 派单服务实现
  3. IKxOrderRiderRecommendService.java - 推荐记录服务接口
  4. KxOrderRiderRecommendServiceImpl.java - 推荐记录服务实现

控制器和定时任务

  1. KxOrderRiderRecommendController.java - 管理控制器
  2. AutoDispatchQuartz.java - 自动派单定时任务

数据库脚本

  1. kx_order_rider_recommend.sql - 中间表创建脚本

工作流程

  1. 定时扫描: 每5分钟扫描状态为 WAITING 的订单
  2. 参数构建: 根据订单信息构建 SmartDispatchParamBo 参数
  3. 智能推荐: 调用 ISmartDispatchService.recommendRiders 获取推荐师傅
  4. 保存关联: 将推荐结果批量插入到中间表
  5. 状态更新: 更新订单状态为 ALLOCATED

配置说明

定时任务配置

  • 执行频率: 每5分钟执行一次 (0 */5 * * * ?)
  • 可以根据业务需要调整执行频率

推荐策略

  • 匹配度计算: 基于服务类型、距离、评分、经验等因素
  • 紧急程度: 根据配送费判断订单紧急程度
  • 服务关键词: 目前使用默认关键词,可扩展为根据商品类型动态设置

扩展点

  1. 服务关键词优化: 可以根据订单商品类型动态设置服务关键词
  2. 推荐策略调整: 可以根据业务需求调整匹配度计算权重
  3. 通知机制: 可以加入师傅推送通知功能
  4. 监控报警: 可以加入派单失败的监控和报警机制

使用说明

自动派单

系统会自动运行,无需人工干预。

手动派单

可以通过以下API手动触发订单派单:

POST /rider/orderRiderRecommend/dispatch/{orderNo}

查询推荐记录

可以通过以下API查询订单的推荐师傅:

GET /rider/orderRiderRecommend/listByOrderNo/{orderNo}

注意事项

  1. 数据库表: 需要先执行 kx_order_rider_recommend.sql 创建中间表
  2. 依赖关系: 依赖现有的 ISmartDispatchService 智能派单服务
  3. 事务处理: 派单过程使用事务确保数据一致性
  4. 错误处理: 包含完善的异常处理和日志记录
  5. 幂等性: 对于已有推荐记录的订单会跳过处理,避免重复派单