<?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.cku.oa.handler.dao.HandlerRegisterDao">
    
	<sql id="handlerRegisterColumns">
		a.id AS "id",
		a.register_code AS "registerCode",
		a.member_code AS "memberCode",
		a.name AS "name",
		a.gender AS "gender",
		a.mobile AS "mobile",
		a.show_level AS "showLevel",
		a.school_name_cn AS "schoolNameCn",
		a.fee AS "fee",
		a.leave_cancel AS "leaveCancel",
		a.show_leave AS "showLeave",
		a.order_price AS "orderPrice",
		a.payment_member_code AS "paymentMemberCode",
		a.reviewer AS "reviewer",
		a.grade AS "grade",
		a.referee AS "referee",
		a.payment_item_id AS "paymentItemId",
		a.desktop_reviewer_dog AS "desktopReviewerDog",
		a.floor_reviewer_dog AS "floorReviewerDog",
		a.any_breed AS "anyBreed",
		a.groomer_breed AS "groomerBreed",
		a.review_state AS "reviewState",
		a.review_time AS "reviewTime",
		a.payment_state AS "paymentState",
		a.payment_time AS "paymentTime",
		a.proccess_state AS "proccessState",
		a.proccess_time AS "proccessTime",
		a.running_number AS "runningNumber",
		a.review_remarks AS "reviewRemarks",
		a.create_by AS "createBy.id",
		a.create_date AS "createDate",
		a.update_by AS "updateBy.id",
		a.update_date AS "updateDate",
		a.remarks AS "remarks",
		a.del_flag AS "delFlag",
		a.avatar AS "avatar",
		a.grade_time AS "gradeTime",
		a.show_code AS "showCode",
		a.test_no AS "testNo",
		a.show_dog AS "showDog",
		a.take_certificate_date AS "takeCertificateDate",
		b.show_name AS "handlerShow.showName",
		b.show_type AS "handlerShow.showType",
		b.start_time AS "handlerShow.startTime",
		b.end_time AS "handlerShow.endTime",
		m.avatar AS "member.avatar" ,
		a.show_group AS "showGroup",
		b.show_code AS "handlerShow.showCode",
		b.id AS "handlerShow.id",
		b.register_end_time AS "handlerShow.registerEndTime"
	</sql>
	
	<sql id="handlerRegisterJoins">
	LEFT JOIN handler_show b ON a.show_code=b.show_code  and b.del_flag='0'
	LEFT JOIN sys_member m ON m.member_code=a.member_code
	</sql>
    
	<select id="get" resultType="HandlerRegister">
		SELECT 
			<include refid="handlerRegisterColumns"/>
		FROM handler_register a
		<include refid="handlerRegisterJoins"/>
		WHERE a.id = #{id}
	</select>
	
	<select id="findList" resultType="HandlerRegister">
		SELECT 
			<include refid="handlerRegisterColumns"/>
		FROM handler_register a
		<include refid="handlerRegisterJoins"/>
		<where>
			a.del_flag = #{DEL_FLAG_NORMAL}
			<if test="registerCode != null and registerCode != ''">
				AND a.register_code = #{registerCode}
			</if>
			<if test="memberCode != null and memberCode != ''">
				AND (a.member_code = #{memberCode} or a.name LIKE CONCAT('%',#{memberCode},'%') )
			</if>
			<if test="showCode != null and showCode != ''">
				AND a.show_code LIKE CONCAT('%',#{showCode},'%')
			</if>
			<if test="showLevel != null and showLevel != ''">
				AND a.show_level = #{showLevel}
			</if>
			<if test="schoolNameCn != null and schoolNameCn != ''">
				AND a.school_name_cn LIKE CONCAT('%',#{schoolNameCn},'%')
			</if>
			<if test="runningNumber != null and runningNumber != ''">
				AND a.running_number = #{runningNumber}
			</if>
			<if test="paymentState != null and paymentState !='' ">
				AND a.payment_state =#{paymentState}
			</if>
			<if test="reviewState != null and reviewState !='' ">
				AND a.review_state =#{reviewState}
			</if>
			<if test="showLeave != null and showLeave !='' ">
				AND a.show_leave =#{showLeave}
			</if>
			<if test="reviewStateExclud!=null and reviewStateExclud !=''">
				AND a.review_state != #{reviewStateExclud}
			</if>
			<if test="id != null and id != ''">
				AND a.id in (${id})
			</if>
			<choose>
				<when test="handlerShowType == 0">
					AND b.show_type NOT IN ('12','13')
				</when>
				<when test="handlerShowType == 1">
					AND b.show_type IN ('12','13')
				</when>
			</choose>
		</where>
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
				ORDER BY a.update_date DESC
			</otherwise>
		</choose>
	</select>

	<select id="findListApp" resultType="HandlerRegister">
		SELECT
		<include refid="handlerRegisterColumns"/>
		FROM handler_register a
		<include refid="handlerRegisterJoins"/>
		<where>
			a.del_flag = #{DEL_FLAG_NORMAL}
			AND (b.show_type ='5'   or b.show_type ='6' )
			<if test="showCode != null and showCode != ''">
				AND a.show_code LIKE CONCAT('%',#{showCode},'%')
			</if>
			<if test="memberCode != null and memberCode != ''">
				AND (a.member_code = #{memberCode} or a.name LIKE CONCAT('%',#{memberCode},'%') )
			</if>
		</where>
		ORDER BY a.create_date DESC
	</select>



	<!-- 成绩列表 -->
	<select id="findGradeList" resultType="HandlerRegister">
		SELECT 
			<include refid="handlerRegisterColumns"/>
		FROM handler_register a
		<include refid="handlerRegisterJoins"/>
		<where>
			AND b.end_time <![CDATA[<]]> now()
			AND (b.show_type='0' or b.show_type='1' or b.show_type='9' or b.show_type='12' or b.show_type='13')
			AND a.payment_state='2'
			AND a.show_leave='1'
			AND a.leave_cancel='0'
			<if test="registerCode != null and registerCode != ''">
				AND a.register_code = #{registerCode}
			</if>
			<if test="showCode != null and showCode != ''">
				AND a.show_code = #{showCode}
			</if>
			<if test="memberCode != null and memberCode != ''">
				AND (a.member_code = #{memberCode} or a.name LIKE CONCAT('%',#{memberCode},'%') )
			</if>
			<if test="showLevel != null and showLevel != ''">
				AND a.show_level = #{showLevel}
			</if>
			<if test="grade != null and grade != ''">
				AND a.grade = #{grade}
			</if>
		</where>
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
				ORDER BY a.update_date DESC
			</otherwise>
		</choose>
	</select>
	
	<select id="findAllList" resultType="HandlerRegister">
		SELECT 
			<include refid="handlerRegisterColumns"/>
		FROM handler_register a
		<include refid="handlerRegisterJoins"/>
		<where>
			a.del_flag = #{DEL_FLAG_NORMAL}
		</where>		
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
				ORDER BY a.update_date DESC
			</otherwise>
		</choose>
	</select>
	
	<insert id="mobilesave">
		INSERT INTO handler_register(
			id,                                                           
			register_code,
			member_code,
			name,
			gender,
			mobile,
			show_level,
			school_name_cn,
			fee,
			leave_cancel,
			show_leave,
			order_price,
			payment_member_code,
			reviewer,
			grade,
			referee,
			payment_item_id,
			desktop_reviewer_dog,
			floor_reviewer_dog,
			any_breed,
			groomer_breed,
			review_state,
			payment_state,
			proccess_state,
			create_by,
			create_date,
			update_by,
			update_date,
			remarks,
			del_flag,
			show_dog,
			avatar,
			show_code,
			show_group
		) VALUES (
			#{id},
			#{registerCode},
			#{memberCode},
			#{name},
			#{gender},
			#{mobile},
			#{showLevel},
			#{schoolNameCn},
			#{fee},
			#{leaveCancel},
			#{showLeave},
			#{orderPrice},
			#{paymentMemberCode},
			#{reviewer},
			#{grade},
			#{referee},
			#{paymentItemId},
			#{desktopReviewerDog},
			#{floorReviewerDog},
			#{anyBreed},
			#{groomerBreed},
			#{reviewState},
			#{paymentState},
			#{proccessState},
			#{createBy.id},
			#{createDate},
			#{updateBy.id},
			#{updateDate},
			#{remarks},
			#{delFlag},
			#{showDog},
			#{avatar},
			#{showCode},
			#{showGroup}
		)
	</insert>
	
	<insert id="insert">
		INSERT INTO handler_register(
			id,                                                           
			register_code,
			member_code,
			name,
			gender,
			mobile,
			show_level,
			school_name_cn,
			fee,
			leave_cancel,
			show_leave,
			order_price,
			payment_member_code,
			reviewer,
			grade,
			referee,
			payment_item_id,
			desktop_reviewer_dog,
			floor_reviewer_dog,
			any_breed,
			groomer_breed,
			review_state,
			payment_state,
			proccess_state,
			create_by,
			create_date,
			update_by,
			update_date,
			remarks,
			del_flag,
			show_dog,
			avatar,
			show_code,
			show_group
		) VALUES (
			#{id},
			#{registerCode},
			#{memberCode},
			#{name},
			#{gender},
			#{mobile},
			#{showLevel},
			#{schoolNameCn},
			#{fee},
			#{leaveCancel},
			#{showLeave},
			#{orderPrice},
			#{paymentMemberCode},
			#{reviewer},
			#{grade},
			#{referee},
			#{paymentItemId},
			#{desktopReviewerDog},
			#{floorReviewerDog},
			#{anyBreed},
			#{groomerBreed},
			#{reviewState},
			#{paymentState},
			#{proccessState},
			#{createBy.id},
			#{createDate},
			#{updateBy.id},
			#{updateDate},
			#{remarks},
			#{delFlag},
			#{showDog},
			#{avatar},
			#{showCode},
			#{showGroup}
		)
	</insert>
	
	<update id="update">
		UPDATE handler_register SET 	
			register_code = #{registerCode},
			member_code = #{memberCode},
			name = #{name},
			gender = #{gender},
			mobile = #{mobile},
			show_level = #{showLevel},
			school_name_cn = #{schoolNameCn},
			fee = #{fee},
			leave_cancel = #{leaveCancel},
			show_leave = #{showLeave},
			order_price = #{orderPrice},
			payment_member_code = #{paymentMemberCode},
			reviewer = #{reviewer},
			grade = #{grade},
			referee = #{referee},
			payment_item_id = #{paymentItemId},
			desktop_reviewer_dog = #{desktopReviewerDog},
			floor_reviewer_dog = #{floorReviewerDog},
			any_breed = #{anyBreed},
			groomer_breed = #{groomerBreed},
			review_state = #{reviewState},
			review_time = #{reviewTime},
			payment_state = #{paymentState},
			payment_time = #{paymentTime},
			proccess_state = #{proccessState},
			proccess_time = #{proccessTime},
			running_number = #{runningNumber},
			review_remarks = #{reviewRemarks},
			update_by = #{updateBy.id},
			update_date = #{updateDate},
			remarks = #{remarks},
			show_dog = #{showDog},
			avatar = #{avatar},
			show_code=#{showCode},
			show_group=#{showGroup}
		WHERE id = #{id}
	</update>
	
	<update id="delete">
		UPDATE handler_register SET 
		remarks = concat(IFNULL(remarks,''),#{remarks}),
			del_flag = #{DEL_FLAG_DELETE}
		WHERE id = #{id}
	</update>
	

	<!-- 更新证件照 -->
	<update id="saveImage">
	update handler_register
	SET avatar=#{avatar},
	review_state=#{reviewState},
	review_time=#{reviewTime},
	review_remarks=#{reviewRemarks}
	WHERE id=#{id}
	</update>
	<!-- 导出数据 -->
	<select id="getRegisterList" resultType="HandlerRegister">
		select
		a.id AS "id",
		a.register_code AS "registerCode",
		a.member_code AS "memberCode",
		a.name AS "name",
		a.gender AS "gender",
		a.mobile AS "mobile",
		a.show_level AS "showLevel",
		a.school_name_cn AS "schoolNameCn",
		a.fee AS "fee",
		a.leave_cancel AS "leaveCancel",
		a.show_leave AS "showLeave",
		a.order_price AS "orderPrice",
		a.payment_member_code AS "paymentMemberCode",
		a.reviewer AS "reviewer",
		a.grade AS "grade",
		a.referee AS "referee",
		a.payment_item_id AS "paymentItemId",
		a.desktop_reviewer_dog AS "desktopReviewerDog",
		a.floor_reviewer_dog AS "floorReviewerDog",
		a.any_breed AS "anyBreed",
		a.groomer_breed AS "groomerBreed",
		a.review_state AS "reviewState",
		a.review_time AS "reviewTime",
		a.payment_state AS "paymentState",
		a.payment_time AS "paymentTime",
		a.proccess_state AS "proccessState",
		a.proccess_time AS "proccessTime",
		a.running_number AS "runningNumber",
		a.review_remarks AS "reviewRemarks",
		a.create_by AS "createBy.id",
		a.create_date AS "createDate",
		a.update_by AS "updateBy.id",
		a.update_date AS "updateDate",
		a.remarks AS "remarks",
		a.del_flag AS "delFlag",
		a.avatar AS "avatar",
		a.grade_time AS "gradeTime",
		a.show_code AS "showCode",
		a.take_certificate_date AS "takeCertificateDate",
		a.test_no AS "testNo"
		FROM handler_register a 
		<if test='endFlag == "1" '> 
			LEFT JOIN handler_show c ON a.show_code=c.show_code  and c.del_flag='0'
		</if>
		<where>
			a.payment_state='2'
			AND a.del_flag = #{DEL_FLAG_NORMAL}
			<if test="registerCode != null and registerCode != ''">
				AND a.register_code = #{registerCode}
			</if>
			<if test="memberCode != null and memberCode != ''">
				AND (a.member_code = #{memberCode} or a.name LIKE CONCAT('%',#{memberCode},'%') )
			</if>
			<if test="showCode != null and showCode != ''">
				AND a.show_code LIKE CONCAT('%',#{showCode},'%')
			</if>
			<if test="showLevel != null and showLevel != ''">
				AND a.show_level = #{showLevel}
			</if>
			<if test="schoolNameCn != null and schoolNameCn != ''">
				AND a.school_name_cn LIKE CONCAT('%',#{schoolNameCn},'%')
			</if>
			<if test="runningNumber != null and runningNumber != ''">
				AND a.running_number = #{runningNumber}
			</if>
			<if test="reviewState != null and reviewState !='' ">
				AND a.review_state =#{reviewState}
			</if>
			<if test="showLeave != null and showLeave !='' ">
				AND a.show_leave =#{showLeave}
			</if>
			<if test='endFlag == "1" '> 				
				AND DATE_FORMAT( c.end_time, '%Y-%m-%d' )   &gt;	 CURRENT_DATE ()
			</if>
		</where>
		ORDER BY a.show_level ASC
	</select>
	<!-- 确认是否到场 -->
	<update id="match">
	update handler_register 
	SET show_leave =#{showLeave},
	remarks=#{remarks}
	where id=#{id}
	
	</update>
	<!-- 录入成绩 -->
	<update id="inputGrade">
	update handler_register 
		set
			test_no=#{testNo},
			referee=#{referee},
			remarks=#{remarks},
			<if test="grade!=null and grade!=''">
				grade_time=now(),
			</if>			
			grade=#{grade},
			take_certificate_date=#{takeCertificateDate}
		where id=#{id}
	</update>
	<!-- 得到培训机构 -->
	<select id="getSchoolNameCn" resultType="java.lang.String">
	 select school_name_cn From handler_diploma where handler_type='0' AND member_code=#{memberCode} limit 1
	</select>
	<!-- 报名未审核数量 -->
	<select id="getRegisterCount" resultType="int">
		SELECT COUNT(1) FROM handler_register WHERE payment_state='2' AND show_leave='0' and del_flag='0'
	</select>
	<!-- 报名重复性验证 -->
	<select id="getByRegister" resultType="HandlerRegister">
		select id from handler_register WHERE show_code=#{showCode} and member_code=#{memberCode} and del_flag='0'
	</select>
	
	<select id="registerExaminerCheck" resultType="HandlerRegister">
		select id from handler_register WHERE show_code=#{showCode} and member_code=#{memberCode} and del_flag='0' AND review_state = '1'
	</select>
	
	
	<select id="getHandlerRegister" resultType="HandlerRegister">
	   SELECT 
            <include refid="handlerRegisterColumns"/>
        FROM handler_register a
        <include refid="handlerRegisterJoins"/>
        WHERE a.member_code = #{memberCode} and a.del_flag = '0'
       	and b.show_type not in ('10','12','13')
        ORDER BY a.create_date DESC
	</select>
	
	<select id="getExaminerHandlerRegister" resultType="HandlerRegister">
	   SELECT 
            <include refid="handlerRegisterColumns"/>
        FROM handler_register a
        <include refid="handlerRegisterJoins"/>
        WHERE a.member_code = #{memberCode} and a.del_flag = '0' 
       	and b.show_type in ('10','11')
        ORDER BY a.create_date DESC
	</select>
	<!-- 根据id重置培训报名审核状态为待审核 zhuoHeng-->
    <update id="changeReviewState">
    update handler_register set review_state = '0' where id = #{id}
    </update>
    
    <update id="changeExaminerReviewState">
    update handler_register set review_state = '3' where id = #{id}
    </update>

	<select id="getHandlerTrainerRegister" resultType="HandlerRegister">
		SELECT
		<include refid="handlerRegisterColumns"/>
		FROM handler_register a
		<include refid="handlerRegisterJoins"/>
		WHERE a.member_code = #{memberCode} and a.del_flag = '0'
		and b.show_type in ('12','13')
		ORDER BY a.create_date DESC
	</select>

	<update id="refundHandlerRegister" >
		update
		handler_register
		set
		review_state ='3' ,
		review_remarks=#{vo.reviewRemarks},
		leave_cancel=#{vo.leaveCancel},
		update_date=#{vo.updateDate},
		update_by=#{vo.updateBy.id}
		where id in
		<foreach item="item" index="index" collection="ids" open="(" close=")" separator=",">
			#{item}
		</foreach>
	</update>

	<select id="countPartnerDogPassExams" resultType="int">
		SELECT COUNT(*)
		FROM handler_register
		WHERE member_code = #{memberCode}
		  AND show_level = 'MASTER'
		  AND grade IN ('2','3','7','8')
		  AND review_state != '3'
		  AND del_flag = '0'
	</select>
</mapper>