From 0516cba27e632f20efac2752787f38f0c87baafa Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期三, 25 九月 2024 09:24:05 +0800
Subject: [PATCH] 1. 新增自动评估添加和更新接口

---
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt |   98 +++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 83 insertions(+), 15 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
index 20fcc11..23bcf93 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
@@ -1,11 +1,14 @@
 package cn.flightfeather.supervision.business.autooutput.datasource
 
+import cn.flightfeather.supervision.common.exception.BizException
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.domain.ds1.entity.*
 import cn.flightfeather.supervision.domain.ds2.entity.LedgerRecord
 import cn.flightfeather.supervision.domain.ds2.entity.LedgerSubType
 import cn.flightfeather.supervision.domain.ds2.entity.UserMap
 import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
+import cn.flightfeather.supervision.lightshare.vo.EvaluationSubRuleVo
+import org.springframework.beans.BeanUtils
 import tk.mybatis.mapper.entity.Example
 import java.time.LocalDateTime
 import java.time.ZoneId
@@ -69,6 +72,33 @@
                     evaluationScene.clear()
                     evaluationScene.index = i
                     evaluationScene.setDefaultScene(scene)
+                    do {
+                        callback(i, evaluationScene)
+                    } while (evaluationScene.gotoNextSubTask())
+                }
+            }
+            1 -> {
+                userSourceList.forEachIndexed { i, user ->
+                    evaluationScene.clear()
+                    evaluationScene.index = i
+                    evaluationScene.setDefaultUserTZ(user)
+                    callback(i, evaluationScene)
+                }
+            }
+        }
+    }
+
+    /**
+     * 鏍规嵁瀛愪换鍔″彧杞涓�娆�
+     * 褰撴暟鎹簮鏄�氳繃[setResource]浼犲叆[Subtask]鏃跺喅瀹氭椂
+     */
+    fun runBySubTask(callback: (index: Int, evaluationScene: EvaluationScene) -> Unit) {
+        when (mode) {
+            0 -> {
+                sceneSourceList.forEachIndexed { i, scene ->
+                    evaluationScene.clear()
+                    evaluationScene.index = i
+                    evaluationScene.setDefaultScene(scene)
                     callback(i, evaluationScene)
                 }
             }
@@ -85,12 +115,15 @@
 
     // 浠庣洃绠$郴缁熻幏鍙栧満鏅�
     private fun initSceneSource(config: AopDataConfig) {
-        config.topTaskGuid ?: throw IllegalStateException("椤跺眰浠诲姟id涓嶈兘涓簄ull")
+        config.topTaskGuid ?: throw BizException("椤跺眰浠诲姟id涓嶈兘涓簄ull")
         this.config = config
         this.mode = 0
         sceneSourceList.clear()
         val taskSceneIdList =
             aopDbMapper.scenseMapper.getSceneByType(config.topTaskGuid, config.sceneType, config.townCode)
+        taskSceneIdList.forEach {
+            println(it.name)
+        }
         sceneSourceList.addAll(taskSceneIdList)
     }
 
@@ -149,12 +182,21 @@
             })
         }
         //宸℃煡浠诲姟淇℃伅
+        var subTaskIndex = 0
         val subTask = InfoProxy<Subtask> {_,_ ->
+            return@InfoProxy if (subTaskList.value?.isNotEmpty() == true) {
+                subTaskList.value?.get(subTaskIndex)
+            } else {
+                null
+            }
+        }
+
+        val subTaskList = InfoProxy<List<Subtask>> {_,_ ->
             return@InfoProxy aopDbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                 createCriteria().andEqualTo("scenseid", scene.value?.guid)
 //                    .andBetween("planstarttime", config?.startTime, config?.endTime)
                     .andEqualTo("tguid", config?.topTaskGuid)
-            })?.takeIf { it.isNotEmpty() }?.get(0)
+            })
         }
 
         //鐜板満宸℃煡淇℃伅
@@ -233,9 +275,9 @@
         val totalScore = InfoProxy<Int>()
 
         //鑷姩璇勫垎瑙勫垯涓�绾у垎绫�
