一、功能概述
订单实时追踪是小象买菜系统的核心功能之一,旨在让用户能够实时了解订单状态,包括订单处理、配送进度等信息,提升用户体验和信任度。
二、技术架构设计
1. 前端实现
- 用户界面:
- 订单详情页显示实时状态和地图轨迹
- 状态变更通知(声音/震动提醒)
- 预计送达时间动态更新
- 技术选型:
- React/Vue.js 框架
- 高德/百度地图API
- WebSocket或长轮询实现实时通信
2. 后端实现
- 实时通信层:
- WebSocket服务(推荐使用Socket.IO)
- 订单状态变更事件推送
- 核心服务:
- 订单状态机管理
- 配送员位置跟踪服务
- 预计时间计算引擎
- 数据存储:
- MySQL/PostgreSQL(订单主数据)
- Redis(实时状态缓存)
- MongoDB(轨迹数据存储)
三、核心功能实现
1. 订单状态机设计
```javascript
const ORDER_STATES = {
PENDING: 待支付,
PAID: 已支付,
PREPARING: 备货中,
PICKED: 已拣货,
DELIVERING: 配送中,
COMPLETED: 已完成,
CANCELLED: 已取消
};
```
2. 实时状态更新机制
```javascript
// WebSocket服务示例
const socketServer = new Server({
cors: {
origin: "*",
methods: ["GET", "POST"]
}
});
socketServer.on(connection, (socket) => {
console.log(用户已连接);
// 监听订单状态变更
socket.on(subscribe, (orderId) => {
// 加入订单频道
socket.join(orderId);
// 发送当前状态
const currentState = getOrderState(orderId);
socket.emit(stateUpdate, currentState);
});
});
// 订单状态变更时广播
function broadcastStateChange(orderId, newState) {
socketServer.to(orderId).emit(stateUpdate, newState);
}
```
3. 配送员位置追踪
```javascript
// 配送员位置更新接口
app.post(/api/delivery/location, (req, res) => {
const { deliveryId, latitude, longitude } = req.body;
// 存储位置数据
storeLocation(deliveryId, latitude, longitude);
// 获取该配送员当前所有订单
const orders = getActiveOrdersByDelivery(deliveryId);
// 通知相关用户
orders.forEach(order => {
broadcastStateChange(order.id, {
state: DELIVERING,
location: { latitude, longitude },
updatedAt: new Date()
});
});
res.status(200).send(位置更新成功);
});
```
4. 预计送达时间计算
```javascript
function calculateEstimatedTime(order) {
// 基于历史数据和当前状态的算法
const baseTime = 30; // 基础时间(分钟)
// 根据订单商品数量调整
const itemAdjustment = order.items.length * 2;
// 根据当前状态调整
let stateAdjustment = 0;
switch(order.state) {
case PREPARING:
stateAdjustment = 10;
break;
case PICKED:
stateAdjustment = 5;
break;
case DELIVERING:
// 根据配送员位置和用户地址计算
const distance = calculateDistance(
order.deliveryLocation,
order.userLocation
);
stateAdjustment = distance / 1000 * 3; // 每公里3分钟
break;
}
return Math.round(baseTime + itemAdjustment + stateAdjustment);
}
```
四、数据库设计
1. 订单表(orders)
```
id | user_id | delivery_id | state | total_amount | created_at | updated_at
```
2. 订单状态历史表(order_state_history)
```
id | order_id | state | created_at | notes
```
3. 配送员位置表(delivery_locations)
```
id | delivery_id | latitude | longitude | recorded_at
```
五、前端实现要点
1. 订单状态显示组件
```jsx
function OrderStatusTracker({ orderId }) {
const [status, setStatus] = useState(null);
const [location, setLocation] = useState(null);
const [estimatedTime, setEstimatedTime] = useState(null);
useEffect(() => {
const socket = io();
// 订阅订单状态
socket.emit(subscribe, orderId);
socket.on(stateUpdate, (data) => {
setStatus(data.state);
setLocation(data.location);
// 重新计算预计时间
const newEstimatedTime = calculateEstimatedTime({
// 模拟订单数据
state: data.state,
items: [] // 实际应从API获取
});
setEstimatedTime(newEstimatedTime);
});
return () => {
socket.disconnect();
};
}, [orderId]);
return (
{location && }
{estimatedTime && }
);
}
```
2. 地图轨迹显示
```jsx
function DeliveryMap({ location }) {
const [map, setMap] = useState(null);
const [marker, setMarker] = useState(null);
useEffect(() => {
if (!location) return;
// 初始化地图
const newMap = new AMap.Map(map-container, {
zoom: 15,
center: [location.longitude, location.latitude]
});
setMap(newMap);
// 添加标记
const newMarker = new AMap.Marker({
position: [location.longitude, location.latitude]
});
newMap.add(newMarker);
setMarker(newMarker);
return () => {
if (newMap) newMap.destroy();
};
}, [location]);
// 更新位置
useEffect(() => {
if (map && marker && location) {
marker.setPosition([location.longitude, location.latitude]);
map.setCenter([location.longitude, location.latitude]);
}
}, [location, map, marker]);
return
;
}
```
六、测试方案
1. 单元测试:
- 订单状态转换逻辑
- 预计时间计算算法
- WebSocket事件处理
2. 集成测试:
- 订单状态变更通知流程
- 配送员位置更新到用户界面显示
- 多用户同时追踪同一订单
3. 性能测试:
- 高并发订单状态更新
- 大量配送员位置数据存储和查询
七、部署与监控
1. 部署方案:
- WebSocket服务独立部署
- 使用Nginx负载均衡
- 数据库读写分离
2. 监控指标:
- WebSocket连接数
- 状态更新延迟
- 位置数据更新频率
- 错误率监控
八、扩展功能建议
1. 异常情况处理:
- 配送延迟通知
- 订单状态回滚机制
- 自动重新分配配送员
2. 用户体验增强:
- 配送员信息展示(照片、评分)
- 一键联系配送员
- 送达前提醒功能
3. 数据分析:
- 配送时效分析
- 热门配送区域分析
- 用户等待时间分析
通过以上方案,小象买菜系统可以实现稳定可靠的订单实时追踪功能,提升用户满意度和平台运营效率。