package com.ho.user.service;


import com.ho.common.tools.util.PageResult;
import com.ho.user.api.entity.SysDept;
import com.ho.user.api.entity.SysUser;
import com.ho.user.api.vo.req.DeptManagerReq;
import com.ho.user.vo.req.DeptAddReqVO;
import com.ho.user.vo.req.DeptQuery;
import com.ho.user.vo.req.DeptUpdateReqVO;
import com.ho.user.vo.req.UserPageUserByDeptReqVO;
import com.ho.user.vo.resp.DeptRespNodeVO;

import java.util.List;
import java.util.Map;


/**
 * @ClassName: DeptService
 * 集团服务类
 * @Author: fancl
 * @CreateDate: 2022/8/10
 * @UpdateUser: fancl
 * @UpdateDate: 2022/8/10
 */
public interface DeptService {

    SysDept addDept(DeptAddReqVO vo);

    void updateDept(DeptUpdateReqVO vo);

    SysDept detailInfo(Integer id);

    void deleted(Integer id);

    List<DeptRespNodeVO> deptTreeList(DeptQuery query,String enableStatus);

    List<SysDept> depListByDeptId(Integer deptId);

    PageResult<SysUser> pageDeptUserInfo(UserPageUserByDeptReqVO vo);

    /**
     * 查一个人的部门列表 根据人员的token而不是Id
     * @return
     */
    List<SysDept> getUserDepts();

    Boolean checkUserHasDeptPower(Integer deptId, List<SysDept> userDepts);

    /**
     * 获取顶级Dept 迭代查询获取,然后放置到缓存中
     * @param deptId
     * @return
     */
    SysDept getTopDept(Integer deptId );

    List<SysDept> selectByIds(List<Integer> ids);

    SysDept selectByPrimaryKey(Integer deptId);

    //List<SysDept> selectEnableByRelationCode(String relationCode, String enable);

    //List<SysDept> selectAllByRelationCode(String relationCode);

    List<SysUser> getDeptUser(DeptManagerReq deptManagerReq);


    List<SysDept> getSubsidiaryDepts(List<SysDept> sysDepts,String status);


    public List<SysDept> getAllToTop(SysDept dept,List<SysDept> all);

    List<SysDept> selectByGroupId(Integer groupId);


    int getHierarchy(Map<Integer,SysDept> map,SysDept dept,Integer count);

    /**
     * 获取当前登录人以及传入所属部门id中的人
     * @param vo
     * @return
     */
    PageResult<SysUser> getUserInfosPage(UserPageUserByDeptReqVO vo);
}
