jinpengyong
2020-11-20 99773108758898c032f67a125439fb811f5b992b
src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
@@ -1,17 +1,34 @@
<?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.HistoryFiveMinutelyMapper">
    <select id="getFiveMinutesSensorData" resultType="java.util.LinkedHashMap">
        select
        h.mac
        <foreach collection="sensorKeys" open="," separator="," item="sensorKey">
            ROUND(AVG(json->'$.${sensorKey}[0]'),3) AS 'AVG${sensorKey}',
            ROUND(MIN(json->'$.${sensorKey}[1]'),3) AS 'MIN${sensorKey}',
            ROUND(MAX(json->'$.${sensorKey}[2]'),3) AS 'MAX${sensorKey}'
            <choose >
              <when test="sensorKey=='e23'">
                  ROUND((CASE    WHEN AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0 AND AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0
                  THEN ATAN(AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))/AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI())))*180/PI()
                  WHEN AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))>0 AND AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0
                  THEN (ATAN(AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))/AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI())))*180/PI())+180
                  WHEN AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 AND AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0
                  THEN (ATAN(AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))/AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI())))*180/PI())+180
                  ELSE (ATAN(AVG(json->'$.e18[0]'*SIN((json->'$.e23[0]'/180)*PI()))/AVG(json->'$.e18[0]'*COS((json->'$.e23[0]'/180)*PI())))*180/PI())+360
                  END),3) AS 'AVG${sensorKey}',
                  ROUND(MIN(json->'$.${sensorKey}[1]'),3) AS 'MIN${sensorKey}',
                  ROUND(MAX(json->'$.${sensorKey}[2]'),3) AS 'MAX${sensorKey}'
              </when>
                <otherwise>
                    ROUND(AVG(json->'$.${sensorKey}[0]'),3) AS 'AVG${sensorKey}',
                    ROUND(MIN(json->'$.${sensorKey}[1]'),3) AS 'MIN${sensorKey}',
                    ROUND(MAX(json->'$.${sensorKey}[2]'),3) AS 'MAX${sensorKey}'
                </otherwise>
            </choose>
        </foreach>
        FROM
        history_minutely_${yearAndMonth} h
        where  h.time<![CDATA[>=]]>#{start} and h.time <![CDATA[<=]]>  #{end}
        where  h.time<![CDATA[>=]]>#{start} and h.time <![CDATA[<]]>  #{end}
        group by h.mac
    </select>