| | |
| | | /** |
| | | * 执行评分逻辑 |
| | | */ |
| | | private fun execute(source: AopDataSource) { |
| | | //获取数据源(待评估的场景) |
| | | //循环处理每个场景 |
| | | source.loop { index, evaluationScene -> |
| | | if (evaluationScene.noRecord()) return@loop |
| | | private fun execute(source: AopDataSource, isBySubtask: Boolean = false) { |
| | | // 当需要只针对单词巡查任务进行评估时 |
| | | if (isBySubtask) { |
| | | source.runBySubTask { index, evaluationScene -> |
| | | if (evaluationScene.noRecord()) return@runBySubTask |
| | | |
| | | itemGrade(index, evaluationScene) |
| | | totalGrade(index, evaluationScene)?.run { |
| | | aopOutput.toDbEvaluation(evaluationScene, this) |
| | | itemGrade(index, evaluationScene) |
| | | totalGrade(index, evaluationScene)?.run { |
| | | aopOutput.toDbEvaluation(evaluationScene, this) |
| | | } |
| | | } |
| | | } |
| | | // 当针对场景进行评估时,要包括该场景当月可能存在的复核巡查情况 |
| | | else { |
| | | //循环处理每个场景 |
| | | source.loop { index, evaluationScene -> |
| | | if (evaluationScene.noRecord()) return@loop |
| | | |
| | | itemGrade(index, evaluationScene) |
| | | totalGrade(index, evaluationScene)?.run { |
| | | aopOutput.toDbEvaluation(evaluationScene, this) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | private fun itemGrade(index: Int, evaluationScene: AopDataSource.EvaluationScene) { |
| | | // 规则条目得分初始化 |
| | | evaluationScene.topItems.value?.forEach { s -> s.extension1 = null } |
| | | evaluationScene.topRules.value?.forEach { s -> s.clear() } |
| | | evaluationScene.rules.value?.forEach { p -> |
| | | p.first.extension1 = null |
| | | p.second.forEach { e -> e.extension1 = null } |
| | | p.first.clear() |
| | | p.second.forEach { e -> e.clear() } |
| | | } |
| | | |
| | | /** 1. 根据评分规则对应的问题自动判断是否扣分***************************************************************/ |
| | |
| | | // 存在多个评分项和同一个问题关联,因此必须全部评分项都判定一遍 |
| | | sr.problemlist?.split(",")?.forEach { pId -> |
| | | if (pList.contains(pId)) { |
| | | sr.extension1 = (0 - (sr.maxscore ?: 0)).toString() |
| | | sr.setMaxScore() |
| | | } |
| | | } |
| | | } |
| | |
| | | /** 2.部分有特殊评分逻辑的规则进行计算*************************************************************************/ |
| | | itemList.forEach { item -> item.execute(evaluationScene) } |
| | | |
| | | /** 3. 补全各上级评分项的计分*************************************************************************/ |
| | | /** 3. 补充各上级评分项的计分*************************************************************************/ |
| | | evaluationScene.rules.value?.forEach { r -> |
| | | val fatherId = r.first.fatherid |
| | | for (t in (evaluationScene.topItems.value ?: emptyList())) { |
| | | for (t in (evaluationScene.topRules.value ?: emptyList())) { |
| | | if (t.guid == fatherId) { |
| | | var s = t.extension1?.toIntOrNull() ?: 0 |
| | | s += r.first.extension1?.toIntOrNull() ?: 0 |
| | | var s = t.score |
| | | s += r.first.score |
| | | // 限制最高扣分 |
| | | if (abs(s) > (t.maxscore ?: 0)) { |
| | | s = 0 - (t.maxscore ?: 0) |
| | | } |
| | | t.extension1 = s.toString() |
| | | // if (abs(s) > (t.maxscore ?: 0)) { |
| | | //// s = 0 - (t.maxscore ?: 0) |
| | | // t.setMaxScore() |
| | | // } else { |
| | | // t.score = s |
| | | // } |
| | | t.score = s |
| | | break |
| | | } |
| | | } |
| | |
| | | evaluationScene: AopDataSource.EvaluationScene, |
| | | ): Pair<Evaluation, List<Itemevaluation>>? { |
| | | val scene = evaluationScene.scene.value ?: return null |
| | | val topItems = evaluationScene.topItems.value ?: return null |
| | | val topItems = evaluationScene.topRules.value ?: return null |
| | | val rules = evaluationScene.rules.value ?: return null |
| | | val subTask = evaluationScene.subTask.value |
| | | val inspection = evaluationScene.inspection.value |
| | | val totalScore = evaluationScene.totalScore.value ?: return null |
| | | |
| | | var total = 0//总扣除的分数 |
| | | evaluationScene.topItems.value?.forEach top@{ top -> |
| | | total += top.extension1?.toIntOrNull() ?: 0 |
| | | evaluationScene.topRules.value?.forEach top@{ top -> |
| | | total += top.score |
| | | } |
| | | val evaluation = Evaluation().apply { |
| | | evaluationScene.baseRule.value?.let { |