<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~
  ~      Copyright (c) 2018-2025, hnqz All rights reserved.
  ~
  ~  Redistribution and use in source and binary forms, with or without
  ~  modification, are permitted provided that the following conditions are met:
  ~
  ~ Redistributions of source code must retain the above copyright notice,
  ~  this list of conditions and the following disclaimer.
  ~  Redistributions in binary form must reproduce the above copyright
  ~  notice, this list of conditions and the following disclaimer in the
  ~  documentation and/or other materials provided with the distribution.
  ~  Neither the name of the pig4cloud.com developer nor the names of its
  ~  contributors may be used to endorse or promote products derived from
  ~  this software without specific prior written permission.
  ~  Author: hnqz
  ~
  -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper">

	<!-- 通用查询映射结果 -->
	<resultMap id="BaseResultMap" type="com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation">
		<id column="ancestor" property="ancestor"/>
		<result column="descendant" property="descendant"/>
	</resultMap>

	<!-- 通用查询结果列 -->
	<sql id="Base_Column_List">
        ancestor, descendant
    </sql>

	<!-- 更新部门关系 -->
	<update id="updateDeptRelations">
        DELETE FROM sys_dept_relation
        WHERE
        	descendant IN ( SELECT temp.descendant FROM
        	( SELECT descendant FROM sys_dept_relation WHERE ancestor = #{descendant} ) temp )
        AND ancestor IN ( SELECT temp.ancestor FROM ( SELECT ancestor FROM
        	sys_dept_relation WHERE descendant = #{descendant} AND ancestor != descendant ) temp );

		INSERT INTO sys_dept_relation (ancestor, descendant)
		SELECT a.ancestor, b.descendant
		FROM sys_dept_relation a
			CROSS JOIN sys_dept_relation b
		WHERE a.descendant = #{ancestor}
			AND b.ancestor = #{descendant};
	</update>

	<!--删除部门-->
	<delete id="deleteDeptRelationsById">
        DELETE
        FROM
            sys_dept_relation
        WHERE
            descendant IN (
                SELECT
                    temp.descendant
                FROM
                    (
                        SELECT
                            descendant
                        FROM
                            sys_dept_relation
                        WHERE
                            ancestor = #{id}
                    ) temp
            )
    </delete>


	<!--删除部门-->
	<delete id="deleteDeptById">
        DELETE
        FROM
            sys_dept
        WHERE
           dept_id=#{id}
    </delete>

	<select id="selectDeptRelationsList" resultMap="BaseResultMap">
		SELECT *
		FROM sys_dept_relation
		WHERE ancestor = #{query.ancestor}
	</select>

	<select id="selectListByAncestor" resultMap="BaseResultMap">
		SELECT
		*
		FROM
		sys_dept_relation
		WHERE
		ancestor = #{query.ancestor}
		and
		descendant != ancestor
	</select>

	<select id="selectListByDescendant" resultMap="BaseResultMap">
		SELECT
		*
		FROM
		sys_dept_relation
		WHERE
		descendant = #{query.descendant,jdbcType=BIGINT}
		and
		descendant != ancestor
		and
		ancestor != 1
	</select>

	<select id="selectByDescendantList" resultMap="BaseResultMap">
		SELECT
		*
		FROM
		sys_dept_relation
		WHERE
		descendant = #{query.descendant,jdbcType=BIGINT}
	</select>

	<select id="selectDeptRelation" resultMap="BaseResultMap">
		SELECT
		*
		FROM
		sys_dept_relation
		WHERE
		ancestor = #{query.ancestor,jdbcType=BIGINT}
		and
		descendant = #{query.descendant,jdbcType=BIGINT}
	</select>

	<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    delete from sys_dept_relation
    where descendant = #{descendant,jdbcType=BIGINT}
  </delete>
</mapper>
