package com.yunzhupaas.permission.service;

import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.base.Page;
import com.yunzhupaas.base.Pagination;
import com.yunzhupaas.base.vo.DownloadVO;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.permission.model.user.UserIdListVo;
import com.yunzhupaas.permission.model.user.mod.UserConditionModel;
import com.yunzhupaas.permission.model.user.page.PaginationUser;
import com.yunzhupaas.permission.model.user.vo.UserByRoleVO;
import com.yunzhupaas.permission.model.user.vo.UserExportExceptionVO;
import com.yunzhupaas.permission.model.user.vo.UserExportVO;
import com.yunzhupaas.permission.model.user.vo.UserImportVO;

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

/**
 * 用户信息
 *
 * @author 云筑产品开发平台组
 * @version V3.1.0
 * @copyright 深圳市乐程软件有限公司
 * @date 2024-09-26 上午9:18
 */
public interface UserService extends SuperService<UserEntity> {

    /*======================get接口========================*/

    List<UserEntity> getAdminList();

    /**
     * 列表
     *
     * @param pagination 条件
     * @param enabledMark
     * @param gender
     * @return
     */
    List<UserEntity>  getList(PaginationUser pagination, String organizeId, Boolean flag, Boolean filter, Integer enabledMark, String gender);

    /**
     * 列表
     *
     * @param pagination 条件
     * @param filterCurrentUser
     * @return
     */
    List<UserEntity>  getList(Pagination pagination, Boolean filterCurrentUser);

    /**
     * 通过关键字查询
     *
     * @param pagination
     * @return
     */
    List<UserEntity> getUserPage(Pagination pagination);

    /**
     * 通过组织id获取用户列表
     *
     * @param organizeId 组织id
     * @param keyword    关键字
     * @return
     */
    List<UserEntity> getListByOrganizeId(String organizeId, String keyword);

    /**
     * 列表
     *
     * @return
     * @param enabledMark
     */
    List<UserEntity> getList(boolean enabledMark);

    /**
     * 用户名列表（在线开发）
     *
     * @param idList
     * @return
     */
    List<UserEntity> getUserNameList(List<String> idList);

    /**
     * 用户名列表（在线开发）
     *
     * @param idList
     * @return
     */
    List<UserEntity> getUserNameList(Set<String> idList);


    /**
     * （id : name/account）
     * @return
     */
    Map<String,Object> getUserMap();


    /**
     * （ name/account: id）
     * @return
     */
    Map<String,Object> getUserNameAndIdMap();

    Map<String, Object> getUserNameAndIdMap(boolean enabledMark);

    /**
     * 通过名称查询id
     *
     * @return
     */
    UserEntity getByRealName(String realName);


    /**
     * 通过名称查询id
     *
     * @return
     */
    UserEntity getByRealName(String realName,String account);

    /**
     * 列表
     *
     * @param managerId 主管Id
     * @param keyword   关键字
     * @return
     */
    List<UserEntity> getListByManagerId(String managerId, String keyword);

    /**
     * 信息
     *
     * @param id 主键值
     * @return
     */
    UserEntity getInfo(String id);

    /**
     * 信息
     *
     * @param account 账户
     * @return
     */
    UserEntity getUserByAccount(String account);
    /**
     * 信息
     *
     * @param mobile 手机号码
     * @return
     */
    UserEntity getUserByMobile(String mobile);

    /*==============================================*/

    Boolean setAdminListByIds(List<String> adminIds);

    /**
     * 验证账户
     *
     * @param account 账户
     * @return
     */
    boolean isExistByAccount(String account);

    /**
     * 创建
     *
     * @param entity 实体对象
     */
    Boolean create(UserEntity entity) throws Exception;

    /**
     * 判断用户额度
     */
    void beforeCheck();

    /**
     * 更新
     *
     * @param id     主键值
     * @param entity 实体对象
     */
    Boolean update(String id, UserEntity entity) throws Exception;

    /**
     * 删除
     *
     * @param entity 实体对象
     */
    void delete(UserEntity entity);

    /**
     * 修改密码
     *
     * @param entity 实体对象
     */
    void updatePassword(UserEntity entity);

    /**
     * 查询用户名称
     *
     * @param id 主键值
     * @return
     */
    List<UserEntity> getUserName(List<String> id);

