<?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.UploadSignFileInfoMapper">

    <resultMap type="UploadSignFileInfo" id="UploadSignFileInfoResultMap">
        <id column="id" property="id" />
        <result column="file_name" property="fileName" />
        <result column="acc_id" property="accId" />
        <result column="batch_id" property="batchId" />
        <result column="all_num" property="allNum" />
        <result column="un_upload_num" property="unUploadNum" />
        <result column="succ_num" property="succNum" />
        <result column="fail_num" property="failNum" />
        <result column="repeat_num" property="repeatNum" />
        <result column="create_time" property="createTime" />
        <result column="status" property="status" />
        <result column="upload_time" property="uploadTime" />
        <result column="channel_id" property="channelId" />
        <result column="import_upload_status" property="importUploadStatus" />
        <result column="conflict_handling" property="conflictHandling" />
        <result column="default_sub_port" property="defaultSubPort" />
    </resultMap>

    <select id="listPageUploadSignFileInfo" parameterType="UploadSignFileInfo"
            resultMap="UploadSignFileInfoResultMap">
        SELECT a.id, a.file_name, a.acc_id, a.channel_id, a.batch_id,
        a.create_time, a.status, a.upload_time,a.import_upload_status,a.conflict_handling,
        a.default_sub_port,b.port,b.type as accType,c.channel_name as channelName,
        d.uploadSum,d.noUploadSum,d.failUploadSum,d.noDataSum,
        d.errorDataSum,d.coverSum,d.syncSum,d.total
        FROM upload_sign_file_info a left join upload_sign_acc b on a.acc_id = b.id
        left join sms_send_channel_info c on a.channel_id = c.id
        left join (SELECT file_batch_id,
        COUNT(*) AS total,
        COUNT(CASE WHEN status IN (1, 2) THEN 1 END) AS noUploadSum,
        COUNT(CASE WHEN status = 3 THEN 1 END) AS uploadSum,
        COUNT(CASE WHEN status = 4 THEN 1 END) AS failUploadSum,
        COUNT(CASE WHEN status = 5 THEN 1 END) AS noDataSum,
        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 file_batch_id) d on a.batch_id = d.file_batch_id
        <where>
            <if test="fileName != null and fileName != ''">
                AND a.file_name LIKE CONCAT('%', #{fileName}, '%')
            </if>
            <if test="status != null">
                AND a.status = #{status}
            </if>
            <if test="accId != null and accId != ''">
                AND a.acc_id = #{accId}
            </if>

            <if test="importUploadStatus != null">
                AND a.import_upload_status = #{importUploadStatus}
            </if>

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

            <if test="channelId != null">
                AND a.channel_id = #{channelId}
            </if>
        </where>
        ORDER BY id DESC
    </select>

    <insert id="insertUploadSignFileInfo" parameterType="UploadSignFileInfo">
        insert into upload_sign_file_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="fileName != null">file_name,</if>
            <if test="accId != null">acc_id,</if>
            <if test="batchId != null">batch_id,</if>
            <if test="allNum != null">all_num,</if>
            <if test="succNum != null">succ_num,</if>
            <if test="failNum != null">fail_num,</if>
            <if test="repeatNum != null">repeat_num,</if>
            <if test="createTime != null">create_time,</if>
            <if test="status != null">status,</if>
            <if test="uploadTime != null">upload_time,</if>
            <if test="channelId != null">channel_id,</if>
            <if test="importUploadStatus != null">import_upload_status,</if>
            <if test="conflictHandling != null">conflict_handling,</if>
            <if test="defaultSubPort != null">default_sub_port,</if>
            <if test="fileUrl != null">file_url,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="fileName != null">#{fileName},</if>
            <if test="accId != null">#{accId},</if>
            <if test="batchId != null">#{batchId},</if>
            <if test="allNum != null">#{allNum},</if>
            <if test="succNum != null">#{succNum},</if>
            <if test="failNum != null">#{failNum},</if>
            <if test="repeatNum != null">#{repeatNum},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="status != null">#{status},</if>
            <if test="uploadTime != null">#{uploadTime},</if>
            <if test="channelId != null">#{channelId},</if>
            <if test="importUploadStatus != null">#{importUploadStatus},</if>
            <if test="conflictHandling != null">#{conflictHandling},</if>
            <if test="defaultSubPort != null">#{defaultSubPort},</if>
            <if test="fileUrl != null">#{fileUrl},</if>
        </trim>
    </insert>

    <update id="updateUploadSignFileInfo" parameterType="UploadSignFileInfo">
        UPDATE upload_sign_file_info
        SET all_num = #{allNum},
            un_upload_num = #{unUploadNum},
            succ_num = #{succNum},
            fail_num = #{failNum},
            repeat_num = #{repeatNum},
            create_time = #{createTime},
            status = #{status},
            upload_time = #{uploadTime}
        WHERE batch_id = #{batchId}
    </update>

    <select id="queryUploadSignFileInfoByName" parameterType="string" resultType="UploadSignFileInfo">
        SELECT id, file_name, acc_id, batch_id, all_num, succ_num, fail_num, repeat_num, create_time, status, upload_time
        FROM upload_sign_file_info
        where batch_id = #{batchId}
    </select>
</mapper>