package org.xyzh.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.dept.TbSysDept;

import java.util.List;

/**
 * @description DepartmentMapper.java文件描述 部门数据访问层
 * @filename DepartmentMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-09-28
 */
@Mapper
public interface DepartmentMapper extends BaseMapper<TbSysDept> {

    /**
     * @description 查询部门列表
     * @param filter 过滤条件
     * @return List<TbSysDept> 部门列表
     * @author yslg
     * @since 2025-10-06
     */
    List<TbSysDept> selectDepts(TbSysDept filter);

    /**
     * @description 根据父部门ID查询子部门列表
     * @param parentId 父部门ID
     * @return List<TbSysDept> 子部门列表
     * @author yslg
     * @since 2025-09-28
     */
    List<TbSysDept> selectByParentId(@Param("parentId") String parentId);

    /**
     * @description 检查部门名称是否存在
     * @param deptName 部门名称
     * @param excludeId 排除的部门ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-09-28
     */
    int countByDeptName(@Param("deptName") String deptName, @Param("excludeId") String excludeId);

    /**
     * @description 根据部门ID查询部门信息（包含父部门信息）
     * @param deptId 部门ID
     * @return TbSysDept 部门信息
     * @author yslg
     * @since 2025-09-28
     */
    TbSysDept selectDeptWithParent(@Param("deptId") String deptId);

    /**
     * @description 查询部门树结构
     * @return List<TbSysDept> 部门树
     * @author yslg
     * @since 2025-09-28
     */
    List<TbSysDept> selectDeptTree();

    /**
     * @description 插入部门
     * @param department 部门
     * @return int 影响行数
     * @author yslg
     * @since 2025-09-28
     */
    int insertDept(TbSysDept department);

    /**
     * @description 更新部门
     * @param department 部门
     * @return int 影响行数
     * @author yslg
     * @since 2025-09-28
     */
    int updateDept(TbSysDept department);

    /**
     * @description 删除部门
     * @param department 部门
     * @return int 影响行数
     * @author yslg
     * @since 2025-09-28
     */
    int deleteDept(TbSysDept department);
}
