package com.oying.modules.message.common; import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Arrays; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * 订单状态枚举 * * @author leomon * @date 2025-05-20 */ @Getter @AllArgsConstructor public enum OrderStatusEnum { //订单消息 通知状态 用于插入 //订单状态需要满足: /// 商户: 订单类消息,包括买家下单提醒、订单送达通知等 /// 骑手:类消息,包括有待接单、订单已取消、距离最晚送达时间不足1小时、距离最晚送达时间不足30分钟等 /// 骑手:系统后台针对订单,只提供不足1小时和不足30分钟两个提醒。时间分别在59分和29分 /// 买家 订单类消息,包括订单状态变化通知、订单送达通知等 /// 保留骑手已接单、骑手已取货 /// 变量前缀商户 骑手 买家 /* ========== 商户相关状态 ========== */ /** * 商户:买家下单提醒 * 商户收到新订单通知 */ MERCHANT_ORDER_SUBMITTED(0, "订单已提交"), /** * 商户:支付成功通知 * 订单支付成功通知商户 */ MERCHANT_PAYMENT_SUCCESS(1, "支付成功"), /** * 商户:商家已接单 * 商户确认接单通知 */ MERCHANT_ACCEPTED(2, "商家已接单"), /** * 商户:商家已备货 * 商户完成备货通知 */ MERCHANT_PREPARED(4, "商家已备货"), /* ========== 骑手相关状态 ========== */ /** * 骑手:有待接单 * 骑手端有待接订单通知 */ RIDER_PENDING_ACCEPTANCE(3, "骑手已接单"), /** * 骑手:骑手已取货 * 骑手取货完成通知 */ RIDER_PICKED_UP(6, "骑手已取货"), /** * 骑手:骑手已到店 * 骑手到达商户店铺通知 */ RIDER_ARRIVED(5, "骑手已到店"), /** * 骑手:订单已取消 * 订单取消通知骑手 */ RIDER_ORDER_CANCELLED(9, "订单已取消"), /** * 骑手:距离最晚送达时间不足1小时 * 系统后台提供的定时提醒状态,在订单创建后59分钟时触发 */ RIDER_DELIVERY_WARNING_1H(10, "距离最晚送达时间不足1小时"), /** * 骑手:距离最晚送达时间不足30分钟 * 系统后台提供的定时提醒状态,在订单创建后29分钟时触发 */ RIDER_DELIVERY_WARNING_30MIN(11, "距离最晚送达时间不足30分钟"), /* ========== 买家相关状态 ========== */ /** * 买家:订单状态变化通知 * 订单状态更新通知买家 */ BUYER_ORDER_STATUS_CHANGED(7, "商品已送达"), /** * 买家:订单已完成 * 订单完成通知买家 */ BUYER_ORDER_COMPLETED(8, "订单已完成"), /** * 买家:订单送达通知 * 订单送达通知买家 */ BUYER_ORDER_DELIVERED(13, "订单送达"); /** * 反向映射,提升查找速度 */ private static final Map MAP = Arrays.stream(values()) .collect(Collectors.toMap(OrderStatusEnum::getKey, Function.identity())); private final Integer key; private final String value; /* ========== 工具方法 ========== */ /** * 根据 key 获取枚举 */ public static OrderStatusEnum of(Integer key) { return key == null ? null : MAP.get(key); } /** * 根据 key 获取描述 */ public static String descOf(Integer key) { OrderStatusEnum e = of(key); return e == null ? "" : e.getValue(); } }