zepengdev
2025-07-14 43315000b2840313a5aff96bf314b3c061e4616d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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);
    }
}