<?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.hc.business.mapper.ClassConfigMapper">

    <resultMap type="classConfig" id="ClassConfigMap">
        <result property="classConfigId" column="class_config_id" jdbcType="INTEGER"/>
        <result property="className" column="class_name" jdbcType="VARCHAR"/>
        <result property="classDesc" column="class_desc" jdbcType="VARCHAR"/>
        <result property="classType" column="class_type" jdbcType="INTEGER"/>
        <result property="classLogo" column="class_logo" jdbcType="VARCHAR"/>
        <result property="areaId" column="area_id" jdbcType="INTEGER"/>
        <result property="bxHours" column="bx_hours" jdbcType="FLOAT"/>
        <result property="xxHours" column="xx_hours" jdbcType="FLOAT"/>
        <result property="paperHours" column="paper_hours" jdbcType="FLOAT"/>
        <result property="paperId" column="paper_id" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="INTEGER"/>
        <result property="years" column="years" jdbcType="VARCHAR"/>
        <result property="price" column="price" jdbcType="NUMERIC"/>
        <result property="applyStartTime" column="apply_start_time" jdbcType="INTEGER"/>
        <result property="applyEndTime" column="apply_end_time" jdbcType="INTEGER"/>
        <result property="studyStartTime" column="study_start_time" jdbcType="INTEGER"/>
        <result property="studyEndTime" column="study_end_time" jdbcType="INTEGER"/>
        <result property="paperStartTime" column="paper_start_time" jdbcType="INTEGER"/>
        <result property="paperEndTime" column="paper_end_time" jdbcType="INTEGER"/>
        <result property="certStartTime" column="cert_start_time" jdbcType="INTEGER"/>
        <result property="certEndTime" column="cert_end_time" jdbcType="INTEGER"/>
        <result property="needPaper" column="need_paper" jdbcType="INTEGER"/>
        <result property="valid" column="valid" jdbcType="INTEGER"/>
        <result property="classContent" column="class_content" jdbcType="VARCHAR"/>
        <result property="classMobileContent" column="class_mobile_content" jdbcType="VARCHAR"/>
        <result property="signTime" column="sign_time" jdbcType="BIGINT"/>
        <result property="prefix" column="prefix" jdbcType="VARCHAR"/>
        <result property="testId" column="test_id" jdbcType="INTEGER"/>
        <result property="target" column="target" jdbcType="VARCHAR"/>
        <result property="limitNum" column="limit_num" jdbcType="INTEGER"/>
    </resultMap>

    <sql id="Base_Column_List">
        class_config_id,
           class_name,
           class_desc,
           class_type,
           class_logo,
           class_content,
           class_mobile_content,
           area_id,
           bx_hours,
           xx_hours,
           paper_hours,
           paper_id,
           create_time,
           years,
           price,
           apply_start_time,
           apply_end_time,
           study_start_time,
           study_end_time,
           paper_start_time,
           paper_end_time,
           cert_start_time,
           cert_end_time,
           need_paper,
           valid,
           sign_time,
           prefix,
           test_id,
           target,
           limit_num
    </sql>

    <select id="queryByValid" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        WHERE valid = #{valid}
        ORDER BY create_time DESC
    </select>

    <select id="queryByAreaId" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        WHERE area_id = #{areaId}
        ORDER BY class_config_id DESC
    </select>

    <select id="queryByTime" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        WHERE study_start_time = #{studyStartTime}
        ORDER BY class_config_id DESC
    </select>

    <select id="queryByClassName" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        WHERE class_name LIKE "%"#{name}"%"
        ORDER BY class_config_id DESC
    </select>

    <select id="queryAll" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        ORDER BY class_config_id DESC
    </select>


    <select id="queryByYear" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        WHERE years LIKE "%"#{year}"%"
        ORDER BY class_config_id DESC
    </select>


    <select id="queryByTarget" resultMap="ClassConfigMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM class_config
        WHERE target LIKE "%"#{target}"%"
        ORDER BY class_config_id DESC
    </select>

    <select id="getPrintList" resultType="com.hc.business.dto.ClassPrintDto">
        select *
        from (select count(1) course_count,
                     ss.user_id,
                     ss.class_id,
                     Max(ss.score) score,
                     Max(ss.create_time) create_time
              from (SELECT DISTINCT a.user_id, b.class_id, c.class_config_id, h.course_name, f.score, f.create_time
                    FROM `user` a
                             join user_status b on a.user_id = b.user_id
                             join class_config c on b.class_id = c.class_config_id
                             join class_course d on c.class_config_id = d.class_id
                             join user_course e on e.course_id = d.course_id
                             join user_test_history f on f.user_id = a.user_id and f.class_id = c.class_config_id
                             join paper g on g.paper_id = f.paper_id
                             join course h on h.course_id = e.course_id
                    where a.card_id = #{cardId} -- 身份证
                      and b.`status` = 1                   -- 课程正确 没有退费
                      and e.course_percent = 1             -- 课程必须学完
                      and d.course_type = 1                -- 只要必须课程
                      and f.score >= g.paper_score_pass -- >= 合格分数
                   ) ss
              group by ss.user_id, ss.class_id) sss
-- 判断所有必修课程,是不是都是进度 100,并且合格
        where sss.course_count = (select count(*) from class_course where course_type = 1 and class_id = sss.class_id)
    </select>


</mapper>