feiyu02
2023-12-01 c6842e8498c2d9b469890b38cd9f0d714392c445
1. 修改优化日统计和风险统计的逻辑
已修改15个文件
190 ■■■■ 文件已修改
src/main/java/com/flightfeather/monitor/analysis/dust/ExceptionAnalysisController.kt 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionApproachExceeding.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionNoFluctuation.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionValidRate.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionValueMutation.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskAnalysis.kt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/domain/ds1/entity/DustStatisticsValue.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/scheduledtasks/dust/RiskMonthlyAnalysisTask.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/service/impl/FugitiveDustServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/generator/generatorConfig4ds1.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ds1/DustStatisticsValueMapper.xml 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/flightfeather/monitor/analysis/dust/ExceptionAnalysisControllerTest.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisControllerTest.kt 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/flightfeather/monitor/analysis/dust/StatisticAnalysisControllerTest.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/flightfeather/monitor/analysis/dust/ExceptionAnalysisController.kt
@@ -33,14 +33,14 @@
            taskList.clear()
            taskList.apply {
                add(ExceptionDataMissing(it))
//                add(ExceptionNoFluctuation(it))
//                add(ExceptionApproachExceeding(it))
//                add(ExceptionExceedingTimes(it))
//                add(ExceptionSlideAverage(it))
//                add(ExceptionValueMutation(it))
//                add(ExceptionDataLowValue(it))
//                add(ExceptionDataExceed(it))
//                add(ExceptionValidRate(it))
                add(ExceptionNoFluctuation(it))
                add(ExceptionApproachExceeding(it))
                add(ExceptionExceedingTimes(it))
                add(ExceptionSlideAverage(it))
                add(ExceptionValueMutation(it))
                add(ExceptionDataLowValue(it))
                add(ExceptionDataExceed(it))
                add(ExceptionValidRate(it))
            }
        }
    }
