P15GEN2\59518
2025-10-10 9f6890646993d16260d4201d613c092132856127
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package foundation.org;
 
import foundation.state.approve.StepType;
import foundation.util.Util;
 
public class PositionMeta {
 
    
    public static enum Level {
        SalesDirector(1, "销售总监", "Actor-Sales-Director"), 
        SalesRegionDirector(2, "大区经理", "Actor-Sales-Leader"), 
        SalesAreaManager(3, "区域经理", "Actor-Sales-Leader"), 
        Sales(4, "销售工程师", "Actor-Sales-Rep"),
        
        CEO(1, "CEO", "Actor-Business-CEO"),
        BusinessOperator(2, "运营", "Actor-Business-Operator"),
        BusinessOperationAssistant(3, "运营助理", "Actor-Business-OperatorAssistant"),
        CFO(1, "CFO", "Actor-Business-CFO"),
        DocumentController(1, "文控", "Actor-Business-DocumentController"),
        IT(1, "IT", "Actor-Business-IT")
        
        ;
        
        private String title;
        private int levelNo;
        private String actorCode;
        
        private Level(int levelNo, String title, String actorCode) {
            this.levelNo = levelNo;
            this.title = title;
            this.actorCode = actorCode;
        }
        
        public String getTitle() {
            return title;
        }
 
        public static Level parse(String value) {
            if (Util.isEmpty(value)) {
                return Sales;
            }
            
            if ("SalesDirector".equalsIgnoreCase(value)) {
                return SalesDirector;
            }
            else if ("SalesRegionDirector".equalsIgnoreCase(value)) {
                return SalesRegionDirector;
            }
            else if ("SalesAreaManager".equalsIgnoreCase(value) || "SalesRegionManage".equalsIgnoreCase(value) ) {
                return SalesAreaManager;
            }
            else if ("SalesHierarchy".equalsIgnoreCase(value)) {
                return Sales;
            }
            else if ("CEO".equalsIgnoreCase(value)) {
                return CEO;
            }
            else if ("BusinessOperator".equalsIgnoreCase(value)) {
                return BusinessOperator;
            }
            else if ("BusinessOperationAssistant".equalsIgnoreCase(value)) {
                return BusinessOperationAssistant;
            }
            else if ("DocumentController".equalsIgnoreCase(value)) {
                return DocumentController;
            }
            else if ("CFO".equalsIgnoreCase(value)) {
                return CFO;
            }
            else if ("IT".equalsIgnoreCase(value)) {
                return IT;
            }
            
            return Sales;
        }
        
        public boolean isUnder(Level level) {
            return levelNo < level.getLevelNo();
        }
 
        public boolean isSalesDirector() {
            return this == SalesDirector;
        }
 
        public boolean isSalesRegionDirector() {
            return this == SalesRegionDirector;
        }
        
        public boolean isSalesAreaManager() {
            return this == SalesAreaManager;
        }
        
        public boolean isSales() {
            return this == Sales;
        }
 
        public int getLevelNo() {
            return levelNo;
        }
 
        public String getActorCode() {
            return actorCode;
        }
 
        public boolean isLeader() {
            return this == SalesRegionDirector || this == CEO;
        }
    }
    
    public PositionMeta() {
        level = Level.Sales;
    }
    
    public PositionMeta(String levelCode) {
        level = Level.parse(levelCode);
    }
    
    public void load(String levelCode) {
        level = Level.parse(levelCode);
    }
    
    public boolean isSalesDirector() {
        return level.isSalesDirector();
    }
 
    public boolean isSalesRegionDirector() {
        return level.isSalesRegionDirector();
    }
    
    public boolean isSales() {
        return level.isSales();
    }
 
    public boolean isLeader() {
        return level.isLeader();
    }
 
    public boolean isDuty(StepType type) {
        if (level.name().equals(type.name())) {
            return true;
        }
        
        return false;
    }
    
    public String getActorCode() {
        return level.getActorCode();
    }
    
    private Level level;
 
}