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

    <resultMap id="BaseResultMap" type="cn.timer.api.bean.spmk.SpmkApprovalG" >
                <id column="id" property="id" />
                <result column="org_code" property="orgCode" />
                <result column="name" property="name" />
                <result column="ranks" property="ranks" />
                <result column="is_editable" property="isEditable" />
    </resultMap>
    
    <resultMap id="BaseResultMapDto" type="cn.timer.api.dto.spmk.SpmkApprovalGDto" >
                <id column="id" property="id" />
                <result column="org_code" property="orgCode" />
                <result column="name" property="name" />
                <result column="ranks" property="ranks" />
                <result column="is_editable" property="isEditable" />
                <collection column="SpmkCustomApproval_id" property="spmkCustomApprovals" ofType="cn.timer.api.bean.spmk.SpmkCustomApproval" 
                resultMap="cn.timer.api.dao.spmk.SpmkCustomApprovalMapper.BaseResultMap" columnPrefix="SpmkCustomApproval_">
		        </collection>
    </resultMap>
    
    

    <sql id="Base_Column_List">
                id,
                org_code,
                name,
                ranks,
                is_editable
    </sql>
    
    <sql id="Base_Column_List_Alias">
                id SpmkApprovalG_id,
                org_code SpmkApprovalG_org_code,
                name SpmkApprovalG_name,
                ranks SpmkApprovalG_ranks,
                is_editable SpmkApprovalG_is_editable
    </sql>
    
    <sql id="Base_Column_List_Alias_a">
                a.id,
                a.org_code,
                a.name,
                a.ranks,
                a.is_editable
    </sql>
    
        <sql id="Base_Column_List_Alias_ca">
                b.id SpmkCustomApproval_id,
                b.org_code SpmkCustomApproval_org_code,
                b.approval_g_id SpmkCustomApproval_approval_g_id,
                b.icon_url SpmkCustomApproval_icon_url,
                b.name SpmkCustomApproval_name,
                b.description SpmkCustomApproval_description,
                b.is_open SpmkCustomApproval_is_open,
                b.ranks SpmkCustomApproval_ranks,
                b.is_opinion SpmkCustomApproval_is_opinion,
                b.update_time SpmkCustomApproval_update_time,
                b.create_time SpmkCustomApproval_create_time,
                b.asso_type SpmkCustomApproval_asso_type,
                b.is_allvisible SpmkCustomApproval_is_allvisible<!-- ,
                b.froms SpmkCustomApproval_froms,
                b.router SpmkCustomApproval_router -->
    </sql>      
    
    <select id="selectListAgInCaByAdmin" resultMap="BaseResultMapDto">
        SELECT 
        	<include refid="Base_Column_List_Alias_a" />,
        	<include refid="Base_Column_List_Alias_ca" />
        FROM spmk_approval_g a
         
        LEFT JOIN spmk_custom_approval b 
        ON a.id = b.approval_g_id 
        WHERE a.org_code = #{org_code}
        ORDER BY a.ranks, b.ranks,b.id DESC
    </select>

    <select id="selectListAgInCaByAdmin1" resultMap="BaseResultMapDto">
        SELECT
        <include refid="Base_Column_List_Alias_a" />,
        <include refid="Base_Column_List_Alias_ca" />
        FROM spmk_approval_g a

        LEFT JOIN spmk_custom_approval b
        ON a.id = b.approval_g_id
        WHERE a.org_code = #{org_code}
        <if test="eaaname != null and eaaname != '' ">
            and b.name like CONCAT('%',#{eaaname},'%')
        </if>
        ORDER BY a.ranks, b.ranks,b.id DESC
    </select>

    <select id="selectListAgInCa" resultMap="BaseResultMapDto">
        SELECT 
        	<include refid="Base_Column_List_Alias_a" />,
        	<include refid="Base_Column_List_Alias_ca" />
        FROM spmk_approval_g a
         
        LEFT JOIN spmk_custom_approval b 
        ON a.id = b.approval_g_id AND ( b.id IN (
        	SELECT custom_approval_id FROM spmk_initiator_config WHERE asso_id = #{emp_num} AND type = 1 GROUP BY custom_approval_id
        	<if test="deptIds != null and deptIds.size() > 0">
				UNION 
				SELECT custom_approval_id FROM spmk_initiator_config WHERE 
				<choose>
					<when test="deptIds.size() > 1">
						asso_id IN 
						(
						<foreach item="it" index="index" collection="deptIds" separator="," close="" >
				        	#{it}
						</foreach>
						) 
					</when>
					<otherwise>
						asso_id = #{deptIds[0]}
					</otherwise>
				</choose>
				AND type IN (2,3) GROUP BY custom_approval_id
        	</if>
        ) OR b.is_allvisible = 1)
        AND b.is_allvisible <![CDATA[ <> ]]> 2
        WHERE a.org_code = #{org_code}  
       	
        ORDER BY a.ranks, b.ranks,b.id DESC
    </select>
    
    <update id="updateListRandsById" parameterType="list">
        <foreach item="item" index="index" collection="list" open="" separator=";" close="">
	        		UPDATE spmk_approval_g
			        <set>
			                    <if test ='null != item.ranks'>ranks = #{item.ranks},</if>
			        </set>
			        WHERE id = #{item.id}
		</foreach>
    </update>

	<!-- 

    <insert id="insert" useGeneratedKeys="true" keyColumn="id" parameterType="cn.timer.api.bean.spmk.SpmkApprovalG">
        INSERT INTO spmk_approval_g
        <trim prefix="(" suffix=")" suffixOverrides=",">
                        <if test ='null != orgCode'>
                        org_code,
                        </if>
                        <if test ='null != name'>
                        name,
                        </if>
                        <if test ='null != ranks'>
                        ranks,
                        </if>
                        <if test ='null != isEditable'>
                        is_editable
                        </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
                        <if test ='null != orgCode'>
                        #{orgCode},
                        </if>
                        <if test ='null != name'>
                        #{name},
                        </if>
                        <if test ='null != ranks'>
                        #{ranks},
                        </if>
                        <if test ='null != isEditable'>
                        #{isEditable}
                        </if>
        </trim>
    </insert>

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

    <update id="update" parameterType="cn.timer.api.bean.spmk.SpmkApprovalG">
        UPDATE spmk_approval_g
        <set>
                    <if test ='null != orgCode'>org_code = #{orgCode},</if>
                    <if test ='null != name'>name = #{name},</if>
                    <if test ='null != ranks'>ranks = #{ranks},</if>
                    <if test ='null != isEditable'>is_editable = #{isEditable}</if>
        </set>
        WHERE id = #{id}
    </update>


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

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

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

	 -->

</mapper>