<?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.jxgl.JxglAppraisalMapper">

    <resultMap id="BaseResultMap" type="cn.timer.api.bean.jxgl.JxglAppraisal" >
                <id column="id" property="id" />
                <result column="performance_appraisal_id" property="performanceAppraisalId" />
                <result column="emp_num" property="empNum" />
                <result column="name" property="name" />
                <result column="appraisal_explain" property="appraisalExplain" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="sts" property="sts" />
                <result column="is_edit" property="isEdit" />
    </resultMap>
    
    <resultMap id="BaseResultMap_My" type="cn.timer.api.bean.jxgl.JxglAppraisal" >
                <id column="id" property="id" />
                <result column="performance_appraisal_id" property="performanceAppraisalId" />
                <result column="emp_num" property="empNum" />
                <result column="name" property="name" />
                <result column="appraisal_explain" property="appraisalExplain" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="sts" property="sts" />
                <result column="is_edit" property="isEdit" />
                <result column="user_name" property="userName" />
                <result column="phone" property="phone" />
                <result column="bm_name" property="bmName" />
                <result column="executor_name" property="executorName" />
                <result column="executor_id" property="executorId" />
                <result column="note_sts" property="noteSts" />
    </resultMap>
    
    <resultMap id="BaseResultMap_All" type="cn.timer.api.bean.jxgl.JxglAppraisal" >
                <id column="id" property="id" />
                <result column="performance_appraisal_id" property="performanceAppraisalId" />
                <result column="emp_num" property="empNum" />
                <result column="name" property="name" />
                <result column="appraisal_explain" property="appraisalExplain" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="sts" property="sts" />
                <result column="user_name" property="userName" />
                <result column="phone" property="phone" />
                <result column="bm_name" property="bmName" />
                <result column="executor_name" property="executorName" />
                <result column="total" property="total" />
                <result column="level" property="level" />
                <result column="confirmor" property="confirmor" />
    </resultMap>
    
    <resultMap id="BaseResultMap_Emp" type="cn.timer.api.bean.jxgl.JxglAppraisal" >
                <id column="id" property="id" />
                <result column="performance_appraisal_id" property="performanceAppraisalId" />
                <result column="emp_num" property="empNum" />
                <result column="name" property="name" />
                <result column="appraisal_explain" property="appraisalExplain" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="is_edit" property="isEdit" />
                <result column="sts" property="sts" />
                <result column="user_name" property="userName" />
                <result column="phone" property="phone" />
                <result column="bm_name" property="bmName" />
                
                <result column="rz_time" property="rzTime" />
                <result column="archivedPNum" property="archivedPNum" />
                <result column="underwayPNum" property="underwayPNum" />
                <result column="recentlyProject" property="recentlyProject" />
                <result column="recentlyScore" property="recentlyScore" />
                <result column="recentlyLevel" property="recentlyLevel" />
    </resultMap>
    
    <resultMap id="BaseResultMap_e" type="cn.timer.api.bean.jxgl.JxglAppraisalIndicators" >
                <id column="id" property="id" />
                <result column="appraisal_id" property="appraisalId" />
                <result column="title" property="title" />
                <result column="content" property="content" />
                <result column="weight" property="weight" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="type" property="type" />
                <result column="is_edit_weight" property="isEditWeight" />
                <collection column="JxglAppraisalIndicatorsAssessment_id" property="appraisalIndicatorsAssessments" ofType="cn.timer.api.bean.jxgl.JxglAppraisalIndicatorsAssessment" 
	                resultMap="cn.timer.api.dao.jxgl.JxglAppraisalIndicatorsAssessmentMapper.BaseResultMap" columnPrefix="JxglAppraisalIndicatorsAssessment_">
			    </collection>
                <collection column="JxglAppraisalItem_id" property="appraisalItems" ofType="cn.timer.api.bean.jxgl.JxglAppraisalItem" 
	                resultMap="cn.timer.api.dao.jxgl.JxglAppraisalItemMapper.BaseResultMap" columnPrefix="JxglAppraisalItem_">
			    </collection>
    </resultMap>
    
	<resultMap id="BaseResultMap_Detail" type="cn.timer.api.dto.jxgl.AppraisalDetail" >
                <id column="id" property="id" />
                <result column="performance_appraisal_id" property="performanceAppraisalId" />
                <result column="emp_num" property="empNum" />
                <result column="name" property="name" />
                <result column="appraisal_explain" property="appraisalExplain" />
                <result column="total" property="total" />
                <result column="level" property="level" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="sts" property="sts" />
                <result column="is_edit" property="isEdit" />
                <result column="appraisal_name" property="appraisalName" />
                <result column="head_url" property="headUrl" />
                <collection column="JxglProcessNode_id" property="processNodes" ofType="cn.timer.api.bean.jxgl.JxglProcessNode" 
	                resultMap="cn.timer.api.dao.jxgl.JxglProcessNodeMapper.BaseResultMap" columnPrefix="JxglProcessNode_">
			    </collection>
                <collection column="JxglAppraisalAssessment_id" property="appraisalAssessments" ofType="cn.timer.api.bean.jxgl.JxglAppraisalAssessment" 
	                resultMap="cn.timer.api.dao.jxgl.JxglAppraisalAssessmentMapper.BaseResultMap" columnPrefix="JxglAppraisalAssessment_">
			    </collection>
                <collection column="JxglAppraisalLog_id" property="appraisalLogs" ofType="cn.timer.api.bean.jxgl.JxglAppraisalLog" 
	                resultMap="cn.timer.api.dao.jxgl.JxglAppraisalLogMapper.BaseResultMap" columnPrefix="JxglAppraisalLog_">
			    </collection>
                <collection column="e_id" property="appraisalIndicators" ofType="cn.timer.api.bean.jxgl.JxglAppraisalIndicators" 
	                resultMap="cn.timer.api.dao.jxgl.JxglAppraisalMapper.BaseResultMap_e" columnPrefix="e_">
			    </collection>
    </resultMap>
    
    

    <sql id="Base_Column_List">
                id,
                performance_appraisal_id,
                emp_num,
                name,
                appraisal_explain,
                create_time,
                update_time,
                sts,
                is_edit
    </sql>
    
    <sql id="Base_Column_List_a">
                a.id,
                a.performance_appraisal_id,
                a.emp_num,
                a.name,
                a.appraisal_explain,
                a.total,
                a.level,
                a.create_time,
                a.update_time,
                a.sts,
                a.is_edit
    </sql>
    
    <sql id="Base_Column_List_Alias_b">
                b.id JxglProcessNode_id,
                b.appraisal_id JxglProcessNode_appraisal_id,
                b.executor_id JxglProcessNode_executor_id,
                <!-- b.executor_name JxglProcessNode_executor_name, -->
                b.execute_type JxglProcessNode_execute_type,
                b.process_type JxglProcessNode_process_type,
                b.name JxglProcessNode_name,
                b.leader_tier JxglProcessNode_leader_tier,
                b.weight JxglProcessNode_weight,
                b.sts JxglProcessNode_sts,
                b.update_time JxglProcessNode_update_time
    </sql>
    
    <sql id="Base_Column_List_Alias_c">
                c.id JxglAppraisalAssessment_id,
                c.appraisal_id JxglAppraisalAssessment_appraisal_id,
                c.assessor_id JxglAppraisalAssessment_assessor_id,
                c.assessor_name JxglAppraisalAssessment_assessor_name,
                c.comprehensive_score JxglAppraisalAssessment_comprehensive_score,
                c.remarks JxglAppraisalAssessment_remarks,
                c.type JxglAppraisalAssessment_type,
                c.create_time JxglAppraisalAssessment_create_time,
                c.level JxglAppraisalAssessment_level
    </sql>
    
    <sql id="Base_Column_List_Alias_d">
                d.id JxglAppraisalLog_id,
                d.appraisal_id JxglAppraisalLog_appraisal_id,
                d.executor_id JxglAppraisalLog_executor_id,
                d.executor_name JxglAppraisalLog_executor_name,
                d.title JxglAppraisalLog_title,
                d.remarks JxglAppraisalLog_remarks,
                d.create_time JxglAppraisalLog_create_time,
                d.type JxglAppraisalLog_type
    </sql>
    
    <sql id="Base_Column_List_Alias_e">
                e.id e_id,
                e.appraisal_id e_id,
                e.title e_title,
                e.content e_content,
                e.weight e_weight,
                e.create_time e_create_time,
                e.update_time e_update_time,
                e.type e_type,
                e.is_edit_weight e_is_edit_weight
    </sql>
    
     <sql id="Base_Column_List_Alias_f">
                f.id e_JxglAppraisalIndicatorsAssessment_id,
                f.appraisal_indicators_id e_JxglAppraisalIndicatorsAssessment_appraisal_indicators_id,
                f.assessor_id e_JxglAppraisalIndicatorsAssessment_assessor_id,
                f.assessor_name e_JxglAppraisalIndicatorsAssessment_assessor_name,
                f.score e_JxglAppraisalIndicatorsAssessment_score,
                f.remarks e_JxglAppraisalIndicatorsAssessment_remarks,
                f.type e_JxglAppraisalIndicatorsAssessment_type,
                f.create_time e_JxglAppraisalIndicatorsAssessment_create_time
    </sql>
    
    <sql id="Base_Column_List_Alias_g">
                g.id e_JxglAppraisalItem_id,
                g.appraisal_indicators_id e_JxglAppraisalItem_appraisal_indicators_id,
                g.title e_JxglAppraisalItem_title,
                g.content e_JxglAppraisalItem_content,
                g.ranks e_JxglAppraisalItem_ranks
    </sql>
    
    <sql id="Base_Column_List_Alias">
                id JxglAppraisal_id,
                performance_appraisal_id JxglAppraisal_performance_appraisal_id,
                emp_num JxglAppraisal_emp_num,
                name JxglAppraisal_name,
                appraisal_explain JxglAppraisal_appraisal_explain,
                total JxglAppraisal_total,
                level JxglAppraisal_level,
                create_time JxglAppraisal_create_time,
                update_time JxglAppraisal_update_time,
                sts JxglAppraisal_sts,
                is_edit JxglAppraisal_is_edit
    </sql>
    
     <select id="selectListByappraisalid" resultMap="BaseResultMap" >
	    SELECT id,performance_appraisal_id,emp_num,name,appraisal_explain,create_time,update_time,is_edit,sts,total,level 
		FROM jxgl_appraisal 
		WHERE performance_appraisal_id = #{appraisalid} 
		AND (sts = 2 or sts = 3) 
	</select>
    
    <select id="selectListByQuery" resultMap="BaseResultMap_All" >
        SELECT 
        	<include refid="Base_Column_List_a" />,
        	b.name user_name, b.phone,
        	(SELECT name FROM zzgl_bmgw_m WHERE id = (SELECT up_id FROM zzgl_bmgw_m WHERE id = b.bmgw_id limit 1) limit 1) as bm_name,
        	(SELECT name FROM yggl_main_emp WHERE emp_num = c.executor_id AND org_code = #{param.orgCode}) as executor_name
        FROM jxgl_appraisal a
        LEFT JOIN yggl_main_emp b ON a.emp_num = b.emp_num AND b.org_code = #{param.orgCode}
        LEFT JOIN jxgl_process_node c ON a.id = c.appraisal_id AND c.process_type = a.sts
        
        WHERE a.performance_appraisal_id = #{param.id} 
        	<if test="param.empNums != null and param.empNums.size() > 0">
        		<choose>
					<when test="param.empNums.size() > 1">
						AND b.emp_num IN
						(
						<foreach item="it" index="index" collection="param.empNums" separator="," close="" >
				        	#{it}
						</foreach>
						) 
					</when>
					<otherwise>
						AND b.emp_num = #{param.empNums[0]}
					</otherwise>
				</choose>
        	</if>
        	<if test="param.query != null and param.query != ''">
        		AND (
        			b.name like CONCAT('%',#{param.query},'%') or
        			b.phone like CONCAT('%',#{param.query},'%')
        		)
        	</if>
        	<if test="param.sts != null">
        		AND a.sts = #{param.sts}
			</if>
        ORDER BY a.id DESC
        	
    </select>
    
    <select id="CurrentdepartmentID" resultType="java.lang.String">
        select 
			(SELECT id FROM zzgl_bmgw_m WHERE id = ( SELECT up_id FROM zzgl_bmgw_m WHERE id = b.bmgw_id LIMIT 1 ) LIMIT 1 ) AS bm_id
		from yggl_main_emp b 
		where b.org_code = #{orgcode}
		and b.emp_num = #{empnum}
    </select>
    
    <select id="selectMyEmpByQuery" resultMap="BaseResultMap_All" >
        SELECT 
        	<include refid="Base_Column_List_a" />,
        	b.name user_name, b.phone,
        	(SELECT name FROM zzgl_bmgw_m WHERE id = (SELECT up_id FROM zzgl_bmgw_m WHERE id = b.bmgw_id limit 1) limit 1) as bm_name,
        	(SELECT name FROM yggl_main_emp WHERE emp_num = c.executor_id AND org_code = #{param.orgCode}) as executor_name
        FROM jxgl_appraisal a
        LEFT JOIN yggl_main_emp b ON a.emp_num = b.emp_num 
        LEFT JOIN jxgl_process_node c ON a.id = c.appraisal_id AND c.sts = 1
        
        <where>
        	AND b.org_code = #{param.orgCode}
        	<if test="param.empNums != null and param.empNums.size() > 0">
        		<choose>
					<when test="param.empNums.size() > 1">
						AND b.emp_num IN
						(
						<foreach item="it" index="index" collection="param.empNums" separator="," close="" >
				        	#{it}
						</foreach>
						) 
					</when>
					<otherwise>
						AND b.emp_num = #{param.empNums[0]}
					</otherwise>
				</choose>
        	</if>
        
        	<if test="param.query != null and param.query != ''">
        		AND (
        			b.name like CONCAT('%',#{param.query},'%') or
        			b.phone like CONCAT('%',#{param.query},'%')
        		)
        	</if>
        	and ( SELECT id FROM zzgl_bmgw_m WHERE id = ( SELECT up_id FROM zzgl_bmgw_m WHERE id = b.bmgw_id LIMIT 1 ) LIMIT 1 ) = #{param.deptid}
        </where>
        ORDER BY a.id DESC
        	
    </select>
    
    <select id="selectListEmpByQuery" resultMap="BaseResultMap_Emp" >
    	SELECT
    		a.emp_num,
	        b.name user_name, b.phone,b.rz_time,
	        	(SELECT name FROM zzgl_bmgw_m WHERE id = (SELECT up_id FROM zzgl_bmgw_m WHERE id = b.bmgw_id limit 1) limit 1) as bm_name,
	        	SUM((CASE WHEN c.sts = 3 THEN 1 ELSE 0 END)) AS archivedPNum,
	        	SUM((CASE WHEN c.sts in (0,1,2) THEN 1 ELSE 0 END)) AS underwayPNum,
	        	(SELECT name FROM jxgl_performance_appraisal WHERE id = a.performance_appraisal_id ORDER BY create_time DESC LIMIT 1 ) recentlyProject,
				(SELECT comprehensive_score FROM jxgl_appraisal_assessment WHERE type = 1 AND appraisal_id in (SELECT id FROM jxgl_appraisal WHERE emp_num = a.emp_num) ORDER BY create_time DESC LIMIT 1 ) recentlyScore,
				(SELECT level FROM jxgl_appraisal_assessment WHERE type = 1 AND appraisal_id in (SELECT id FROM jxgl_appraisal WHERE emp_num = a.emp_num) ORDER BY create_time DESC LIMIT 1 ) recentlyLevel
	        FROM jxgl_appraisal a 
	        LEFT JOIN yggl_main_emp b ON a.emp_num = b.emp_num AND b.org_code = #{param.orgCode}
			LEFT JOIN jxgl_performance_appraisal c ON a.performance_appraisal_id = c.id
        
        <where>
        	 c.org_code = #{param.orgCode} 
        	<if test="param.query != null and param.query != ''">
        		and (
        			b.name like CONCAT('%',#{param.query},'%') or
        			b.phone like CONCAT('%',#{param.query},'%')
        		)
        	</if>
        	<if test="param.empNums != null and param.empNums.size() > 0">
        		<choose>
					<when test="param.empNums.size() > 1">
						AND b.emp_num IN
						(
						<foreach item="it" index="index" collection="param.empNums" separator="," close="" >
				        	#{it}
						</foreach>
						) 
					</when>
					<otherwise>
						AND asso_id = #{param.empNums[0]}
					</otherwise>
				</choose>
        	</if>
		</where>
		GROUP BY a.emp_num
        ORDER BY a.id DESC
    </select>

	<select id="selectDetailById" resultMap="BaseResultMap_Detail">
        SELECT 
        	<include refid="Base_Column_List_a" />,
        	j.head_url head_url,
        	<include refid="Base_Column_List_Alias_b" />,
        	i.name JxglProcessNode_executor_name,
        	<include refid="Base_Column_List_Alias_c" />,
        	<include refid="Base_Column_List_Alias_d" />,
        	<include refid="Base_Column_List_Alias_e" />,
        	<include refid="Base_Column_List_Alias_f" />,
        	<include refid="Base_Column_List_Alias_g" />,
        	h.name appraisal_name
        FROM 
        	jxgl_appraisal a
        LEFT JOIN jxgl_process_node b ON a.id = b.appraisal_id
        LEFT JOIN jxgl_appraisal_assessment c ON a.id = c.appraisal_id
        LEFT JOIN jxgl_appraisal_log d ON a.id = d.appraisal_id
        LEFT JOIN jxgl_appraisal_indicators e ON a.id = e.appraisal_id
        LEFT JOIN jxgl_appraisal_indicators_assessment f ON e.id = f.appraisal_indicators_id
        LEFT JOIN jxgl_appraisal_item g ON e.id = g.appraisal_indicators_id
        LEFT JOIN jxgl_performance_appraisal h ON a.performance_appraisal_id = h.id
        LEFT JOIN yggl_main_emp i ON b.executor_id = i.emp_num AND i.org_code = #{orgCode}
        LEFT JOIN yggl_main_emp j ON a.emp_num = j.emp_num AND j.org_code = #{orgCode}
        WHERE a.id = #{id}
        ORDER BY c.id , d.id , b.process_type
    </select>

	<!-- 

    <insert id="insert" useGeneratedKeys="true" keyColumn="id" parameterType="cn.timer.api.bean.jxgl.JxglAppraisal">
        INSERT INTO jxgl_appraisal
        <trim prefix="(" suffix=")" suffixOverrides=",">
                        <if test ='null != performanceAppraisalId'>
                        performance_appraisal_id,
                        </if>
                        <if test ='null != empNum'>
                        emp_num,
                        </if>
                        <if test ='null != name'>
                        name,
                        </if>
                        <if test ='null != appraisalExplain'>
                        appraisal_explain,
                        </if>
                        <if test ='null != total'>
                        total,
                        </if>
                        <if test ='null != level'>
                        level,
                        </if>
                        <if test ='null != createTime'>
                        create_time,
                        </if>
                        <if test ='null != updateTime'>
                        update_time,
                        </if>
                        <if test ='null != sts'>
                        sts
                        </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
                        <if test ='null != performanceAppraisalId'>
                        #{performanceAppraisalId},
                        </if>
                        <if test ='null != empNum'>
                        #{empNum},
                        </if>
                        <if test ='null != name'>
                        #{name},
                        </if>
                        <if test ='null != appraisalExplain'>
                        #{appraisalExplain},
                        </if>
                        <if test ='null != total'>
                        #{total},
                        </if>
                        <if test ='null != level'>
                        #{level},
                        </if>
                        <if test ='null != createTime'>
                        #{createTime},
                        </if>
                        <if test ='null != updateTime'>
                        #{updateTime},
                        </if>
                        <if test ='null != sts'>
                        #{sts}
                        </if>
        </trim>
    </insert>

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

    <update id="update" parameterType="cn.timer.api.bean.jxgl.JxglAppraisal">
        UPDATE jxgl_appraisal
        <set>
                    <if test ='null != performanceAppraisalId'>performance_appraisal_id = #{performanceAppraisalId},</if>
                    <if test ='null != empNum'>emp_num = #{empNum},</if>
                    <if test ='null != name'>name = #{name},</if>
                    <if test ='null != appraisalExplain'>appraisal_explain = #{appraisalExplain},</if>
                    <if test ='null != total'>total = #{total},</if>
                    <if test ='null != level'>level = #{level},</if>
                    <if test ='null != createTime'>create_time = #{createTime},</if>
                    <if test ='null != updateTime'>update_time = #{updateTime},</if>
                    <if test ='null != sts'>sts = #{sts}</if>
        </set>
        WHERE id = #{id}
    </update>


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

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

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

	 -->

</mapper>