<?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.timer.api.dao.spmk.SpmkApproveExecuteRecordMapper">

    <resultMap id="BaseResultMap" type="cn.timer.api.bean.spmk.SpmkApproveExecuteRecord" >
        <id column="id" property="id" />
        <result column="approve_summary_id" property="approveSummaryId" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="sts" property="sts" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
    </resultMap>

    <resultMap id="BaseResultMapDto" type="cn.timer.api.bean.spmk.SpmkApproveExecuteRecord" >
        <id column="id" property="id" />
        <result column="approve_summary_id" property="approveSummaryId" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="sts" property="sts" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <collection column="SpmkExecutor_id" property="spmkExecutors" ofType="cn.timer.api.bean.spmk.SpmkExecutor"
                    resultMap="cn.timer.api.dao.spmk.SpmkExecutorMapper.BaseResultMap" columnPrefix="SpmkExecutor_">
        </collection>
    </resultMap>

    <sql id="Base_Column_List">
                id,
                approve_summary_id,
                name,
                type,
                sts,
                create_time,
                update_time
    </sql>

    <sql id="Base_Column_List_a">
                a.id,
                a.approve_summary_id,
                a.name,
                a.type,
                a.sts,
                a.create_time,
                a.update_time
    </sql>

    <sql id="Base_Column_List_Alias_b">
            b.id SpmkExecutor_id,
            b.approve_execute_record_id SpmkExecutor_approve_execute_record_id,
            b.emp_num SpmkExecutor_emp_num,
            b.executor_name SpmkExecutor_executor_name,
            b.operator_header_url SpmkExecutor_operator_header_url,
            b.opinion SpmkExecutor_opinion,
            b.sts SpmkExecutor_sts,
            b.read_status SpmkExecutor_read_status,
            b.create_time SpmkExecutor_create_time,
            b.update_time SpmkExecutor_update_time,
            b.signature_img SpmkExecutor_signature_img
    </sql>

    <sql id="Base_Column_List_Alias">
                id SpmkApproveExecuteRecord_id,
                approve_summary_id SpmkApproveExecuteRecord_approve_summary_id,
                name SpmkApproveExecuteRecord_name,
                type SpmkApproveExecuteRecord_type,
                sts SpmkApproveExecuteRecord_sts,
                create_time SpmkApproveExecuteRecord_create_time,
                update_time SpmkApproveExecuteRecord_update_time
    </sql>


    <select id="selectListByAsId" resultMap="BaseResultMapDto">
        SELECT
        <include refid="Base_Column_List_a" />,
        <include refid="Base_Column_List_Alias_b" />
        FROM spmk_approve_execute_record a

        LEFT JOIN spmk_executor b ON a.id = b.approve_execute_record_id

        WHERE a.approve_summary_id = #{id}
        ORDER BY a.id, b.id
    </select>

    <!--

    <insert id="insert" useGeneratedKeys="true" keyColumn="id" parameterType="cn.timer.api.bean.spmk.SpmkApproveExecuteRecord">
        INSERT INTO spmk_approve_execute_record
        <trim prefix="(" suffix=")" suffixOverrides=",">
                        <if test ='null != approveSummaryId'>
                        approve_summary_id,
                        </if>
                        <if test ='null != name'>
                        name,
                        </if>
                        <if test ='null != type'>
                        type,
                        </if>
                        <if test ='null != sts'>
                        sts,
                        </if>
                        <if test ='null != createTime'>
                        create_time,
                        </if>
                        <if test ='null != updateTime'>
                        update_time
                        </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
                        <if test ='null != approveSummaryId'>
                        #{approveSummaryId},
                        </if>
                        <if test ='null != name'>
                        #{name},
                        </if>
                        <if test ='null != type'>
                        #{type},
                        </if>
                        <if test ='null != sts'>
                        #{sts},
                        </if>
                        <if test ='null != createTime'>
                        #{createTime}
                        </if>,
                        <if test ='null != updateTime'>
                        #{updateTime}
                        </if>
        </trim>
    </insert>

    <delete id="delete" >
        DELETE FROM spmk_approve_execute_record
        WHERE id = #{id}
    </delete>

    <update id="update" parameterType="cn.timer.api.bean.spmk.SpmkApproveExecuteRecord">
        UPDATE spmk_approve_execute_record
        <set>
                    <if test ='null != approveSummaryId'>approve_summary_id = #{approveSummaryId},</if>
                    <if test ='null != name'>name = #{name},</if>
                    <if test ='null != type'>type = #{type},</if>
                    <if test ='null != sts'>sts = #{sts},</if>
                    <if test ='null != createTime'>create_time = #{createTime},</if>
                    <if test ='null != updateTime'>update_time = #{updateTime}</if>
        </set>
        WHERE id = #{id}
    </update>


    <select id="load" resultMap="BaseResultMap">
        SELECT <include refid="Base_Column_List" />
        FROM spmk_approve_execute_record
        WHERE id = #{id}
    </select>

    <select id="pageList" resultMap="BaseResultMap">
        SELECT <include refid="Base_Column_List" />
        FROM spmk_approve_execute_record
        LIMIT #{offset}, #{pageSize}
    </select>

    <select id="pageListCount" resultType="java.lang.Integer">
        SELECT count(1)
        FROM spmk_approve_execute_record
    </select>

     -->
    <select id="selectExecuteRecordById" resultType="cn.timer.api.bean.spmk.SpmkApproveExecuteRecord">
        SELECT sr.id FROM spmk_approve_execute_record sr
            LEFT JOIN spmk_executor se ON se.approve_execute_record_id=sr.id
        WHERE sr.approve_summary_id = #{approveSummaryId} and se.emp_num = #{userId}
    </select>

    <select id="selectExecuteRecordReoId" resultType="cn.timer.api.bean.spmk.SpmkApproveExecuteRecord">
        SELECT sr.id FROM spmk_approve_execute_record sr
                              LEFT JOIN spmk_executor se ON se.approve_execute_record_id=sr.id
        WHERE sr.approve_summary_id = #{approveSummaryId} and se.uid = #{reoId}
    </select>

    <delete id="delExecuteRecord">
        DELETE sr,se FROM spmk_approve_execute_record sr
        LEFT JOIN spmk_executor se on sr.id=se.approve_execute_record_id
        WHERE sr.approve_summary_id = #{approveSummaryId} and sr.id <![CDATA[ > ]]> #{recordId}
    </delete>

    <delete id="delExecuteRecordByRecordIds">
        DELETE sr,se FROM spmk_approve_execute_record sr
        LEFT JOIN spmk_executor se on sr.id=se.approve_execute_record_id
        WHERE sr.id =#{id} and se.emp_num =#{uid}
    </delete>

</mapper>