package com.jojubanking.boot.module.system.service.deptxq;

import java.util.*;
import javax.validation.*;

import cn.hutool.core.collection.CollUtil;
import com.jojubanking.boot.framework.common.util.collection.CollectionUtils;
import com.jojubanking.boot.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import com.jojubanking.boot.module.system.controller.admin.deptxq.vo.*;
import com.jojubanking.boot.module.system.controller.app.xytjinfo.vo.DeptXqtjListReqVO;
import com.jojubanking.boot.module.system.dal.dataobject.dept.DeptDO;
import com.jojubanking.boot.module.system.dal.dataobject.deptxq.DeptXqDO;
import com.jojubanking.boot.framework.common.pojo.PageResult;

/**
 * 部门 Service 接口
 *
 * @author admin
 */
public interface DeptXqService {

    /**
     * 初始化部门的本地缓存
     */
    void initLocalCache();
    /**
     * 创建部门
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDeptXq(@Valid DeptXqCreateReqVO createReqVO);

    /**
     * 更新部门
     *
     * @param updateReqVO 更新信息
     */
    void updateDeptXq(@Valid DeptXqUpdateReqVO updateReqVO);

    /**
     * 删除部门
     *
     * @param id 编号
     */
    void deleteDeptXq(Long id);

    /**
     * 获得部门
     *
     * @param id 编号
     * @return 部门
     */
    DeptXqDO getDeptXq(Long id);

    /**
     * 获得部门列表
     *
     * @param ids 编号
     * @return 部门列表
     */
    List<DeptXqDO> getDeptXqList(Collection<Long> ids);

    /**
     * 获得部门分页
     *
     * @param pageReqVO 分页查询
     * @return 部门分页
     */
    PageResult<DeptXqDO> getDeptXqPage(DeptXqPageReqVO pageReqVO);

    /**
     * 获得部门列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 部门列表
     */
    List<DeptXqDO> getDeptXqList(DeptXqExportReqVO exportReqVO);

    /**
     * 筛选部门列表
     *
     * @param reqVO 筛选条件请求 VO
     * @return 部门列表
     */
    List<DeptXqDO> getSimpleXqDepts(DeptXqListReqVO reqVO);
    List<DeptXqDO> getSimpleXqtjDepts(DeptXqtjListReqVO reqVO);

    List<DeptXqDO> getSimpleXqDepts(Collection<Long> ids);
    default Map<Long, DeptXqDO> getDeptMap(Collection<Long> ids) {
        if (CollUtil.isEmpty(ids)) {
            return Collections.emptyMap();
        }
        List<DeptXqDO> list = getSimpleXqDepts(ids);
        return CollectionUtils.convertMap(list, DeptXqDO::getId);
    }

}
