| | |
| | | return new ApplicationRunner() { |
| | | @Override |
| | | public void run(ApplicationArguments args) throws Exception { |
| | | // taskController.run(); |
| | | taskController.run(); |
| | | } |
| | | }; |
| | | } |
| | |
| | | private val dustSiteStatusRep: DustSiteStatusRep, |
| | | ) { |
| | | |
| | | private var running = false |
| | | var running = false |
| | | |
| | | private val taskList = mutableListOf<BaseDustExceptionAnalysis>() |
| | | |
| | |
| | | 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 |
| | |
| | | // è·åææå½åä¸çº¿ååè¿çè®¾å¤ |
| | | 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) |
| | |
| | | taskMonthly?.init() |
| | | dustSiteStatusRep.select(listOf(DeviceStatus.ONLINE, DeviceStatus.STOP)).forEach { s -> |
| | | s?.let { |
| | | taskMonthly?.roundInit() |
| | | val riskValueList = riskValueRep.select(s.mnCode, date) |
| | | taskMonthly?.roundInit(s.mnCode, date) |
| | | val riskValueList = riskValueRep.select(s.mnCode, date, "day") |
| | | taskMonthly?.roundCal(riskValueList) |
| | | } |
| | | } |
| | |
| | | @Component |
| | | class StatisticAnalysisController(private val dustStatisticsValueRep: DustStatisticsValueRep) { |
| | | |
| | | private var running1 = false |
| | | private var running2 = false |
| | | var running1 = false |
| | | var running2 = false |
| | | |
| | | /** |
| | | * |
| | |
| | | |
| | | 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.* |
| | | |
| | | /** |
| | | * æ¬å°çæµæ°æ®é£é©åæåºç±» |
| | |
| | | /** |
| | | * æ¯è½®æ¬¡çåå§å |
| | | */ |
| | | 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" |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | riskExceedRate(res, list) |
| | | riskExceptionRepetitionRate(res, dList) |
| | | riskExceptionType(res, dList) |
| | | onDone(res) |
| | | } |
| | | |
| | | /** |
| | |
| | | var v2 = 0 |
| | | // æ¥ä¸´è¿è¶
æ æ¬¡æ°/7 |
| | | var v3 = 0 |
| | | list.forEach {d -> |
| | | list.forEach { d -> |
| | | if (d == null) return@forEach |
| | | when { |
| | | d.dustValue >= 2.0 -> v2++ |
| | |
| | | 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++ |
| | |
| | | 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) |
| | | } |
| | | |
| | | /** |
| | |
| | | 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 |
| | | } |
| | |
| | | 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) { |
| | | |
| | |
| | | /** |
| | | * æ¯è½®æ¬¡çåå§å |
| | | */ |
| | | 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" |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | riskExceedRate(res, list) |
| | | riskExceptionRepetitionRate(res, list) |
| | | riskExceptionType(res, list) |
| | | onDone(res) |
| | | } |
| | | |
| | | fun riskOnlineRate(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 { |
| | | 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 |
| | |
| | | |
| | | |
| | | import com.flightfeather.monitor.domain.ds1.entity.RiskValue; |
| | | import com.flightfeather.monitor.pojo.AnalysisData; |
| | | import com.flightfeather.monitor.pojo.Result; |
| | | import com.flightfeather.monitor.service.AnalysisDataService; |
| | | import com.flightfeather.monitor.service.RiskAnalysisService; |
| | | import com.flightfeather.monitor.service.RiskValueService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.CrossOrigin; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | @CrossOrigin |
| | | public class RiskValueController { |
| | | @Autowired |
| | | private RiskAnalysisService riskAnalysisService; |
| | | private RiskValueService riskValueService; |
| | | |
| | | |
| | | /*æ ¹æ®ç«ç¹ååï¼å¯éå¼ï¼ï¼æä»½ï¼ç±»åæ¥è¿åé£é©å¼*/ |
| | | /** |
| | | * æ ¹æ®ç«ç¹ååï¼å¯éå¼ï¼ï¼æä»½ï¼ç±»åæ¥è¿åé£é©å¼ |
| | | * |
| | | * @param mnCode |
| | | * @param month |
| | | * @param type |
| | | * @return |
| | | */ |
| | | @GetMapping("/month") |
| | | public Result queryRiskDataByMonth(String siteName,String month,String type){ |
| | | List<RiskValue> list =riskAnalysisService.queryRiskDataByMonth(siteName,month,type); |
| | | public Result queryRiskDataByMonth( |
| | | @RequestParam String mnCode, |
| | | @RequestParam String month, |
| | | @RequestParam String type |
| | | ) { |
| | | List<RiskValue> list = riskValueService.queryRiskDataByMonth(mnCode, month, type); |
| | | return Result.success(list); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æå
¥å表 |
| | | * @param list |
| | | */ |
| | | fun insert(list: List<RiskValue>): Int { |
| | | return riskValueMapper.insertList(list) |
| | | } |
| | | |
| | | fun select(mnCode: String, date: LocalDate): List<RiskValue?> { |
| | | /** |
| | | * æ¥è¯¢ |
| | | * @param mnCode |
| | | * @param date |
| | | * @param type |
| | | */ |
| | | fun select(mnCode: String, date: LocalDate, type: String): List<RiskValue?> { |
| | | val s = date.withDayOfMonth(1).atStartOfDay() |
| | | val e = s.plusMonths(1).minusSeconds(1) |
| | | return riskValueMapper.selectByExample(Example(RiskValue::class.java).apply { |
| | | createCriteria().andEqualTo("mnCode", mnCode) |
| | | .andBetween("lst", s, e) |
| | | .andEqualTo("type", type) |
| | | }) |
| | | } |
| | | } |
| | |
| | | private Object data; //è¿åçæ°æ® |
| | | |
| | | //å¢å æ¹ æåååº |
| | | public static Result success(){ |
| | | return new Result(1,"success",null); |
| | | public static Result success() { |
| | | return new Result(1, "success", null); |
| | | } |
| | | |
| | | //æ¥è¯¢ æåååº |
| | | public static Result success(Object data){ |
| | | return new Result(1,"success",data); |
| | | public static Result success(Object data) { |
| | | return new Result(1, "success", data); |
| | | } |
| | | |
| | | //失败ååº |
| | | public static Result error(String msg){ |
| | | return new Result(0,msg,null); |
| | | public static Result error(String msg) { |
| | | return new Result(0, msg, null); |
| | | } |
| | | } |
| | |
| | | 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 |
| | |
| | | dustExceptionAnalysisTask: DustExceptionAnalysisTask, |
| | | dustDailyAnalysisTask: DustDailyAnalysisTask, |
| | | dustMonthlyAnalysisTask: DustMonthlyAnalysisTask, |
| | | riskDailyAnalysisTask: RiskDailyAnalysisTask, |
| | | riskMonthlyAnalysisTask: RiskMonthlyAnalysisTask, |
| | | ) { |
| | | |
| | | companion object { |
| | |
| | | timeTask.add(dustExceptionAnalysisTask) |
| | | timeTask.add(dustDailyAnalysisTask) |
| | | timeTask.add(dustMonthlyAnalysisTask) |
| | | timeTask.add(riskDailyAnalysisTask) |
| | | timeTask.add(riskMonthlyAnalysisTask) |
| | | log.info("æ·»å 宿¶ä»»å¡å®æï¼ä»»å¡æ»è®¡${timeTask.size}个") |
| | | } |
| | | |
| | |
| | | /** |
| | | * å½ä»»å¡å¼å§æ§è¡æ¶ï¼å¤æä»»å¡ç¶æï¼å³å®æ¯å¦å»¶è¿æ§è¡ |
| | | */ |
| | | protected fun isTaskDelay(localtime: LocalDateTime): Boolean { |
| | | open fun isTaskDelay(localtime: LocalDateTime): Boolean { |
| | | val task = requestTaskRep.findLatestTask(localtime) |
| | | // 任塿£å¨æ§è¡ï¼è·³è¿æ¤æ¬¡åæï¼å¨ä¸ä¸å¨æç»§ç»å¤æï¼çå¾
ä»»å¡å®æåè¿è¡åæ |
| | | return if (task == null || task.runningStatus) { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.init() |
| | | 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) |
| | | |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.init() |
| | | 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) |
| | | |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.monitor.service; |
| | | |
| | | import com.flightfeather.monitor.domain.ds1.entity.RiskValue; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface RiskValueService { |
| | | /** |
| | | * æ ¹æ®ç«ç¹ååï¼å¯éå¼ï¼ï¼æä»½ï¼ç±»åæ¥è¿åé£é©å¼ |
| | | * @param mnCode |
| | | * @param month |
| | | * @param type |
| | | * @return |
| | | */ |
| | | List<RiskValue> queryRiskDataByMonth(String mnCode, String month, String type); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.monitor.service.impl; |
| | | |
| | | import com.flightfeather.monitor.domain.ds1.entity.RiskValue; |
| | | import com.flightfeather.monitor.domain.ds1.mapper.RiskValueMapper; |
| | | import com.flightfeather.monitor.domain.ds1.repository.RiskValueRep; |
| | | import com.flightfeather.monitor.mapper.RiskAnalysisMapper; |
| | | import com.flightfeather.monitor.service.RiskValueService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @Service |
| | | public class RiskValueServiceImpl implements RiskValueService { |
| | | @Autowired |
| | | private RiskValueMapper riskValueMapper; |
| | | @Autowired |
| | | private RiskValueRep riskValueRep; |
| | | |
| | | @Override |
| | | public List<RiskValue> queryRiskDataByMonth(String mnCode, String month, String type) { |
| | | LocalDate date = LocalDate.parse(month); |
| | | if (date != null) { |
| | | return riskValueRep.select(mnCode, date, type); |
| | | } else { |
| | | return new ArrayList<>(); |
| | | } |
| | | } |
| | | } |
| | |
| | | return uid.toString() |
| | | } |
| | | |
| | | private fun toHex(value: Int, length: Int): String { |
| | | var value = value |
| | | private fun toHex(v: Int, length: Int): String { |
| | | var value = v |
| | | val hexDigits = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F') |
| | | val buffer = StringBuffer(length) |
| | | val shift = length - 1 shl 2 |
| | |
| | | datasource: |
| | | ds1: |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | # url: jdbc:mysql://localhost:3306/fume |
| | | # username: fume |
| | | # password: fume_feiyu2023 |
| | | # ç产ç¯å¢ |
| | | url: jdbc:mysql://localhost:3306/fume |
| | | username: fume |
| | | password: fume_feiyu2023 |
| | | |
| | | url: jdbc:mysql://localhost:3306/qianduan_sql |
| | | username: root |
| | | password: 1234 |
| | | # url: jdbc:mysql://localhost:3306/qianduan_sql |
| | | # username: root |
| | | # password: 1234 |
| | | |
| | | # url: jdbc:mysql://localhost:3306/fume |
| | | # username: root |
| | |
| | | package com.flightfeather.monitor.analysis.dust |
| | | |
| | | import com.flightfeather.monitor.utils.DateUtil |
| | | import org.junit.Test |
| | | import org.junit.jupiter.api.extension.ExtendWith |
| | | import org.junit.runner.RunWith |
| | |
| | | import org.springframework.boot.test.context.SpringBootTest |
| | | import org.springframework.test.context.junit.jupiter.SpringExtension |
| | | import org.springframework.test.context.junit4.SpringRunner |
| | | import java.time.LocalDate |
| | | |
| | | @RunWith(SpringRunner::class) |
| | | @ExtendWith(SpringExtension::class) |
| | |
| | | |
| | | @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() |
| | | } |
| | | } |