<?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.xzzn.ems.mapper.EmsBatteryDailyLatestMapper">

    <resultMap type="EmsBatteryDataDailyLatest" id="EmsBatteryDataDailyLatestResult">
        <result property="batteryPack"    column="battery_pack"    />
        <result property="batteryCluster"    column="battery_cluster"    />
        <result property="batteryCellId"    column="battery_cell_id"    />
        <result property="voltage"    column="voltage"    />
        <result property="temperature"    column="temperature"    />
        <result property="soc"    column="soc"    />
        <result property="soh"    column="soh"    />
        <result property="dateDay"    column="date_day"    />
        <result property="dataTimestamp"    column="data_timestamp"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="remark"    column="remark"    />
        <result property="siteId"    column="site_id"    />
        <result property="deviceId"    column="device_id"    />
        <result property="clusterDeviceId"    column="cluster_device_id"    />
    </resultMap>

    <sql id="selectEmsBatteryDataDailyLatestVo">
        select battery_pack, battery_cluster, battery_cell_id, voltage, temperature, soc, soh, date_day, data_timestamp, create_by, create_time, update_by, update_time, remark, site_id, device_id, cluster_device_id from ems_battery_data_daily_latest
    </sql>

    <select id="selectEmsBatteryDataDailyLatestList" parameterType="EmsBatteryDataDailyLatest" resultMap="EmsBatteryDataDailyLatestResult">
        <include refid="selectEmsBatteryDataDailyLatestVo"/>
        <where>
            <if test="batteryPack != null  and batteryPack != ''"> and battery_pack = #{batteryPack}</if>
            <if test="batteryCluster != null  and batteryCluster != ''"> and battery_cluster = #{batteryCluster}</if>
            <if test="batteryCellId != null  and batteryCellId != ''"> and battery_cell_id = #{batteryCellId}</if>
            <if test="voltage != null "> and voltage = #{voltage}</if>
            <if test="temperature != null "> and temperature = #{temperature}</if>
            <if test="soc != null "> and soc = #{soc}</if>
            <if test="soh != null "> and soh = #{soh}</if>
            <if test="dateDay != null "> and date_day = #{dateDay}</if>
            <if test="dataTimestamp != null "> and data_timestamp = #{dataTimestamp}</if>
            <if test="siteId != null  and siteId != ''"> and site_id = #{siteId}</if>
            <if test="deviceId != null  and deviceId != ''"> and device_id = #{deviceId}</if>
            <if test="clusterDeviceId != null  and clusterDeviceId != ''"> and cluster_device_id = #{clusterDeviceId}</if>
        </where>
    </select>

    <select id="selectEmsBatteryDataDailyLatestByBatteryPack" parameterType="String" resultMap="EmsBatteryDataDailyLatestResult">
        <include refid="selectEmsBatteryDataDailyLatestVo"/>
        where battery_pack = #{batteryPack}
    </select>

    <insert id="insertEmsBatteryDataDailyLatest" parameterType="EmsBatteryDataDailyLatest">
        insert into ems_battery_data_daily_latest
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="batteryPack != null">battery_pack,</if>
            <if test="batteryCluster != null">battery_cluster,</if>
            <if test="batteryCellId != null">battery_cell_id,</if>
            <if test="voltage != null">voltage,</if>
            <if test="temperature != null">temperature,</if>
            <if test="soc != null">soc,</if>
            <if test="soh != null">soh,</if>
            <if test="dateDay != null">date_day,</if>
            <if test="dataTimestamp != null">data_timestamp,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remark != null">remark,</if>
            <if test="siteId != null">site_id,</if>
            <if test="deviceId != null">device_id,</if>
            <if test="clusterDeviceId != null">cluster_device_id,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="batteryPack != null">#{batteryPack},</if>
            <if test="batteryCluster != null">#{batteryCluster},</if>
            <if test="batteryCellId != null">#{batteryCellId},</if>
            <if test="voltage != null">#{voltage},</if>
            <if test="temperature != null">#{temperature},</if>
            <if test="soc != null">#{soc},</if>
            <if test="soh != null">#{soh},</if>
            <if test="dateDay != null">#{dateDay},</if>
            <if test="dataTimestamp != null">#{dataTimestamp},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="remark != null">#{remark},</if>
            <if test="siteId != null">#{siteId},</if>
            <if test="deviceId != null">#{deviceId},</if>
            <if test="clusterDeviceId != null">#{clusterDeviceId},</if>
        </trim>
    </insert>

    <update id="updateEmsBatteryDataDailyLatest" parameterType="EmsBatteryDataDailyLatest">
        update ems_battery_data_daily_latest
        <trim prefix="SET" suffixOverrides=",">
            <if test="batteryCluster != null">battery_cluster = #{batteryCluster},</if>
            <if test="batteryCellId != null">battery_cell_id = #{batteryCellId},</if>
            <if test="voltage != null">voltage = #{voltage},</if>
            <if test="temperature != null">temperature = #{temperature},</if>
            <if test="soc != null">soc = #{soc},</if>
            <if test="soh != null">soh = #{soh},</if>
            <if test="dateDay != null">date_day = #{dateDay},</if>
            <if test="dataTimestamp != null">data_timestamp = #{dataTimestamp},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="siteId != null">site_id = #{siteId},</if>
            <if test="deviceId != null">device_id = #{deviceId},</if>
            <if test="clusterDeviceId != null">cluster_device_id = #{clusterDeviceId},</if>
        </trim>
        where battery_pack = #{batteryPack}
    </update>

    <delete id="deleteEmsBatteryDataDailyLatestByBatteryPack" parameterType="String">
        delete from ems_battery_data_daily_latest where battery_pack = #{batteryPack}
    </delete>

    <delete id="deleteEmsBatteryDataDailyLatestByBatteryPacks" parameterType="String">
        delete from ems_battery_data_daily_latest where battery_pack in
        <foreach item="batteryPack" collection="array" open="(" separator="," close=")">
            #{batteryPack}
        </foreach>
    </delete>

    <insert id="batchUpsert">
        INSERT INTO ems_battery_data_daily_latest (
        battery_pack, battery_cluster, battery_cell_id, voltage, temperature, soc, soh, date_day,
        data_timestamp, create_by, create_time, update_by, update_time, remark, site_id, device_id, cluster_device_id
        ) VALUES
        <foreach collection="list" item="item" separator=",">
            (
            #{item.batteryPack},
            #{item.batteryCluster},
            #{item.batteryCellId},
            #{item.voltage},
            #{item.temperature},
            #{item.soc},
            #{item.soh},
            #{item.dateDay},
            #{item.dataTimestamp},
            #{item.createBy},
            #{item.createTime},
            #{item.updateBy},
            #{item.updateTime},
            #{item.remark},
            #{item.siteId},
            #{item.deviceId},
            #{item.clusterDeviceId}
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        voltage = VALUES(voltage),
        temperature = VALUES(temperature),
        soc = VALUES(soc),
        soh = VALUES(soh),
        data_timestamp = VALUES(data_timestamp),
        update_time = NOW(),
        remark = VALUES(remark)
    </insert>

    <select id="getBatteryDailyLatest" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.BatteryDataStatsListVo">
        SELECT date_day as dataTimestamp,
               voltage, temperature, soc, soh,
               device_id as deviceId,
               cluster_device_id as clusterDeviceId
        FROM  ems_battery_data_daily_latest
        WHERE site_id = #{siteId}
          and cluster_device_id = #{clusterDeviceId}
          and device_id = #{deviceId}
          and date_day &gt;= #{startDate}
          and date_day &lt;= #{endDate}
        GROUP BY dataTimestamp
    </select>
</mapper>