@@ -99,15 +99,15 @@
    fun debugRun() {
        val result = mutableListOf<DustExceptionData>()
        val date = LocalDate.of(2023, 7, 2)
        val date = LocalDate.of(2023, 11, 22)
        taskList.forEach { it.init() }
        // 轮询数据,计算各个异常
        val list = dustSiteDataRep.select("YZT0JS0150043", date)
        val list = dustSiteDataRep.select("SHKJ0JS0150917", date)
        list.takeIf { it.isNotEmpty() }?.forEach { d ->
            d?.let { taskList[0].onNextData(d) }
            d?.let { taskList.forEach { it.onNextData(d) } }
        }
        // 各个异常分析分别结束
        taskList[0].onDone()
        taskList.forEach { it.onDone() }
        // 存储分析结果
        taskList.forEach { result.addAll(it.resultList) }
        println(result)
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionApproachExceeding.kt
@@ -18,6 +18,6 @@
    override fun judgeDuration(sIndex: Int, eIndex: Int): Boolean {
        // 判断数据临近超标数量是否连续超过限定个数
        return (eIndex - sIndex) >= config.nearExceedNum
        return (eIndex - 1 - sIndex) >= config.nearExceedNum
    }
}
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionNoFluctuation.kt
@@ -21,6 +21,6 @@
    }
    override fun judgeDuration(sIndex: Int, eIndex: Int): Boolean {
        return (eIndex - sIndex) >= config.longTimeNoChange
        return (eIndex - 1 - sIndex) >= config.longTimeNoChange
    }
}
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionValidRate.kt
@@ -35,7 +35,7 @@
    }
    override fun onDone() {
        val rate = count / total
        val rate = count.toDouble() / total
        if (rate < 0.9) {
            startData?.let {
                val eType = getExceptionType()
src/main/java/com/flightfeather/monitor/analysis/dust/exception/ExceptionValueMutation.kt
@@ -30,8 +30,8 @@
    }
    override fun judgeDuration(sIndex: Int, eIndex: Int): Boolean {
        val b1 = special && (eIndex - sIndex) >= (config.mutationNum / 2)
        val b2 = (eIndex - sIndex) >= config.mutationNum
        val b1 = special && (eIndex - 1 - sIndex) >= (config.mutationNum / 2)
        val b2 = (eIndex - 1  - sIndex) >= config.mutationNum
        special = false
        return b1 || b2
    }
src/main/java/com/flightfeather/monitor/analysis/dust/risk/DustRiskAnalysis.kt
@@ -5,6 +5,7 @@
import java.time.LocalDate
import java.time.ZoneId
import java.util.*
import kotlin.math.round
/**
 * 扬尘监测数据风险分析基类
@@ -50,16 +51,16 @@
     * 在线率风险值
     */
    fun riskOnlineRate(riskValue: RiskValue, data: DustStatisticsValue) {
        val dayOnline = data.dayOnline.substring(0, data.dayOnline.lastIndex).toDouble() / 100
        riskValue.onlineRisk = 1 - dayOnline
        val dayOnline = data.dayOnline
        riskValue.onlineRisk = round((1 - dayOnline) * 10000) / 10000
    }
    /**
     * 有效率风险值
     */
    fun riskValidRate(riskValue: RiskValue, data: DustStatisticsValue) {
        val dayValid = data.dayValid.substring(0, data.dayValid.lastIndex).toDouble() / 100
        riskValue.validRisk = 1 - dayValid
        val dayValid = data.dayValid
        riskValue.validRisk = round((1 - dayValid) * 10000) / 10000
    }
    /**
src/main/java/com/flightfeather/monitor/domain/ds1/entity/DustStatisticsValue.java
@@ -14,20 +14,20 @@
    private Date lst;
    @Column(name = "day_avg")
    private String dayAvg;
    private Double dayAvg;
    private String min;
    private Double min;
    private String max;
    private Double max;
    @Column(name = "day_online")
    private String dayOnline;
    private Double dayOnline;
    @Column(name = "day_valid")
    private String dayValid;
    private Double dayValid;
    @Column(name = "day_exceeding")
    private String dayExceeding;
    private Double dayExceeding;
    private String type;
@@ -76,85 +76,85 @@
    /**
     * @return day_avg
     */
    public String getDayAvg() {
    public Double getDayAvg() {
        return dayAvg;
    }
    /**
     * @param dayAvg
     */
    public void setDayAvg(String dayAvg) {
        this.dayAvg = dayAvg == null ? null : dayAvg.trim();
    public void setDayAvg(Double dayAvg) {
        this.dayAvg = dayAvg;
    }
    /**
     * @return min
     */
    public String getMin() {
    public Double getMin() {
        return min;
    }
    /**
     * @param min
     */
    public void setMin(String min) {
        this.min = min == null ? null : min.trim();
    public void setMin(Double min) {
        this.min = min;
    }
    /**
     * @return max
     */
    public String getMax() {
    public Double getMax() {
        return max;
    }
    /**
     * @param max
     */
    public void setMax(String max) {
        this.max = max == null ? null : max.trim();
    public void setMax(Double max) {
        this.max = max;
    }
    /**
     * @return day_online
     */
    public String getDayOnline() {
    public Double getDayOnline() {
        return dayOnline;
    }
    /**
     * @param dayOnline
     */
    public void setDayOnline(String dayOnline) {
        this.dayOnline = dayOnline == null ? null : dayOnline.trim();
    public void setDayOnline(Double dayOnline) {
        this.dayOnline = dayOnline;
    }
    /**
     * @return day_valid
     */
    public String getDayValid() {
    public Double getDayValid() {
        return dayValid;
    }
    /**
     * @param dayValid
     */
    public void setDayValid(String dayValid) {
        this.dayValid = dayValid == null ? null : dayValid.trim();
    public void setDayValid(Double dayValid) {
        this.dayValid = dayValid;
    }
    /**
     * @return day_exceeding
     */
    public String getDayExceeding() {
    public Double getDayExceeding() {
        return dayExceeding;
    }
    /**
     * @param dayExceeding
     */
    public void setDayExceeding(String dayExceeding) {
        this.dayExceeding = dayExceeding == null ? null : dayExceeding.trim();
    public void setDayExceeding(Double dayExceeding) {
        this.dayExceeding = dayExceeding;
    }
    /**
src/main/java/com/flightfeather/monitor/scheduledtasks/dust/RiskMonthlyAnalysisTask.kt
@@ -19,7 +19,7 @@
) : BaseDustTimingTask(requestTaskRep) {
    override fun doTask(localtime: LocalDateTime) {
        if (taskDelay || (localtime.dayOfMonth == 1 && localtime.hour == 11 && localtime.minute == 0)) {
        if (taskDelay || (localtime.hour == 11 && localtime.minute == 0)) {
            taskDelay = isTaskDelay(localtime)
            if (!taskDelay) {
                log.info("月风险分析执行")
src/main/java/com/flightfeather/monitor/service/impl/FugitiveDustServiceImpl.java
@@ -10,7 +10,6 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDateTime;
import java.util.List;
src/main/resources/application.yml
@@ -21,8 +21,8 @@
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
    map-underscore-to-camel-case: true
  type-aliases-package: com.flightfeather.monitor.domain.ds1.entity
  mapper-locations: classpath*:mapper/**/*.xml
src/main/resources/generator/generatorConfig4ds1.xml
@@ -70,10 +70,10 @@
<!--               enableCountByExample="false"-->
<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
<!--        <table tableName="dust_statistics_value" domainObjectName="DustStatisticsValue"-->
<!--               enableCountByExample="false"-->
<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <table tableName="dust_statistics_value" domainObjectName="DustStatisticsValue"
               enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false"/>
<!--        <table tableName="ja_t_dust_site_data_info" domainObjectName="DustSiteData"-->
<!--               enableCountByExample="false"-->
<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
@@ -90,9 +90,9 @@
<!--               enableCountByExample="false"-->
<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
        <table tableName="du_js_t_risk_value" domainObjectName="RiskValue"
               enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false"/>
<!--        <table tableName="du_js_t_risk_value" domainObjectName="RiskValue"-->
<!--               enableCountByExample="false"-->
<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
    </context>
</generatorConfiguration>
src/main/resources/mapper/ds1/DustStatisticsValueMapper.xml
@@ -1,27 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.flightfeather.monitor.domain.ds1.mapper.DustStatisticsValueMapper">
    <resultMap id="BaseResultMap" type="com.flightfeather.monitor.domain.ds1.entity.DustStatisticsValue">
        <!--
          WARNING - @mbg.generated
        -->
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="mn_code" jdbcType="VARCHAR" property="mnCode"/>
        <result column="lst" jdbcType="DATE" property="lst"/>
        <result column="day_avg" jdbcType="VARCHAR" property="dayAvg"/>
        <result column="min" jdbcType="VARCHAR" property="min"/>
        <result column="max" jdbcType="VARCHAR" property="max"/>
        <result column="day_online" jdbcType="VARCHAR" property="dayOnline"/>
        <result column="day_valid" jdbcType="VARCHAR" property="dayValid"/>
        <result column="day_exceeding" jdbcType="VARCHAR" property="dayExceeding"/>
        <result column="type" jdbcType="VARCHAR" property="type"/>
    </resultMap>
    <sql id="Base_Column_List">
        <!--
          WARNING - @mbg.generated
        -->
        id, mn_code, lst, day_avg, min, max, day_online, day_valid, day_exceeding, type
    </sql>
  <resultMap id="BaseResultMap" type="com.flightfeather.monitor.domain.ds1.entity.DustStatisticsValue">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="mn_code" jdbcType="VARCHAR" property="mnCode" />
    <result column="lst" jdbcType="DATE" property="lst" />
    <result column="day_avg" jdbcType="DOUBLE" property="dayAvg" />
    <result column="min" jdbcType="DOUBLE" property="min" />
    <result column="max" jdbcType="DOUBLE" property="max" />
    <result column="day_online" jdbcType="DOUBLE" property="dayOnline" />
    <result column="day_valid" jdbcType="DOUBLE" property="dayValid" />
    <result column="day_exceeding" jdbcType="DOUBLE" property="dayExceeding" />
    <result column="type" jdbcType="VARCHAR" property="type" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    id, mn_code, lst, day_avg, min, max, day_online, day_valid, day_exceeding, type
  </sql>
    <insert id="dailyStatics">
        insert into dust_statistics_value(mn_code,lst,day_avg,min,max,day_online,day_valid,day_exceeding,type)
@@ -33,8 +33,8 @@
        min(dust_value) as min,
        max(dust_value) as max,
        ROUND(COUNT(*)/96, 4) as day_online,
        ROUND(SUM(CASE WHEN dust_value >0 THEN 1 ELSE 0 END)/96, 4) as day_valid,
        ROUND(SUM(CASE WHEN dust_value >= 1 THEN 1 ELSE 0 END)/96, 4) as day_exceeding,
        ROUND(SUM(CASE WHEN dust_value &gt;0 THEN 1 ELSE 0 END)/96, 4) as day_valid,
        ROUND(SUM(CASE WHEN dust_value &gt;= 1 THEN 1 ELSE 0 END)/96, 4) as day_exceeding,
        'day' as type
        from ja_t_dust_site_data_info
        where lst between #{beginTime} and #{endTime}
@@ -53,7 +53,7 @@
        MAX(dust_value) AS max,
        ROUND(COUNT(*) / #{count}, 4) AS month_online,
        ROUND(SUM(CASE WHEN flag = 'N' OR flag = 'A' THEN 1 ELSE 0 END) / #{count}, 4) AS month_valid,
        ROUND(SUM(CASE WHEN dust_value >= 1 THEN 1 ELSE 0 END) / #{count}, 4) AS month_exceeding,
        ROUND(SUM(CASE WHEN dust_value &gt;= 1 THEN 1 ELSE 0 END) / #{count}, 4) AS month_exceeding,
        'month' as type
        FROM ja_t_dust_site_data_info
        WHERE lst BETWEEN #{beginTime} and #{endTime}
src/test/java/com/flightfeather/monitor/analysis/dust/ExceptionAnalysisControllerTest.kt
@@ -27,8 +27,8 @@
    @Test
    fun run() {
        exceptionAnalysisController.init()
        var d1 = LocalDate.of(2023, 7, 1)
        val d2 = LocalDate.of(2023, 11, 21)
        var d1 = LocalDate.of(2023, 11, 27)
        val d2 = LocalDate.of(2023, 11, 27)
        while (d1.isEqual(d2) || d1.isBefore(d2)) {
            exceptionAnalysisController.run(d1)
            d1 = d1.plusDays(1)
src/test/java/com/flightfeather/monitor/analysis/dust/RiskAnalysisControllerTest.kt
@@ -1,5 +1,6 @@
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
@@ -7,6 +8,7 @@
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)
@@ -19,18 +21,20 @@
    @Test
    fun autoRunDaily() {
        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()
        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()
        val s = LocalDate.of(2023, 10, 1)
        riskAnalysisController.runMonthly(s)
//        riskAnalysisController.autoRunMonthly()
    }
}
src/test/java/com/flightfeather/monitor/analysis/dust/StatisticAnalysisControllerTest.kt
@@ -18,13 +18,13 @@
    @Test
    fun dailyStatics() {
        val d = LocalDate.of(2023, 7, 2)
        val d = LocalDate.of(2023, 11, 27)
        statisticAnalysisController.dailyStatics(d)
    }
    @Test
    fun monthlyStatics() {
        val d = LocalDate.of(2023, 7, 1)
        val d = LocalDate.of(2023, 11, 1)
        statisticAnalysisController.monthlyStatics(d)
    }