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/RiskAnalysisController.kt |  108 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisController.kt b/src/main/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisController.kt
index 9105baa..afc6bc1 100644
--- a/src/main/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisController.kt
+++ b/src/main/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisController.kt
@@ -1,7 +1,109 @@
-package com.flightfeather.monitor.analysis.dust;
+package com.flightfeather.monitor.analysis.dust
+
+import com.flightfeather.monitor.analysis.dust.risk.*
+import com.flightfeather.monitor.domain.ds1.repository.*
+import com.flightfeather.monitor.enumration.dust.DeviceStatus
+import com.flightfeather.monitor.utils.DateUtil
+import org.springframework.stereotype.Component
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.ZoneId
 
 /**
  * 鏁版嵁椋庨櫓鍒嗘瀽鎺у埗鍣�
  */
-public class RiskAnalysisController {
-}
+@Component
+class RiskAnalysisController(
+    private val dustExceptionSettingRep: DustExceptionSettingRep,
+    private val riskValueRep: RiskValueRep,
+    private val dustSiteStatusRep: DustSiteStatusRep,
+    private val dustSiteDataRep: DustSiteDataRep,
+    private val dustExceptionDataRep: DustExceptionDataRep,
+    private val dustStatisticValueRep: DustStatisticsValueRep,
+) {
+
+    private var running1 = false
+    private var running2 = false
+
+    private var taskDaily: DustRiskAnalysis? = null
+    private var taskMonthly: DustRiskMonthAnalysis? = null
+
+    fun init() {
+        dustExceptionSettingRep.findLatestSetting("閲戝北鍖�")?.let {
+            taskDaily = DustRiskAnalysis(it)
+            taskMonthly = DustRiskMonthAnalysis(it)
+        }
+    }
+
+    fun autoRunDaily() {
+        val data = riskValueRep.findLatestData("day")
+        val yesterday = LocalDate.now().minusDays(1)
+        if (data == null) {
+            runDaily(yesterday)
+        } else {
+            val date = LocalDateTime.ofInstant(data.lst.toInstant(), ZoneId.systemDefault())
+            val sT = if (date.hour == 0 && date.minute == 0 && date.second == 0) {
+                date.toLocalDate()
+            } else {
+                date.plusDays(1).toLocalDate()
+            }
+            val du = DateUtil.findDurationDate(sT, yesterday)
+            du.forEach {
+                runDaily(it)
+            }
+        }
+    }
+
+    fun autoRunMonthly() {
+        val data = riskValueRep.findLatestData("month")
+        val lastMonth = LocalDate.now().minusMonths(1).withDayOfMonth(1)
+        if (data == null) {
+            runMonthly(lastMonth)
+        } else {
+            val date = LocalDateTime.ofInstant(data.lst.toInstant(), ZoneId.systemDefault())
+            val sT = date.plusMonths(1).toLocalDate()
+            val du = DateUtil.findDurationMonth(sT, lastMonth)
+            du.forEach {
+                runMonthly(it)
+            }
+        }
+    }
+
+    fun runDaily(date: LocalDate) {
+        running1 = true
+        taskDaily?.init()
+        // 鑾峰彇鎵�鏈夊綋鍓嶄笂绾垮拰鍋滆繍鐨勮澶�
+        dustSiteStatusRep.select(listOf(DeviceStatus.ONLINE, DeviceStatus.STOP)).forEach { s ->
+            s?.let {
+                taskDaily?.roundInit()
+                val dustSiteDataList = dustSiteDataRep.select(s.mnCode, date)
+                val dustExceptionDataList = dustExceptionDataRep.select(s.mnCode, date)
+                val dustStatisticValueList = dustStatisticValueRep.select(s.mnCode, date)
+                if (dustStatisticValueList.isEmpty()) return@forEach
+                taskDaily?.roundCal(dustStatisticValueList[0]!!, dustSiteDataList, dustExceptionDataList)
+            }
+        }
+        // 鎵�鏈夊垎鏋愮粨鏋滃叆搴�
+        if (taskDaily?.resultList?.isNotEmpty() == true) {
+            riskValueRep.insert(taskDaily?.resultList!!)
+        }
+        running1 = false
+    }
+
+    fun runMonthly(date: LocalDate) {
+        running2 = true
+        taskMonthly?.init()
+        dustSiteStatusRep.select(listOf(DeviceStatus.ONLINE, DeviceStatus.STOP)).forEach { s ->
+            s?.let {
+                taskMonthly?.roundInit()
+                val riskValueList = riskValueRep.select(s.mnCode, date)
+                taskMonthly?.roundCal(riskValueList)
+            }
+        }
+        // 鎵�鏈夊垎鏋愮粨鏋滃叆搴�
+        if (taskMonthly?.resultList?.isNotEmpty() == true) {
+            riskValueRep.insert(taskMonthly?.resultList!!)
+        }
+        running2 = false
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3