    /**
     * 查询用户名称
     *
     * @param id 主键值
     * @return
     */
    List<UserEntity> getUserName(List<String> id, boolean filterEnabledMark);

    /**
     * 查询用户名称
     *
     * @param id 主键值
     * @return
     */
    List<UserEntity> getListByUserIds(List<String> id);

    /**
     * 查询出分页被禁用的账号
     *
     * @param id 主键值
     * @return
     */
    List<UserEntity> getUserList(List<String> id);

    /**
     * 通过account返回user实体
     *
     * @param account 账户
     * @return
     */
    UserEntity getUserEntity(String account);

    /**
     * 获取用户id
     *
     * @return
     */
    List<String> getListId();

    /**
     * 添加岗位或角色成员
     *
     * @param entity
     */
    void update(UserEntity entity, String type);

    /**
     * 添加岗位或角色成员
     *
     * @param entity
     */
    void updateLastTime(UserEntity entity, String type);

    /**
     * 判断是否为自己的下属
     *
     * @param id
     * @param managerId
     * @return
     */
    boolean isSubordinate(String id, String managerId);

    /**
     * 导出Excel
     *
     * @param dataType
     * @param selectKey
     * @param pagination
     * @return
     */
    DownloadVO exportExcel(String dataType, String selectKey, PaginationUser pagination);

    /**
     * 导入预览
     *
     * @param personList
     * @return
     */
    Map<String, Object> importPreview(List<UserExportVO> personList);

    /**
     * 导入数据
     *
     * @param dataList 数据源
     */
    UserImportVO importData(List<UserExportVO> dataList);

    /**
     * 通过组织id获取上级id集合
     *
     * @param organizeId
     * @param organizeParentIdList
     */
    void getOrganizeIdTree(String organizeId, StringBuffer organizeParentIdList);

    /**
     * 导出错误报告
     *
     * @param dataList
     * @return
     */
    DownloadVO exportExceptionData(List<UserExportExceptionVO> dataList);

    /**
     * 候选人分页查询
     *
     * @param id
     * @param pagination
     * @return
     */
    List<UserEntity> getUserName(List<String> id, Pagination pagination);

    /**
     * 候选人分页查询
     *
     * @param id
     * @param pagination
     * @param flag 是否过滤自己
     * @return
     */
    List<UserEntity> getUserNames(List<String> id, PaginationUser pagination, Boolean flag, Boolean enabledMark);

    /**
     * 根据角色ID获取所在组织下的所有成员
     * @param roleId 角色ID
     * @return
     */
    List<UserEntity> getListByRoleId(String roleId);


    /**
     * 删除在线的角色用户
     */
    Boolean delCurRoleUser(String message,List<String> objectIdAll);


    /**
     * 获取用户信息
     *
     *
     * @param orgIdList
     * @param keyword
     * @return
     */
    List<UserEntity> getList(List<String> orgIdList, String keyword);

    /**
     * 得到用户关系
     *
     * @param userIds
     * @param type
     * @return
     */
    List<String> getUserIdList(List<String> userIds, String type);

    /**
     * 得到用户关系
     *
     * @param userIds
     * @return
     */
    List<UserIdListVo> getObjList(List<String> userIds, Pagination pagination, String type);

    /**
     * 获取用户下拉框列表
     */
    List<UserByRoleVO> getListByAuthorize(String organizeId, Page page);

    /**
     * 查询给定的条件是否有默认当前登录者的默认用户值
     * @param userConditionModel
     * @return
     */
    String getDefaultCurrentValueUserId(UserConditionModel userConditionModel);

    List<UserEntity> getListByRoleIds(List<String> roleIds);

    /**
     * 通过ids转换数据
     *
     * @param ids
     * @return
     */
    List<String> getFullNameByIds(List<String> ids);

    /**
     * 通过ids返回相应的数据
     *
     * @param ids
     * @return
     */
    List<UserIdListVo> selectedByIds(List<String> ids);

    List<String> filterOrgAdministrator(List<String> listUser);

    List<UserEntity> getUserAccount(List<String> ids);

    void updateStand(List<String> ids,int standing);

    /**
     * 删除在线用户
     *
     * @param message
     * @param userIds 用户IDs
     * @return 执行结果
     */
    Boolean delCurUser(String message, List<String> userIds, Integer stand);
}

