<?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.iocoder.yudao.module.course.mapper.ProcessMapper">

    <update id="updateProcessBatch">
        UPDATE drive_school_process
        SET exam_status = '9'
        WHERE
        user_id IN
        <foreach collection="userIdList" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        AND course_id = #{courseId}
        AND `subject` = #{subject}
        AND coach_id = #{coachId}
        AND (exam_status IS NULL OR exam_status = '0')
        AND deleted =0
    </update>
    <update id="updateProcessExamResult">

    </update>
    <select id="selectNewMaxByUserId" resultType="cn.iocoder.yudao.module.course.entity.Process">
        SELECT
            dsp.*  FROM drive_school_process dsp
        WHERE
            dsp.user_id = #{userId}
        <if test="coachId != null and coachId != ''">
            AND dsp.coach_id=#{coachId}
        </if>
        ORDER BY  dsp.`subject` DESC, dsp.create_time DESC LIMIT 1
    </select>
    <select id="selectAllTrainTime" resultType="java.lang.Double">
        SELECT
            SUM(dsp.train_time)
        FROM
            drive_school_process dsp
        WHERE
            dsp.user_id = #{userId}
          AND dsp.deleted = 0
          AND dsp.course_id = #{courseId}
          AND (( dsp.`status` = '2' AND dsp.exam_status = '1' ) OR dsp.`status` = '1' )
    </select>

    <select id="pageProcess" resultType="cn.iocoder.yudao.module.course.vo.ProcessVO">
        SELECT
            dsp.*,
            dss.id_card AS studentIdCard,
            sysu.nickname AS updateName
        FROM drive_school_process dsp
        LEFT JOIN drive_school_student dss ON dss.user_id = dsp.user_id
        LEFT JOIN system_users sysu on sysu.id = dsp.updater
        <where>
            dsp.deleted = 0
            <if test="entity.coachName != null and entity.coachName != '' "> and dsp.coach_name like concat('%', #{entity.coachName}, '%')</if>
            <if test="entity.userName != null and entity.userName != '' "> and dsp.user_name like concat('%', #{entity.userName}, '%')</if>
            <if test="entity.courseName != null and entity.courseName != '' "> and dsp.name like concat('%', #{entity.courseName}, '%')</if>
            <if test="entity.userId != null "> and dsp.user_id = #{entity.userId}</if>
            <if test="entity.courseId != null and entity.courseId != '' "> and dsp.course_id = #{entity.courseId}</if>
            <if test="entity.studentIdCard != null and entity.studentIdCard != '' "> AND RIGHT(dss.id_card, 4) = RIGHT(#{entity.studentIdCard}, 4) </if>
        </where>
        ORDER BY
        (CASE
        WHEN dsp.exam_status = '1' AND dsp.finance_pass IS NULL THEN 1  -- 优先级最高
        WHEN dsp.exam_status = '9'  THEN 2
        WHEN dsp.status = '1'  THEN 2
        ELSE 4
        END),
        dsp.create_time DESC; -- 再按创建时间降序
    </select>

    <select id="getProcessList" resultType="cn.iocoder.yudao.module.course.entity.Process">
        SELECT
            *
        FROM
            drive_school_process
        WHERE
            user_id = #{userId}
          AND deleted = 0
          <if test="courseId!= null and courseId!= '' ">
              AND course_id = #{courseId}
          </if>
    </select>

    <select id="getProcessAndBatch" resultType="cn.iocoder.yudao.module.course.vo.ProcessAndExamBatchVO">
        SELECT
            dseb.start_time AS startTime,
            dseb.end_time AS endTime,
            dseb.addr_id AS addrId,
            dseb.addr AS addr,
            dseb.trans_way AS transWay,
            dseb.creator AS creator,
            dseb.id AS batchId,
            dseb.updater AS updater,
            dsebi.id AS batchItemId
        from drive_school_exam_batch dseb
                 left join drive_school_exam_batch_item dsebi ON dseb.id = dsebi.batch_id
        WHERE dseb.course_id = #{courseId}
          AND dseb.coach_id = #{coachId}
          AND dseb.subject = #{subject}
          AND dsebi.fraction = #{fraction}
          AND dsebi.user_id = #{userId}
        ORDER BY dseb.update_time DESC LIMIT 1
    </select>
</mapper>
