package com.njcn.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.user.pojo.param.UserInfoParm;
import com.njcn.user.pojo.param.UserParam;
import com.njcn.user.pojo.po.Role;
import com.njcn.user.pojo.po.User;
import com.njcn.user.pojo.dto.UserDTO;
import com.njcn.user.pojo.vo.UserVO;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hongawen
 * @since 2021-12-13
 */
public interface IUserService extends IService<User> {

    /**
     * 根据登录名获取用户信息
     * @param loginName 登录名
     * @return 用户信息
     */
    UserDTO getUserByName(String loginName);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 登录名
     * @return 用户基本信息
     */
    UserDTO loadUserByPhone(String phone);

    /**
     * 认证结束后，判断用户状态是否能正常访问系统
     * @param loginName 登录名
     */
    void judgeUserStatus(String loginName);

    /**
     * 功能描述: 新增用户
     * TODO
     * 1.sys_user_set表生成工作秘钥和SM4密码
     * 2.sys_user新增用户
     * 3.sys_user_role新增用户和角色关系
     * @param addUserParam
     * @return boolean
     * @author xy
     * @date 2021/12/30 11:42
     */
    boolean addUser(UserParam.UserAddParam addUserParam);

    /**
     * 功能描述:更新用户
     * TODO
     * @param updateUserParam
     * @return boolean
     * @author xy
     * @date 2022/1/13 13:38
     */
    boolean updateUser(UserParam.UserUpdateParam updateUserParam);

    /**
     * 功能描述:删除用户
     * TODO
     *
     * @param id
     * @return boolean
     * @author xy
     * @date 2022/1/13 16:31
     */
    boolean deleteUser(String id);

    /**
     * 功能描述:审核用户
     * TODO
     *
     * @param list
     * @return boolean
     * @author xy
     * @date 2022/1/13 16:31
     */
    boolean checkUser(List<String> list);

    /**
     * 功能描述:根据用户id获取用户详情
     * TODO
     *
     * @param id
     * @return com.njcn.user.pojo.vo.UserVO
     * @author xy
     * @date 2022/1/13 17:10
     */
    UserVO getUserById(String id);

    /**
     * 功能描述:根据查询条件分页查询列表
     * TODO
     *
     * @param queryParam
     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.njcn.user.pojo.vo.UserVO>
     * @author xy
     * @date 2022/1/14 9:26
     */
    Page<UserVO> userList(UserParam.UserQueryParam queryParam);

    /**
     * 功能描述:查询待审核用户列表
     * TODO
     *
     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.njcn.user.pojo.vo.UserVO>
     * @author xy
     * @date 2022/1/14 9:26
     */
    Page<UserVO> checkUserList(UserParam.UserQueryParam queryParam);

    /**
     * 功能描述: 修改用户密码
     * TODO
     *
     * @param id
     * @param password
     * @return boolean
     * @author xy
     * @date 2022/1/14 15:21
     */
    boolean updatePassword(String id,String password);

    /**
     * 功能描述:修改用户登录认证密码错误次数
     * @param loginName 登录名
     * @return boolean
     * @author xy
     */
    String updateUserLoginErrorTimes(String loginName);

    /**
     * 功能描述:密码二次确认
     * @param password
     * @return boolean
     * @author xy
     * @date 2022/1/19 16:37
     */
    boolean passwordConfirm(String password);

    /**
     * 功能描述:首次登录修改密码
     *
     * @param loginName 登录名
     * @param password  密码
     * @param ip        ip
     * @return boolean
     * @author xy
     * @date 2022/3/1 15:39
     */
    boolean updateFirstPassword(String loginName, String password, String ip);

    /**
     * 根据前端条件，查询用户数据，并保存在本地
     *
     * @param queryParam 导出用户列表的条件参数
     * @return 用户列表表格的绝对路径
     */
    String exportUser(UserParam.UserQueryParam queryParam,String methodDescribe);

    boolean activateUser(String id);

    List<User> getMarketList();

    List<UserVO> getFormalUserList();

    List<User> getUserListByDeptId(String deptId);

    boolean updateAppUser(UserInfoParm userInfoParm);

    String uploadImage(MultipartFile issuesFile);

    String getUrl(String headSculpture);

    List<User> getUserListByRoleCode(String roleCode);

    List<User> getUserByRoleType(Integer roleType);

    List<UserVO> listAllUserByDeptId(String deptId);

    List<UserVO> getUserVOByIdList(List<String> ids);

    List<String> getUserIdByRoleId(List<String> roleId);

    List<User> simpleList(Boolean allUserFlag);


    List<String> getColleaguesIdByUserId(String id);


    Boolean userRoleList();
}
