文件
mashangyoujiu/_ai_archive/docs/README_RIDER_SYSTEM.md

7.6 KiB

骑手订单分配系统

系统概述

本系统是在现有电商系统基础上扩展的骑手订单分配功能,实现了智能订单分配、位置追踪、状态同步等核心功能,确保不影响原系统的正常运行。

功能特性

1. 智能订单分配

  • 自动分配算法:基于距离、骑手状态、负载均衡等多因素智能分配
  • 手动分配:支持后台管理员手动指定骑手
  • 批量分配:支持批量处理多个订单
  • 重新分配:订单被拒绝后自动重新分配

2. 骑手管理

  • 骑手注册:支持骑手信息注册和审核
  • 状态管理:工作状态、在线状态实时管理
  • 评分系统:基于服务质量的评分机制
  • 权限控制:不同级别骑手的权限管理

3. 位置追踪

  • 实时定位:骑手位置实时更新
  • 轨迹记录:完整的配送轨迹记录
  • 范围查询:查找指定范围内的可用骑手
  • 到达提醒:自动检测到达门店和客户位置

4. 订单状态同步

  • 双向同步:骑手端和原系统订单状态实时同步
  • 状态一致性:确保数据一致性检查和修复
  • 操作日志:完整的操作日志记录
  • 异常处理:同步失败自动重试机制

系统架构

数据表结构

1. 骑手信息表 (ls_rider_info)

- id: 骑手ID
- real_name: 真实姓名
- phone: 手机号
- id_card: 身份证号
- store_id: 所属门店ID
- status: 账号状态 (0禁用 1启用)
- work_status: 工作状态 (0休息 1工作中)
- rating: 评分
- max_orders: 最大接单数
- last_location_lat/lng: 最后位置
- created_at/updated_at: 创建/更新时间

2. 骑手订单表 (ls_rider_order)

- id: 记录ID
- rider_id: 骑手ID
- bill_id: 原系统订单ID
- order_status: 订单状态 (0待接单 1已接单 2已取货 3配送中 4已完成 5已拒绝 6已取消)
- assign_time: 分配时间
- accept_time: 接单时间
- pickup_time: 取货时间
- delivery_time: 配送完成时间
- estimated_time: 预计送达时间
- delivery_fee: 配送费

3. 骑手位置表 (ls_rider_location)

- id: 记录ID
- rider_id: 骑手ID
- lat/lng: 经纬度
- accuracy: GPS精度
- speed: 速度
- bearing: 方向角
- record_time: 记录时间

4. 订单同步日志表 (ls_rider_order_sync_log)

- id: 日志ID
- rider_order_id: 骑手订单ID
- bill_id: 原系统订单ID
- action: 操作类型
- description: 操作描述
- sync_time: 同步时间

核心业务类

1. RiderOrderDispatch (订单分配)

  • autoDispatch(): 自动分配订单
  • manualDispatch(): 手动分配订单
  • getAvailableRiders(): 获取可用骑手
  • calculateBestRider(): 计算最佳骑手

2. OrderMatching (订单匹配)

  • smartMatch(): 智能匹配算法
  • batchMatch(): 批量匹配
  • calculateMatchScores(): 计算匹配分数

3. OrderStatusSync (状态同步)

  • syncOrderStatus(): 同步订单状态
  • checkStatusConsistency(): 检查状态一致性
  • fixStatusInconsistency(): 修复状态不一致

4. RiderLocationModel (位置管理)

  • addLocation(): 添加位置记录
  • getRidersInRange(): 获取范围内骑手
  • calculateDistance(): 计算距离
  • predictArrivalTime(): 预测到达时间

API接口

骑手端接口 (Api/Controller/RiderOrderController)

1. 获取订单列表

POST /Api/RiderOrder/getOrderList
参数: token, status, page, limit
返回: 订单列表数据

2. 接受订单

POST /Api/RiderOrder/acceptOrder
参数: token, rider_order_id
返回: 操作结果

3. 开始配送

POST /Api/RiderOrder/startDelivery
参数: token, rider_order_id
返回: 操作结果

4. 完成配送

POST /Api/RiderOrder/completeDelivery
参数: token, rider_order_id
返回: 操作结果

