package com.tourguide.modules.order.domain; import java.util.EnumSet; import java.util.Arrays; import java.util.List; import java.util.Set; /** 订单主状态,不包含评价状态和支付渠道流水状态。 */ public enum OrderStatus { PENDING_PAYMENT, PENDING_ACCEPT, PENDING_MEETING, IN_SERVICE, COMPLETED, CANCELLED, REFUNDED; private static final Set REFUNDABLE_STATUSES = EnumSet.of( PENDING_ACCEPT, PENDING_MEETING, IN_SERVICE, COMPLETED); private static final List UNFINISHED_STATUS_CODES = Arrays.asList( PENDING_PAYMENT.getCode(), PENDING_ACCEPT.getCode(), PENDING_MEETING.getCode(), IN_SERVICE.getCode()); public String getCode() { return name(); } public boolean matches(String code) { return name().equals(code); } public static boolean isRefundable(String code) { for (OrderStatus status : REFUNDABLE_STATUSES) { if (status.matches(code)) { return true; } } return false; } public static List unfinishedStatusCodes() { return UNFINISHED_STATUS_CODES; } }