package com.oying.modules.pc.common.core.constrant; import lombok.Getter; import java.util.EnumSet; import java.util.Optional; @Getter public enum AuditStatusEnum { DRAFT(1000, "草稿"), PENDING(1001, "待审核"), UNDER_REVIEW(1002, "审核中"), REJECTED(1003, "拒绝"), APPROVED(1004, "同意"), CANCELLED(1005, "取消"); private final Integer value; private final String reasonPhrase; AuditStatusEnum(Integer value, String reasonPhrase) { this.value = value; this.reasonPhrase = reasonPhrase; } public static AuditStatusEnum get(Integer code) { return getOrDefault(code, null); } public static AuditStatusEnum getOrDefault(Integer code, AuditStatusEnum defaultStatus) { for (AuditStatusEnum value : values()) { if (value.value.equals(code)) { return value; } } return defaultStatus; } public static boolean isApproved(Integer code) { return Optional.ofNullable(get(code)).map(i -> i.equals(APPROVED)).orElse(false); } public static boolean isCompleted(Integer code) { return EnumSet.of(REJECTED, APPROVED, CANCELLED).contains(get(code)); } public static AuditStatusEnum get(String name) { return AuditStatusEnum.valueOf(name); } public static EnumSet getNext(AuditStatusEnum status) { switch (status) { case DRAFT: return EnumSet.of(PENDING); case PENDING: return EnumSet.of(UNDER_REVIEW, APPROVED, REJECTED, CANCELLED); case UNDER_REVIEW: return EnumSet.of(APPROVED, REJECTED); case APPROVED: case REJECTED: case CANCELLED: default: return EnumSet.noneOf(AuditStatusEnum.class); } } public static boolean hasNext(AuditStatusEnum status) { return !getNext(status).isEmpty(); } public EnumSet getNext() { return getNext(this); } public boolean nextContains(AuditStatusEnum status) { return getNext().contains(status); } public boolean nextContains(String status) { return nextContains(get(status)); } public boolean hasNext() { return hasNext(this); } }