<?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.ym.mec.biz.dal.dao.DegreeRegistrationDao">
    <resultMap id="DegreeRegistration" type="com.ym.mec.biz.dal.entity.DegreeRegistration">
        <!--@mbg.generated-->
        <!--@Table degree_registration-->
        <id column="id_" jdbcType="INTEGER" property="id"/>
        <result column="user_id_" property="userId"/>
        <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId"/>
        <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
        <result column="order_no_" jdbcType="VARCHAR" property="orderNo"/>
        <result column="trans_no_" jdbcType="VARCHAR" property="transNo"/>
        <result column="name_" jdbcType="VARCHAR" property="name"/>
        <result column="gender_" jdbcType="VARCHAR" property="gender"/>
        <result column="idcard_" jdbcType="VARCHAR" property="idcard"/>
        <result column="city_" jdbcType="VARCHAR" property="city"/>
        <result column="school_" jdbcType="VARCHAR" property="school"/>
        <result column="subject_" jdbcType="VARCHAR" property="subject"/>
        <result column="level_" jdbcType="VARCHAR" property="level"/>
        <result column="theory_level_" jdbcType="VARCHAR" property="theoryLevel"/>
        <result column="theory_money_" jdbcType="DECIMAL" property="theoryMoney"/>
        <result column="theory_cert_" jdbcType="VARCHAR" property="theoryCert"/>
        <result column="mobile_" jdbcType="VARCHAR" property="mobile"/>
        <result column="money_" jdbcType="DECIMAL" property="money"/>
        <result column="memo_" jdbcType="VARCHAR" property="memo"/>
        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
        <result column="status_" jdbcType="TINYINT" property="status"/>
        <result column="activity_tag_" property="activityTag"/>
    </resultMap>

    <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
        select *
        from degree_registration
        where id_ = #{id,jdbcType=INTEGER}
    </select>

    <!-- 全查询 -->
    <select id="findAll" resultMap="DegreeRegistration">
        SELECT *
        FROM degree_registration
        ORDER BY id_
    </select>

    <sql id="queryPageSql">
        <where>
            <if test="organId != null">
                AND FIND_IN_SET(organ_id_,#{organId})
            </if>
            <if test="status != null and status=='reg'">
                AND <![CDATA[status_ <= 1]]>
            </if>
            <if test="status != null and status=='pay'">
                AND status_ = 2
            </if>
            <if test="id != null">
                AND id_ = #{id}
            </if>
            <if test="search != null and search != ''">
                AND (id_ = #{search} OR name_ LIKE CONCAT('%',#{search},'%') )
            </if>
            <if test="orderNo != null">
                AND order_no_ = #{orderNo}
            </if>
            <if test="transNo != null">
                AND trans_no_ = #{transNo}
            </if>
            <if test="name != null">
                AND name_ = #{name}
            </if>
            <if test="idcard != null">
                AND idcard_ = #{idcard}
            </if>
            <if test="school != null">
                AND school_ LIKE CONCAT('%', #{school},'%')
            </if>
            <if test="city != null">
                AND city_ LIKE CONCAT('%', #{city},'%')
            </if>
            <if test="subject != null">
                AND subject_= #{subject}
            </if>
            <if test="mobile != null">
                AND mobile_= #{mobile}
            </if>
            <if test="level != null">
                AND level_= #{level}
            </if>
            <if test="startTime != null">
                AND DATE_FORMAT(create_time_,"%Y-%m-%d") >= #{startTime}
            </if>
            <if test="endTime != null">
                <![CDATA[AND DATE_FORMAT(create_time_,"%Y-%m-%d") <= #{endTime}]]>
            </if>
        </where>
    </sql>

    <!-- 分页查询 -->
    <select id="queryPage" resultMap="DegreeRegistration" parameterType="map">
        SELECT * FROM degree_registration
        <include refid="queryPageSql"/>
        <include refid="global.orderby"/>
        <include refid="global.limit"/>
    </select>

    <!-- 查询当前表的总记录数 -->
    <select id="queryCount" resultType="int">
        SELECT COUNT(*)
        FROM degree_registration
        <include refid="queryPageSql"/>
    </select>

    <select id="getTotalAmount" parameterType="map" resultMap="DegreeRegistration">
        SELECT SUM(case when status_ = 2 then money_ else 0 end) money_ ,SUM(case when status_ = 2 then theory_money_ else 0 end) theory_money_ FROM degree_registration
        <include refid="queryPageSql"/>
    </select>

    <delete id="delete" parameterType="java.lang.Integer">
        delete
        from degree_registration
        where id_ = #{id,jdbcType=INTEGER}
    </delete>
    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration"
            useGeneratedKeys="true">
        <!--@mbg.generated-->
        insert into degree_registration (user_id_,sporadic_id_,organ_id_,order_no_, name_, gender_,
        idcard_, city_, school_,
        subject_,level_, theory_level_,theory_money_, theory_cert_,mobile_,
        money_, memo_, create_time_,
        update_time_, status_, activity_tag_)
        values (#{userId},#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
        #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR},
        #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
        #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL},
        #{theoryCert,jdbcType=VARCHAR},#{mobile,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR},
        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT}, #{activityTag})
    </insert>
    <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
        <!--@mbg.generated-->
        update degree_registration
        <set>
            <if test="userId != null">
                user_id_ = #{userId},
            </if>
            <if test="organId != null">
                organ_id_ = #{organId,jdbcType=INTEGER},
            </if>
            <if test="sporadicId != null">
                sporadic_id_ = #{sporadicId,jdbcType=INTEGER},
            </if>
            <if test="orderNo != null">
                order_no_ = #{orderNo,jdbcType=VARCHAR},
            </if>
            <if test="transNo != null">
                trans_no_ = #{transNo,jdbcType=VARCHAR},
            </if>
            <if test="name != null">
                name_ = #{name,jdbcType=VARCHAR},
            </if>
            <if test="gender != null">
                gender_ = #{gender,jdbcType=VARCHAR},
            </if>
            <if test="idcard != null">
                idcard_ = #{idcard,jdbcType=VARCHAR},
            </if>
            <if test="city != null">
                city_ = #{city,jdbcType=VARCHAR},
            </if>
            <if test="school != null">
                school_ = #{school,jdbcType=VARCHAR},
            </if>
            <if test="subject != null">
                subject_ = #{subject,jdbcType=VARCHAR},
            </if>
            <if test="level != null">
                level_ = #{level,jdbcType=VARCHAR},
            </if>
            <if test="theoryLevel != null">
                theory_level_ = #{theoryLevel,jdbcType=VARCHAR},
            </if>
            <if test="theoryLevel != null">
                theory_money_ = #{theoryMoney,jdbcType=DECIMAL},
            </if>
            <if test="theoryLevel != null">
                theory_cert_ = #{theoryCert,jdbcType=VARCHAR},
            </if>
            <if test="mobile != null">
                mobile_ = #{mobile,jdbcType=VARCHAR},
            </if>
            <if test="money != null">
                money_ = #{money,jdbcType=DECIMAL},
            </if>
            <if test="memo != null">
                memo_ = #{memo,jdbcType=VARCHAR},
            </if>
            <if test="createTime != null">
                create_time_ = #{createTime},
            </if>
            <if test="status != null">
                status_ = #{status,jdbcType=INTEGER},
            </if>
            <if test="activityTag != null">
                activity_tag_ = #{activityTag},
            </if>
                update_time_ = NOW()
        </set>
        where id_ = #{id,jdbcType=INTEGER}
    </update>

    <update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
        <foreach collection="degrees" item="degree" separator=";">
            update degree_registration
            <set>
                <if test="degree.userId != null">
                    user_id_ = #{degree.userId},
                </if>
                <if test="degree.organId != null">
                    organ_id_ = #{degree.organId,jdbcType=INTEGER},
                </if>
                <if test="degree.sporadicId != null">
                    sporadic_id_ = #{degree.sporadicId,jdbcType=INTEGER},
                </if>
                <if test="degree.orderNo != null">
                    order_no_ = #{degree.orderNo,jdbcType=VARCHAR},
                </if>
                <if test="degree.transNo != null">
                    trans_no_ = #{degree.transNo,jdbcType=VARCHAR},
                </if>
                <if test="degree.name != null">
                    name_ = #{degree.name,jdbcType=VARCHAR},
                </if>
                <if test="degree.gender != null">
                    gender_ = #{degree.gender,jdbcType=VARCHAR},
                </if>
                <if test="degree.idcard != null">
                    idcard_ = #{degree.idcard,jdbcType=VARCHAR},
                </if>
                <if test="degree.city != null">
                    city_ = #{degree.city,jdbcType=VARCHAR},
                </if>
                <if test="degree.school != null">
                    school_ = #{degree.school,jdbcType=VARCHAR},
                </if>
                <if test="degree.subject != null">
                    subject_ = #{degree.subject,jdbcType=VARCHAR},
                </if>
                <if test="degree.level != null">
                    level_ = #{degree.level,jdbcType=VARCHAR},
                </if>
                <if test="degree.theoryLevel != null">
                    theory_level_ = #{degree.theoryLevel,jdbcType=VARCHAR},
                </if>
                <if test="degree.theoryLevel != null">
                    theory_money_ = #{degree.theoryMoney,jdbcType=DECIMAL},
                </if>
                <if test="degree.theoryLevel != null">
                    theory_cert_ = #{degree.theoryCert,jdbcType=VARCHAR},
                </if>
                <if test="degree.mobile != null">
                    mobile_ = #{degree.mobile,jdbcType=VARCHAR},
                </if>
                <if test="degree.money != null">
                    money_ = #{degree.money,jdbcType=DECIMAL},
                </if>
                <if test="degree.memo != null">
                    memo_ = #{degree.memo,jdbcType=VARCHAR},
                </if>
                <if test="degree.createTime != null">
                    create_time_ = #{degree.createTime},
                </if>
                <if test="degree.status != null">
                    status_ = #{degree.status,jdbcType=INTEGER},
                </if>
                <if test="degree.activityTag != null">
                    activity_tag_ = #{degree.activityTag},
                </if>
                    update_time_ = NOW()
            </set>
            where id_ = #{degree.id,jdbcType=INTEGER}
        </foreach>
    </update>

    <select id="findByMobileAndSporadicId" resultMap="DegreeRegistration">
        SELECT *
        FROM degree_registration
        WHERE mobile_ = #{mobile}
          AND sporadic_id_ = #{sporadicId} FOR
        UPDATE
    </select>
    <select id="getLock" resultMap="DegreeRegistration">
        SELECT *
        FROM degree_registration
        WHERE id_ = #{id} FOR
        UPDATE
    </select>

    <select id="getWithUserIdAndActivityTag" resultMap="DegreeRegistration">
        select *
            from degree_registration
        where
            user_id_ = #{degree.userId}
            AND activity_tag_=#{degree.activityTag}
            <if test="degree.subject!=null and degree.subject!=''">
                AND subject_ = #{degree.subject}
            </if>
            <if test="degree.sporadicId!=null">
                AND sporadic_id_ = #{degree.sporadicId}
            </if>
            <if test="degree.theoryLevel!=null">
                AND theory_level_ = #{degree.theoryLevel}
            </if>
    </select>

    <select id="getUserLevelDegrees" resultMap="DegreeRegistration">
        select *
            from degree_registration
        where
            user_id_ = #{userId}
            AND activity_tag_=#{activityTag}
            AND (sporadic_id_ IS NOT NULL OR theory_level_ IS NOT NULL)
    </select>
</mapper>
