<?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.zhitan.realtimedata.mapper.PeriodDataMapper">
|
<resultMap id="dataItemMap" type="com.zhitan.realtimedata.domain.DataItem">
|
<id column="index_id" property="indexId"/>
|
<id column="time_code" property="timeCode"/>
|
<id column="index_code" property="indexCode"/>
|
<id column="index_name" property="indexName"/>
|
<result column="begin_time" property="beginTime"/>
|
<result column="end_time" property="endTime"/>
|
<result column="data_time" property="dataTime"/>
|
<result column="value" property="value"/>
|
<result column="time_type" property="timeType"/>
|
<result column="quality" property="quality"/>
|
<result column="unit_id" property="unitId"/>
|
<result column="create_time" property="createTime"/>
|
<result column="update_time" property="updateTime"/>
|
<result column="remark" property="remark"/>
|
</resultMap>
|
|
<resultMap id="statisticResultMap" type="com.zhitan.realtimedata.domain.StatisticResult">
|
<id column="index_id" property="indexId"/>
|
<id column="index_code" property="indexCode"/>
|
<id column="index_name" property="indexName"/>
|
<result column="unit_id" property="unitId"/>
|
<result column="maxvalue" property="maxValue"/>
|
<result column="minvalue" property="minValue"/>
|
<result column="avgvalue" property="avgValue"/>
|
</resultMap>
|
<delete id="delete">
|
DELETE
|
FROM data_item
|
WHERE index_id = #{indexId}
|
AND time_type = #{timeType}
|
AND data_time >= #{beginTime}
|
AND data_time <= #{endTime}
|
</delete>
|
|
<sql id="itemHead">
|
SELECT di.index_id,
|
di.time_code,
|
di.time_type,
|
di.begin_time,
|
di.end_time,
|
di.data_time,
|
di.value,
|
di.quality,
|
di.create_time,
|
di.update_time,
|
ci.code AS "index_code",
|
ci.name AS "index_name"
|
FROM data_item di
|
LEFT JOIN energy_index ci ON di.index_id = ci.index_id
|
</sql>
|
|
<select id="getDataByIndex" resultMap="dataItemMap">
|
<include refid="itemHead"/>
|
WHERE di.index_id = #{indexId}
|
AND di.time_code = #{timeCode}
|
</select>
|
<select id="hasExist" resultType="java.lang.String">
|
SELECT index_id
|
FROM data_item
|
WHERE index_id = #{indexId}
|
AND time_code = #{timeCode}
|
</select>
|
<select id="getDatasByIndex" resultMap="dataItemMap">
|
<include refid="itemHead"/>
|
where di.time_code = #{timeCode}
|
AND di.index_id in
|
<foreach item="indexId" index="index" collection="indexIds"
|
open="(" separator="," close=")">
|
#{indexId}
|
</foreach>
|
</select>
|
<select id="getPeriodDatasByIndex" resultMap="dataItemMap">
|
<include refid="itemHead"/>
|
WHERE di.index_id in
|
<foreach item="indexId" index="index" collection="indexIds"
|
open="(" separator="," close=")">
|
#{indexId}
|
</foreach>
|
AND di.time_type = #{timeType}
|
AND di.data_time >= #{beginTime}
|
AND di.data_time < #{endTime}
|
</select>
|
<select id="dataStatisticsByIndex" resultType="java.lang.Double">
|
SELECT
|
<if test="statisticType.name() == 'Sum'">
|
sum(value)
|
</if>
|
<if test="statisticType.name() == 'Max'">
|
max(value)
|
</if>
|
<if test="statisticType.name() == 'Min'">
|
min(value)
|
</if>
|
<if test="statisticType.name() == 'Average'">
|
avg(value)
|
</if>
|
FROM data_item
|
WHERE index_id = #{indexId}
|
AND time_type = #{timeType}
|
AND data_time >= #{beginTime}
|
AND data_time < #{endTime}
|
</select>
|
|
<select id="dataStatisticsByIndexs" resultMap="dataItemMap">
|
SELECT
|
<if test="statisticType.name() == 'Sum'">
|
sum(value)
|
</if>
|
<if test="statisticType.name() == 'Max'">
|
max(value)
|
</if>
|
<if test="statisticType.name() == 'Min'">
|
min(value)
|
</if>
|
<if test="statisticType.name() == 'Average'">
|
avg(value)
|
</if>
|
AS value,
|
i.code as index_code,
|
i.name as index_name,
|
i.unit_id,
|
d.index_id
|
FROM data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE d.index_id in
|
<foreach item="indexId" index="index" collection="indexIds"
|
open="(" separator="," close=")">
|
#{indexId}
|
</foreach>
|
AND time_type = #{timeType}
|
AND data_time >= #{beginTime}
|
AND data_time < #{endTime}
|
GROUP BY d.index_id, i.code, i.unit_id, i.name
|
</select>
|
|
<select id="dataStatisticsByCodes" resultMap="dataItemMap">
|
SELECT
|
<if test="statisticType.name() == 'Sum'">
|
sum(value)
|
</if>
|
<if test="statisticType.name() == 'Max'">
|
max(value)
|
</if>
|
<if test="statisticType.name() == 'Min'">
|
min(value)
|
</if>
|
<if test="statisticType.name() == 'Average'">
|
avg(value)
|
</if>
|
AS value,
|
i.code as index_code,
|
i.name as index_name,
|
i.unit_id,
|
d.index_id
|
FROM data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE
|
i.code IN
|
<foreach item="indexCode" index="index" collection="indexCodes"
|
open="(" separator="," close=")">
|
#{indexCode}
|
</foreach>
|
AND time_type = #{timeType}
|
AND data_time >= #{beginTime}
|
AND data_time < #{endTime}
|
GROUP BY d.index_id, i.code, i.unit_id, i.name
|
</select>
|
|
<select id="dataStatisticsFilterByCodes" resultMap="dataItemMap">
|
SELECT
|
<if test="statisticType.name() == 'Sum'">
|
sum(value)
|
</if>
|
<if test="statisticType.name() == 'Max'">
|
max(value)
|
</if>
|
<if test="statisticType.name() == 'Min'">
|
min(value)
|
</if>
|
<if test="statisticType.name() == 'Average'">
|
avg(value)
|
</if>
|
AS value,
|
i.code as index_code,
|
i.name as index_name,
|
i.unit_id,
|
d.index_id
|
FROM data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE
|
i.code IN
|
<foreach item="indexCode" index="index" collection="indexCodes"
|
open="(" separator="," close=")">
|
#{indexCode}
|
</foreach>
|
AND time_type = #{timeType}
|
AND data_time >= #{beginTime}
|
AND data_time < #{endTime}
|
<if test="isFilter == true">
|
AND value > 0
|
</if>
|
GROUP BY d.index_id, i.code, i.unit_id, i.name
|
</select>
|
|
<select id="statistic" resultMap="dataItemMap">
|
SELECT
|
d.index_id,
|
time_code,
|
data_time,
|
i.code as index_code,
|
i.name as index_name,
|
i.unit_id,
|
VALUE
|
FROM
|
data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE
|
d.index_id in
|
<foreach item="indexId" index="index" collection="indexIds"
|
open="(" separator="," close=")">
|
#{indexId}
|
</foreach>
|
AND data_time >= #{beginTime}
|
AND data_time < #{endTime}
|
AND time_type = #{timeType}
|
GROUP BY
|
d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
|
</select>
|
|
<select id="statisticByCode" resultMap="dataItemMap">
|
SELECT
|
d.index_id,
|
time_code,
|
data_time,
|
i.code as index_code,
|
i.name as index_name,
|
i.unit_id,
|
value
|
FROM
|
data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE
|
i.code IN
|
<foreach item="indexCode" index="index" collection="indexCodes"
|
open="(" separator="," close=")">
|
#{indexCode}
|
</foreach>
|
AND data_time >= #{beginTime}
|
AND data_time <= #{endTime}
|
AND time_type = #{timeType}
|
GROUP BY
|
d.index_id, time_code, data_time, value, i.code, i.unit_id, i.name
|
</select>
|
|
<select id="getStatisticDatasById" resultMap="statisticResultMap">
|
SELECT
|
d.index_id,
|
i.code as index_code,
|
i.unit_id,
|
i.name as index_name,
|
MAX(value) as "maxvalue",
|
min(value) as minvalue,
|
avg(value) as avgvalue
|
FROM
|
data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE
|
d.index_id in
|
<foreach item="indexId" index="index" collection="indexIds"
|
open="(" separator="," close=")">
|
#{indexId}
|
</foreach>
|
AND time_type = #{timeType}
|
GROUP BY
|
d.index_id, i.code, i.unit_id, i.name
|
</select>
|
|
<select id="getStatisticDatasByCode" resultMap="statisticResultMap">
|
SELECT
|
d.index_id,
|
i.code as index_code,
|
i.name as index_name,
|
i.unit_id,
|
MAX(value) as "maxvalue",
|
min(value) as minvalue,
|
avg(value) as avgvalue
|
FROM
|
data_item d
|
LEFT JOIN energy_index i ON d.index_id = i.index_id
|
WHERE
|
i.code IN
|
<foreach item="indexCode" index="index" collection="indexCodes"
|
open="(" separator="," close=")">
|
#{indexCode}
|
</foreach>
|
AND time_type = #{timeType}
|
GROUP BY
|
d.index_id, i.code, i.unit_id, i.name
|
</select>
|
|
<insert id="insert">
|
INSERT INTO data_item (index_id,
|
time_code,
|
time_type,
|
begin_time,
|
end_time,
|
data_time,
|
value,
|
quality,
|
create_time)
|
VALUES (#{dataItem.indexId},
|
#{dataItem.timeCode},
|
#{dataItem.timeType},
|
#{dataItem.beginTime},
|
#{dataItem.endTime},
|
#{dataItem.dataTime},
|
#{dataItem.value, jdbcType = DOUBLE},
|
#{dataItem.quality},
|
now())
|
</insert>
|
|
<insert id="save">
|
insert into data_item (index_id,
|
time_code,
|
time_type,
|
begin_time,
|
end_time,
|
data_time,
|
value,
|
quality,
|
create_time)
|
select #{dataItem.indexId},
|
#{dataItem.timeCode},
|
#{dataItem.timeType},
|
#{dataItem.beginTime},
|
#{dataItem.endTime},
|
#{dataItem.dataTime},
|
#{dataItem.value, jdbcType = DOUBLE},
|
#{dataItem.quality},
|
now()
|
on conflict
|
(index_id,time_code)
|
do update
|
set value = #{dataItem.value, jdbcType = DOUBLE},
|
quality = #{dataItem.quality},
|
update_time = now();
|
|
</insert>
|
<insert id="saveDataList" parameterType="java.util.List">
|
<foreach item="dataItem" collection="dataItemVlues">
|
<if test="dataItem != null">
|
insert into data_item (index_id,
|
time_code,
|
time_type,
|
begin_time,
|
end_time,
|
data_time,
|
value,
|
quality,
|
create_time)
|
select #{dataItem.indexId},
|
#{dataItem.timeCode},
|
#{dataItem.timeType},
|
#{dataItem.beginTime},
|
#{dataItem.endTime},
|
#{dataItem.dataTime},
|
#{dataItem.value, jdbcType = DOUBLE},
|
#{dataItem.quality},
|
now()
|
on conflict(index_id,time_code)
|
do update
|
set value= #{dataItem.value, jdbcType = DOUBLE},
|
quality = #{dataItem.quality},
|
update_time = now();
|
</if>
|
</foreach>
|
</insert>
|
<insert id="insertDataList">
|
insert into data_item (index_id, time_code,
|
time_type,
|
begin_time,
|
end_time,
|
data_time,
|
value,
|
quality,
|
create_time)
|
values
|
<foreach collection="list" item="dataItem" index="index" separator=",">
|
(#{dataItem.indexId},
|
#{dataItem.timeCode},
|
#{dataItem.timeType},
|
#{dataItem.beginTime},
|
#{dataItem.endTime},
|
#{dataItem.dataTime},
|
#{dataItem.value, jdbcType = DOUBLE},
|
#{dataItem.quality},
|
now())
|
</foreach>
|
</insert>
|
<insert id="insertTOUData">
|
insert into electricity_data_item (index_id, time_code,
|
electricity_type,
|
index_code,
|
data_time,
|
begin_time,
|
end_time,
|
electricity,
|
cost,
|
price,
|
create_time,
|
time_type)
|
values (#{dataItem.indexId},
|
#{dataItem.timeCode},
|
#{dataItem.electricityType},
|
#{dataItem.indexCode},
|
#{dataItem.dataTime},
|
#{dataItem.beginTime},
|
#{dataItem.endTime},
|
#{dataItem.electricity, jdbcType = DOUBLE},
|
#{dataItem.cost, jdbcType = DOUBLE},
|
#{dataItem.price, jdbcType = DOUBLE},
|
now(),
|
#{dataItem.timeType})
|
ON CONFLICT (index_id, time_code,electricity_type)
|
DO UPDATE SET electricity = EXCLUDED.electricity,cost = EXCLUDED.cost,price = EXCLUDED.price;
|
</insert>
|
<insert id="insertTOUDataItems">
|
insert into electricity_data_item (index_id, time_code,
|
electricity_type,
|
index_code,
|
data_time,
|
begin_time,
|
end_time,
|
electricity,
|
cost,
|
price,
|
create_time,
|
time_type)
|
values
|
<foreach collection="dataItems" item="dataItem" index="index" separator=",">
|
values (#{dataItem.indexId},
|
#{dataItem.timeCode},
|
#{dataItem.electricityType},
|
#{dataItem.indexCode},
|
#{dataItem.dataTime},
|
#{dataItem.beginTime},
|
#{dataItem.endTime},
|
#{dataItem.electricity, jdbcType = DOUBLE},
|
#{dataItem.cost, jdbcType = DOUBLE},
|
#{dataItem.price, jdbcType = DOUBLE},
|
now(),
|
#{dataItem.timeType})
|
</foreach>
|
ON CONFLICT (index_id, time_code,electricity_type)
|
DO UPDATE SET electricity = EXCLUDED.electricity,cost = EXCLUDED.cost,price = EXCLUDED.price;
|
</insert>
|
|
<update id="update">
|
UPDATE data_item
|
SET value = #{dataItem.value, jdbcType = DOUBLE},
|
quality = #{dataItem.quality},
|
update_time = now()
|
WHERE index_id = #{dataItem.indexId}
|
AND time_code = #{dataItem.timeCode}
|
</update>
|
<select id="getPeriodDatasByIndexAndQuality" resultMap="dataItemMap">
|
SELECT index_id, time_code, time_type, begin_time, end_time, data_time, `value`, quality,
|
create_time, update_time
|
FROM data_item
|
WHERE index_id in
|
<foreach item="indexId" index="index" collection="indexIds"
|
open="(" separator="," close=")">
|
#{indexId}
|
</foreach>
|
AND time_type = #{timeType}
|
AND data_time >= #{beginTime}
|
AND data_time < #{endTime}
|
AND quality = #{quality}
|
</select>
|
<select id="getDataByIndexCode" resultMap="dataItemMap">
|
<include refid="itemHead"/>
|
WHERE ci.code = #{indexCode}
|
AND di.time_code = #{timeCode}
|
</select>
|
<select id="queryDataItemIsExist" resultType="java.lang.String">
|
select concat(time_code, ':', index_id)
|
from data_item where
|
<foreach collection="queryMap.keys" index="index" item="key" separator="or">
|
(time_code = #{key} and index_id in
|
<foreach collection="queryMap[key]" item="id" separator="," open="(" close=")">
|
#{id}
|
</foreach>
|
)
|
</foreach>
|
</select>
|
</mapper>
|