fengxiang
2018-06-25 071adf2ca6063884b095544eff17f976a258cb4d
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?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.moral.mapper.HistoryMinutelyMapper">
    <resultMap id="PairDataResultMap" type="com.moral.entity.charts.PairData" >
        <result column="format_time" property="category" jdbcType="VARCHAR" />
        <result column="value" property="value" jdbcType="DOUBLE" />
    </resultMap>
    <select id="getSersionAvgByDevice" resultType="java.util.Map">
        SELECT
            <foreach  collection="sensorKeys" separator="," item="sensorKey">
                AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
            </foreach>
        FROM
            history_minutely
        WHERE
            mac IN
                (SELECT
                    d.mac 
                FROM
                    device d
                WHERE
                    d.is_delete = 0 
                    <if test="monitorPointId != null">
                    AND d.monitor_point_id = #{monitorPointId}
                    </if>
                    <if test="mac != null">
                    AND d.mac = #{mac}
                    </if>
                )    
        AND time >= #{start}
        AND time &lt; #{end}
    </select>
    
    <select id="getMonitorPointOrDeviceAvgData" resultType="java.util.LinkedHashMap">
        SELECT
            DATE_FORMAT(time, #{typeFormat}) time
            <foreach  collection="sensorKeys" open="," separator="," item="sensorKey">
                AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
            </foreach>
        FROM
            history_minutely h
        WHERE
            h.time >= #{start}
        AND h.time <![CDATA[<]]> #{end}
        <if test="mac != null">
        AND    h.mac = #{mac}
        </if>
        <if test="mac == null">
        AND    h.mac IN
            (SELECT
                d.mac 
            FROM
                device d,
                monitor_point mp 
            WHERE
                d.monitor_point_id = mp.id 
                <if test="provinceCode != null">
                AND mp.province_code = #{provinceCode}
                </if>
                <if test="cityCode != null">
                AND mp.city_code = #{cityCode}
                </if>
                <if test="areaCode != null">
                AND mp.area_code = #{areaCode}
                </if>
                <if test="monitorPointId != null">
                AND mp.id =    #{monitorPointId}
                </if>
                <if test="professionId != null">
                AND d.profession_id = #{professionId}
                </if>
            )    
        </if>
        
        GROUP BY
            DATE_FORMAT(time, #{typeFormat})
        ORDER BY
            time
    </select>
    <select id="selectLineChartDateByCrieria" resultType="java.util.Map">
            SELECT
                <choose>
                    <when test="'MINUTE'==dataCondition.timeUnits.toString() and 'DEVICE'==dataCondition.areaRange.toString()">
                        <foreach collection="sensorKeys"
                                 item="sensorKey" separator="," close=",">
                                 json->'$.${sensorKey}[0]' as '${sensorKey}'
                        </foreach>
                    </when>
                    <otherwise>
                        <foreach collection="sensorKeys"
                                 item="sensorKey" separator="," close=",">
                            AVG(json->'$.${sensorKey}[0]') as '${sensorKey}'
                        </foreach>
                    </otherwise>
                </choose>
             DATE_FORMAT(time,'${@com.moral.common.util.ReportTimeFormat@toMySqlTimeFormat(timePeriod.timeUnits)}') as format_time
             FROM
            `history_minutely` hmi
            <where>
                and hmi.time >= #{timePeriod.startTime}
                and hmi.time <![CDATA[<=]]> #{timePeriod.endTime}
                <if test="dataCondition.actualTime != null">
                    and DATE_FORMAT(time,    '${@com.moral.common.util.ReportTimeFormat@toMySqlActualTimeFormat(dataCondition.timeUnits)}') = #{dataCondition.actualTime}
                </if>
                and hmi.mac in (
                select mac from device dev
                join monitor_point mpt  on dev.monitor_point_id = mpt.id
                <where>
                     <if test='"DEVICE"==dataCondition.areaRange.toString()'>
                        and dev.id = #{dataCondition.areaRangeId}
                     </if>
                    <if test='"PROFESSION"==dataCondition.deviceDimension.toString()'>
                        and dev.profession_id = #{dataCondition.dimensionValue}
                    </if>
                    <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'>
                        and mpt.id = #{dataCondition.areaRangeId}
                    </if>
                    <if test='"PROVINCE"==dataCondition.areaRange.toString()'>
                        and mpt.province_code = #{dataCondition.areaRangeId}
                    </if>
                    <if test='"CITY"==dataCondition.areaRange.toString()'>
                        and mpt.city_code = #{dataCondition.areaRangeId}
                    </if>
                    <if test='"AREA"==dataCondition.areaRange.toString()'>
                        and mpt.area_code = #{dataCondition.areaRangeId}
                    </if>
                </where>
                )
            </where>
            <if test="'MINUTE'!=dataCondition.timeUnits.toString() or 'DEVICE'!=dataCondition.areaRange.toString()">
                GROUP BY format_time
            </if>
            ORDER BY format_time asc
    </select>
</mapper>