zmc
2023-11-23 3ba74e7692143fd6dcf4dd885f80f95dfef8387e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?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>
 
    <insert id="dailyStatics">
        insert into dust_statistics_value(mn_code,lst,day_avg,min,max,day_online,day_valid,day_exceeding,type)
        select a.*
        from (select
        mn_code as mn_code,
        DATE(lst) as lst,
        ROUND(AVG(dust_value),3) as day_avg,
        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,
        'day' as type
        from ja_t_dust_site_data_info
        where lst between #{beginTime} and #{endTime}
        GROUP BY mn_code,DATE(lst)
        ) as a
    </insert>
    <insert id="monthlyStatics">
        insert into dust_statistics_value(mn_code,lst,day_avg,min,max,day_online,day_valid,day_exceeding,type)
        select a.*
        from (
        SELECT
        mn_code AS mn_code,
        DATE_FORMAT(lst, '%Y-%m-01') AS month,
        ROUND(AVG(dust_value), 3) AS month_avg,
        MIN(dust_value) AS min,
        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,
        'month' as type
        FROM ja_t_dust_site_data_info
        WHERE lst BETWEEN #{beginTime} and #{endTime}
        GROUP BY mn_code, DATE_FORMAT(lst, '%Y-%m-01')
        ) as a
    </insert>
 
    <!--    根据站点名字和时段进行统计分析-->
    <select id="selectByOrder" resultType="com.flightfeather.monitor.pojo.AnalysisDustData">
        select c.name,d.*
        from dust_statistics_value as d
        left join ja_t_dust_site_info as c on c.mn_code = d.mn_code
        <where>
            <if test="siteName != null and siteName != ''">
                and c.name = #{siteName}
            </if>
            <if test="beginTime != null and endTime != null">
                and d.lst between #{beginTime} and #{endTime} and d.type = 'day'
            </if>
        </where>
        <if test="orderProp == 'lst'">
            order by d.lst
        </if>
        <if test="orderProp == 'day_avg'">
            order by d.day_avg
        </if>
        <if test="orderProp == 'min'">
            order by d.min
        </if>
        <if test="orderProp == 'max'">
            order by d.max
        </if>
        <if test="orderProp == 'day_online'">
            order by d.day_online
        </if>
        <if test="orderProp == 'day_valid'">
            order by d.day_valid
        </if>
        <if test="orderProp == 'day_exceeding'">
            order by d.day_exceeding
        </if>
        <if test="orderProp != null and asc">
            asc
        </if>
        <if test="orderProp != null and !asc">
            desc
        </if>
    </select>
</mapper>