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<AuditStatusEnum> 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<AuditStatusEnum> 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);
|
}
|
}
|