<?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.springblade.modules.system.mapper.DeptMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="deptResultMap" type="org.springblade.modules.system.pojo.entity.Dept">
        <id column="id" property="id"/>
        <result column="parent_id" property="parentId"/>
        <result column="dept_name" property="deptName"/>
        <result column="full_name" property="fullName"/>
        <result column="ancestors" property="ancestors"/>
        <result column="dept_category" property="deptCategory"/>
        <result column="sort" property="sort"/>
        <result column="remark" property="remark"/>
        <result column="is_deleted" property="isDeleted"/>
    </resultMap>

    <resultMap id="deptVOResultMap" type="org.springblade.modules.system.pojo.vo.DeptVO">
        <id column="id" property="id"/>
        <result column="parent_id" property="parentId"/>
        <result column="dept_name" property="deptName"/>
        <result column="full_name" property="fullName"/>
        <result column="ancestors" property="ancestors"/>
        <result column="dept_category" property="deptCategory"/>
        <result column="sort" property="sort"/>
        <result column="remark" property="remark"/>
        <result column="is_deleted" property="isDeleted"/>
        <result column="has_children" property="hasChildren"/>
    </resultMap>

    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
        <id column="id" property="id"/>
        <result column="parent_id" property="parentId"/>
        <result column="title" property="title"/>
        <result column="value" property="value"/>
        <result column="key" property="key"/>
        <result column="has_children" property="hasChildren"/>
    </resultMap>

    <select id="lazyList" resultMap="deptVOResultMap">
        SELECT
            dept.* ,
            (
                SELECT
                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
                FROM
                    blade_dept
                WHERE
                    parent_id = dept.id and is_deleted = 0
            ) AS "has_children"
        FROM
            blade_dept dept
        WHERE dept.is_deleted = 0
        <if test="param1!=null and param1!=''">
            and dept.tenant_id = #{param1}
        </if>
        <if test="param2!=null">
            and dept.parent_id = #{param2}
        </if>
        <if test="param3.deptName!=null and param3.deptName!=''">
            and dept.dept_name like concat(concat('%', #{param3.deptName}),'%')
        </if>
        <if test="param3.fullName!=null and param3.fullName!=''">
            and dept.full_name like concat(concat('%', #{param3.fullName}),'%')
        </if>
        ORDER BY dept.sort
    </select>

    <select id="tree" resultMap="treeNodeResultMap">
        select id, parent_id, dept_name as title, id as "value", id as "key" from blade_dept where is_deleted = 0
        <if test="_parameter!=null and _parameter!=''">
            and tenant_id = #{_parameter}
        </if>
        ORDER BY sort
    </select>

    <select id="lazyTree" resultMap="treeNodeResultMap" >
        SELECT
            dept.id,
            dept.parent_id,
            dept.dept_name AS title,
            dept.id AS "value",
            dept.id AS "key",
            (
                SELECT
                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
                FROM
                    blade_dept
                WHERE
                    parent_id = dept.id and is_deleted = 0
            ) AS "has_children"
        FROM
            blade_dept dept
        WHERE
            dept.parent_id = #{param2} AND dept.is_deleted = 0
        <if test="param1!=null and param1!=''">
            and dept.tenant_id = #{param1}
        </if>
        ORDER BY dept.sort
    </select>

    <select id="getDeptNames" resultType="java.lang.String">
        SELECT
        dept_name
        FROM
        blade_dept
        WHERE
        id IN
        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
            #{ids}
        </foreach>
        and is_deleted = 0
    </select>

    <select id="getDeptList" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            id as value,
            dept_name as label
        from blade_dept
        where is_deleted = 0
        <if test="id == null">
            and dept_category = '6' and (id = #{deptId} :: int8 or ancestors like '%' || #{deptId} || '%')
        </if>
        <if test="id != null and id != ''">
            and parent_id = #{id}
        </if>
    </select>

    <select id="getQxList" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            code as value,
            br.city_name || br.name as label
        from blade_region br
        where br.parent_code = #{deptId}
    </select>

    <select id="getJwsList" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            id as value,
            jwsmc as label
        from jdrh.jlrh_jws
        where is_deleted = 0 and ssbm_bm = #{id}
    </select>

    <select id="getDictList" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            dict_key as value,
            dict_value as label
        from blade_dict_biz
        where code = #{code} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
    </select>

    <select id="getFfxcList" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            remark as value,
            dict_value as label
        from blade_dict_biz
        where code = 'ffxclx' and parent_id > 0 and is_sealed = 0 and is_deleted = 0
    </select>

    <select id="selectPcs" resultMap="deptResultMap">
        select dept_name from blade_dept where dept_category = '6' and id :: text = #{deptId}
    </select>

    <select id="selectSq" resultMap="deptResultMap">
        select dept_name from blade_dept where dept_category = '7' and parent_id :: text = #{deptId}
    </select>

    <select id="selectSspcsBm" resultType="org.springblade.modules.system.pojo.entity.Dept">
        SELECT
            id,
            dept_name
        FROM
            blade_dept
        WHERE
            dept_name = #{ssfjMc}
    </select>

    <select id="selectSssqBm" resultMap="deptResultMap">
        select id from blade_dept where dept_name = #{sssq} and parent_id = #{id}
    </select>

    <select id="getLqddList" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            dzbm as value,
            xz as label
        from sspt.rk_dzxx
    </select>

    <select id="selectDeptByQx" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            code || '000000' as value,
            br.province_name || br.city_name || br.name as label
        from blade_region br
        where br.code = #{deptId}
    </select>

    <select id="selectDeptBySj" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            code || '000000' as value,
            br.province_name || br.city_name || br.name as label
        from blade_region br
        where br.parent_code = #{deptId}
    </select>


    <select id="getDeptListPcs" resultType="org.springblade.modules.system.pojo.vo.DeptListVO">
        select
            id as value,
            dept_name as label
        from blade_dept
        where id = #{deptId}
    </select>

    <select id="getDeptListSq" resultType="org.springblade.modules.system.pojo.vo.ListVO">
        select
            id as value,
            dept_name as label
        from blade_dept
        where parent_id :: text = #{value}
    </select>
</mapper>
