一、功能概述 订单状态追踪是生鲜电商系统的核心功能之一,能够让用户实时了解订单从下单到配送完成的整个流程,提升用户体验和信任度。 二、系统架构设计 1.前端实现 -订单详情页:展示订单当前状态和历史状态变更记录 -状态时间轴:可视化展示订单流程节点 -实时推送:通过W
一、功能概述
订单状态追踪是生鲜电商系统的核心功能之一,能够让用户实时了解订单从下单到配送完成的整个流程,提升用户体验和信任度。
二、系统架构设计
1. 前端实现
- 订单详情页:展示订单当前状态和历史状态变更记录
- 状态时间轴:可视化展示订单流程节点
- 实时推送:通过WebSocket或长轮询实现状态变更实时通知
2. 后端服务
- 订单状态机:定义订单状态流转规则
- 状态变更服务:处理状态变更逻辑
- 消息队列:异步处理状态变更通知
3. 数据库设计
```sql
CREATE TABLE order_status_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL,
status VARCHAR(20) NOT NULL,
status_desc VARCHAR(100),
operator_type ENUM(system, user, rider, warehouse) NOT NULL,
operator_id BIGINT,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
location VARCHAR(50), -- 可选,用于配送位置追踪
INDEX idx_order_id (order_id),
INDEX idx_create_time (create_time)
);
```
三、核心功能实现
1. 订单状态定义
```java
public enum OrderStatus {
PENDING_PAYMENT("待支付"),
PAID("已支付"),
WAREHOUSE_PROCESSING("仓库处理中"),
PICKING("拣货中"),
PACKING("打包中"),
DELIVERING("配送中"),
DELIVERED("已送达"),
COMPLETED("已完成"),
CANCELLED("已取消"),
REFUNDED("已退款");
private String description;
// 构造方法、getter省略
}
```
2. 状态变更服务
```java
@Service
public class OrderStatusService {
@Autowired
private OrderStatusHistoryRepository historyRepository;
@Transactional
public void updateOrderStatus(Long orderId, OrderStatus newStatus,
OperatorType operatorType, Long operatorId) {
// 1. 更新订单主表状态(省略)
// 2. 记录状态变更历史
OrderStatusHistory history = new OrderStatusHistory();
history.setOrderId(orderId);
history.setStatus(newStatus.name());
history.setStatusDesc(newStatus.getDescription());
history.setOperatorType(operatorType);
history.setOperatorId(operatorId);
// 可设置位置信息等
historyRepository.save(history);
// 3. 发送状态变更通知(短信、推送等)
notifyStatusChange(orderId, newStatus);
}
private void notifyStatusChange(Long orderId, OrderStatus newStatus) {
// 实现通知逻辑
}
}
```
3. 状态流转规则(状态机)
```java
public class OrderStateMachine {
public static boolean canTransition(OrderStatus current, OrderStatus target) {
switch (current) {
case PENDING_PAYMENT:
return target == OrderStatus.PAID || target == OrderStatus.CANCELLED;
case PAID:
return target == OrderStatus.WAREHOUSE_PROCESSING ||
target == OrderStatus.CANCELLED;
case WAREHOUSE_PROCESSING:
return target == OrderStatus.PICKING ||
target == OrderStatus.PACKING ||
target == OrderStatus.CANCELLED;
// 其他状态流转规则...
default:
return false;
}
}
}
```
四、关键业务场景实现
1. 支付成功状态更新
```java
@Transactional
public void handlePaymentSuccess(Long orderId, PaymentInfo paymentInfo) {
// 验证支付信息
// 更新订单状态
OrderStatus newStatus = OrderStatus.PAID;
orderStatusService.updateOrderStatus(orderId, newStatus,
OperatorType.SYSTEM, null);
// 触发仓库处理
warehouseService.triggerOrderProcessing(orderId);
}
```
2. 配送员位置追踪
```java
public void updateRiderLocation(Long orderId, Double latitude, Double longitude) {
// 更新配送员实时位置
riderLocationService.update(orderId, latitude, longitude);
// 记录状态变更(可选)
if (isSignificantLocationChange(orderId, latitude, longitude)) {
orderStatusService.updateOrderStatus(orderId, OrderStatus.DELIVERING,
OperatorType.RIDER, riderId);
}
}
```
3. 异常状态处理
```java
public void handleDeliveryException(Long orderId, String exceptionReason) {
// 更新为异常状态
orderStatusService.updateOrderStatus(orderId, OrderStatus.EXCEPTION,
OperatorType.SYSTEM, null);
// 记录异常详情
exceptionLogService.log(orderId, exceptionReason);
// 触发客服处理流程
customerService.triggerExceptionHandling(orderId);
}
```
五、前端展示实现
1. Vue组件示例
```vue
订单状态追踪
v-for="(status, index) in statusHistory"
:key="index"
:class="[status-item, {active: isCurrentStatus(status)}]"
>
{{ status.statusDesc }}
{{ formatTime(status.createTime) }}
{{ status.location }}
<script>
export default {
data() {
return {
statusHistory: [] // 从API获取的状态历史数据
}
},
methods: {
isCurrentStatus(status) {
// 判断是否为当前最新状态
},
getStatusIcon(status) {
// 根据状态返回不同图标
},
formatTime(time) {
// 格式化时间显示
}
},
created() {
// 初始化时获取订单状态历史
this.fetchOrderStatusHistory();
// 建立WebSocket连接实时获取状态更新
this.initWebSocket();
}
}
```
六、性能优化考虑
1. 状态历史分页:对于历史订单,实现分页加载状态记录
2. 缓存策略:缓存热门订单的最新状态
3. 异步处理:状态变更通知使用消息队列异步处理
4. 数据库索引:为order_id和create_time字段建立索引
七、安全与权限控制
1. 用户只能查看自己的订单状态
2. 内部操作人员查看订单状态需验证权限
3. 敏感信息(如用户地址)在状态历史中适当脱敏
八、扩展功能建议
1. 预计送达时间计算:基于历史数据和实时交通情况预测
2. 异常状态预警:当订单在某个状态停留过久时自动提醒
3. 多端同步:确保APP、小程序、网页端状态实时同步
4. 状态分享:允许用户将订单状态分享给收货人
通过以上实现方案,可以构建一个高效、可靠的订单状态追踪系统,显著提升叮咚买菜用户的购物体验。