<?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="hls.support.core.wechat.mapper.WechatDepartmentMapper">
    <resultMap id="BaseResultMap" type="hls.support.core.wechat.dto.WechatDepartment">
        <result column="id" property="id" jdbcType="DECIMAL"/>
        <result column="department_id" property="departmentId" jdbcType="DECIMAL"/>
        <result column="department_name" property="departmentName" jdbcType="VARCHAR"/>
        <result column="parent_id" property="parentId" jdbcType="DECIMAL"/>
        <result column="department_order" property="departmentOrder" jdbcType="DECIMAL"/>
        <result column="account_id" property="accountId" jdbcType="DECIMAL"/>
        <result column="parent_name" property="parentName" jdbcType="VARCHAR"/>
        <result column="is_active" property="parentName" jdbcType="DECIMAL"/>
        <result column="we_id" property="weId" jdbcType="VARCHAR"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="type" property="type" jdbcType="DECIMAL"/>
    </resultMap>

    <select id="queryByApp" resultMap="BaseResultMap">
        SELECT
        *
        FROM
        ( SELECT
        ad.department_id AS is_active
        FROM
        enterprise_app_department ad, wechat_department wd
        WHERE
        ad.department_id = wd.id
        AND ad.app_id = #{appId} ) t1
        left join (
        SELECT
        wa.company_name,
        wd.*,
        ( SELECT
        pwd.department_name
        FROM
        wechat_department pwd
        WHERE
        pwd.department_id = wd.parent_id
        ) parent_name
        FROM
        wechat_account wa,
        wechat_department wd
        WHERE
        wa.ACCOUNT_ID = #{accountId}
        AND wd.account_id = wa.account_id
        ) t2 ON t1.IS_ACTIVE = t2.id
    </select>

    <select id="queryDepartment" resultMap="BaseResultMap">
        SELECT
        wa.company_name,
        wd.*, (
        SELECT
        pwd.department_name
        FROM
        wechat_department pwd
        WHERE
        pwd.department_id = wd.parent_id
        ) parent_name
        FROM
        wechat_account wa,
        wechat_department wd
        <where>
            wa.account_id = wd.account_id
            <if test="accountId">
                AND wd.account_id = #{accountId}
            </if>
            <if test="departmentName">
                AND wd.department_name LIKE concat(concat('%',#{departmentName}),'%')
            </if>
            <if test="departmentId">
                AND wd.department_id = #{departmentId}
            </if>
            <if test="parentId">
                AND wd.parent_id = #{parentId}
            </if>
        </where>
    </select>

    <select id="treeListDeapartmentQuery" resultMap="BaseResultMap">
        SELECT
        wd.id,
        CONCAT(wd.department_id, '') we_id,
        wd.department_name NAME,
        (
        SELECT
        childwd.id
        FROM
        wechat_department childwd
        WHERE
        childwd.department_id = wd.parent_id
        ) parent_id,
        1 type
        FROM
        wechat_department wd
        <where>
            1=1
            <if test="accountId">
                AND wd.account_id = #{accountId}
            </if>
        </where>
        UNION
        (
        SELECT
        NULL id,
        CASE wm.user_id
        WHEN NULL THEN
        wm.open_id
        ELSE
        wm.user_id
        END we_id,
        wm.NAME,
        wmd.department_id parent_id,
        2 type
        FROM
        wechat_member wm
        LEFT JOIN wechat_member_department wmd ON wm.member_id = wmd.member_id
        <where>
           1=1
            <if test="accountId">
                AND wm.account_id = #{accountId}
            </if>
        </where>
        )
    </select>

    <insert id="insertDepartment">
        INSERT into wechat_department (department_id,department_name,parent_id,department_order) VALUES (#{departmentId},#{departmentName},#{parentId},#{departmentOrder})
    </insert>

    <update id="updateDepartment">
        UPDATE wechat_department SET department_name = #{departmentName},parent_id = #{parentId},department_order=#{departmentOrder} WHERE DEPARTMENT_ID = #{departmentId}
    </update>
</mapper>