-        val topItems = InfoProxy<MutableList<Evaluationsubrule2>>(config?.sceneType.toString()) { _, cacheMap ->
-            val _topItems = mutableListOf<Evaluationsubrule2>()
-            val _rules = mutableListOf<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>()
+        val topRules = InfoProxy<MutableList<EvaluationSubRuleVo>>(config?.sceneType.toString()) { _, cacheMap ->
+            val _topItems = mutableListOf<EvaluationSubRuleVo>()
+            val _rules = mutableListOf<Pair<EvaluationSubRuleVo, MutableList<EvaluationSubRuleVo>>>()
             val rule = aopDbMapper.evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
                 createCriteria()
                     .andEqualTo("tasktypeid", 99)
@@ -249,7 +291,11 @@
                 val rules =
                     aopDbMapper.evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule2::class.java).apply {
                         createCriteria().andEqualTo("erguid", ruleId)
-                    })
+                    }).map {
+                        val vo = EvaluationSubRuleVo()
+                        BeanUtils.copyProperties(it, vo)
+                        vo
+                    }
                 rules.forEach {
                     if (it.ertype == 2) {
                         _topItems.add(it)
@@ -260,7 +306,7 @@
                 var t = 0
                 _topItems.forEach {
                     t += it.maxscore ?: 0
-                    val tempRules = mutableListOf<Evaluationsubrule2>()
+                    val tempRules = mutableListOf<EvaluationSubRuleVo>()
                     for (i in rules) {
                         if (i.fatherid == it.guid && i.ertype == 3) {
                             tempRules.add(i)
@@ -272,7 +318,7 @@
                     }
                     tempRules.sortBy { t -> t.displayid }
                     tempRules.forEach { temp ->
-                        val tempSubRules = mutableListOf<Evaluationsubrule2>()
+                        val tempSubRules = mutableListOf<EvaluationSubRuleVo>()
                         for (i in rules) {
                             if (i.fatherid == temp.guid && i.ertype == 4) {
                                 tempSubRules.add(i)
@@ -293,7 +339,7 @@
 
         // FIXME: 2023/8/9 瀛愯鍒欑殑鑾峰彇蹇呴』鍦╗topItems]璋冪敤涔嬪悗锛屽惁鍒欎负绌�
         //鑷姩璇勫垎瑙勫垯浜岀骇鍜屼笁绾у垎绫�
-        val rules = InfoProxy<MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>>()
+        val rules = InfoProxy<MutableList<Pair<EvaluationSubRuleVo, MutableList<EvaluationSubRuleVo>>>>()
 
         //蹇呭~鍙拌处鏁伴噺
         val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) {_, cacheMap ->
@@ -340,21 +386,43 @@
          */
         fun clear() {
             scene.clear()
+            subTaskIndex = 0
+            subTaskList.clear()
             userInfo.clear()
             userInfoTZ.clear()
+            baseScene.clear()
+            problemTypes.clear()
+            ledgerCount.clear()
+            ledgerRecords.clear()
+
+            clearSubtask()
+        }
+
+        fun clearSubtask() {
             subTask.clear()
             inspection.clear()
-            baseScene.clear()
             problems.clear()
             evaluation.clear()
             itemevaluationList.clear()
-            problemTypes.clear()
-            baseRule.clear()
             totalScore.clear()
-            topItems.clear()
+            topRules.clear()
+            baseRule.clear()
             rules.clear()
-            ledgerCount.clear()
-            ledgerRecords.clear()
+        }
+
+        /**
+         * 鍒囨崲鑷充笅涓�涓贰鏌ヤ换鍔�
+         * 涓�涓満鏅彲鑳藉悓鏃跺瓨鍦ㄥ涓贰鏌ヤ换鍔subTaskList]锛岄渶瑕佸姣忎釜宸℃煡浠诲姟鍒嗗埆杩涜璇勫垎
+         * @return 鏄惁鏈変笅涓�涓贰鏌ヤ换鍔�
+         */
+        fun gotoNextSubTask(): Boolean {
+            return if (subTaskIndex + 1 < (subTaskList.value?.size ?: 0)) {
+                clearSubtask()
+                subTaskIndex++
+                true
+            } else {
+                false
+            }
         }
 
         /**

--
Gitblit v1.9.3