package com.njcn.user.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.user.pojo.po.Dept;
import com.njcn.user.pojo.vo.DeptAllTreeVO;
import com.njcn.user.pojo.vo.DeptTreeVO;
import com.njcn.user.pojo.vo.DeptVO;
import com.njcn.user.pojo.vo.PvTerminalTreeVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author hongawen
 * @since 2021-12-13
 */
public interface DeptMapper extends BaseMapper<Dept> {

    /**
     * 分页查询字典数据
     * @param page 分页数据
     * @param queryWrapper 查询条件
     * @return 字典数据
     */
    Page<DeptVO> page(@Param("page")Page<DeptVO> page, @Param("ew") QueryWrapper<DeptVO> queryWrapper);

    /**
     * 查询父节点的所有上层节点
     * @param id 部门id
     * @return 父节点的所有上层节点
     */
    String getIdString(@Param("id")String id);

    /**
     *
     * @return  部门树
     */
    List<DeptTreeVO> getDeptTree(@Param("id")String id, @Param("type")List<Integer> type);

    /**
     *
     * @return  部门树
     */
    List<DeptAllTreeVO> getAllDeptTree(@Param("id")String id, @Param("type")List<Integer> type);

    /**
     *
     * @param state 部门状态
     * @return 查询已经绑定的行政区域
     */
    List<String> deptArea(@Param("state")Integer state);

    /**
     *
     * @param ids 部门集合
     * @param state 状态
     * @return 查询
     */
    List<Dept> selectPid(@Param("ids")List<String> ids,@Param("state")Integer state);

    /**
     * 删除部门和监测点的绑定
     * @param ids 部门集合
     */
    Boolean deleteDeptLine(@Param("ids")List<String> ids);

    /**
     * 删除部门和用户的绑定
     * @param ids 部门集合
     */
    Boolean deleteUserDept(@Param("ids")List<String> ids);

    /**
     * 根据条件获取后代部门索引
     * @param id 部门id
     * @param type 指定部门类型
     * @return 后代部门索引
     */
    List<DeptDTO> getDeptDescendantIndexes(@Param("id")String id, @Param("type")List<Integer> type);


    List<PvTerminalTreeVO> allDeptList();

    /**
     * 根据部门id获取所有子部门id集合
     * @author cdf
     * @date 2022/7/26
     */
    List<String> getDeptSonIds(@Param("deptId") String deptId);

    /**
     * 根据部门id获取所有子部门以及自己code集合
     * @author cdf
     * @date 2022/7/26
     */
    List<String> getDeptSonSlfeIds(@Param("deptId") String deptId);

    /**
     * 根据部门id获取子部门id集合
     * @author dhj
     * @date 2022/10/09
     */
    List<String> getDeptSonId(@Param("deptId") String deptId);
}
