<?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="cn.roadm.mapper.UploadSignChannelMapper">

    <resultMap type="UploadSignChannel" id="UploadSignChannelResultMap">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="config" property="config" />
        <result column="port" property="port" />
        <result column="upload_sum" property="uploadSum" />
        <result column="no_upload_sum" property="noUploadSum" />
        <result column="fail_upload_sum" property="failUploadSum" />
        <result column="no_data_sum" property="noDataSum" />
        <result column="create_time" property="createTime" />
        <result column="channel_id" property="channelId" />
    </resultMap>

    <select id="listPageUploadSignChannel" parameterType="UploadSignChannel"
            resultMap="UploadSignChannelResultMap">
        SELECT
            a.id,a.name,a.type,a.config,a.port,b.upload_sum,b.no_upload_sum,b.fail_upload_sum,b.no_data_sum,
        b.errorDataSum,b.coverSum,b.syncSum,b.total,a.create_time,a.channel_id
        FROM upload_sign_acc a left join (SELECT channel_id,
        COUNT(*) AS total,
        COUNT(CASE WHEN status IN (1, 2) THEN 1 END) AS no_upload_sum,
        COUNT(CASE WHEN status = 3 THEN 1 END) AS upload_sum,
        COUNT(CASE WHEN status = 4 THEN 1 END) AS fail_upload_sum,
        COUNT(CASE WHEN status = 5 THEN 1 END) AS no_data_sum,
        COUNT(CASE WHEN status = 6 THEN 1 END) AS errorDataSum,
        COUNT(CASE WHEN status = 7 THEN 1 END) AS coverSum,
        COUNT(CASE WHEN is_sync = 1 THEN 1 END) AS syncSum
        FROM upload_sign_status where is_deleted = 0
        GROUP BY channel_id) b on a.channel_id = b.channel_id where a.is_deleted = 0
        <if test="id != null">
            AND a.id = #{id}
        </if>
        <if test="channelId != null">
            AND a.channel_id = #{channelId}
        </if>
        <if test="type != null">
            AND a.type = #{type}
        </if>
        order by id desc
    </select>

    <select id="queryUploadSignChannelById" parameterType="java.lang.Integer"
            resultMap="UploadSignChannelResultMap">
        SELECT
            id,name,type,config,port,upload_sum,no_upload_sum,fail_upload_sum,no_data_sum,create_time,channel_id
        FROM upload_sign_acc
        WHERE id = #{id}
    </select>

    <select id="getUploadSignChannelByChannelId" parameterType="java.lang.Integer"
            resultMap="UploadSignChannelResultMap">
        SELECT
            id,name,type,config,port,upload_sum,no_upload_sum,fail_upload_sum,no_data_sum,create_time,channel_id
        FROM upload_sign_acc
        WHERE channel_id = #{id}
    </select>


    <insert id="insertUploadSignChannel" parameterType="UploadSignChannel" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO upload_sign_acc
        (name, type, config, port, create_time, upload_sum, no_upload_sum, fail_upload_sum, no_data_sum,channel_id)
        VALUES
            (#{name}, #{type}, #{config}, #{port}, #{createTime}, 0, 0, 0, 0, #{channelId})
    </insert>


    <delete id="editUploadSignChannel" parameterType="UploadSignChannel">
        UPDATE upload_sign_acc
        <set>
            <if test="name != null">name = #{name},</if>
            <if test="type != null">type = #{type},</if>
            <if test="config != null">config = #{config},</if>
            <if test="port != null">port = #{port},</if>
        </set>
        WHERE id = #{id}
    </delete>

    <update id="deleteuploadSignChannel" parameterType="UploadSignChannel">
        update upload_sign_acc set is_deleted = 1 where id = #{id}
    </update>

    <select id="selectIdNameList" resultType="java.util.Map">
        SELECT id, name
        FROM upload_sign_acc
        ORDER BY id DESC
    </select>

    <select id="selectIdChannelList" resultType="UploadSignChannel">
        SELECT a.id,a.channel_id as channelId,b.channel_name as channelName FROM upload_sign_acc a left join sms_send_channel_info b
        on a.channel_id = b.id where a.id!=#{id} and a.port = #{port} and a.is_deleted = 0
        ORDER BY a.id DESC
    </select>

    <select id="selectChannelIdNum" parameterType="java.lang.Integer" resultType="java.lang.Integer">
        SELECT count(channel_id)
        FROM upload_sign_acc
        where channel_id = #{channelId}
    </select>
</mapper>