From 38d72198bfcced01ed9513b978163e5cd1d84625 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期一, 21 七月 2025 15:31:41 +0800
Subject: [PATCH] 2025.7.21 1. 修改动态溯源异常判断逻辑

---
 src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt |  110 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 83 insertions(+), 27 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt
index 733641e..36fdfa1 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionContinuous.kt
@@ -15,6 +15,11 @@
     config: V, private val tagClz: Class<T>,
 ) : BaseExceptionAnalysis<V, Y>(config) {
 
+    enum class JudgeMethod(val des: String) {
+        M1("鍦ㄤ竴瀹氱殑绌洪棿鍜屾椂闂磋寖鍥村唴锛屾暟鎹疮璁″嚭鐜癗娆″紓甯稿悗锛岃涓鸿寮傚父鎴愮珛"),
+        M2("瑕佹眰鏁版嵁涓嶉棿鏂繛缁嚭鐜癗娆″紓甯稿悗锛岃涓鸿寮傚父鎴愮珛"),
+    }
+
     companion object {
         // 璁板綍寮傚父鏁版嵁娈垫椂锛屽垎鍒悜璧峰鍓嶅拰鏈熬鍚庨澶栬褰曠殑鏁版嵁涓暟鍋忕Щ閲�
         private const val OFFSET = 10
@@ -40,6 +45,13 @@
      * 寮傚父缁撴灉
      */
     protected val result = mutableListOf<Y>()
+
+    /**
+     * 涓嶉�傜敤浜庢寮傚父绫诲瀷鐨勭洃娴嬪洜瀛�
+     */
+    open var excludedFactor: List<FactorType> = emptyList()
+
+    abstract var judgeMethod: JudgeMethod
 
     /**
      * 绔嬪嵆鍒ゆ柇锛氬綋鍑虹幇寮傚父鏃讹紝缂撳瓨寮傚父鏁版嵁鐨勫悓鏃讹紝绔嬪嵆瀵瑰凡鏈夊紓甯歌繘琛屽垽鏂槸鍚︽弧瓒冲紓甯哥粨鏋滆姹�
@@ -98,7 +110,7 @@
      * @return
      */
     open fun needCut(tag: T, hasException: Boolean?, data: BaseRealTimeData): Boolean {
-        // 榛樿鍒ゆ柇鏉′欢涓� 褰撳紓甯镐笉鍐嶉噸澶嶅嚭鐜版椂锛屽舰鎴愬紓甯哥粨鏋�
+        // 榛樿鍒ゆ柇鏉′欢涓� 褰撳紓甯镐笉鍐嶉噸澶嶅嚭鐜版椂
         return tag.exceptionExisted && hasException == false
     }
 
@@ -116,9 +128,10 @@
         val hasException = judge(lastData, data)
         config.factorFilter.selectedList.forEach { s ->
             val f = s.main
-            tagMap[f]?.let {
-                it.addHistoryData(data)
+            // 鎺掗櫎姝ゅ紓甯哥被鍨嬩笉閫傜敤鐨勭洃娴嬪洜瀛�
+            if (excludedFactor.contains(f)) return@forEach
 
+            tagMap[f]?.let {
                 it.eIndex++
                 // 璧峰鏁版嵁
                 it.endData = data
@@ -126,31 +139,13 @@
                     it.refreshWithNextException(data)
                 }
 
-                // 瀵逛簬寮傚父鐨勭敓鎴愬垎鍒墽琛屽悗缃垽鏂�佸拰绔嬪嵆鍒ゆ柇
-                // 1. 鍚庣疆鍒ゆ柇锛氬綋鐩搁偦鏁版嵁鏃堕棿涓嶈繛缁椂锛屾垨鑰呮弧瓒宠嚜瀹氫箟鏉′欢鏃讹紝瀵逛箣鍓嶅凡鏈夌殑寮傚父杩涜璁板綍锛屽舰鎴愬紓甯哥粨鏋�
-//                if (afterExcCheck(isContinue, it, hasException[f])) {
-//                    // 鏁版嵁涓嶈繛缁椂鎴栬�呮弧瓒充富鍔ㄦ埅鏂潯浠舵椂锛岃褰曞紓甯告儏鍐�
-//                    recordException(s, it, data)
-//                }
-                // 2. 绔嬪嵆鍒ゆ柇锛氬綋鍑虹幇寮傚父鏃讹紝缂撳瓨寮傚父鏁版嵁鐨勫悓鏃讹紝绔嬪嵆瀵瑰凡鏈夊紓甯歌繘琛屽垽鏂槸鍚︽弧瓒冲紓甯哥粨鏋滆姹�
-                if (hasException[f] == true) {
-
-//                    afterExcCheck(isContinue, it, hasException[f])
-                    if (needCut(it, hasException[f], data)) {
-                        it.refreshWithNextException(data)
-                    }
-                    // 鏈夊紓甯稿嚭鐜版椂锛岃褰曞紓甯告暟鎹�
-                    it.addExceptionData(data)
-                    // 褰撶珛鍗冲垽鏂�氳繃鏃讹紝褰㈡垚寮傚父缁撴灉
-                    if (immeExcCheck(it, f)) {
-                        recordException(s, it, data)
-                    }
+                // 鎸夌収涓嶅悓鐨勬柟寮忚繘琛屽紓甯稿垽鏂�
+                when (judgeMethod) {
+                    JudgeMethod.M1 -> judgeMethod1(hasException, f, it, data, s)
+                    JudgeMethod.M2 -> judgeMethod2(isContinue, hasException, f, it, data, s)
                 }
-                // 3. 鏁版嵁姝e父锛屾棤浠讳綍寮傚父鏃禿
-                // TODO("2025.6.3锛氬叾浠栧瓙绫荤殑姝ゅ鍒锋柊閫昏緫寰呭畬鎴愨��)
-//                else {
-//                    it.refreshWithNextException(data)
-//                }
+
+                it.addHistoryData(data)
             }
         }
         lastData = data
@@ -164,6 +159,67 @@
     }
 
     /**
+     * 鏁版嵁寮傚父鍒ゆ柇鏂瑰紡涓�
+     * 鍦ㄤ竴瀹氱殑绌洪棿鍜屾椂闂磋寖鍥村唴锛屾暟鎹疮璁″嚭鐜癗娆″紓甯稿悗锛岃涓鸿寮傚父鎴愮珛
+     */
+    private fun judgeMethod1(
+        hasException: MutableMap<FactorType, Boolean>,
+        f: FactorType,
+        tag: T,
+        data: BaseRealTimeData,
+        s: FactorFilter.SelectedFactor,
+    ) {
+        // 鍑虹幇寮傚父
+        if (hasException[f] == true) {
+            // 鍒ゆ柇鏁版嵁鍦ㄧ┖闂村拰鏃堕棿鍙樺寲涓婃槸鍚﹁秴鍑洪檺瀹氳寖鍥达紝鑻ヨ秴鍑哄垯鍒犻櫎閬楃暀鐨勫紓甯歌褰曪紝鍒锋柊璧峰鐐规暟鎹�
+            if (needCut(tag, hasException[f], data)) {
+                tag.refreshWithNextException(data)
+            }
+            // 璁板綍寮傚父鏁版嵁
+            tag.addExceptionData(data)
+            // 褰撶珛鍗冲垽鏂�氳繃鏃讹紝褰㈡垚寮傚父缁撴灉
+            if (immeExcCheck(tag, f)) {
+                recordException(s, tag, data)
+            }
+        }
+        // 鏁版嵁姝e父锛屽苟涓旀病鏈夊巻鍙插紓甯告暟鎹椂锛屽埛鏂拌捣濮嬬偣鏁版嵁
+        else if (!tag.exceptionExisted) {
+            tag.refreshWithNextException(data)
+        }
+    }
+
+    /**
+     * 鏁版嵁寮傚父鍒ゆ柇鏂瑰紡浜�
+     * 瑕佹眰鏁版嵁涓嶉棿鏂繛缁嚭鐜癗娆″紓甯稿悗锛岃涓鸿寮傚父鎴愮珛
+     */
+    private fun judgeMethod2(
+        isContinue: Boolean,
+        hasException: MutableMap<FactorType, Boolean>,
+        f: FactorType,
+        tag: T,
+        data: BaseRealTimeData,
+        s: FactorFilter.SelectedFactor,
+    ) {
+        // 褰撶浉閭绘暟鎹椂闂翠笉杩炵画鏃讹紝鍒锋柊璧峰鐐规暟鎹紝绉婚櫎鍘嗗彶寮傚父璁板綍
+        if (!isContinue) {
+            tag.refreshWithNextException(data)
+        }
+        // 鍑虹幇寮傚父
+        else if (hasException[f] == true) {
+            // 鏈夊紓甯稿嚭鐜版椂锛岃褰曞紓甯告暟鎹�
+            tag.addExceptionData(data)
+            // 褰撶珛鍗冲垽鏂�氳繃鏃讹紝褰㈡垚寮傚父缁撴灉
+            if (immeExcCheck(tag, f)) {
+                recordException(s, tag, data)
+            }
+        }
+        // 鏁版嵁姝e父锛屽埛鏂拌捣濮嬬偣鏁版嵁锛岀Щ闄ゅ巻鍙插紓甯歌褰�
+        else {
+            tag.refreshWithNextException(data)
+        }
+    }
+
+    /**
      * 寮傚父缁撴潫锛岃褰曞紓甯�
      * 鍒ゆ柇宸叉湁鐨勫紓甯告暟鎹槸鍚︽弧瓒冲紓甯告潯浠讹紝婊¤冻鍒欒褰曪紝涓嶆弧瓒冲垯鐣ヨ繃
      */

--
Gitblit v1.9.3