package com.mortals.xhx.module.dept.service;

import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.dept.dao.DeptDao;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptTreeSelect;

import java.util.List;

/**
 * DeptService
 * <p>
 * 部门信息 service接口
 *
 * @author zxfei
 * @date 2023-03-06
 */
public interface DeptService extends ICRUDService<DeptEntity, Long> {

    DeptDao getDao();

    /**
     * 是否存在部门信息节点
     *
     * @param deptId 部门信息ID
     * @return 结果
     */
    boolean hasChildByDeptId(Long deptId);


    /**
     * 查询部门信息数据
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
    List<DeptEntity> selectDeptList(DeptEntity dept);


    /**
     * 构建前端所需要下拉树结构
     *
     * @param deptList 部门信息列表
     * @return 下拉树结构列表
     */
    List<DeptTreeSelect> buildDeptTreeSelect(List<DeptEntity> deptList);

    /**
     * 根据父id查询子节点
     *
     * @param parentId
     * @param context
     * @return
     */
    List<DeptTreeSelect> getListByParentId(Long parentId, Context context);


    /**
     * 更新部门人员数量
     *
     * @param context
     */
    Rest<Void> updateDeptNum(Context context);

    /**
     * 查询包含本部门所有下级部门
     * */
    List<DeptEntity> getAllChildrenDept(Long deptId) throws AppException;

    /**
     * 查询大厅列表
     * @return
     * @throws AppException
     */
    List<DeptEntity> getAllSala() throws AppException;

    /**
     * 查询大厅下所有部门列表
     * @return
     * @throws AppException
     */
    List<DeptEntity> getDeptBySalaId(Long salaId) throws AppException;

    /**
     * 同步部门信息
     * @param context
     * @return
     */
    Rest<String> syncDept(Context context);


    /**
     * 通过设备同步部门信息
     * @param context
     * @return
     */
    Rest<String> syncDeptByDevice(Context context);

}