src/main/java/com/flightfeather/monitor/analysis/dust/ExceptionAnalysisController.kt
@@ -24,7 +24,7 @@ private val dustSiteStatusRep: DustSiteStatusRep, ) { private var running = false var running = false private val taskList = mutableListOf<BaseDustExceptionAnalysis>() src/main/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisController.kt
@@ -22,8 +22,8 @@ private val dustStatisticValueRep: DustStatisticsValueRep, ) { private var running1 = false private var running2 = false var running1 = false var running2 = false private var taskDaily: DustRiskAnalysis? = null private var taskMonthly: DustRiskMonthAnalysis? = null @@ -75,7 +75,7 @@ // è·åææå½åä¸çº¿ååè¿çè®¾å¤ dustSiteStatusRep.select(listOf(DeviceStatus.ONLINE, DeviceStatus.STOP)).forEach { s -> s?.let { taskDaily?.roundInit() 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) @@ -95,7 +95,7 @@ taskMonthly?.init() dustSiteStatusRep.select(listOf(DeviceStatus.ONLINE, DeviceStatus.STOP)).forEach { s -> s?.let { taskMonthly?.roundInit() taskMonthly?.roundInit(s.mnCode, date) val riskValueList = riskValueRep.select(s.mnCode, date) taskMonthly?.roundCal(riskValueList) } src/main/java/com/flightfeather/monitor/analysis/dust/StatisticAnalysisController.kt
@@ -13,8 +13,8 @@ @Component class StatisticAnalysisController(private val dustStatisticsValueRep: DustStatisticsValueRep) { private var running1 = false private var running2 = false var running1 = false var running2 = false /** * src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskAnalysis.kt
@@ -2,6 +2,9 @@ import com.flightfeather.monitor.domain.ds1.entity.* import com.flightfeather.monitor.enumration.dust.ExceptionType import java.time.LocalDate import java.time.ZoneId import java.util.* /** * æ¬å°çæµæ°æ®é£é©åæåºç±» @@ -21,8 +24,12 @@ /** * æ¯è½®æ¬¡çåå§å */ fun roundInit() { resultList.add(RiskValue()) fun roundInit(mnCode: String, date: LocalDate) { resultList.add(RiskValue().apply { this.mnCode = mnCode lst = Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()) type = "day" }) } /** @@ -37,7 +44,6 @@ riskExceedRate(res, list) riskExceptionRepetitionRate(res, dList) riskExceptionType(res, dList) onDone(res) } /** @@ -66,7 +72,7 @@ var v2 = 0 // æ¥ä¸´è¿è¶ æ æ¬¡æ°/7 var v3 = 0 list.forEach {d -> list.forEach { d -> if (d == null) return@forEach when { d.dustValue >= 2.0 -> v2++ @@ -92,7 +98,7 @@ var v1 = 0 var v2 = 0 var v3 = 0 list.forEach { d-> list.forEach { d -> if (d == null) return@forEach when (d.exceptionType) { ExceptionType.TYPE4.value -> v1++ @@ -100,10 +106,10 @@ ExceptionType.TYPE6.value -> v3++ } } val e1 = upperLimit((v1 - 1) / 4.0) val e2 = upperLimit((v2 - 1) / 3.0) val e3 = upperLimit((v3 - 1) / 2.0) riskValue.typicalExceptionRepetitionRate = upperLimit(e1 + e2 + e3) val e1 = settingRange((v1 - 1) / 4.0) val e2 = settingRange((v2 - 1) / 3.0) val e3 = settingRange((v3 - 1) / 2.0) riskValue.typicalExceptionRepetitionRate = settingRange(e1 + e2 + e3) } /** @@ -125,9 +131,5 @@ riskValue.exceptionTypeAggregation = exceptionTypes.size / 6.0 } fun onDone(riskValue: RiskValue) { riskValue.type = "day" } private fun upperLimit(d:Double):Double = if (d > 1) 1.0 else d private fun settingRange(d: Double): Double = if (d > 1) 1.0 else if (d < 0) .0 else d } src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskMonthAnalysis.kt
@@ -1,6 +1,9 @@ package com.flightfeather.monitor.analysis.dust.risk import com.flightfeather.monitor.domain.ds1.entity.* import java.time.LocalDate import java.time.ZoneId import java.util.* class DustRiskMonthAnalysis(val config: DustExceptionSetting) { @@ -17,8 +20,12 @@ /** * æ¯è½®æ¬¡çåå§å */ fun roundInit() { resultList.add(RiskValue()) fun roundInit(mnCode: String, date: LocalDate) { resultList.add(RiskValue().apply { this.mnCode = mnCode lst = Date.from(date.withDayOfMonth(1).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()) type = "month" }) } /** @@ -34,7 +41,6 @@ riskExceedRate(res, list) riskExceptionRepetitionRate(res, list) riskExceptionType(res, list) onDone(res) } fun riskOnlineRate(riskValue: RiskValue, list: List<RiskValue?>) { @@ -57,16 +63,14 @@ riskValue.exceptionTypeAggregation = avg(list) { it.exceptionTypeAggregation } } fun onDone(riskValue: RiskValue) { riskValue.type = "month" } private fun avg(list: List<RiskValue?>, onNext: (value: RiskValue) -> Double): Double { 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) val a = onNext(it) ?: return@forEach total += a count++ } return if (count == 0) .0 else total / count src/main/java/com/flightfeather/monitor/scheduledtasks/TaskController.kt
@@ -1,8 +1,6 @@ package com.flightfeather.monitor.scheduledtasks import com.flightfeather.monitor.scheduledtasks.dust.DustDailyAnalysisTask import com.flightfeather.monitor.scheduledtasks.dust.DustExceptionAnalysisTask import com.flightfeather.monitor.scheduledtasks.dust.DustMonthlyAnalysisTask import com.flightfeather.monitor.scheduledtasks.dust.* import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.stereotype.Component @@ -21,6 +19,8 @@ dustExceptionAnalysisTask: DustExceptionAnalysisTask, dustDailyAnalysisTask: DustDailyAnalysisTask, dustMonthlyAnalysisTask: DustMonthlyAnalysisTask, riskDailyAnalysisTask: RiskDailyAnalysisTask, riskMonthlyAnalysisTask: RiskMonthlyAnalysisTask, ) { companion object { @@ -41,6 +41,8 @@ timeTask.add(dustExceptionAnalysisTask) timeTask.add(dustDailyAnalysisTask) timeTask.add(dustMonthlyAnalysisTask) timeTask.add(riskDailyAnalysisTask) timeTask.add(riskMonthlyAnalysisTask) log.info("æ·»å 宿¶ä»»å¡å®æï¼ä»»å¡æ»è®¡${timeTask.size}个") } src/main/java/com/flightfeather/monitor/scheduledtasks/dust/BaseDustTimingTask.kt
@@ -19,7 +19,7 @@ /** * å½ä»»å¡å¼å§æ§è¡æ¶ï¼å¤æä»»å¡ç¶æï¼å³å®æ¯å¦å»¶è¿æ§è¡ */ protected fun isTaskDelay(localtime: LocalDateTime): Boolean { open fun isTaskDelay(localtime: LocalDateTime): Boolean { val task = requestTaskRep.findLatestTask(localtime) // 任塿£å¨æ§è¡ï¼è·³è¿æ¤æ¬¡åæï¼å¨ä¸ä¸å¨æç»§ç»å¤æï¼çå¾ ä»»å¡å®æåè¿è¡åæ return if (task == null || task.runningStatus) { src/main/java/com/flightfeather/monitor/scheduledtasks/dust/RiskDailyAnalysisTask.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.flightfeather.monitor.scheduledtasks.dust import com.flightfeather.monitor.analysis.dust.ExceptionAnalysisController import com.flightfeather.monitor.analysis.dust.RiskAnalysisController import com.flightfeather.monitor.analysis.dust.StatisticAnalysisController import com.flightfeather.monitor.domain.ds1.repository.DustExceptionDataRep import com.flightfeather.monitor.domain.ds1.repository.DustStatisticsValueRep import com.flightfeather.monitor.domain.ds1.repository.RequestTaskRep import org.springframework.stereotype.Component import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneId /** * æ¬å°æ¥é£é©åæä»»å¡ */ @Component class RiskDailyAnalysisTask( private val riskAnalysisController: RiskAnalysisController, private val exceptionAnalysisController: ExceptionAnalysisController, private val statisticAnalysisController: StatisticAnalysisController, private val dustExceptionDataRep: DustExceptionDataRep, private val dustStatisticsValueRep: DustStatisticsValueRep, requestTaskRep: RequestTaskRep, ) : BaseDustTimingTask(requestTaskRep) { override fun doTask(localtime: LocalDateTime) { if (taskDelay || (localtime.hour == 10 && localtime.minute == 0)) { taskDelay = isTaskDelay(localtime) if (!taskDelay) { log.info("æ¥é£é©åææ§è¡") riskAnalysisController.autoRunDaily() } } } /** * 彿¨æ¥çå¼å¸¸åæåæ¥ç»è®¡ä»»å¡é½å®æåï¼ææ§è¡æ¥é£é©åæä»»å¡ï¼å¦åå»¶è¿æ§è¡ * @param localtime å½åæ¶é´ * @return æ¯å¦å»¶è¿æ§è¡ */ override fun isTaskDelay(localtime: LocalDateTime): Boolean { val yesterday = LocalDate.now().minusDays(1) // æ£æ¥å¼å¸¸åæè®°å½çææ°æ¶é´åå¼å¸¸åæä»»å¡çè¿è¡ç¶æ val eData = dustExceptionDataRep.findLatestData() ?: return true val eDataTime = LocalDateTime.ofInstant(eData.endTime.toInstant(), ZoneId.systemDefault()).toLocalDate() val b1 = yesterday.isEqual(eDataTime) val b2 = exceptionAnalysisController.running // æ£æ¥æ¥ç»è®¡åæè®°å½çææ°æ¶é´åæ¥ç»è®¡åæä»»å¡çè¿è¡ç¶æ val sData = dustStatisticsValueRep.findLatestData("day") ?: return true val sDataTime = LocalDateTime.ofInstant(sData.lst.toInstant(), ZoneId.systemDefault()).toLocalDate() val b3 = yesterday.isEqual(sDataTime) val b4 = statisticAnalysisController.running1 return !(b1 && !b2 && b3 && !b4) } } src/main/java/com/flightfeather/monitor/scheduledtasks/dust/RiskMonthlyAnalysisTask.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.flightfeather.monitor.scheduledtasks.dust import com.flightfeather.monitor.analysis.dust.RiskAnalysisController import com.flightfeather.monitor.domain.ds1.repository.RequestTaskRep import com.flightfeather.monitor.domain.ds1.repository.RiskValueRep import org.springframework.stereotype.Component import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneId /** * æ¬å°æé£é©åæä»»å¡ */ @Component class RiskMonthlyAnalysisTask( private val riskAnalysisController: RiskAnalysisController, private val riskValueRep: RiskValueRep, requestTaskRep: RequestTaskRep, ) : BaseDustTimingTask(requestTaskRep) { override fun doTask(localtime: LocalDateTime) { if (taskDelay || (localtime.dayOfMonth == 1 && localtime.hour == 11 && localtime.minute == 0)) { taskDelay = isTaskDelay(localtime) if (!taskDelay) { log.info("æé£é©åææ§è¡") riskAnalysisController.autoRunMonthly() } } } /** * å½ä¸æåºçæ¥é£é©åæå®æåï¼ææ§è¡æé£é©åæä»»å¡ï¼å¦åå»¶è¿æ§è¡ * @param localtime å½åæ¶é´ * @return æ¯å¦å»¶è¿æ§è¡ */ override fun isTaskDelay(localtime: LocalDateTime): Boolean { val lastMonth = LocalDate.now().withDayOfMonth(1).minusDays(1) val data = riskValueRep.findLatestData("day") ?: return true val dataTime = LocalDateTime.ofInstant(data.lst.toInstant(), ZoneId.systemDefault()).toLocalDate() val b1 = lastMonth.isEqual(dataTime) val b2 = riskAnalysisController.running1 return !(b1 && !b2) } } src/test/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisControllerTest.kt
@@ -20,16 +20,19 @@ @Test fun autoRunDaily() { val s = LocalDate.of(2023, 10, 1) val e = LocalDate.of(2023, 10, 31) val du = DateUtil.findDurationDate(s, e) du.forEach { riskAnalysisController.runDaily(it) } riskAnalysisController.init() // val s = LocalDate.of(2023, 10, 1) // val e = LocalDate.of(2023, 10, 31) // val du = DateUtil.findDurationDate(s, e) // du.forEach { // riskAnalysisController.runDaily(it) // } riskAnalysisController.autoRunDaily() } @Test fun autoRunMonthly() { riskAnalysisController.init() riskAnalysisController.autoRunMonthly() } }