位置追踪接口 (Api/Controller/RiderLocationController)

1. 更新位置

POST /Api/RiderLocation/updateLocation
参数: token, lat, lng, accuracy, speed
返回: 操作结果

2. 获取位置轨迹

POST /Api/RiderLocation/getLocationTrack
参数: token, start_time, end_time
返回: 位置轨迹数据

后台管理接口 (Admin/Controller/RiderManageController)

1. 订单分配页面

GET /Admin/RiderManage/orderDispatch
返回: 分配页面

2. 获取待分配订单

POST /Admin/RiderManage/getPendingOrders
参数: page, limit, store_id
返回: 待分配订单列表

3. 手动分配订单

POST /Admin/RiderManage/manualDispatch
参数: bill_id, rider_id
返回: 分配结果

安装部署

1. 数据库初始化

执行 client/rider_tables.sql 文件创建相关数据表:

mysql -u username -p database_name < client/rider_tables.sql

2. 文件部署

将以下文件复制到对应目录:

  • 业务逻辑类:Application/Common/Business/
  • 模型类:Application/Common/Model/
  • 控制器类:Application/Api/Controller/ 和 Application/Admin/Controller/

3. 配置检查

确保以下配置正确:

  • 数据库连接配置
  • 缓存配置
  • 日志配置

4. 功能测试

运行测试脚本验证功能:

php test_rider_system.php

使用流程

1. 骑手注册流程

  1. 骑手提交注册信息
  2. 后台管理员审核
  3. 审核通过后激活账号
  4. 骑手登录开始工作

2. 订单分配流程

  1. 客户下单(原系统)
  2. 订单进入待分配状态
  3. 系统自动匹配最佳骑手
  4. 骑手接收订单通知
  5. 骑手确认接单

3. 配送流程

  1. 骑手前往门店取货
  2. 系统检测到达门店
  3. 骑手确认取货
  4. 开始配送到客户
  5. 系统检测到达客户位置
  6. 骑手完成配送

4. 状态同步流程

  1. 骑手端状态变更
  2. 触发同步机制
  3. 更新原系统订单状态
  4. 记录同步日志
  5. 发送状态通知

配置参数

分配算法参数

// 最大分配距离(公里)
'max_dispatch_distance' => 10,

// 骑手最大接单数
'max_orders_per_rider' => 3,

// 分配超时时间(秒)
'dispatch_timeout' => 300,

// 自动重新分配次数
'max_reassign_times' => 3,

位置追踪参数

// 位置更新间隔(秒)
'location_update_interval' => 30,

// 位置记录保留天数
'location_retention_days' => 30,

// GPS精度要求(米)
'gps_accuracy_threshold' => 50,

监控和维护

1. 日志监控

  • 订单分配日志:ls_rider_order_sync_log
  • 系统错误日志:ThinkPHP日志系统
  • 位置追踪日志:ls_rider_location

2. 性能监控

  • 分配响应时间
  • 同步成功率
  • 骑手在线率
  • 订单完成率

3. 数据维护

  • 定期清理过期位置数据
  • 清理过期同步日志
  • 备份重要业务数据
  • 检查数据一致性

常见问题

Q1: 订单分配失败怎么办?

A: 系统会自动重试分配,如果多次失败会记录日志,管理员可以手动分配。

Q2: 位置追踪不准确怎么办?

A: 检查GPS精度设置,确保骑手端开启高精度定位,调整精度阈值参数。

Q3: 状态同步失败怎么办?

A: 系统有自动重试机制,可以查看同步日志定位问题,必要时手动修复数据。

Q4: 如何优化分配算法?

A: 根据实际业务数据调整各项权重参数,可以通过A/B测试验证效果。

技术支持

如有技术问题,请查看:

  1. 系统日志文件
  2. 数据库错误日志
  3. 测试报告文件
  4. 本文档常见问题部分

版本更新

v1.0.0 (当前版本)

  • 基础订单分配功能
  • 位置追踪功能
  • 状态同步机制
  • 后台管理界面

后续规划

  • 推送通知功能
  • 数据统计分析
  • 移动端APP
  • 第三方配送平台对接