From 3ba74e7692143fd6dcf4dd885f80f95dfef8387e Mon Sep 17 00:00:00 2001
From: zmc <zmc_li@foxmail.com>
Date: 星期四, 23 十一月 2023 16:09:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/feature-risk_analysis' into feature-risk_analysis

---
 src/main/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisController.kt |  117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 114 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..61fe986 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,118 @@
-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,
+) {
+
+    var running1 = false
+    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 thisMonth = LocalDate.now().minusDays(1)
+            // 鏈�鏂版湀缁熻璁板綍鐨勬椂闂�
+            val date = LocalDateTime.ofInstant(data.lst.toInstant(), ZoneId.systemDefault())
+            val sT = date.toLocalDate()
+            val du = DateUtil.findDurationMonth(sT, thisMonth)
+            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(s.mnCode, date)
+                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(s.mnCode, date)
+                val riskValueList = riskValueRep.select(s.mnCode, date, "day")
+                taskMonthly?.roundCal(riskValueList)
+            }
+        }
+        // 鎵�鏈夊垎鏋愮粨鏋滃叆搴�
+        if (taskMonthly?.resultList?.isNotEmpty() == true) {
+            riskValueRep.insertOrUpdate(taskMonthly?.resultList!!)
+        }
+        running2 = false
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3