吉安感知网项目-后端
linwei
3 days ago 92dc5972adbd94d47c0e6501ce4a7b51af09e3c3
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
package org.sxkj.gd.workorder.enums;
 
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
 
/**
 * 巡查任务状态枚举
 * 用于标识巡查任务的不同状态
 *
 * @author BladeX
 * @date 2026-01-19
 */
@Getter
public enum PatrolTaskStatusEnum {
 
    /**
     * 待签收
     * 对应主任务状态:发布中_接单中(10)
     */
    PENDING_SIGNING("0", "待签收", "巡检任务拆分", 0, false, WorkOrderStatusEnum.PUBLISHING_ACCEPTING),
 
    /**
     * 拒绝签收(忽略)
     * 该状态不计入主任务状态计算
     */
    REJECTED_SIGNING("1", "拒绝签收", "拒绝签收", 1, true, null),
 
    /**
     * 已撤回(忽略)
     * 该状态不计入主任务状态计算
     */
    WITHDRAWN("2", "已撤回", "任务撤回", 2, true, null),
 
    /**
     * 待审核
     * 对应主任务状态:响应中_待拆分(20)
     */
    PENDING_AUDIT("3", "待审核", "待签收", 3, false, WorkOrderStatusEnum.RESPONDING_TO_BE_SPLIT),
 
    /**
     * 审核驳回
     * 对应主任务状态:响应中_申请修改(22)
     */
    AUDIT_REJECTED("4", "审核驳回", "审核驳回", 4, false, WorkOrderStatusEnum.RESPONDING_APPLY_MODIFY),
 
    /**
     * 审核通过
     * 对应主任务状态:执行中_待全部完成(30)
     */
    AUDIT_PASSED("5", "审核通过", "审核通过", 5, false, WorkOrderStatusEnum.EXECUTING_TO_BE_COMPLETED),
 
    /**
     * 待验收
     * 对应主任务状态:完成待验_待全部验收(40)
     */
    PENDING_ACCEPTANCE("6", "待验收", "待验收", 6, false, WorkOrderStatusEnum.COMPLETED_TO_BE_INSPECTED),
 
    /**
     * 拒绝验收(忽略)
     * 该状态不计入主任务状态计算
     */
    REJECTED_ACCEPTANCE("7", "拒绝验收", "拒绝验收", 7, true, null),
 
    /**
     * 验收通过
     * 对应主任务状态:验收通过_待结算(50)
     */
    ACCEPTANCE_PASSED("8", "验收通过", "验收通过", 8, false, WorkOrderStatusEnum.ACCEPTED_TO_BE_SETTLED);
 
    /**
     * 枚举值,对应数据库存储值
     */
    @EnumValue
    private final String value;
 
    /**
     * 枚举描述,用于展示
     */
    @JsonValue
    private final String desc;
 
    /**
     * 工单阶段描述
     */
    @JsonValue
    private final String stageDesc;
 
    /**
     * 进度权重(数字越大进度越快)
     * 用于状态聚合时计算最小进度
     */
    private final int weight;
 
    /**
     * 是否应该忽略该状态
     * 拒绝签收、已撤回、拒绝验收的状态应该被忽略
     */
    private final boolean shouldIgnore;
 
    /**
     * 对应的主任务状态
     * 忽略状态对应null
     */
    private final WorkOrderStatusEnum workOrderStatusMapping;
 
    PatrolTaskStatusEnum(String stageDesc) {
        this.value = "";
        this.desc = "";
        this.stageDesc = stageDesc;
        this.weight = 0;
        this.shouldIgnore = false;
        this.workOrderStatusMapping = null;
    }
 
    PatrolTaskStatusEnum(String value, String desc, String stageDesc) {
        this.value = value;
        this.desc = desc;
        this.stageDesc = stageDesc;
        this.weight = 0;
        this.shouldIgnore = false;
        this.workOrderStatusMapping = null;
    }
 
