<?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.artfess.examine.dao.ExamSubjectInfoDao">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.artfess.examine.model.ExamSubjectInfo">
        <id column="id_" property="id" />
        <result column="code_" property="code" />
        <result column="name_" property="name" />
        <result column="train_type_" property="trainType" />
        <result column="train_level_" property="trainLevel" />
        <result column="user_type_id_" property="userTypeId" />
        <result column="major_id_" property="majorId" />
        <result column="type_id_" property="typeId" />
        <result column="memo_" property="memo" />
        <result column="sn_" property="sn" />
        <result column="is_dele_" property="isDele" />
        <result column="create_by_" property="createBy" />
        <result column="create_org_id_" property="createOrgId" />
        <result column="create_time_" property="createTime" />
        <result column="update_by_" property="updateBy" />
        <result column="update_time_" property="updateTime" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id_, code_, name_, train_type_, train_level_, user_type_, major_id_, pos_id_, memo_, sn_, is_dele_, create_by_, create_org_id_, create_time_, update_by_, update_time_
    </sql>
    <select id="getTree" resultType="com.artfess.examine.model.ExamSubjectType">
        SELECT
                 e.id_ as id,
                 e.name_,
                '0' AS parent_id_,
                e.create_time_,
                '1' as type
        FROM
                exam_subject_sys t
        LEFT JOIN exam_equipment_sys e ON T.major_id_ = e.id_
        WHERE
                e.is_dele_ = '0'
                GROUP BY e.name_ ,e.id_
            UNION ALL
        SELECT
                 o.id_ as id,
                 o.pos_name_ as name,
                e.sys_id_ AS parent_id_,
                o.create_time_,
                '2' as type
        FROM
                exam_pos_sys e
        LEFT JOIN uc_org_post o ON o.id_ = e.pos_id_
        WHERE
                o.is_dele_ = '0'
                GROUP BY o.pos_name_ ,o.id_,e.sys_id_


    </select>
    <select id="findByMajorIds" resultType="com.artfess.examine.model.ExamSubjectInfo">
        SELECT s.* FROM exam_subject_info s
        LEFT JOIN exam_subject_pos p on p.subject_id_ = s.id_
        where p.major_id_ in
        <foreach collection="vo.majorIds" index="index" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </select>
    <select id="getPositionInfo" resultType="com.artfess.examine.vo.PositionVo">
        SELECT
            sp.*,
            s.name_ AS majorName,
            op.pos_name_ AS positionName,
            op.code_ as positionCode
        FROM
            exam_subject_pos sp
            LEFT JOIN exam_equipment_sys s ON s.id_ = sp.major_id_
            LEFT JOIN uc_org_post op ON op.id_ = sp.position_id_
        where sp.subject_id_ = #{id}

    </select>
    <select id="queryPage" resultType="com.artfess.examine.model.ExamSubjectInfo">

        SELECT DISTINCT s.* FROM exam_subject_info s
        LEFT JOIN exam_subject_sys sp on sp.subject_id_ = s.id_
        LEFT JOIN exam_subject_pos po on po.subject_id_ = s.id_
        <if test="ew.customSqlSegment!=null">
            ${ew.customSqlSegment}
        </if>

    </select>
    <select id="getSubjectUserList" resultType="com.artfess.examine.vo.UserInfoVo">

        SELECT
        u.id_ AS userId,
        u.FULLNAME_ AS userName,
        u.account_ as account,
        ou.pos_id_ AS positionId
        FROM
        uc_user u
        inner JOIN uc_org_user ou ON ou.user_id_ = u.id_
        inner JOIN (SELECT s.position_id_ FROM exam_subject_pos s
        WHERE s.subject_id_ IN
        <foreach collection="vo.subjectIds" index="index" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
        GROUP BY s.position_id_) sp on sp.position_id_ = ou.pos_id_

    </select>
    <select id="findBySubjectId" resultType="com.artfess.examine.model.ExamEquipmentSys">
        SELECT
            s.*
        FROM
            exam_equipment_sys s
            LEFT JOIN exam_subject_sys sp ON sp.major_id_ = s.id_
            WHERE sp.subject_id_ = #{id}

    </select>
    <select id="notSubjectPage" resultType="com.artfess.examine.model.ExamSubjectInfo">
        SELECT DISTINCT s.* FROM (SELECT
        s.*
        FROM
        exam_subject_info s
        WHERE s.id_ not in (SELECT subject_id_ FROM exam_paper_base WHERE paper_type_ ='2'
        and  is_dele_ ='0'
        <if test="vo.id!=null">
            and id_ != '1597796798347481088'
        </if>

        AND create_time_> date_trunc('year', now()) and date_trunc('year', now()) +interval '1 year' > create_time_)) s
        LEFT JOIN exam_subject_sys sp on sp.subject_id_ = s.id_
        <if test="ew.customSqlSegment!=null">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="getuserTypeId" resultType="java.lang.String">

        SELECT id_ FROM uc_org_job
        WHERE name_ =#{userTypeId}
    </select>
    <select id="getPositionIds" resultType="java.lang.String">
        SELECT id_ FROM uc_org_post
        WHERE pos_name_ IN
        <foreach collection="names" index="index" item="posName" open="(" close=")" separator=",">
            #{posName}
        </foreach>
    </select>
    <select id="getSubjectCount" resultType="java.lang.Integer">
        SELECT count(DISTINCT s.*) FROM exam_subject_info s
        left JOIN exam_subject_pos p on p.subject_id_ = s.id_
