package com.storlead.user.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.storlead.framework.mybatis.service.MyBaseService;
import com.storlead.framework.web.assemble.Result;
import com.storlead.user.pojo.entity.UserEntity;
import com.storlead.user.pojo.entity.UserForm;
import com.storlead.user.model.UserInfo;
import com.storlead.user.model.UserQueryModel;
import com.storlead.user.pojo.vo.UserVo;
import com.storlead.user.pojo.vo.WxUserVO;

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

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @Author scott
 * @since 2018-12-20
 */
public interface IUserService extends MyBaseService<UserEntity> {


	UserEntity getUserByName(String username);

	UserEntity getUserByMobile(String mobile);


    List<UserInfo> getUserListBySearch(UserQueryModel userQueryModel);

	List<UserEntity> getUserListByStaffIds(Collection<Long> staffIds);


	/**
	* 获取所有下级
	* 为了兼容
	*之前外包User用的 Integer。
	* @Param: [currentUserId]
	* @return: java.util.List<java.lang.Long>
	* @Author: xiaojiawei
	* @Date: 2022/5/7
	*/
	List<Long> getAllSubordinate(Long currentUserId);

	/**
	 * 同步OA组织架构
	 * 包含公司/分公司/部门/岗位/用户
	 *
	 * @return com.storlead.web.model.entity.User
	 * @author blank
	 * @date 2021-3-8 下午 3:22
	 */
	Boolean syncOa();

	Boolean syncWxId();

	/**
	 * 同步OA公司
	 *
	 * @return java.lang.Boolean
	 * @author blank
	 * @date 2021-3-23 下午 4:34
	 */
	Boolean syncCompany();

	/**
	 * 同步OA部门
	 *
	 * @return java.lang.Boolean
	 * @author blank
	 * @date 2021-3-23 下午 4:36
	 */
	Boolean syncDept();

	/**
	 * 同步OA岗位
	 *
	 * @return java.lang.Boolean
	 * @author blank
	 * @date 2021-3-23 下午 4:36
	 */
	Boolean syncJob();

	/**
	 * 同步OA用户
	 *
	 * @return java.lang.Boolean
	 * @author blank
	 * @date 2021-3-23 下午 4:34
	 */
	Boolean syncUser();

	/**
	 * 修改用户头像
	 *
	 * @return boolean
	 * @author YPZ
	 * @date 2022-3-2
	 */
	boolean updateAvater();

	/**
	 * 修改用户密码
	 *
	 * @param param 请求参数
	 *              password 旧密码
	 *              newPass 新密码
	 * @return java.lang.Boolean
	 * @author blank
	 * @date 2021-3-25 下午 2:26
	 */
	Result<?> updateUserPass(UserForm param);

	UserEntity getUserByUserName(String userName);

    List<Long> getListByUserRole();

	List<UserVo> searchHomeUserList(IPage<UserVo> page, Wrapper wrapper);
	/**
	 * 获取下属人员
	 * @return
	 */
	List<UserEntity> getDirectSubUserList(Long userId);

	UserVo getUserInfoById(Long userId);

	List<WxUserVO> getPingyinUserList(UserQueryModel userQueryModel);

	void updateLastAcTime(Long userId);

	Set<Long> getUserRoleIdsByApiUrl(Long userId, String apiUrl);

	Set<Long> selectUserRoleIdsByMenuId(Long userId, String menuId);

	Set<Long> selectUserRoleIdsByCommonScopeType(Long userId, String commonScopeType);
	/***
	  * @Description: 通过userIdList获取userMap
	  * @Param:
	  * @return:
	  * @Author: YPZ
	  * @Date: 2024/4/25 10:28
	  */
    Map<Long, UserEntity> IdListToUserMap(List<Long> userList);

	/***
	  * @Description: 查询在职员工
	  * @Param:
	  * @return:
	  * @Author: YPZ
	  * @Date: 2024/10/25 17:12
	  */
	List<UserEntity> activeUsers();

	/**
	 * 根据部门id获取用户id
	 * @param deptIds
	 * @return
	 */
	Set<Long> getUserIdsByDeptIds(List<Long> deptIds);

	List<UserEntity> getUserListByIds(List<Long> userIds);

	void updateLastFollowUpTime(List<Long> userIds);
}
