public enum StatusEnum {
CANCELED(0, "已取消"),
PENDING_PICKUP(1, "待取件"),
PICKED_UP(2, "已取件"),
IN_TRANSIT(3, "运输中"),
OUT_FOR_DELIVERY(4, "派件中"),
SIGNED(5, "已签收");
private final int code;
private final String description;
StatusEnum(int code, String description) {
this.code = code;
this.description = description;
}
static List<String> list0Canceled = new ArrayList<>();
static List<String> list1PendingPickup = new ArrayList<>();
static List<String> list2PickedUp = new ArrayList<>();
static List<String> list3InTransit = new ArrayList<>();
static List<String> list4OutForDelivery = new ArrayList<>();
static List<String> list5Signed = new ArrayList<>();
static {
// 已取消状态,部分二级状态示例(已取消、退回、作废等)
list0Canceled.add("33"); // 取消,二级可能有46(取消)、55(退回)、79(作废)
list0Canceled.add("70"); // 顺丰小哥取消,二级46
list0Canceled.add("77"); // 中转退回或作废,二级55、79
list0Canceled.add("131"); // 快递员从丰巢收件失败,二级无
list0Canceled.add("207"); // 仓库取消订单
list0Canceled.add("660"); // 合作点退件给客户
list0Canceled.add("8000"); // 作废件,二级2
// 待取件状态,二级状态包括待派送、待取件等
list1PendingPickup.add("33"); // 滞留件入仓、网点清关(133)、网点自取(83/85)
list1PendingPickup.add("70"); // 问题件,网点自取83
list1PendingPickup.add("632"); // 储物柜交接
list1PendingPickup.add("642"); // 门市/顺丰站快件上架
list1PendingPickup.add("125"); // 快递员派件至丰巢/无人车
list1PendingPickup.add("126"); // 快递员取消派件从丰巢取出
list1PendingPickup.add("121"); // 用户丰巢柜拒收
list1PendingPickup.add("138"); // 用户自助寄件
list1PendingPickup.add("127"); // 寄件客户放快件至丰巢
list1PendingPickup.add("651"); // SLC已揽件
list1PendingPickup.add("655"); // 合作点收件
list1PendingPickup.add("202"); // 出库(待揽收)
list1PendingPickup.add("657"); // 合作点从顺丰交接
list1PendingPickup.add("681"); // 到达待取
list1PendingPickup.add("934"); // 外配异常
// 注意同33、70在已取消列表中有部分code+reasonCode匹配取消,判断时需结合二级code
// 已取件状态,快件已揽收
list2PickedUp.add("43"); // 收件入仓
list2PickedUp.add("46"); // 二程接驳收件
list2PickedUp.add("50"); // 一票一件
list2PickedUp.add("51"); // 一票多件子件
list2PickedUp.add("54"); // 上门收件
list2PickedUp.add("129"); // 快递员从丰巢收件成功
list2PickedUp.add("135"); // 信息记录
list2PickedUp.add("141"); // 预售件准备发运
list2PickedUp.add("188"); // 港到港揽收
list2PickedUp.add("607"); // 代理交接-收件
list2PickedUp.add("950"); // 快速收件
// 运输中状态(没有明确归类为其他状态时默认归为此)
// 这里可不额外列出,默认匹配即可
// 派件中,快件处于派送环节
list4OutForDelivery.add("34"); // 滞留件出仓
list4OutForDelivery.add("44"); // 派件出仓
list4OutForDelivery.add("122"); // 加时区域派件出仓
list4OutForDelivery.add("123"); // 便利店出仓
list4OutForDelivery.add("151"); // 分配师傅
list4OutForDelivery.add("152"); // 师傅预约
list4OutForDelivery.add("153"); // 师傅提货
list4OutForDelivery.add("154"); // 师傅上门
list4OutForDelivery.add("204"); // 快件交接
list4OutForDelivery.add("211"); // 星管家派件交接
list4OutForDelivery.add("229"); // 投单签到
list4OutForDelivery.add("630"); // 落地配派件出仓
list4OutForDelivery.add("634"); // 港澳台二程接驳派件
list4OutForDelivery.add("933"); // 外配出仓
// 已签收状态
list5Signed.add("80"); // 签收
list5Signed.add("128"); // 客户从丰巢取件成功
list5Signed.add("658"); // 合作点已派件
list5Signed.add("701"); // 一票多件拍照收件
list5Signed.add("8000"); // 黄单录入
list5Signed.add("935"); // 外配签收
list5Signed.add("980"); // 第三方签收
list5Signed.add("8000"); // 8000原因码包含多个已签收情况,如6(遗失)、5(扣件)、11(到港)等。二级具体判断需业务补充。
}
public StatusEnum getEnum(String code) {
if (list0Canceled.contains(code)) {
return CANCELED;
}
if (list1PendingPickup.contains(code)) {
return PENDING_PICKUP;
}
if (list2PickedUp.contains(code)) {
return PICKED_UP;
}
if (list3InTransit.contains(code)) {
return IN_TRANSIT;
}
if (list4OutForDelivery.contains(code)) {
return OUT_FOR_DELIVERY;
}
if (list5Signed.contains(code)) {
return SIGNED;
}
// 默认归为运输中
return IN_TRANSIT;
}
}