--         left JOIN exam_subject_sys ss on ss.subject_id_ = s.id_
        WHERE s.name_ = #{name}
        <if test="id!=null">
            and s.id_ != #{id}
        </if>
        <if test="positionIds!=null and positionIds.size()>0">
            and p.position_id_ in
            <foreach collection="positionIds" index="index" item="positionId" open="(" close=")" separator=",">
                #{positionId}
            </foreach>
        </if>

        <if test="majorIds!=null and majorIds.size()>0">
            and ss.major_id_ in
            <foreach collection="majorIds" index="index" item="majorId" open="(" close=")" separator=",">
                #{majorId}
            </foreach>
        </if>
    </select>
    <select id="findBySubjectIds" resultType="com.artfess.examine.model.ExamEquipmentSys">
         SELECT
            s.*,sp.subject_id_ as subjectId
        FROM
            exam_equipment_sys s
            LEFT JOIN exam_subject_sys sp ON sp.major_id_ = s.id_
            WHERE sp.subject_id_ in
        <foreach collection="subjectIds" index="index" item="subjectId" open="(" close=")" separator=",">
            #{subjectId}
        </foreach>
    </select>
    <select id="findBySubject" resultType="com.artfess.examine.model.ExamSubjectInfo">

           SELECT DISTINCT s.* FROM exam_subject_info s
        left JOIN exam_subject_pos p on p.subject_id_ = s.id_
        left JOIN uc_org_post op on op.id_ = p.position_id_
        left JOIN exam_subject_sys ss on ss.subject_id_ = s.id_
        WHERE s.name_ = #{subjectName}
        and op.pos_name_ =#{positionName}
        and ss.name_ =#{majorName}
        and s.is_dele_ = '0'

    </select>
    <select id="getSubjectList" resultType="com.alibaba.fastjson.JSONObject">
       SELECT
            DISTINCT s.id_ AS id,
            s.name_ AS name,
            ss.major_id_ AS majorId,
            sp.position_id_ AS positionId,
            sp.org_id_ as orgId
        FROM
            exam_subject_info s
            LEFT JOIN exam_subject_sys ss ON ss.subject_id_ = s.id_
            LEFT JOIN exam_subject_pos sp ON sp.subject_id_ = s.id_
            where s.is_dele_ ='0'
        ORDER BY
            s.name_ desc
    </select>
    <select id="getOrgList" resultType="com.artfess.examine.model.ExamSubjectType">
        SELECT
            o.*
        FROM
            uc_org o

        WHERE
            o.is_dele_ = '0'
    </select>
    <select id="getExamSysInfo" resultType="com.artfess.examine.model.ExamSubjectType">
        SELECT
			DISTINCT s.id_ as id,
			s.name_ AS name,
			ps.org_id_ AS parentId
		FROM
			exam_equipment_sys s
			LEFT JOIN exam_pos_sys ps ON ps.sys_id_ = s.id_
		WHERE
			s.is_dele_ = '0'
    </select>
    <select id="getPositions" resultType="com.artfess.examine.model.ExamSubjectType">
        SELECT
			p.id_ as id,p.pos_name_ as name,p.org_id_ as orgId
		FROM
			uc_org_post p
		WHERE
			p.is_dele_ = '0'
    </select>
    <select id="getPositionId" resultType="java.lang.String">
        SELECT
            s.id_
        FROM
            uc_org_post s
        WHERE
            s.pos_name_ = #{positonNames}
            AND s.org_id_ =#{orgId}
    </select>
    <select id="coachSubjectList" resultType="com.artfess.examine.vo.UserInfoVo">
        SELECT * FROM (
        SELECT
            u.id_ as id,
            u.fullname_ AS userName,
            u.phone_ AS phone,
            u.account_ as account,
            u.sex_ AS sex ,s.subjectName
        FROM
            uc_user u
            INNER JOIN uc_user_role ur ON u.ID_ = ur.USER_ID_
            INNER JOIN UC_ROLE r ON ur.ROLE_ID_ = r.ID_
            LEFT JOIN ( SELECT coach_id_, string_agg ( name_, ',' ) AS subjectName FROM exam_subject_info GROUP BY coach_id_ ) s on s.coach_id_ = u.id_
        WHERE
            u.IS_DELE_ != '1'
            AND ur.IS_DELE_ != '1'
            AND r.IS_DELE_ != '1'
            AND u.STATUS_ = 1
            AND r.code_ = 'jly') s
        <if test="ew.customSqlSegment!=null">
            ${ew.customSqlSegment}
        </if>
    </select>

</mapper>
