<?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.zg.project.information.mapper.DeviceInfoMapper">

    <resultMap type="com.zg.project.information.domain.DeviceInfo" id="DeviceInfoResult">
        <result property="deviceId" column="device_id"/>
        <result property="ipAddress" column="ip_address"/>
        <result property="port" column="port"/>
        <result property="warehouseCode" column="warehouse_code"/>
        <result property="sceneId" column="scene_id"/>
        <result property="warehouseName" column="warehouse_name"/>
        <result property="parentWarehouseCode" column="parent_warehouse_code"/>
        <result property="parentWarehouseName" column="parent_warehouse_name"/>
        <result property="sceneName" column="scene_name"/>

        <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="isDelete" column="is_delete"/>
    </resultMap>

    <sql id="selectDeviceInfoVo">
        SELECT
            d.device_id,
            d.ip_address,
            d.port,
            d.warehouse_code,
            d.scene_id,

            w.warehouse_name,
            w.parent_warehouse_code,
            w.parent_warehouse_name,

            s.scene_name,

            d.create_by,
            d.create_time,
            d.update_by,
            d.update_time,
            d.is_delete
        FROM device_info d
                 LEFT JOIN warehouse_info w
                           ON d.warehouse_code = w.warehouse_code
                 LEFT JOIN scene_mapping_bak s
                           ON d.scene_id = s.scene_code
    </sql>

    <!-- 列表 -->
    <select id="selectDeviceInfoList"
            parameterType="com.zg.project.information.domain.DeviceInfo"
            resultMap="DeviceInfoResult">

        <include refid="selectDeviceInfoVo"/>

        <where>
            <!-- 默认未删除 -->
            <choose>
                <when test="isDelete != null and isDelete != ''">
                    AND d.is_delete = #{isDelete}
                </when>
                <otherwise>
                    AND d.is_delete = '0'
                </otherwise>
            </choose>

            <if test="ipAddress != null and ipAddress != ''">
                AND d.ip_address = #{ipAddress}
            </if>

            <if test="port != null">
                AND d.port = #{port}
            </if>
            <if test="warehouseCode != null and warehouseCode != ''">
                AND d.warehouse_code = #{warehouseCode}
            </if>

            <if test="parentWarehouseCode != null and parentWarehouseCode != ''">
                AND w.parent_warehouse_code = #{parentWarehouseCode}
            </if>

            <if test="sceneId != null and sceneId != ''">
                AND d.scene_id = #{sceneId}
            </if>
        </where>

        ORDER BY d.device_id DESC
    </select>

    <!-- 详情 -->
    <select id="selectDeviceInfoByDeviceId"
            parameterType="java.lang.Long"
            resultMap="DeviceInfoResult">
        <include refid="selectDeviceInfoVo"/>
        WHERE d.device_id = #{deviceId}
    </select>

    <!-- 新增 -->
    <insert id="insertDeviceInfo" parameterType="com.zg.project.information.domain.DeviceInfo">
        INSERT INTO device_info (
        ip_address,
        port,
        warehouse_code,
        scene_id,
        create_by,
        create_time,
        update_by,
        update_time,
        is_delete
        ) VALUES (
        #{ipAddress},
        #{port},
        #{warehouseCode},
        #{sceneId},
        #{createBy},
        #{createTime},
        #{updateBy},
        #{updateTime},
        <choose>
            <when test="isDelete != null and isDelete != ''">#{isDelete}</when>
            <otherwise>'0'</otherwise>
        </choose>
        )
    </insert>

    <!-- 修改 -->
    <update id="updateDeviceInfo" parameterType="com.zg.project.information.domain.DeviceInfo">
        UPDATE device_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="ipAddress != null and ipAddress != ''">ip_address = #{ipAddress},</if>
            <if test="port != null">port = #{port},</if>
            <if test="warehouseCode != null and warehouseCode != ''">warehouse_code = #{warehouseCode},</if>
            <if test="sceneId != null and sceneId != ''">scene_id = #{sceneId},</if>
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="isDelete != null and isDelete != ''">is_delete = #{isDelete},</if>
        </trim>
        WHERE device_id = #{deviceId}
    </update>

    <delete id="deleteDeviceInfoByDeviceId" parameterType="java.lang.Long">
        DELETE FROM device_info WHERE device_id = #{deviceId}
    </delete>

    <delete id="deleteDeviceInfoByDeviceIds" parameterType="Long">
        DELETE FROM device_info
        WHERE device_id IN
        <foreach item="deviceId" collection="array" open="(" separator="," close=")">
            #{deviceId}
        </foreach>
    </delete>

</mapper>
