package com.tykj.dev.device.user.subject.service;

import com.tykj.dev.device.user.base.req.UnitNameVo;
import com.tykj.dev.device.user.base.req.UnitsAddVo;
import com.tykj.dev.device.user.base.ret.*;
import com.tykj.dev.device.user.subject.entity.SecurityUser;
import com.tykj.dev.device.user.subject.entity.Units;

import java.util.List;

/**
 * @author zjm
 * @version 1.0.0
 * @ClassName UnitsService.java
 * @Description 单位逻辑层
 * @createTime 2020年07月28日 10:05:00
 */
public interface UnitsService extends PublicService<Units> {

    Units findById(Integer unitId);

    Units findbyName(String name);

    /**
     * 根据区域id查询区域下的单位
     */
    Units findUnitAreaId(Integer areaId);

    /**
     * 下级全部单位
     * @param leven 等级
     * @return
     */
    List<Units> findListById(Integer leven);


    /**
     * 装备管理 人员管理 组织结构列表
     * @param securityUser
     * @return
     */
    List<AreaVo> findListAreaUnitsVo(SecurityUser securityUser);

    List<Units> findListlevenGreaterThanEqual(Integer leven);



    /**
     * 查询下属单位id集合
     *
     * @param unitsId 单位id
     * @return 下属单位id集合
     */
    List<Integer> findListSubordinateId(Integer unitsId);


    /**
     * 查询下属单位id集合
     *
     * @param areaId 单位id
     * @return 下属单位id集合
     */
    List<UnitsVo> findListVoSubordinateAreaId(Integer areaId);

    /**
     * 根据区域id查看区域对象
     *
     * @param areaId 单位id
     * @return 单位id集合
     */
    List<UnitsVo> findListVoAreaId(Integer areaId);


    List<UnitsTrainVo> findListUnitsTrainVo(Integer unitsId);

    /**
     * 根据单位ID查询上级单位id集合
     *
     * @param unitsId 单位id
     * @return 上级单位ID集合
     */
    List<Integer> findSuperiorByunitsId(Integer unitsId);

    /**
     * 根据单位查询上级对象
     *
     * @param unitsId 区域id
     * @return 单位对象
     */
    Units findByAreaId(Integer unitsId);

    /**
     * 根据单位id查询下级级对象
     *
     * @param unitsId 单位id
     * @return 单位对象
     */
    List<Units> findBySubordinate(Integer unitsId);


    /**
     * 根据单位id查询下级级对象
     *
     * @param unitsId 单位id
     * @return 单位对象
     */
    List<Units> findBySubordinateAll(Integer unitsId);

    /**
     * 根据单位id查询下级级对象(不包括自己)
     *
     * @param unitsId 单位id
     * @return 单位对象
     */
    List<Units> findBySubordinateNotOneself(Integer unitsId);

    /**
     * 根据单位id查询下级单位名称集合
     *
     * @param unitsId 单位id
     * @return 单位对象
     */
    List<String> findBySubordinateUnitName(Integer unitsId);

    /**
     * 根据单位id查询下级单位名称集合
     *
     * @param unitsId 单位id
     * @return 单位对象
     */
    List<Units> findBySubordinateUnit(Integer unitsId);


    UnitsPage selectPage(Integer page, Integer size);

    /**
     * 根据用户查询 可当前单位的下级单位
     * @return 单位集合
     */
    List<Units> findByUserIdUnitsTrainListVo(Integer unitsId);

    /**
     * 根据id的集合查询单位集合
     */
    List<Units> findAllByIdIn(List<Integer> ids);


    List<Units> finAllDirectlUnderUnits();

    /**
     * 左边侧面导航栏接口
     */
    LeftNavigation findLeftNavigation(SecurityUser securityUser);

    /**
     * 装备库左边侧面导航栏接口
     */
    LeftNavigation findLeftNavigation1(SecurityUser securityUser);

    /**
     * 直属单位侧面导航栏接口
     */
    LeftNavigation findLeftNavigation2(SecurityUser securityUser);
    /**
     * 左边侧面导航栏接口 不包括直属单位
     */
    LeftNavigation findLeftNavigationNotDirectlyUnit(SecurityUser securityUser);

    /**
     * 省入库上级单位对象查询接口
     * 国家单位
     */
    List<Units> findSuperiorUnitsList();

    List<Units> findDirectlyUnder();

    List<Units> findSubordinateList(Integer unitsId);

    Units findNameUnit(UnitNameVo unitNameVo);

    void addUnitSortMap();

    boolean isProvUnit(Integer unitId);

    /**
     * 根据区域id查询所有的单位id
     * @param areaId 区域id
     * @return 所有的单位id
     */
    List<Integer> findByAreaId2(Integer areaId);

    /**
     * 单位管理使用 查询单位的接口
     */
    List<Units> unitManagement();


    /**
     * 新增单位接口
     */
    List<Units> saveUnits(UnitsAddVo unitsAddVo);

    /**
     * 添加单位所有单位列表
     */
    List<Units> belongsUnits();

    /**
     * 更新单位对象
     */
    Units updateUnit(Units units);


}
