<?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.zcloud.mapper.datasource.xgf.TrainingBatchMapper">

	<!--表名 -->
	<sql id="tableName">
		BUS_TRAININGBATCH
	</sql>

	<!--数据字典表名 -->
	<sql id="dicTableName">
		SYS_DICTIONARIES
	</sql>

	<!-- 字段 -->
	<sql id="Field">
		f.CREATOR,
		f.CREATTIME,
		f.OPERATOR,
		f.OPERATTIME,
		f.ISDELETE,
		f.BATCH_NAME,
		f.CORPINFO_ID,
		f.USER_COUNT,
		f.TRAIN_CORP_DEPT,
		f.TRAIN_CORP_LEADER,
		f.DESCR,
		f.TRAIN_AREA,
		f.MANAGER,
		f.MANAGER_USER_ID,
		f.AUDIT_STATUS,
		f.TRAININGBATCH_ID,
		f.SUPERVISION,
		f.SUPERVISION_USER_ID,
		f.TERRITORIALITY,
		f.TERRITORIALITY_USER_ID
	</sql>

	<!-- 字段用于新增 -->
	<sql id="Field2">
		CREATOR,
		CREATTIME,
		OPERATOR,
		OPERATTIME,
		ISDELETE,
		BATCH_NAME,
		CORPINFO_ID,
		USER_COUNT,
		TRAIN_CORP_DEPT,
		TRAIN_CORP_LEADER,
		DESCR,
		TRAIN_AREA,
		MANAGER,
		MANAGER_USER_ID,
		AUDIT_STATUS,
		TYPE,
		TRAININGBATCH_ID,
		SUPERVISION,
		SUPERVISION_USER_ID,
		TERRITORIALITY,
		TERRITORIALITY_USER_ID
	</sql>

	<!-- 字段值 -->
	<sql id="FieldValue">
		#{CREATOR},
		#{CREATTIME},
		#{OPERATOR},
		#{OPERATTIME},
		#{ISDELETE},
		#{BATCH_NAME},
		#{CORPINFO_ID},
		#{USER_COUNT},
		#{TRAIN_CORP_DEPT},
		#{TRAIN_CORP_LEADER},
		#{DESCR},
		#{TRAIN_AREA},
		#{MANAGER},
		#{MANAGER_USER_ID},
		#{AUDIT_STATUS},
		#{TYPE},
		#{TRAININGBATCH_ID},
		#{SUPERVISION},
		#{SUPERVISION_USER_ID},
		#{TERRITORIALITY},
		#{TERRITORIALITY_USER_ID}
	</sql>

	<!-- 新增-->
	<insert id="save" parameterType="pd">
		insert into
	<include refid="tableName"></include>
		(
	<include refid="Field2"></include>
		) values (
	<include refid="FieldValue"></include>
		)
	</insert>

	<!-- 删除-->
	<delete id="delete" parameterType="pd">
		update
		<include refid="tableName"></include>
		set
			ISDELETE = '1'
		where
			TRAININGBATCH_ID = #{TRAININGBATCH_ID}
	</delete>

	<!-- 修改 -->
	<update id="edit" parameterType="pd">
		update
		<include refid="tableName"></include>
		set
			OPERATOR = #{OPERATOR},
			OPERATTIME = #{OPERATTIME},
			AUDIT_STATUS = #{AUDIT_STATUS},
			TRAIN_CORP_DEPT = #{TRAIN_CORP_DEPT},
			TRAIN_CORP_LEADER = #{TRAIN_CORP_LEADER},
			ENTRUST_TIME = #{ENTRUST_TIME},
			VERIFY_TIME = #{VERIFY_TIME}
		where
			TRAININGBATCH_ID = #{TRAININGBATCH_ID}
	</update>

	<!-- 修改 -->
	<update id="audit" parameterType="pd">
		update
		<include refid="tableName"></include>
		set
		AUDIT_STATUS = #{AUDIT_STATUS},
		<if test="TRAIN_CORP_DEPT != null and TRAIN_CORP_DEPT != ''">
			TRAIN_CORP_DEPT = #{TRAIN_CORP_DEPT},
		</if>
		<if test="TRAIN_CORP_LEADER != null and TRAIN_CORP_LEADER != ''">
			TRAIN_CORP_LEADER = #{TRAIN_CORP_LEADER},
		</if>
		<if test="ENTRUST_TIME != null and ENTRUST_TIME != ''">
			ENTRUST_TIME = #{ENTRUST_TIME},
		</if>
		<if test="AUDIT_TIME != null and AUDIT_TIME != ''">
			AUDIT_TIME = #{AUDIT_TIME},
		</if>
		<if test="VERIFY_TIME != null and VERIFY_TIME != ''">
			VERIFY_TIME = #{VERIFY_TIME},
		</if>
		<if test="AUDIT_DESCR != null and AUDIT_DESCR != ''">
			AUDIT_DESCR = #{AUDIT_DESCR},
		</if>
		<if test="CORP_AUDIT_DESCR != null and CORP_AUDIT_DESCR != ''">
			CORP_AUDIT_DESCR = #{CORP_AUDIT_DESCR},
		</if>
		TRAININGBATCH_ID = #{TRAININGBATCH_ID}
		where
		TRAININGBATCH_ID = #{TRAININGBATCH_ID}
	</update>
	<update id="graduation" parameterType="pd">
		update bus_trainusers a set a.STATUS = '2' where a.USER_ID in
		<foreach item="item" index="index" collection="users" open="(" separator="," close=")">
			#{item}
		</foreach>;
	</update>

	<!-- 通过ID获取数据 -->
	<select id="findById" parameterType="pd" resultType="pd">
		select
		f.*
		from
		<include refid="tableName"></include> f
		where
			f.TRAININGBATCH_ID = #{TRAININGBATCH_ID}
	</select>

	<!-- 列表 -->
	<select id="datalistPage" parameterType="page" resultType="pd">
		select
			f.*,
			ma.NAME MANAGER_DEPT_NAME,
			ma_u.NAME MANAGER_USER_NAME,
			md.NAME MAIN_DEPARTMENT_NAME,
			(select MANAGER_TIME from bus_trainusers t1 where t1.TRAININGBATCH_ID = f.TRAININGBATCH_ID order by t1.MANAGER_TIME DESC LIMIT 0,1) AS MANAGER_TIME,
			su.NAME SUPERVISION_DEPT_NAME,
			su_u.NAME SUPERVISION_USER_NAME,
			(select SUPERVISION_TIME from bus_trainusers t2 where t2.TRAININGBATCH_ID = f.TRAININGBATCH_ID order by t2.SUPERVISION_TIME DESC LIMIT 0,1) AS SUPERVISION_TIME,
			te.NAME TERRITORIALITY_DEPT_NAME,
			te_u.NAME TERRITORIALITY_USER_NAME,
			(select TERRITORIALITY_TIME from bus_trainusers t3 where t3.TRAININGBATCH_ID = f.TRAININGBATCH_ID order by t3.TERRITORIALITY_TIME DESC LIMIT 0,1) AS TERRITORIALITY_TIME,
			cu.NAME TRAIN_CORP_LEADER_NAME,
			d.NAME TRAIN_AREA_NAME,
			c.RELEVANT_UNIT_NAME,
			syu.NAME AS CREATOR_NAME,
			vcd.NAME SUPERVISE_DEPARTMENT_NAME,
			vci.CORP_NAME SUPERVISE_CORPINFO_NAME,
			corpTypeDic.NAME corpTypeName,
			vcu.NAME AS VCU_NAME,
			(select count(*) from bus_trainusers t5 where t5.TRAININGBATCH_ID = f.TRAININGBATCH_ID and f.SUPERVISION_USER_ID = #{pd.USER_ID} and (t5.SUPERVISION_STATE in('1','0') or t5.MANAGER_STATE = '0' or t5.TERRITORIALITY_STATE = '0')  ) as supervisionCount,
			(select count(*) from bus_trainusers t6 where t6.TRAININGBATCH_ID = f.TRAININGBATCH_ID and f.MANAGER_USER_ID = #{pd.USER_ID} and (t6.MANAGER_STATE in('1','0') or t6.SUPERVISION_STATE = '0')  ) as managerCount,
			(select count(*) from bus_trainusers t7 where t7.TRAININGBATCH_ID = f.TRAININGBATCH_ID and f.TERRITORIALITY_USER_ID = #{pd.USER_ID} and (t7.TERRITORIALITY_STATE in('1','0') or t7.SUPERVISION_STATE = '0') ) as territorialityCount,
			(select count(*) from bus_trainusers t4 where t4.TRAININGBATCH_ID = f.TRAININGBATCH_ID AND t4.SUPERVISION_STATE = '1' and t4.MANAGER_STATE = '1'
		and t4.TERRITORIALITY_STATE = '1' ) as PASS_COUNT<!-- 根据小齐要求,已更新为申请状态中的审核通过人员数-->
		from
		<include refid="tableName"></include> f
		left join vi_department_all ma on ma.DEPARTMENT_ID = f.MANAGER
		left join vi_corp_user ma_u on ma_u.USER_ID = f.MANAGER_USER_ID
		left join vi_department_all su on su.DEPARTMENT_ID = f.SUPERVISION
		left join vi_regulatory_user su_u on su_u.USER_ID = f.SUPERVISION_USER_ID
		left join vi_department_all te on te.DEPARTMENT_ID = f.TERRITORIALITY
		left join vi_corp_user te_u on te_u.USER_ID = f.TERRITORIALITY_USER_ID
		left join vi_corp_user cu on cu.USER_ID = f.TRAIN_CORP_LEADER
		left join sys_dictionaries d on d.DICTIONARIES_ID = f.TRAIN_AREA
		left join bus_corpinfo c on c.CORPINFO_ID = f.CORPINFO_ID
		left join BUS_CORPINFODETAILS bcd on bcd.CORPINFO_ID = c.CORPINFO_ID
		left join sys_dictionaries corpTypeDic on corpTypeDic.BIANMA = bcd.CORP_TYPE
		left join vi_regulatory_department md on md.DEPARTMENT_ID = c.MAIN_DEPARTMENT
		left join sys_user syu on syu.USERNAME = f.CREATOR
		left join vi_corp_user vcu on vcu.USERNAME = f.CREATOR
		left join vi_corp_department vcd on vcd.DEPARTMENT_ID = c.SUPERVISE_DEPARTMENT_ID
		left join vi_corp_info vci on vci.CORPINFO_ID = c.SUPERVISE_CORPINFO_ID
		where 1=1
		<if test="pd.TYPE != null and pd.TYPE != ''">
			and f.TYPE = #{pd.TYPE}
		</if>
		<if test="pd.KEYWORDS != null and pd.KEYWORDS != ''">
			and f.CREATOR LIKE CONCAT(CONCAT('%', #{pd.KEYWORDS}),'%')
		</if>
		  <!--9173 搜索框不好使-->
		<if test="pd.XGF_NAME_REG != null and pd.XGF_NAME_REG != ''">
			and c.RELEVANT_UNIT_NAME LIKE CONCAT(CONCAT('%', #{pd.XGF_NAME_REG,jdbcType=VARCHAR}),'%')
		</if>
		<if test="pd.XGF_NAME != null and pd.XGF_NAME != ''">
			and c.RELEVANT_UNIT_NAME LIKE CONCAT(CONCAT('%', #{pd.XGF_NAME}),'%')
		</if>
		<if test="pd.CORPINFO_ID != null and pd.CORPINFO_ID != ''">
			and f.CORPINFO_ID = #{pd.CORPINFO_ID}
		</if>
		<if test="pd.MANAGER != null and pd.MANAGER != ''">
			and f.MANAGER = #{pd.MANAGER}
		</if>
		<if test="pd.MANAGER_USER_ID != null and pd.MANAGER_USER_ID != ''">
			and f.MANAGER_USER_ID = #{pd.MANAGER_USER_ID}
		</if>
		<if test="pd.TERRITORIALITY != null and pd.TERRITORIALITY != ''">
			and f.TERRITORIALITY = #{pd.TERRITORIALITY}
		</if>
		<if test="pd.TRAIN_CORP_DEPT != null and pd.TRAIN_CORP_DEPT != ''">
			and f.TRAIN_CORP_DEPT = #{pd.TRAIN_CORP_DEPT}
		</if>
		<if test="pd.TRAIN_CORP_DEPTS != null and pd.TRAIN_CORP_DEPTS != ''">
			and FIND_IN_SET(f.TRAIN_CORP_DEPT,  #{pd.TRAIN_CORP_DEPTS})
		</if>
		<if test="pd.TRAIN_CORP_LEADER != null and pd.TRAIN_CORP_LEADER != ''">
			and f.TRAIN_CORP_LEADER = #{pd.TRAIN_CORP_LEADER}
		</if>
		<if test="pd.AUDIT_STATUS != null and pd.AUDIT_STATUS != ''">
			and f.AUDIT_STATUS = #{pd.AUDIT_STATUS}
		</if>
		<if test="pd.SELECT_STATUS != null and pd.SELECT_STATUS != '' and pd.SELECT_STATUS == 2 and (pd.AUDIT_STATUS == null or pd.AUDIT_STATUS == '')">
			and f.AUDIT_STATUS &gt; 1
		</if>
		<if test="pd.STARTTIME != null and pd.STARTTIME != ''">
			and DATE_FORMAT( f.CREATTIME, '%Y-%m-%d' ) BETWEEN DATE_FORMAT( #{pd.STARTTIME}, '%Y-%m-%d' ) and DATE_FORMAT( #{pd.ENDTIME}, '%Y-%m-%d' )
		</if>
		<if test="pd.VERIFY_START_TIME != null and pd.VERIFY_START_TIME != ''">
			and DATE_FORMAT( f.VERIFY_TIME, '%Y-%m-%d' ) BETWEEN DATE_FORMAT( #{pd.VERIFY_START_TIME}, '%Y-%m-%d' ) and DATE_FORMAT( #{pd.VERIFY_END_TIME}, '%Y-%m-%d' )
		</if>
		<if test="pd.ENTRUST_STARTTIME != null and pd.ENTRUST_STARTTIME != ''">
			and DATE_FORMAT( f.ENTRUST_TIME, '%Y-%m-%d' ) BETWEEN DATE_FORMAT( #{pd.ENTRUST_STARTTIME}, '%Y-%m-%d' ) and DATE_FORMAT( #{pd.ENTRUST_ENDTIME}, '%Y-%m-%d' )
		</if>
		<if test="pd.SUPERVISION_USER_ID != null and pd.SUPERVISION_USER_ID != ''"> <!-- 安检-->
			and f.SUPERVISION_USER_ID = #{pd.SUPERVISION_USER_ID}
		</if>
		<if test="pd.TERRITORIALITY_USER_ID != null and pd.TERRITORIALITY_USER_ID != ''">  <!-- 属地管理部门审核人员-->
			and f.TERRITORIALITY_USER_ID = #{pd.TERRITORIALITY_USER_ID}
		</if>
		<if test="pd.MANAGER_USER_ID != null and pd.MANAGER_USER_ID != ''"> <!-- 主管部门-->
			and f.MANAGER_USER_ID = #{pd.MANAGER_USER_ID}
		</if>
		<if test="pd.MAndTUserId != null and pd.MAndTUserId != ''"> <!-- 主管部门-->
			and (f.MANAGER_USER_ID = #{pd.MAndTUserId} or f.TERRITORIALITY_USER_ID = #{pd.MAndTUserId})
		</if>
		<if test="pd.user_index != null and pd.user_index != ''"> <!-- 主管部门-->
			and (f.MANAGER_USER_ID = #{pd.user_index} or f.TERRITORIALITY_USER_ID = #{pd.user_index} or f.SUPERVISION_USER_ID = #{pd.user_index})
		</if>
		order by  f.CREATTIME desc
	</select>

	<!-- 列表(全部) -->
	<select id="listAll" parameterType="pd" resultType="pd">
		select
		f.*
		from
		<include refid="tableName"></include> f
	</select>

	<!-- 批量删除 -->
	<delete id="deleteAll" parameterType="String">
		update
		<include refid="tableName"></include>
		set
			ISDELETE = '1'
		where
			TRAININGBATCH_ID in
		<foreach item="item" index="index" collection="ArrayDATA_IDS" open="(" separator="," close=")">
                 #{item}
		</foreach>
	</delete>

	<!-- 获取编码 -->
	<select id="getCode" parameterType="pd" resultType="pd">
		SELECT
		COUNT(1) as code
		FROM <include refid="tableName"></include> f
		WHERE f.CREATTIME LIKE CONCAT(#{CREATDATE},'%')
	</select>

	<select id="batchUserlistPage" parameterType="page" resultType="pd">
		SELECT u.USER_ID,
			u.USERNAME,
			u.CORPINFO_ID,
			u.NAME,
			u.ISFLOW,
			u.DEPART_STATE,
			t.STATUS,
			t.SUPERVISION_STATE,
			t.SUPERVISION_OPINION,
			t.SUPERVISION_TIME,
			tr.SUPERVISION,
			sup.NAME SUPERVISION_DEPT_NAME,
			t.MANAGER_STATE,
			t.MANAGER_OPINION,
			t.MANAGER_TIME,
			tr.MANAGER,
			man.NAME MANAGER_DEPT_NAME,
			t.TERRITORIALITY_STATE,
			t.TERRITORIALITY_OPINION,
			t.TERRITORIALITY_TIME,
			tr.TERRITORIALITY,
			tra.NAME TERRITORIALITY_DEPT_NAME,
			t.TRAINUSERS_ID,
			t.STEP_STATUS,
			d.NAME DEPARTMENT_NAME ,
			tr.TERRITORIALITY_USER_ID,
			tr.SUPERVISION_USER_ID,
			tr.MANAGER_USER_ID,
			te.NAME as TERRITORIALITY_USER_NAME,
			s.NAME as SUPERVISION_USER_NAME,
			m.NAME as MANAGER_USER_NAME,
			n.STATUS as TRAIN_STATUS,
			tr.AUDIT_STATUS
		from SYS_USER u
		left join oa_department d on d.DEPARTMENT_ID = u.DEPARTMENT_ID
		left join BUS_TRAINUSERS t on t.USER_ID = u.USER_ID
		left join bus_trainingbatch tr on tr.TRAININGBATCH_ID = t.TRAININGBATCH_ID
		 LEFT JOIN `qa-gwj-regulatory`.bus_class_info n ON n.TRAINUSERS_ID = t.TRAINUSERS_ID
		left join vi_corp_user te on te.USER_ID = tr.TERRITORIALITY_USER_ID
		left join vi_user_all s on s.USER_ID = tr.SUPERVISION_USER_ID
		left join vi_corp_user m on m.USER_ID = tr.MANAGER_USER_ID
		left join vi_department_all sup on sup.DEPARTMENT_ID = tr.SUPERVISION
		left join vi_department_all man on man.DEPARTMENT_ID = tr.MANAGER
		left join vi_department_all tra on man.DEPARTMENT_ID = tr.TERRITORIALITY
		where t.TRAININGBATCH_ID = #{pd.TRAININGBATCH_ID}
	</select>
	<select id="passUserlistPage" resultType="com.zcloud.entity.PageData">
		select distinct su.USERNAME,
						su.NAME,
						sud.SEX,
						su.CARD_ID,
						ci.RELEVANT_UNIT_NAME,
						od.NAME       as DEPARTMENT_NAME,
						sud.PHOTO,
						sud.PHONE,
						ci.CORPINFO_ID,
						su.USER_ID,
						a.TRAINUSERS_ID,
						ssu.JOBS_TYPE as PERSON_WORK_TYPE,
						ssu.CERTIFICATE
		from bus_trainusers a
				 left join bus_trainingbatch tb on a.TRAININGBATCH_ID = tb.TRAININGBATCH_ID
				 left join sys_user su on su.USER_ID = a.USER_ID
				 left join SYS_USER_DETAILS sud on su.USER_ID = sud.USER_ID
				 left join bus_corpinfo ci on ci.CORPINFO_ID = su.CORPINFO_ID
				 left join oa_department od on od.DEPARTMENT_ID = su.DEPARTMENT_ID
				 left join (select ssup.USER_ID, ssup. JOBS_TYPE, ssup.CERTIFICATE
							from sys_special_user ssup
							group by ssup.USER_ID) as ssu on ssu.USER_ID = a.USER_ID
		where su.AUDIT_STATE = '2'
		  and tb.ISDELETE = '0'
		  AND su.STATUS = '9'
		  AND (a.STATUS = '1'
			or a.STATUS = '2')
		  and a.SUPERVISION_STATE = 1
		  and a.MANAGER_STATE = 1
		  and a.TERRITORIALITY_STATE = 1
		order by tb.CREATTIME
	</select>

	<!-- 通过ID获取数据 -->
	<select id="findAndTimeById" parameterType="pd" resultType="pd">
		select
		f.*,
		supUser.USERNAME as SUPERVISION_USER_USERNAME,
		supUser.NAME as SUPERVISION_USER_NAME,
		supDept.NAME as SUPERVISION_DEPT_NAME,
		mangUser.NAME as MANAGER_USER_USERNAME,
		mangUser.NAME as MANAGER_USER_NAME,
		mangDept.NAME as MANAGER_DEPT_NAME,
		rerUser.NAME as ERRITORIALITY_USER_USERNAME,
		rerUser.NAME as ERRITORIALITY_USER_NAME,
		rerDept.NAME as ERRITORIALITY_DEPT_NAME,
		(SELECT MAX( t1.SUPERVISION_TIME ) AS SUPERVISION_TIME FROM bus_trainusers t1 where
		t1.TRAININGBATCH_ID = f.TRAININGBATCH_ID ) AS SUPERVISION_TIME,
		(SELECT MAX( t2.MANAGER_TIME ) AS MANAGER_TIME FROM bus_trainusers t2 where
		t2.TRAININGBATCH_ID = f.TRAININGBATCH_ID ) AS MANAGER_TIME,
		(SELECT MAX( t3.TERRITORIALITY_TIME ) AS TERRITORIALITY_TIME FROM bus_trainusers t3 where
		t3.TRAININGBATCH_ID = f.TRAININGBATCH_ID ) AS TERRITORIALITY_TIME
		from
		<include refid="tableName"></include> f
		left join vi_regulatory_user supUser  on supUser.USER_ID = f.SUPERVISION_USER_ID
		left join vi_regulatory_department supDept on supDept.DEPARTMENT_ID = f.SUPERVISION
		left join vi_corp_user mangUser on mangUser.USER_ID = f.MANAGER_USER_ID
		left join vi_corp_department mangDept on mangDept.DEPARTMENT_ID = f.MANAGER
		left join vi_corp_user rerUser on rerUser.USER_ID = f.TERRITORIALITY_USER_ID
		left join vi_corp_department rerDept on rerDept.DEPARTMENT_ID = f.TERRITORIALITY
		where
		f.TRAININGBATCH_ID = #{TRAININGBATCH_ID}
	</select>
</mapper>