From 7ecdc67dfb92b63bdc742e5c95d62bf9774cbd7f Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期一, 13 十一月 2023 16:06:24 +0800
Subject: [PATCH] 1. 新增风险值的计算逻辑;

---
 src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskMonthAnalysis.kt |   74 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskMonthAnalysis.kt b/src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskMonthAnalysis.kt
new file mode 100644
index 0000000..4ba6551
--- /dev/null
+++ b/src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskMonthAnalysis.kt
@@ -0,0 +1,74 @@
+package com.flightfeather.monitor.analysis.dust.risk
+
+import com.flightfeather.monitor.domain.ds1.entity.*
+
+class DustRiskMonthAnalysis(val config: DustExceptionSetting) {
+
+    //鍒嗘瀽缁撴灉
+    val resultList = mutableListOf<RiskValue>()
+
+    /**
+     * 鍒濆鍖�
+     */
+    fun init() {
+        resultList.clear()
+    }
+
+    /**
+     * 姣忚疆娆$殑鍒濆鍖�
+     */
+    fun roundInit() {
+        resultList.add(RiskValue())
+    }
+
+    /**
+     * 姣忚疆娆$殑椋庨櫓鍊艰绠�
+     */
+    fun roundCal(list: List<RiskValue?>) {
+        if (resultList.isEmpty()) throw IllegalStateException("缁撴灉闆唕esultList涓嶈兘涓虹┖锛�")
+
+        val res = resultList.last()
+
+        riskOnlineRate(res, list)
+        riskValidRate(res, list)
+        riskExceedRate(res, list)
+        riskExceptionRepetitionRate(res, list)
+        riskExceptionType(res, list)
+        onDone(res)
+    }
+
+    fun riskOnlineRate(riskValue: RiskValue, list: List<RiskValue?>) {
+        riskValue.onlineRisk = avg(list) { it.onlineRisk }
+    }
+
+    fun riskValidRate(riskValue: RiskValue, list: List<RiskValue?>) {
+        riskValue.validRisk = avg(list) { it.validRisk }
+    }
+
+    fun riskExceedRate(riskValue: RiskValue, list: List<RiskValue?>) {
+        riskValue.exceedRisk = avg(list) { it.exceedRisk }
+    }
+
+    fun riskExceptionRepetitionRate(riskValue: RiskValue, list: List<RiskValue?>) {
+        riskValue.typicalExceptionRepetitionRate = avg(list) { it.typicalExceptionRepetitionRate }
+    }
+
+    fun riskExceptionType(riskValue: RiskValue, list: List<RiskValue?>) {
+        riskValue.exceptionTypeAggregation = avg(list) { it.exceptionTypeAggregation }
+    }
+
+    fun onDone(riskValue: RiskValue) {
+        riskValue.type = "month"
+    }
+
+    private fun avg(list: List<RiskValue?>, onNext: (value: RiskValue) -> Double): Double {
+        var total = .0
+        var count = 0
+        list.forEach {
+            if (it == null) return@forEach
+            total += onNext(it)
+            count++
+        }
+        return if (count == 0) .0 else total / count
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3