package com.mosty.common.core.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mosty.common.core.business.entity.SysDept;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mosty.common.core.business.entity.SysRole;
import com.mosty.common.core.business.entity.SysUser;
import com.mosty.common.core.business.entity.vo.*;
import com.mosty.common.core.login.dto.DeptAllVo;
import com.mosty.common.core.login.dto.DeptDTO;
import com.mosty.common.token.UserInfo;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @author li
 * @description 针对表【sys_dept(部门表)】的数据库操作Service
 * @createDate 2022-02-12 16:52:58
 */
public interface SysDeptService extends IService<SysDept> {

    // 分页查询部门信息
    IPage<SysDept> selectByPage(DeptPage deptPage);


    // 分页查询下级部门信息
    List<SysDept> selectDept(DeptQuery dto);


    // 查询用户关联的部门
    List<DeptDTO> selectUserDeptList(Long id);

    // 查询子部门集合
    List<SysDept> getChildDeptList(Long deptId);

    // 查询该部门下的所有部门结合
    SysDeptVO getAllChildDeptList(SysDept sysDept, DeptTreeVO deptTreeVO);

    // 新增部门
    Long saveInfo(AddDeptVO addDeptVO, String ipAddress);

    // 修改部门
    void updateInfo(SysDeptVO sysDept, String ipAddress);

    // 删除部门
    void delete(DeleteDeptVO deleteDeptV, String ipAddress, UserInfo userInfo);

    // 根据部门查询部门下用户
    IPage<UserDeptVO> selectUserPageByDept(UserByDeptPage userByDeptPage);

    // 根据部门查询部门下角色
    IPage<RoleDeptVO> selectRolePageByDept(RoleByDeptPage roleByDeptPage);

    // 保存部门角色关联关系
    void saveRoleDeptInfo(AddRoleDeptVO roleDeptVO);

    // 添加用户部门关联关系
    void saveUserDeptInfo(AddUserDeptVO addUserDeptVO);

    // 删除用户部门关联关系
    void deleteUserDeptInfo(DeleteUserDeptVO deleteUserDeptVO);

    // 根据部门id 获取部门及以下部门id
    List<Long> getAllChildDeptIds(Long deptId);

    // 根据组织机构编码查询部门信息
    SysDept getDeptByOrgCode(String orgCode);

    // 部门数据同步
    Boolean deptSys();

    //根据部门编码分页查询当前及下级部门信息--第三方接口
    IPage<SysDept> getDeptList(DeptPage deptPage);

    // 查询部门下的所有子部门信息
    List<String> getChildDept(String deptid);

    // 查询部门下的所有子部门信息
    List<String> getChildDeptByOrgCode(String orgcode);

    // 查询所属部门、地市州、分县局
    DeptAllVo getOrgByDeptId(String deptId);
}
