From f373bbf83d9d2a7e5f96118d7dcd658c9fea8bc8 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 14 八月 2025 17:27:44 +0800
Subject: [PATCH] 2025.8.14 1. 新增文件导入场景信息接口 2. 新增导出接口文档接口

---
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt |  181 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 140 insertions(+), 41 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..c7db9cf 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,15 @@
 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.AreaVo
+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
@@ -25,8 +29,10 @@
      * 璁剧疆鏁版嵁婧�
      */
     fun setResource(topTaskGuid: String?, sceneType: Int, districtName: String?, townCode: String?) {
-        val config = AopDataConfig(topTaskGuid = topTaskGuid, sceneType = sceneType, districtName = districtName,
-            townCode = townCode)
+        val config = AopDataConfig(
+            topTaskGuid = topTaskGuid, sceneType = sceneType, districtName = districtName,
+            townCode = townCode
+        )
         evaluationScene.config = config
         val check = aopSceneTypeCheck.checkSceneType(sceneType)
         if (check.first) {
@@ -35,6 +41,12 @@
             initUserSource(config)
         }
     }
+
+//    fun setResource(areaVo: AreaVo) {
+//        val task = taskRep.findOneTask(areaVo)
+//        val taskId = task?.tguid
+//        val sceneType = areaVo.scensetypeid?.toInt() ?: throw BizException("鍦烘櫙绫诲瀷鏈缃紝鏃犳硶璇勪及")
+//    }
 
     fun setResource(config: AopDataConfig) {
         config.sceneType ?: return
@@ -50,8 +62,10 @@
     fun setResource(subtask: Subtask) {
         val scene = aopDbMapper.scenseMapper.selectByPrimaryKey(subtask.scenseid)
         val sceneType = scene.typeid?.toInt()
-        val config = AopDataConfig(topTaskGuid = subtask.tguid, sceneType = sceneType,
-            districtName = subtask.districtname, townCode = subtask.towncode)
+        val config = AopDataConfig(
+            topTaskGuid = subtask.tguid, sceneType = sceneType,
+            districtName = subtask.districtname, townCode = subtask.towncode
+        )
         evaluationScene.config = config
 //        val check = aopSceneTypeCheck.checkSceneType(sceneType)
         this.mode = 0
@@ -62,7 +76,35 @@
     /**
      * 杞鏁版嵁婧�
      */
-    fun loop(callback: (index:Int, evaluationScene: EvaluationScene) -> Unit) {
+    fun loop(callback: (index: Int, evaluationScene: EvaluationScene) -> Unit) {
+        when (mode) {
+            0 -> {
+                sceneSourceList.forEachIndexed { i, scene ->
+                    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 ->
@@ -72,6 +114,7 @@
                     callback(i, evaluationScene)
                 }
             }
+
             1 -> {
                 userSourceList.forEachIndexed { i, user ->
                     evaluationScene.clear()
@@ -85,12 +128,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)
     }
 
@@ -109,7 +155,7 @@
     }
 
     // 鍗曚釜璇勪及瀵硅薄
-    inner class EvaluationScene(){
+    inner class EvaluationScene() {
         var index = 0
 
         var config: AopDataConfig? = null
@@ -120,7 +166,7 @@
 
         fun setDefaultScene(s: Scense?) {
             scene.value = s
-            userInfoTZ.fetch = {_,_ ->
+            userInfoTZ.fetch = { _, _ ->
                 val svUserId = aopDbMapper.userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
                     createCriteria().andEqualTo("dGuid", scene.value?.guid)
                 })?.takeIf { m -> m.isNotEmpty() }?.get(0)?.guid
@@ -133,7 +179,7 @@
 
         fun setDefaultUserTZ(u: UserinfoTZ?) {
             userInfoTZ.value = u
-            scene.fetch = {_,_ ->
+            scene.fetch = { _, _ ->
                 val svUserId = aopDbMapper.userMapMapper.selectByExample(Example(UserMap::class.java).apply {
                     createCriteria().andEqualTo("tzUserId", userInfoTZ.value?.guid)
                 })?.takeIf { m -> m.isNotEmpty() }?.get(0)?.svUserId
@@ -142,41 +188,54 @@
             }
         }
 
-        val userInfo = InfoProxy<Userinfo>{_,_ ->
+        val userInfo = InfoProxy<Userinfo> { _, _ ->
             scene.value?.guid ?: return@InfoProxy null
             return@InfoProxy aopDbMapper.userinfoMapper.selectOne(Userinfo().apply {
                 dGuid = scene.value?.guid
             })
         }
+
         //宸℃煡浠诲姟淇℃伅
-        val subTask = InfoProxy<Subtask> {_,_ ->
+        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)
+            })
         }
 
         //鐜板満宸℃煡淇℃伅
-        val inspection = InfoProxy<Inspection>{_,_ ->
+        val inspection = InfoProxy<Inspection> { _, _ ->
             val inspection = Inspection()
             inspection.stguid = subTask.value?.stguid
             return@InfoProxy aopDbMapper.inspectionMapper.selectOne(inspection)
         }
 
         //鍚勫満鏅壒鏈夌殑鍩烘湰淇℃伅
-        val baseScene = InfoProxy<BaseScene> {_,_ ->
+        val baseScene = InfoProxy<BaseScene> { _, _ ->
             return@InfoProxy when (config?.sceneType.toString()) {
                 // 鐩戠绯荤粺
                 Constant.SceneType.TYPE1.value -> {
                     aopDbMapper.sceneConstructionSiteMapper.selectByPrimaryKey(scene.value?.guid)
                 }
+
                 Constant.SceneType.TYPE2.value -> {
                     aopDbMapper.sceneWharfMapper.selectByPrimaryKey(scene.value?.guid)
                 }
+
                 Constant.SceneType.TYPE3.value -> {
                     aopDbMapper.sceneMixingPlantMapper.selectByPrimaryKey(scene.value?.guid)
                 }
+
                 Constant.SceneType.TYPE14.value -> {
                     aopDbMapper.sceneStorageYardMapper.selectByPrimaryKey(scene.value?.guid)
                 }
@@ -184,15 +243,17 @@
                 Constant.SceneType.TYPE5.value -> {
                     aopDbMapper.restaurantBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
                 }
+
                 Constant.SceneType.TYPE6.value -> {
                     aopDbMapper.vehicleBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
                 }
+
                 else -> null
             }
         }
 
         //鍏蜂綋鐨勯棶棰�
-        val problems = InfoProxy<MutableList<Problemlist>> {_,_ ->
+        val problems = InfoProxy<MutableList<Problemlist>> { _, _ ->
             if (noRecord()) return@InfoProxy mutableListOf()
             return@InfoProxy aopDbMapper.problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
                 createCriteria().andEqualTo("stguid", subTask.value?.stguid)
@@ -200,7 +261,7 @@
         }
 
         //璇勪及鎬诲垎
-        val evaluation = InfoProxy<Evaluation> {_,_ ->
+        val evaluation = InfoProxy<Evaluation> { _, _ ->
             if (noRecord()) return@InfoProxy null
 
             return@InfoProxy aopDbMapper.evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
@@ -209,7 +270,7 @@
         }
 
         //璇勪及缁嗗垯寰楀垎
-        val itemevaluationList = InfoProxy<MutableList<Itemevaluation>> {_,_ ->
+        val itemevaluationList = InfoProxy<MutableList<Itemevaluation>> { _, _ ->
             return@InfoProxy aopDbMapper.itemevaluationMapper.selectByExample(Example(Itemevaluation::class.java).apply {
                 createCriteria().andEqualTo("stguid", subTask.value?.stguid)
             })
@@ -233,13 +294,21 @@
         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)
                     .andEqualTo("scensetypeid", scene.value?.typeid)
+                and(createCriteria().orEqualTo("provincecode", scene.value?.provincecode).orIsNull("provincecode"))
+                and(createCriteria().orEqualTo("citycode", scene.value?.citycode).orIsNull("citycode"))
+                and(createCriteria().orEqualTo("districtcode", scene.value?.districtcode).orIsNull("districtcode"))
+                and(createCriteria().orEqualTo("towncode", scene.value?.towncode).orIsNull("towncode"))
+                orderBy("towncode").desc()
+                    .orderBy("districtcode").desc()
+                    .orderBy("citycode").desc()
+                    .orderBy("provincecode").desc()
             })
             if (rule.isNotEmpty()) {
                 this@EvaluationScene.baseRule.value = rule[0]
@@ -249,7 +318,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 +333,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 +345,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,10 +366,10 @@
 
         // 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 ->
+        val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) { _, cacheMap ->
             val tzSceneType = Constant.SceneType.typeMap(scene.value?.typeid)
             val list = aopDbMapper.ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
                 createCriteria().andEqualTo("lScenetype", tzSceneType).andEqualTo("lNeedupdate", true)
@@ -306,7 +379,7 @@
         }
 
         //鐢ㄦ埛瀹為檯鎻愪氦鍙拌处鏁伴噺
-        val ledgerRecords = InfoProxy<List<LedgerRecord>> {_,_ ->
+        val ledgerRecords = InfoProxy<List<LedgerRecord>> { _, _ ->
             return@InfoProxy aopDbMapper.ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
                 createCriteria().andEqualTo("lrYear", config?.year)
                     .andEqualTo("lrMonth", config?.month)
@@ -325,9 +398,12 @@
                 orderBy("planstarttime").desc()
             })
             if (r.isNotEmpty()) {
-                val thisMonth = LocalDateTime.ofInstant(subTask.value?.planstarttime?.toInstant(), ZoneId.systemDefault())
-                    .withDayOfMonth(1).toLocalDate()
-                val lastMonth = LocalDateTime.ofInstant(r[0]?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1).toLocalDate()
+                val thisMonth =
+                    LocalDateTime.ofInstant(subTask.value?.planstarttime?.toInstant(), ZoneId.systemDefault())
+                        .withDayOfMonth(1).toLocalDate()
+                val lastMonth =
+                    LocalDateTime.ofInstant(r[0]?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1)
+                        .toLocalDate()
                 if (lastMonth.plusMonths(1).isEqual(thisMonth)) {
                     last.subTask.value = r[0]
                 }
@@ -340,21 +416,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
+            }
         }
 
         /**
@@ -383,12 +481,13 @@
                 if (defaultValue != null) {
                     return defaultValue
                 } else if (!fetched && _value == null) {
-                    _value = if (cacheMap.containsKey(key) && LocalDateTime.now().minusDays(1).isBefore(cacheTimeStamp)) {
-                        cacheMap[key]
-                    } else {
-                        cacheTimeStamp = LocalDateTime.now()
-                        fetch(defaultValue, cacheMap)
-                    }
+                    _value =
+                        if (cacheMap.containsKey(key) && LocalDateTime.now().minusDays(1).isBefore(cacheTimeStamp)) {
+                            cacheMap[key]
+                        } else {
+                            cacheTimeStamp = LocalDateTime.now()
+                            fetch(defaultValue, cacheMap)
+                        }
                     fetched = true
                 }
                 return _value

--
Gitblit v1.9.3