<?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.groomer.dao.GroomerRegisterDao">

	<sql id="groomerRegisterColumns">
		a.id AS "id",
		a.show_code AS "showCode",
		a.register_code AS "registerCode",
		a.member_code AS "memberCode",
		a.team_member_code AS "teamMemberCode",
		a.name AS "name",
		a.mobile AS "mobile",
		a.gender AS "gender",
		a.avatar AS "avatar",
		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.show_dog_breed AS "showDogBreed",
		a.show_dog_breed_extra AS "showDogBreedExtra",
		a.order_price AS "orderPrice",
		a.payment_member_code AS "paymentMemberCode",
		a.operator AS "operator",
		a.grade AS "grade",
		a.grade_write AS "gradeWrite",
		a.payment_charging_item_id AS "paymentChargingItemId",
		a.proccess_state AS "proccessState",
		a.payment_state AS "paymentState",
		a.review_state AS "reviewState",
		a.review_time AS "reviewTime",
		a.review_remarks AS "reviewRemarks",
		a.running_number AS "runningNumber",
		a.payment_time AS "paymentTime",
		a.proccess_time AS "proccessTime",
		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.test_no AS "testNo",
		a.referee AS "referee",
		a.grade_time AS "gradeTime",
		a.place AS "place",
		a.take_certificate_date AS "takeCertificateDate",
		b.show_code AS "groomerShow.showCode",
		b.fee AS "groomerShow.fee",
		b.free_fee AS "groomerShow.freeFee",
		b.register_end_time AS "groomerShow.registerEndTime",
		b.show_name AS "groomerShow.showName",
		b.show_type AS "groomerShow.showType",
		b.show_category AS "groomerShow.showCategory",
		b.show_address AS "groomerShow.showAddress",
		b.start_time AS "groomerShow.startTime",
		b.end_time AS "groomerShow.endTime",
		b.id AS "groomerShow.id",
		b.test_level AS "groomerShow.testLevel",
		m.groomer_type AS "member.groomerType",
		m.mobile AS "member.mobile",
		m.gender AS "member.gender",
		m.account_balance AS "member.accountBalance",
		m.member_end_date AS "member.memberEndDate",
		m.groomer_end_date AS "member.groomerEndDate",
		m.id AS "member.id",
		m.avatar AS "member.avatar",
		a.eligibility AS "eligibility",
		a.exam_num AS "examNum",
		a.reset AS reset
	</sql>

	<sql id="groomerRegisterJoins">
	LEFT JOIN groomer_show b ON a.show_code=b.show_code
	LEFT JOIN sys_member m ON a.member_code=m.member_code
	</sql>

	<select id="get" resultType="GroomerRegister">
		SELECT
			<include refid="groomerRegisterColumns"/>
		FROM groomer_register a
		<include refid="groomerRegisterJoins"/>
		WHERE a.id = #{id}
	</select>

	<select id="findList" resultType="GroomerRegister">
		SELECT
			<include refid="groomerRegisterColumns"/>
		FROM groomer_register a
		<include refid="groomerRegisterJoins"/>
		<where>
			a.del_flag = #{DEL_FLAG_NORMAL}
			<if test="showCode != null and showCode != ''">
				AND a.show_code LIKE concat('%',#{showCode},'%')
			</if>
			<if test="registerCode != null and registerCode != ''">
				AND a.register_code LIKE concat('%',#{registerCode},'%')
			</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="paymentState != null and paymentState != ''">
				AND a.payment_state = #{paymentState}
			</if>
			<if test="reviewState != null and reviewState != ''">
				AND a.review_state = #{reviewState}
			</if>
			<if test="leaveCancel != null and leaveCancel != ''">
				AND a.leave_cancel = #{leaveCancel}
			</if>
			<if test="groomerShow != null and groomerShow.showType!=null and groomerShow.showType != ''">
				AND b.show_type = #{groomerShow.showType}
			</if>
			<if test="groomerShow != null and groomerShow.showAddress!=null and groomerShow.showAddress != ''">
				AND b.show_address = #{groomerShow.showAddress}
			</if>
			<if test='member != null and member.paymentState != null and member.paymentState !="" and member.paymentState == "2"'>
				AND (m.groomer_end_date &gt;= CURDATE() OR m.member_end_date &gt;= CURDATE())
			</if>
			<if test='member != null and member.paymentState != null and member.paymentState !=""  and member.paymentState == "1"'>
				AND (
				m.groomer_end_date &lt; CURDATE()
				OR m.groomer_end_date IS NULL
				)
				AND (
				m.member_end_date &lt; CURDATE()
				OR  m.member_end_date IS NULL
				)
			</if>
            <if test="id != null and id != ''">
                AND a.id in (${id})
            </if>
            <if test="reviewStateExclud!=null and reviewStateExclud !=''">
				AND a.review_state != #{reviewStateExclud}
			</if>
			<if test="showCategory!=null and showCategory!=''">
				and  b.show_category = #{showCategory}
			</if>
			<if test="schoolNameCn != null and schoolNameCn  != ''">
				and a.school_name_cn = #{schoolNameCn}
			</if>
			<if test="schoolsId != null and schoolsId != ''"> 
				and a.create_by = #{schoolsId}
			</if>
		</where>
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
				ORDER BY a.create_date DESC
			</otherwise>
		</choose>
	</select>
	<!-- 张向 -->
	<select id="findListWrite" resultType="GroomerRegister">
		SELECT S.* FROM (
		SELECT
			<include refid="groomerRegisterColumns"/>,
			g.id as "groomerQualificationCertificate.id",
			g.certificateType,g.level_cn,g.create_date
		FROM groomer_register a
		<include refid="groomerRegisterJoins"/>
        JOIN groomer_qualification_certificate g ON g.register_id=a.id
		<where>
			a.del_flag = #{DEL_FLAG_NORMAL} AND g.del_flag='0'
			AND a.grade!=0
			<if test="showCode != null and showCode != ''">
				AND a.show_code LIKE concat('%',#{showCode},'%')
			</if>
			<if test="registerCode != null and registerCode != ''">
				AND a.register_code LIKE concat('%',#{registerCode},'%')
			</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="paymentState != null and paymentState != ''">
				AND a.payment_state = #{paymentState}
			</if>
			<if test="reviewState != null and reviewState != ''">
				AND a.review_state = #{reviewState}
			</if>
			<if test="leaveCancel != null and leaveCancel != ''">
				AND a.leave_cancel = #{leaveCancel}
			</if>

			<if test="groomerShow != null  and groomerShow.showName!=null and groomerShow.showName != ''">
				AND b.show_name = #{groomerShow.showName}
			</if>
			<if test="groomerShow != null and groomerShow.showType!=null and groomerShow.showType != ''">
				AND b.show_type = #{groomerShow.showType}
			</if>
			<if test="groomerShow != null and groomerShow.showAddress!=null and groomerShow.showAddress != ''">
				AND b.show_address = #{groomerShow.showAddress}
			</if>
			<if test='member != null and member.paymentState != null and member.paymentState !="" and member.paymentState == "2"'>
				AND (m.groomer_end_date &gt;= CURDATE() OR m.member_end_date &gt;= CURDATE())
			</if>
			<if test='member != null and member.paymentState != null and member.paymentState !=""  and member.paymentState == "1"'>
				AND (
				m.groomer_end_date &lt; CURDATE()
				OR m.groomer_end_date IS NULL
				)
				AND (
				m.member_end_date &lt; CURDATE()
				OR  m.member_end_date IS NULL
				)
			</if>
		</where>
		GROUP BY g.level_cn,a.create_date,g.certificateType  DESC
		) S GROUP BY level_cn,certificateType ORDER BY create_date desc

	</select>

	<select id="findAllList" resultType="GroomerRegister">
		SELECT
			<include refid="groomerRegisterColumns"/>
		FROM groomer_register a
		<include refid="groomerRegisterJoins"/>
		<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="insert">
		INSERT INTO groomer_register(
			id,
			show_code,
			register_code,
			member_code,
			team_member_code,
			name,
			mobile,
			gender,
			avatar,
			show_level,
			school_name_cn,
			fee,
			show_dog_breed,
			show_dog_breed_extra,
			order_price,
			payment_member_code,
			operator,
			grade,
			referee,
			create_by,
			create_date,
			update_by,
			update_date,
			remarks,
			del_flag,
			payment_charging_item_id,
			proccess_state,
			review_state,
			place,
			payment_state
		) VALUES (
			#{id},
			#{showCode},
			#{registerCode},
			#{memberCode},
			#{teamMemberCode},
			#{name},
			#{mobile},
			#{gender},
			#{avatar},
			#{showLevel},
			#{schoolNameCn},
			#{fee},
			#{showDogBreed},
			#{showDogBreedExtra},
			#{orderPrice},
			#{paymentMemberCode},
			#{operator},
			#{grade},
			#{referee},
			#{createBy.id},
			#{createDate},
			#{updateBy.id},
			#{updateDate},
			#{remarks},
			#{delFlag},
			#{paymentChargingItemId},
			#{proccessState},
			#{reviewState},
			#{place},
			#{paymentState}
		)
	</insert>

	<update id="update">
        UPDATE groomer_register SET
        school_name_cn = #{schoolNameCn},
        show_level = #{showLevel},
        leave_cancel = #{leaveCancel},
        show_dog_breed = #{showDogBreed},
        show_dog_breed_extra = #{showDogBreedExtra},
        review_state=#{reviewState},
        grade=#{grade},
        grade_write=#{gradeWrite},
        test_no=#{testNo},
        referee=#{referee},
        place=#{place},
        remarks = #{remarks},
        avatar = #{avatar}
        <if test="eligibility != null">
            ,eligibility = #{eligibility}
        </if>
        <if test="examNum != null">
            ,exam_num = #{examNum}
        </if>
		<if test="reset != null">
			,reset = #{reset}
		</if>
        WHERE id = #{id}
    </update>

	<update id="delete">
		UPDATE groomer_register SET
			remarks = concat(IFNULL(remarks,''),#{remarks}),
			del_flag = #{DEL_FLAG_DELETE}
		WHERE id = #{id}
	</update>

	<!-- 成绩列表 -->
	<select id="findGradePage" resultType="GroomerRegister">
		SELECT
			<include refid="groomerRegisterColumns"/>
		FROM groomer_register a
		<include refid="groomerRegisterJoins"/>
		<where>
			 b.end_time <![CDATA[<]]> now()
			AND (b.show_type='exam' or b.show_type='match')
			AND a.payment_state='2'
			AND a.review_state='1'
			AND a.show_leave='0'
			AND a.leave_cancel='0'
		</where>
			    <if test="showCode != null and showCode != ''">
					AND a.show_code LIKE concat('%',#{showCode},'%')
				</if>
			    <if test="place != null and place != ''">
					AND a.place LIKE concat('%',#{place},'%')
				</if>
				<if test="registerCode != null and registerCode != ''">
					AND a.register_code LIKE concat('%',#{registerCode},'%')
				</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>
				<if test="showCategory!=null and showCategory!=''">
					and  b.show_category = #{showCategory}
				</if>
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
				ORDER BY a.create_date DESC
			</otherwise>
		</choose>
	</select>

	<!-- 查询培训机构 -->
	<select id="getSchoolNameCn" resultType="java.lang.String">
		SELECT
			a.school_name_cn
		FROM
			groomer_diploma a
		WHERE
			a.member_code = #{memberCode} limit 1
	</select>

	<!-- 录入成绩 -->
	<update id="inputGrade" >
		update groomer_register
		set
			test_no=#{testNo},

			referee=#{referee},

			remarks=#{remarks},

			grade=#{grade},
			place=#{place},
			take_certificate_date=#{takeCertificateDate},
			grade_time=now(),
			update_date = now()
		where id=#{id}
	</update>

	<update id="updateLeaveFlag">
		UPDATE groomer_register SET
			show_leave = #{showLeave},
			leave_cancel = #{leaveCancel},
			update_by = #{updateBy.id},
			update_date = #{updateDate}
		WHERE id = #{id}
	</update>
	<!-- 根据赛事编号需要导出的报名信息 -->
	<select id="getRegisterList" resultType="GroomerRegister">
		SELECT
			a.id AS "id",
			a.show_code AS "showCode",
			a.register_code AS "registerCode",
			a.member_code AS "memberCode",
			a.name AS "name",
			a.mobile AS "mobile",
			a.gender AS "gender",
			a.avatar AS "avatar",
			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.show_dog_breed AS "showDogBreed",
			a.show_dog_breed_extra AS "showDogBreedExtra",
			a.order_price AS "orderPrice",
			a.payment_member_code AS "paymentMemberCode",
			a.operator AS "operator",
			a.grade AS "grade",
			a.payment_charging_item_id AS "paymentChargingItemId",
			a.review_state AS "reviewState",
			a.review_time AS "reviewTime",
			a.review_remarks AS "reviewRemarks",
			a.running_number AS "runningNumber",
			a.payment_state AS "paymentState",
			a.payment_time AS "paymentTime",
			a.proccess_time AS "proccessTime",
			a.proccess_state AS "proccessState",
			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.test_no AS "testNo",
			a.referee AS "referee",
			a.grade_time AS "gradeTime",
			a.take_certificate_date AS "takeCertificateDate",
			a.place AS "place",
			m.mobile AS "member.mobile",
			b.show_category AS "showCategory"
		FROM
			groomer_register a
		LEFT JOIN groomer_show b ON a.show_code = b.show_code
		LEFT JOIN sys_member m ON a.member_code=m.member_code
		<where>
			a.del_flag='0'
			<if test="showCode != null and showCode != ''">
				AND a.show_code LIKE concat('%',#{showCode},'%')
			</if>
			<if test="registerCode != null and registerCode != ''">
				AND a.register_code LIKE concat('%',#{registerCode},'%')
			</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 LIKE concat('%',#{showLevel},'%')
			</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="leaveCancel !=null and leaveCancel !=''">
				AND a.leave_cancel=#{leaveCancel}
			</if>
			<if test="showCategory != null and showCategory != ''">
				AND b.show_category = #{showCategory}
			</if>
			<if test='endFlag == "1" '>
				AND DATE_FORMAT( b.end_time, '%Y-%m-%d' ) &gt;	 CURRENT_DATE ()
			</if>
		</where>
		ORDER BY  a.show_level ASC,a.school_name_cn DESC,a.name DESC
	</select>
	<!-- 更新证件照 -->
	<update id="saveImage">
	update groomer_register
	SET avatar=#{avatar},
	review_state=#{reviewState},
	review_time=#{reviewTime},
	review_remarks=#{reviewRemarks}
	WHERE id=#{id}
	</update>
	<!-- 得到未处理报名考试的 -->
	<select id="getRegisterCount" resultType="int">
		SELECT COUNT(a.id) FROM
			groomer_register a
		LEFT JOIN groomer_show b ON a.show_code = b.show_code
		where b.show_type='exam'  AND a.payment_state='2' AND a.review_state='0' and a.del_flag='0'
	</select>
	<!-- 得到未处理比赛考试的 -->
	<select id="getRegisterMatchCount" resultType="int">
		SELECT COUNT(a.id) FROM
			groomer_register a
		LEFT JOIN groomer_show b ON a.show_code = b.show_code
		where b.show_type='match'  AND a.payment_state='2' AND a.review_state='0' and a.del_flag='0'
	</select>
	<!-- 根据赛事编号查询报名信息 -->
	<select id="getRegister" resultType="GroomerRegister">
		select
		<include refid="groomerRegisterColumns"/>
		from groomer_register a
		LEFT JOIN groomer_show b ON a.show_code=b.show_code
		LEFT JOIN sys_member m ON a.member_code=m.member_code
		 where a.show_code=#{showCode} and a.del_flag='0'
	</select>
	<!-- 重复报名校验 -->
	<select id="getByRegister" resultType="GroomerRegister">
		select
		id
		from groomer_register a  where a.show_code=#{showCode}
		AND a.member_code=#{memberCode} AND a.del_flag='0'
	</select>
	<select id="getGroomerRegister" resultType="GroomerRegister">
	   SELECT
            <include refid="groomerRegisterColumns"/>
        FROM groomer_register a
        <include refid="groomerRegisterJoins"/>
        WHERE a.member_code = #{memberCode} and a.del_flag = '0'
        ORDER BY a.create_date DESC
	</select>
	<!-- 根据id重置美容报名审核状态为待审核 -->
	<update id="changeReviewState">
	update groomer_register set review_state = '0' where id = #{id}
	</update>
	 <update id="refundGroomerRegister" >
	  update 
	  	groomer_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="findListByMember" resultType="GroomerRegister">
		select * from groomer_register
		<where>
			show_code = #{showCode}
			AND del_flag = '0'
			AND member_code in
			<foreach item="item" collection="memberList" separator="," open="(" close=")" index="">
				#{item.memberCode}
			</foreach>
		</where>
	</select>
	
</mapper>