package com.dxhy.manage.service;

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

import com.baomidou.mybatisplus.extension.service.IService;
import com.dxhy.certificate.model.ReturnTokenModel;
import com.dxhy.common.utils.PageUtils;
import com.dxhy.manage.entity.SysDeptEntity;

/**
 * 部门管理
 *
 * @author jiaohongyang
 */
public interface SysDeptService extends IService<SysDeptEntity> {

    /**
     * 查询集团信息
     *
     * @param company
     *            集团编码
     * @return 部门信息
     */
    List<SysDeptEntity> queryList(String company);

    /**
     * 查询集团信息
     *
     * @param company
     *            集团编码
     * @return 部门信息
     */
    List<SysDeptEntity> queryListUser(String company);

    /**
     * 查询集团信息
     *
     * @param company
     *            集团编码
     * @return 部门信息
     */
    List<SysDeptEntity> queryListParent(String company);

    /**
     * 查询子部门ID列表
     *
     * @param parentId
     *            上级部门ID
     * @return 返回
     */
    List<Long> queryDetpIdList(Long parentId);

    /**
     * 获取子部门ID，用于数据过滤
     *
     * @param deptId
     *            部门id
     * @return 返回
     */
    List<Long> getSubDeptIdList(Long deptId);

    /**
     * 分页查询部门信息
     *
     * @param params
     *            入参
     * @return 返回
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 查询部门信息
     *
     * @param company
     *            集团编码
     * @param deptType
     *            部门类型
     * @return 部门信息
     */
    SysDeptEntity queryDept(String company, String deptType);

    /**
     * 新增
     *
     * @param dept
     *            部门信息
     */
    void saveDept(SysDeptEntity dept);

    /**
     * 修改
     *
     * @param dept
     *            部门信息
     */
    void updateDept(SysDeptEntity dept);

    /**
     * 删除
     *
     * @param id
     *            id
     */
    void deleteDept(Long id);

    /**
     * 查询部门信息
     *
     * @param deptId
     *            id
     * @return 返回
     */
    SysDeptEntity queryDeptById(Long deptId);

    /**
     * 查询
     *
     * @param taxno
     *            税号
     * @param orgtype
     *            类型
     * @param company
     *            集团编码
     * @param deptId
     *            部门id
     * @return 返回
     */
    Integer queryDeptTaxNo(String taxno, String orgtype, String company, Long deptId);

    /**
     * 导入
     *
     * @param datalist
     *            部门信息
     * @return 返回
     */
    int uploadDept(String datalist);

    /**
     * 转义
     *
     * @param deptEntity
     *            部门信息
     * @return 返回
     */
    SysDeptEntity toDept(SysDeptEntity deptEntity);

    /**
     * 启用停用
     *
     * @param deptEntity
     *            部门信息
     * @param functionNo
     *            类型
     * @param optType
     *            状态
     * @return 返回
     */
    String getTaxManage(SysDeptEntity deptEntity, String functionNo, String optType);

    /**
     * 获取证书token
     * 
     * @param params
     *            入参 taxno 税号 ， area 地区编码 ip 证书服务器ip index 证书槽位 password 证书密码
     * @return 返回
     */
    ReturnTokenModel getToken(Map<String, Object> params);
}
