feiyu02
2024-09-10 6c7f45871b93ef26d353a5a3596701ac2f39ed9c
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
231
232
233
234
235
236
237
238
239
240
241
242
package cn.flightfeather.supervision.lightshare.vo
 
import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
import cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation
import com.fasterxml.jackson.annotation.JsonInclude
import java.util.*
 
/**
 * 评分规则及得分
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
class ScoreDetail {
    // 工地状态(在建或完工)
    var status: String? = null
 
    // 总分
    var totalScore: Int = 0
 
    // 得分
    var score: Int = 0
 
    // 规范性等级
    var grade: String? = null
 
    // 更新时间
    var updateTime: Date? = null
 
    // 得分细则
    var details = mutableListOf<ScoreItem>()
 
    /**
     * 新增一条评估规则记录
     * 评估规则的传入有顺序要求,必须是按照浅层级至深层级的顺序传入,评估层级 @see [Evaluationsubrule2.ertype]
     * @param details 结果
     * @param rule 评估规则
     * @param level 评估规则对应的层级深度,从1开始递增,1为最顶层
     * @param resList 各条规则对应的评估结果
     * @param onlyShowSelected 只添加选中的选项
     */
    fun addDetail(
        details: MutableList<ScoreItem>,
        rule: Evaluationsubrule2,
        level: Int,
        resList: List<Itemevaluation>,
        onlyShowSelected: Boolean = false,
    ) {
        if (level == 1) {
            val scoreItem = ScoreItem.fromRule(rule, resList)
            if (onlyShowSelected) {
                if (scoreItem.select) details.add(scoreItem)
            } else {
                details.add(scoreItem)
            }
        } else if (level > 1) {
            var isFind = false
            // 判断插入规则是否是当前层级评估集合中某一项的子评估
            for (d in details) {
                if (rule.fatherid == d.id) {
                    if (d.subList == null) d.subList = mutableListOf()
                    addDetail(d.subList!!, rule, 1, resList, onlyShowSelected)
                    isFind = true
                    break
                }
            }
            // 若未找到,则往下一层级继续查找
            if (!isFind && (level - 1 > 1)) {
                details.forEach { d ->
                    d.subList?.let {
                        addDetail(it, rule, level - 1, resList, onlyShowSelected)
                    }
                }
            }
        }
    }
 
    /**
     * 计算总分和得分
     */
    fun calScore() {
        details.forEach {
            totalScore += it.maxScore
            score += when (it.gradeMode) {
                "minus_mode" -> {
                    (it.score + it.maxScore)
                }
                "add_mode" -> {
                    it.score
                }
                else -> {
                    (it.score + it.maxScore)
                }
            }
        }
        grade = when {
            score >= 95 -> "规范"
            // 基本规范(90..94)和规范(>=95)
            score >= 90 -> "基本规范"
            // 不规范
            score >= 50 -> "不规范"
            // 严重不规范
            else -> "严重不规范"
        }
    }
}
 
@JsonInclude(JsonInclude.Include.NON_NULL)
class ScoreItem {
    //排序索引
    var index: Int? = null
 
    //评估规则级别(2,3,4),值越大级别越低
    var level: Int? = null
 
    //规则id
    var id: String? = null
 
    //规则描述
    var title: String? = null
 
    //总分值
    var maxScore: Int = 0
 
    //实际得分
    var score: Int = 0
 
    //是否选中
    var select: Boolean = false
 
    //basic_score: 基础分,必选;addition_score:附加分,可选;null:默认基础分
    var scoreMode: String? = null
 
    //minus_mode: 减分模式;add_mode:加分模式;null:不做设定,说明其子项不是具体的评估细则
    var gradeMode: String? = null
 
    //single_mode: 单选模式;multi_mode:多选模式;null:不做设定,说明其子项不是具体的评估细则
    var selectMode: String? = null
 
    //二级子规则
    var subList: MutableList<ScoreItem>? = null
 
    companion object {
        /**
         * 根据规则和得分结果生成得分项
         * @param rule
         * @param resList
         */
        fun fromRule(rule: Evaluationsubrule2, resList: List<Itemevaluation>): ScoreItem {
            return ScoreItem().apply {
                index = rule.displayid?.toInt()
                level = rule.ertype
                id = rule.guid
                title = rule.itemname
                scoreMode = rule.extension1
                gradeMode = rule.extension2
                maxScore = rule.maxscore ?: 0
                selectMode = rule.extension3
 
                //如果有得分记录,则改变状态为选中
                for (s in resList) {
                    if (rule.guid == s.esrguid) {
                        score = s.value?.toInt() ?: 0
                        select = s.extension1 == "true"
                        break
                    }
                }
            }
        }
    }
}
 
@JsonInclude(JsonInclude.Include.NON_NULL)
class EvaluationVo {
    //规则id
    var id: String? = null
 
    //规则描述
    var title: String? = null
 
    //总分值
    var maxScore: Int = 0
 
    //实际得分
    var score: Int = 0
 
    //是否选中
    var select: Boolean = false
 
    //basic_score: 基础分,必选;addition_score:附加分,可选;null:默认基础分
    var scoreMode: String? = "basic_score"
 
    //minus_mode: 减分模式;add_mode:加分模式;null:不做设定,说明其子项不是具体的评估细则
    var gradeMode: String? = "minus_mode"
 
    //single_mode: 单选模式;multi_mode:多选模式;null:不做设定,说明其子项不是具体的评估细则
    var selectMode: String? = "single_mode"
 
    //二级子规则
    var subList: MutableList<SubEvaluationVo> = mutableListOf()
}
 
class SubEvaluationVo {
    //有时候一级的规则下面直接是三级规则,没有二级规则,因此此时的二级规则只是为了结构完整性而出现的
    var placeholder: Boolean = false
 
    //规则id
    var id: String? = null
 
    //规则描述
    var title2: String? = null
 
    //分值
    var score: Int = 0
 
    //是否选中
    var select: Boolean = false
 
    //minus_mode: 减分模式;add_mode:加分模式;
    var gradeMode: String? = "minus_mode"
 
    //single_mode: 单选模式;multi_mode:多选模式;
    var selectMode: String? = "single_mode"
 
    //二级规则分组
    var group: Int? = null
 
    //三级子规则
    var sub2: MutableList<ThirdEvaluationVo> = mutableListOf()
}
 
class ThirdEvaluationVo {
    //规则id
    var id: String? = null
 
    //规则描述
    var content: String? = null
 
    //分值
    var score: Int = 0
 
    //是否选中
    var select: Boolean = false
}