<?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="org.jeecg.modules.system.mapper.SysDictMapper">

	<!-- 通过字典code获取字典数据 -->
	<select id="queryDictItemsByCode" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
		   select s.item_value as "value",s.item_text as "text" from sys_dict_item s
		   where dict_id = (select id from sys_dict where dict_code = #{code})
		   order by s.sort_order asc
	</select>
	
	<!-- 通过字典code获取字典数据 -->
	<select id="queryDictTextByKey" parameterType="String"  resultType="String">
		   select s.item_text from sys_dict_item s 
		   where s.dict_id = (select id from sys_dict where dict_code = #{code})
		   and s.item_value = #{key}
	</select>


	<!--通过查询指定table的 text code 获取字典-->
	<select id="queryTableDictItemsByCode" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
		   select ${text} as "text",${code} as "value" from ${table}
	</select>
	
	<!--通过查询指定table的 text code 获取字典（指定查询条件）-->
	<select id="queryTableDictItemsByCodeAndFilter" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
		   select ${text} as "text",${code} as "value" from ${table}
		<if test="filterSql != null and filterSql != ''">
			where ${filterSql}
		</if>
	</select>
	
	<!--通过查询指定table的 text code key 获取字典值-->
	<select id="queryTableDictTextByKey" parameterType="String" resultType="String">
		   select ${text} as "text" from ${table} where ${code}= #{key}
	</select>

	<!--通过查询指定table的 text code key 获取字典值，包含value-->
	<select id="queryTableDictByKeys" parameterType="String" resultType="org.jeecg.common.system.vo.DictModel">
		select ${text} as "text", ${code} as "value" from ${table} where ${code} in
		<foreach item="key" collection="keyArray" open="(" separator="," close=")">
			#{key}
		</foreach>
	</select>

	<!-- 重复校验 sql语句 -->
	<select id="duplicateCheckCountSql" resultType="Long" parameterType="org.jeecg.modules.system.model.DuplicateCheckVo">
		SELECT COUNT(*) FROM ${tableName} WHERE ${fieldName} = #{fieldVal} and id &lt;&gt; #{dataId}
	</select>
	
	<!-- 重复校验 sql语句 -->
	<select id="duplicateCheckCountSqlNoDataId" resultType="Long" parameterType="org.jeecg.modules.system.model.DuplicateCheckVo">
		SELECT COUNT(*) FROM ${tableName} WHERE ${fieldName} = #{fieldVal}
	</select>
		
	<!-- 查询部门信息 作为字典数据 -->
	<select id="queryAllDepartBackDictModel" resultType="org.jeecg.common.system.vo.DictModel">
		select id as "value",depart_name as "text" from sys_depart where del_flag = '0'
	</select>
	
		<!-- 查询用户信息 作为字典数据 -->
	<select id="queryAllUserBackDictModel" resultType="org.jeecg.common.system.vo.DictModel">
		select username as "value",realname as "text" from sys_user where del_flag = '0'
	</select>
	
	<!--通过查询指定table的 text code 获取字典数据，且支持关键字查询 -->
	<select id="queryTableDictItems" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
		select ${text} as "text",${code} as "value" from ${table} where ${text} like #{keyword}
	</select>
	
	<!-- 根据表名、显示字段名、存储字段名、父ID查询树 -->
	<select id="queryTreeList" parameterType="Object" resultType="org.jeecg.modules.system.model.TreeSelectModel">
		select ${text} as "title",
			   ${code} as "key",
			   <if test="hasChildField != null and hasChildField != ''">
			   (case when ${hasChildField} = '1' then 0 else 1 end) as isLeaf,
			   </if>
			   ${pidField} as parentId
			   from ${table}
			   where
			   <choose>
				   <when test="pid != null and pid != ''">
					   ${pidField} = #{pid}
				   </when>
				   <otherwise>
					   (${pidField} = '' OR ${pidField} IS NULL)
				   </otherwise>
			   </choose>
			   <if test="query!= null">
				   <foreach collection="query.entrySet()" item="value"  index="key" >
				   	and ${key} = #{value}
				   </foreach>
			   </if>
	</select>


	<!-- 分页查询字典表数据 -->
	<select id="queryDictTablePageList" parameterType="Object" resultType="org.jeecg.common.system.vo.DictModel">
		select ${query.text} as "text",${query.code} as "value" from ${query.table}
		where 1 = 1
		<if test="query.keyword != null and query.keyword != ''">
			and (${query.text} like '%${query.keyword}%' or ${query.code} like '%${query.keyword}%')
		</if>
		<if test="query.codeValue != null and query.codeValue != ''">
			and ${query.code} = #{query.codeValue}
		</if>
	</select>

</mapper>
