<?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.jeeplus.modules.mail.mapper.MailComposeMapper">

    <sql id="mailComposeColumns">
        a.id AS "id",
        a.status AS "status",
        a.senderid AS "sender.id",
        a.receiverids AS "receiverIds",
        a.sendtime AS "sendtime",
        a.mailid AS "mail.id",
        mail.title AS "mail.title",
        mail.overview AS "mail.overview",
        mail.content AS "mail.content"
    </sql>

    <sql id="mailComposeJoins">
        LEFT JOIN plugin_mail mail ON mail.id = a.mailid
    </sql>
    <resultMap type="MailCompose" id="MailMap" autoMapping="true">
        <association property="mail" javaType="Mail">
            <id property="id" column="mail.id"/>
            <result property="title" column="mail.title"/>
            <result property="overview" column="mail.overview"/>
            <result property="content" column="mail.content"
                    typeHandler="com.jeeplus.core.mapper.ConvertBlobTypeHandler"/>
        </association>
    </resultMap>
    <select id="get" resultMap="MailMap">
        SELECT
        <include refid="mailComposeColumns"/>
        FROM plugin_mail_compose a
        <include refid="mailComposeJoins"/>
        WHERE a.id = #{id}
    </select>

    <select id="findList" resultMap="MailMap">
        SELECT
        <include refid="mailComposeColumns"/>
        FROM plugin_mail_compose a
        <include refid="mailComposeJoins"/>
        <where>
            <if test="status != null  and status != ''">
                AND a.status = #{status}
            </if>

            <if test="mail != null and mail.title != null and mail.title != ''">
                AND ( mail.title like
                <if test="_databaseId == 'postgre'">'%'||#{mail.title}||'%'</if>
                <if test="_databaseId == 'oracle'">'%'||#{mail.title}||'%'</if>
                <if test="_databaseId == 'mysql'">CONCAT('%', #{mail.title}, '%')</if>
                <if test="_databaseId == 'mssql'">'%'+#{mail.title}+'%'</if>
                or
                mail.content like
                <if test="_databaseId == 'postgre'">'%'||#{mail.title}||'%'</if>
                <if test="_databaseId == 'oracle'">'%'||#{mail.title}||'%'</if>
                <if test="_databaseId == 'mysql'">CONCAT('%', #{mail.title}, '%')</if>
                <if test="_databaseId == 'mssql'">'%'+#{mail.title}+'%'</if>
                )
            </if>
        </where>
                ORDER BY a.sendtime desc
    </select>

    <select id="findAllList" resultMap="MailMap">
        SELECT
        <include refid="mailComposeColumns"/>
        FROM plugin_mail_compose a
        <include refid="mailComposeJoins"/>
        <where>

        </where>
        <choose>
            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
                ORDER BY ${page.orderBy}
            </when>
            <otherwise>
            </otherwise>
        </choose>
    </select>

    <select id="getCount" resultType="java.lang.Integer">
        SELECT count(*)
        FROM plugin_mail_compose a
        <include refid="mailComposeJoins"/>
        <where>
            <if test="sender != null and sender.id != null and sender.id != ''">
                AND a.senderid = #{sender.id}
            </if>

            <if test="status !=null and status != ''">
                and a.status = #{status}
            </if>
        </where>

    </select>

    <insert id="insert">
        INSERT INTO plugin_mail_compose(
        id,
        status,
        senderid,
        receiverids,
        sendtime,
        mailid
        ) VALUES (
        #{id},
        #{status},
        #{sender.id},
        #{receiverIds},
        #{sendtime},
        #{mail.id}
        )
    </insert>

    <update id="update">
        UPDATE plugin_mail_compose SET
        status = #{status},
        senderid = #{sender.id},
        receiverids = #{receiverIds},
        sendtime = #{sendtime},
        mailid = #{mail.id}
        WHERE id = #{id}
    </update>

    <update id="delete">
        DELETE FROM plugin_mail_compose
        <choose>
            <when test="id !=null and id != ''">
                WHERE id = #{id}
            </when>
            <otherwise>
                WHERE mailid = #{mail.id}
            </otherwise>
        </choose>
    </update>

    <!-- <update id="deleteByLogic">
        DELETE FROM plugin_mail_compose
        <choose>
            <when test="id !=null and id != ''">
                WHERE id = #{id}
            </when>
            <otherwise>
                WHERE mailid = #{mail.id}
            </otherwise>
        </choose>
    </update>-->

</mapper>
