<?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.keao.edu.user.dao.ExamRegistrationPaymentDao">

    <resultMap type="com.keao.edu.user.entity.ExamRegistrationPayment" id="ExamRegistrationPayment">
        <result column="id_" property="id"/>
        <result column="exam_registration_id_" property="examRegistrationId"/>
        <result column="student_id_" property="studentId"/>
        <result column="examination_basic_id_" property="examinationBasicId"/>
        <result column="order_no_" property="orderNo"/>
        <result column="pay_type_" property="payType"/>
        <result column="trans_no_" property="transNo"/>
        <result column="mer_no_" property="merNo"/>
        <result column="pay_channel_" property="payChannel"/>
        <result column="trans_amount_" property="transAmount"/>
        <result column="trans_status_" property="transStatus"/>
        <result column="trans_successed_time_" property="transSuccessedTime"/>
        <result column="create_time_" property="createTime"/>
        <result column="update_time_" property="updateTime"/>
        <result column="tenant_id_" property="tenantId"/>
        <result column="organ_id_" property="organId"/>
    </resultMap>

    <!-- 根据主键查询一条记录 -->
    <select id="get" resultMap="ExamRegistrationPayment">
        SELECT *
        FROM exam_registration_payment
        WHERE id_ = #{id}
    </select>

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

    <!-- 向数据库增加一条记录 -->
    <insert id="insert" parameterType="com.keao.edu.user.entity.ExamRegistrationPayment" useGeneratedKeys="true"
            keyColumn="id" keyProperty="id">
        <!--
        <selectKey resultClass="int" keyProperty="id" >
        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
        </selectKey>
        -->
        INSERT INTO exam_registration_payment
        (id_,exam_registration_id_,student_id_,examination_basic_id_,order_no_,trans_no_,mer_no_,trans_amount_,trans_status_,trans_successed_time_,create_time_,update_time_,tenant_id_,organ_id_)
        VALUES(#{id},#{examRegistrationId},#{studentId},#{examinationBasicId},#{orderNo},#{transNo},#{merNo},#{transAmount},#{transStatus},#{transSuccessedTime},NOW(),NOW(),#{tenantId},#{organId})
    </insert>

    <!-- 根据主键查询一条记录 -->
    <update id="update" parameterType="com.keao.edu.user.entity.ExamRegistrationPayment">
        UPDATE exam_registration_payment
        <set>
            <if test="examinationBasicId != null">
                examination_basic_id_ = #{examinationBasicId},
            </if>
            <if test="orderNo != null">
                order_no_ = #{orderNo},
            </if>
            <if test="id != null">
                id_ = #{id},
            </if>
            <if test="tenantId != null and tenantId != 0">
                tenant_id_ = #{tenantId},
            </if>
            <if test="examRegistrationId != null">
                exam_registration_id_ = #{examRegistrationId},
            </if>
            <if test="studentId != null">
                student_id_ = #{studentId},
            </if>
            <if test="transSuccessedTime != null">
                trans_successed_time_ = #{transSuccessedTime},
            </if>
            <if test="transNo != null">
                trans_no_ = #{transNo},
            </if>
            <if test="payType != null">
                pay_type_ = #{payType},
            </if>
            <if test="payChannel != null">
                pay_channel_ = #{payChannel},
            </if>
            <if test="merNo != null">
                mer_no_ = #{merNo},
            </if>
            <if test="transStatus != null">
                trans_status_ = #{transStatus},
            </if>
            <if test="transAmount != null">
                trans_amount_ = #{transAmount},
            </if>
            <if test="memo != null">
                memo_ = #{memo},
            </if>
            update_time_ = NOW()
        </set>
        WHERE id_ = #{id}
    </update>

    <!-- 根据主键删除一条记录 -->
    <delete id="delete">
        DELETE
        FROM exam_registration_payment
        WHERE id_ = #{id}
    </delete>


    <sql id="queryCondition">
        <where>
            <if test="studentId!=null">
                AND erp.student_id_=#{studentId}
            </if>
            <if test="examinationBasicId!=null">
                AND erp.examination_basic_id_=#{examinationBasicId}
            </if>
            <if test="examRegistrationId!=null">
                AND erp.exam_registration_id_=#{examRegistrationId}
            </if>
            <if test="cardNo!=null">
                AND ec.card_no_=#{cardNo}
            </if>
            <if test="orderNo!=null">
                AND erp.order_no_=#{orderNo}
            </if>
            <if test="transStatus!=null">
                AND erp.trans_status_=#{transStatus,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
            </if>
            <if test="startTime!=null">
                AND erp.create_time_ >=#{startTime}
            </if>
            <if test="endTime!=null">
                <![CDATA[AND erp.create_time_ <= #{endTime}]]>
            </if>
            <if test="examName!=null">
                AND eb.name_=#{examName}
            </if>
            <if test="organIds!=null">
                AND erp.organ_id_ IN
                <foreach collection="organIds" item="organId" separator="," open="(" close=")">
                    #{organId}
                </foreach>
            </if>
            <if test="search!=null">
                AND (ec.card_no_ LIKE CONCAT('%', #{serch}, '%'))
            </if>
        </where>
    </sql>

    <!-- 分页查询 -->
    <select id="queryPage" resultMap="ExamRegistrationPayment" parameterType="map">
        SELECT erp.*,eb.exam_location_id_list_ FROM exam_registration_payment erp
        LEFT JOIN exam_certification ec ON erp.exam_registration_id_ = ec.exam_registration_id_
        LEFT JOIN examination_basic eb ON erp.examination_basic_id_ = eb.id_
        <include refid="queryCondition"/>
        <include refid="global.limit"/>
    </select>

    <!-- 分页查询 -->
    <select id="getOrderPageList" resultMap="ExamRegistrationPaymentDto" parameterType="map">
        SELECT erp.*,eb.exam_location_id_list_,ec.card_no_ FROM exam_registration_payment erp
        LEFT JOIN exam_certification ec ON erp.exam_registration_id_ = ec.exam_registration_id_
        LEFT JOIN examination_basic eb ON erp.examination_basic_id_ = eb.id_
        <include refid="queryCondition"/>
        <include refid="global.limit"/>
    </select>

    <!-- 查询当前表的总记录数 -->
    <select id="getOrderListCount" resultType="int">
        SELECT COUNT(*) FROM exam_registration_payment erp
        LEFT JOIN exam_certification ec ON erp.exam_registration_id_ = ec.exam_registration_id_
        LEFT JOIN examination_basic eb ON erp.examination_basic_id_ = eb.id_
        <include refid="queryCondition"/>
    </select>

    <!-- 获取项目用户未支付的订单 -->
    <select id="getExamIngOrder" resultMap="ExamRegistrationPayment">
        SELECT *
        FROM exam_registration_payment
        WHERE student_id_ = #{userId}
          AND examination_basic_id_ = #{examinationBasicId}
          AND trans_status_ = 'ING'
        LIMIT 1
    </select>

    <!-- 根据订单号获取订单 -->
    <select id="getByOrderNo" resultMap="ExamRegistrationPayment">
        SELECT *
        FROM exam_registration_payment
        WHERE order_no_ = #{orderNo} FOR
        UPDATE
    </select>

    <!-- 根据状态获取订单 -->
    <select id="getOrdersByStatus" resultMap="ExamRegistrationPayment">
        SELECT *
        FROM exam_registration_payment
        WHERE pay_type_ = #{payType}
          AND trans_status_ = #{status}
    </select>

    <!-- 获取超时未支付的订单 -->
    <select id="findOrdersOverTime" resultMap="ExamRegistrationPayment">
        SELECT * FROM exam_registration_payment WHERE order_no_ IN
        <foreach collection="orderNoList" item="orderNo" index="index" open="(" close=")" separator=",">
            #{orderNo}
        </foreach>
        AND trans_status_=#{transStatus,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
        <![CDATA[ AND create_time_ <= ]]> #{beforeTime}
    </select>
    <select id="getWithExamOrganAndDay" resultMap="ExamRegistrationPayment">
        SELECT
            *
        FROM
            exam_registration_payment
        WHERE
            examination_basic_id_ = #{examId}
            AND organ_id_ = #{organId}
            AND DATE_FORMAT( create_time_, '%Y-%m-%d' ) IN
            <foreach collection="days" item="day" separator="," open="(" close=")">
                #{day}
            </foreach>
    </select>

    <resultMap id="ExamRegistrationPaymentDto" type="com.keao.edu.user.dto.ExamRegistrationPaymentDto"
               extends="ExamRegistrationPayment">
        <result column="card_no_" property="cardNo"/>
        <association property="examRegistration"
                     select="com.keao.edu.user.dao.ExamRegistrationDao.getExamRegistrationInfo"
                     column="{id=exam_registration_id_}"/>
        <association property="examLocations" select="com.keao.edu.user.dao.ExamLocationDao.getExamLocationByIds"
                     column="{ids=exam_location_id_list_}"/>
    </resultMap>
</mapper>
