package com.ruoyi.user.controller;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ruoyi.admin.api.entity.*;
import com.ruoyi.admin.api.feignClient.AdminClient;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.RedisConstants;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.vo.AddressDto;
import com.ruoyi.common.core.vo.UserDto;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.system.api.model.LoginUserInfo;
import com.ruoyi.user.entity.*;
import com.ruoyi.user.request.LoginPhoneRequest;
import com.ruoyi.user.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 用户列表 前端控制器
*
*
* @author hjl
* @since 2024-06-03
*/
@RestController
@RequestMapping("/user")
@Api(tags = {"用户端-登录"})
public class UserController {
@Resource
private UserService userService;
@Resource
private RedisService redisService;
@Resource
private TokenService tokenService;
@Resource
private AdminClient adminClient;
@Resource
private RecoveryClassifyService recoveryClassifyService;
@Resource
private RecoveryServeService recoveryServeService;
@Resource
private UserRecipientService userRecipientService;
/**
* 用户端默认头像
*/
@Value("${default.profilePicture}")
private String profilePicture;
/**
* 解密用户敏感数据
*
* @param encryptedData 明文,加密数据
* @param iv 加密算法的初始向量
* @param code 用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key
* @return 登录信息
*/
@ApiOperation("微信授权一键登录")
@GetMapping("/wxAuthorize")
@ApiImplicitParams({
@ApiImplicitParam(value = "用户允许登录后回调内容code", name = "code", dataType = "String", required = true),
@ApiImplicitParam(value = "明文,加密数据", name = "encryptedData", dataType = "String", required = true),
@ApiImplicitParam(value = "加密算法的初始向量", name = "iv", dataType = "String", required = true)
})
public R