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

    <select id="listPageGroup" parameterType="cn.roadm.bo.FailResendSignReplaceGroup" resultType="cn.roadm.bo.FailResendSignReplaceGroup">
        SELECT id, group_name groupName, create_time createTime, deleted
        FROM sms_fail_resend_sign_replace_group
        <where>
            <if test="deleted != null">
                deleted = #{deleted}
            </if>
            <if test="id != null and id > 0">
                AND id = #{id}
            </if>
            <if test="groupName != null and groupName != ''">
                AND group_name LIKE CONCAT('%', #{groupName}, '%')
            </if>
        </where>
        ORDER BY create_time DESC
    </select>

    <select id="getGroupById" resultType="cn.roadm.bo.FailResendSignReplaceGroup">
        SELECT id, group_name groupName, create_time createTime, deleted
        FROM sms_fail_resend_sign_replace_group
        WHERE id = #{id}
        LIMIT 1
    </select>

    <insert id="insertGroup" useGeneratedKeys="true" keyProperty="id" parameterType="cn.roadm.bo.FailResendSignReplaceGroup">
        INSERT INTO sms_fail_resend_sign_replace_group (group_name, create_time, deleted)
        VALUES (#{groupName}, NOW(), 0)
    </insert>

    <update id="updateGroup" parameterType="cn.roadm.bo.FailResendSignReplaceGroup">
        UPDATE sms_fail_resend_sign_replace_group
        SET group_name = #{groupName}
        WHERE id = #{id} AND deleted = 0
    </update>

    <update id="deleteGroup">
        UPDATE sms_fail_resend_sign_replace_group
        SET deleted = 1
        WHERE id = #{id}
    </update>

    <select id="listAllGroups" resultType="cn.roadm.bo.FailResendSignReplaceGroup">
        SELECT id, group_name groupName, create_time createTime, deleted
        FROM sms_fail_resend_sign_replace_group
        WHERE deleted = 0
        ORDER BY create_time DESC
    </select>

    <select id="listDetailsByGroupId" parameterType="cn.roadm.bo.FailResendSignReplaceDetail" resultType="cn.roadm.bo.FailResendSignReplaceDetail">
        SELECT d.id, d.group_id groupId, d.original_sign originalSign, d.replace_sign replaceSign, 
               d.original_channel_id originalChannelId, d.replace_channel_id replaceChannelId,
               oc.channel_name originalChannelName, rc.channel_name replaceChannelName,
               d.create_time createTime, d.deleted
        FROM sms_fail_resend_sign_replace_detail d
        LEFT JOIN sms_send_channel_info oc ON d.original_channel_id = oc.id
        LEFT JOIN sms_send_channel_info rc ON d.replace_channel_id = rc.id
        WHERE d.group_id = #{groupId}
        <if test="deleted != null">
            AND d.deleted = #{deleted}
        </if>
        ORDER BY d.create_time DESC
    </select>

    <select id="getDetailById" resultType="cn.roadm.bo.FailResendSignReplaceDetail">
        SELECT d.id, d.group_id groupId, d.original_sign originalSign, d.replace_sign replaceSign, 
               d.original_channel_id originalChannelId, d.replace_channel_id replaceChannelId,
               oc.channel_name originalChannelName, rc.channel_name replaceChannelName,
               d.create_time createTime, d.deleted
        FROM sms_fail_resend_sign_replace_detail d
        LEFT JOIN sms_send_channel_info oc ON d.original_channel_id = oc.id
        LEFT JOIN sms_send_channel_info rc ON d.replace_channel_id = rc.id
        WHERE d.id = #{id} AND d.deleted = 0
        LIMIT 1
    </select>

    <insert id="insertDetail" useGeneratedKeys="true" keyProperty="id" parameterType="cn.roadm.bo.FailResendSignReplaceDetail">
        INSERT INTO sms_fail_resend_sign_replace_detail (group_id, original_sign, replace_sign, original_channel_id, replace_channel_id, create_time, deleted)
        VALUES (#{groupId}, #{originalSign}, #{replaceSign}, #{originalChannelId}, #{replaceChannelId}, NOW(), 0)
    </insert>

    <update id="updateDetail" parameterType="cn.roadm.bo.FailResendSignReplaceDetail">
        UPDATE sms_fail_resend_sign_replace_detail
        SET original_sign = #{originalSign}, replace_sign = #{replaceSign}, 
            original_channel_id = #{originalChannelId}, replace_channel_id = #{replaceChannelId}
        WHERE id = #{id} AND deleted = 0
    </update>

    <update id="deleteDetail">
        UPDATE sms_fail_resend_sign_replace_detail
        SET deleted = 1
        WHERE id = #{id}
    </update>

    <update id="deleteDetailsByGroupId">
        UPDATE sms_fail_resend_sign_replace_detail
        SET deleted = 1
        WHERE group_id = #{groupId}
    </update>

    <select id="listBackCodeIdsByReplaceSignGroupId" resultType="int">
        SELECT id
        FROM sms_back_code
        WHERE replace_sign_group_id = #{groupId}
    </select>

    <update id="clearReplaceSignGroupId">
        UPDATE sms_back_code
        SET replace_sign_group_id = NULL
        WHERE replace_sign_group_id = #{groupId}
    </update>

</mapper>