    /**
     * 完整构造函数
     *
     * @param value 枚举值,对应数据库存储值
     * @param desc 枚举描述,用于展示
     * @param stageDesc 工单阶段描述
     * @param weight 进度权重(数字越大进度越快)
     * @param shouldIgnore 是否应该忽略该状态
     * @param workOrderStatusMapping 对应的主任务状态
     */
    PatrolTaskStatusEnum(String value, String desc, String stageDesc, int weight, boolean shouldIgnore, WorkOrderStatusEnum workOrderStatusMapping) {
        this.value = value;
        this.desc = desc;
        this.stageDesc = stageDesc;
        this.weight = weight;
        this.shouldIgnore = shouldIgnore;
        this.workOrderStatusMapping = workOrderStatusMapping;
    }
 
    /**
     * 根据值获取对应的枚举
     *
     * @param value 枚举值
     * @return 对应的枚举,如果未找到则返回null
     */
    public static PatrolTaskStatusEnum getByValue(String value) {
        for (PatrolTaskStatusEnum status : values()) {
            if (status.getValue().equals(value)) {
                return status;
            }
        }
        return null;
    }
 
    /**
     * 检查当前状态是否允许转换到目标状态
     *
     * @param targetStatus 审核状态:1.同意签收、2.拒绝签收 、3.撤回任务 、4.同意审核、 5.拒绝审核、 6.验收通过、 7.验收拒绝"
     * @return 是否允许转换
     */
    public boolean isAllowedTransition(Integer targetStatus) {
        if (targetStatus == null) {
            return false;
        }
        switch (this) {
            case PENDING_SIGNING:
                // 待签收状态允许转换到:拒绝签收、待审核
                return targetStatus == 1 || targetStatus == 2;
            case PENDING_AUDIT:
                // 待审核状态允许转换到:审核通过、审核驳回
                return targetStatus == 3 || targetStatus == 4 || targetStatus == 5;
            case PENDING_ACCEPTANCE:
                // 待验收状态允许转换到:验收通过、拒绝验收
                return targetStatus == 6 || targetStatus == 7;
            default:
                // 其他状态不允许转换
                return false;
        }
    }
 
 
    /**
     * 检查当前状态是否允许指定的操作类型
     *
     * @param operationType 操作类型:1接单,2拒接接单,3申请取消,4申请修改,5同意取消,6不同意取消,7同意修改,8不同意修改
     * @return 是否允许操作
     */
    public boolean isAllowedOperation(Integer operationType) {
        if (operationType == null) {
            return false;
        }
 
        switch (this) {
            case PENDING_SIGNING:
                // 发布中_接单中状态允许:1接单,2拒接接单
                return operationType == 1 || operationType == 2;
            case REJECTED_SIGNING:
                // 响应中_待拆分状态允许:3申请取消,4申请修改
                return operationType == 3 || operationType == 4;
            case WITHDRAWN:
                // 响应中_申请取消状态允许:5同意取消,6不同意取消
                return operationType == 5 || operationType == 6;
            case PENDING_AUDIT:
                // 响应中_申请修改状态允许:7同意修改,8不同意修改
                return operationType == 7 || operationType == 8;
            case AUDIT_REJECTED:
                // 响应中_拒绝取消状态允许:3申请取消
                return operationType == 3;
            case AUDIT_PASSED:
                // 响应中_拒绝修改状态允许:4申请修改
                return operationType == 4;
            case PENDING_ACCEPTANCE:
                // 响应中_拒绝修改状态允许:4申请修改
                return operationType == 4;
            case REJECTED_ACCEPTANCE:
                // 响应中_拒绝修改状态允许:4申请修改
                return operationType == 4;
            case ACCEPTANCE_PASSED:
                // 响应中_拒绝修改状态允许:4申请修改
                return operationType == 4;
            default:
                // 其他状态不允许操作
                return false;
        }
    }
}