浏览代码

feat : 完成用户密码修改, 获取用户信息详情接口, 与前端联调完成

bilingfeng 2 年之前
父节点
当前提交
1a6615ad17

+ 8 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/SmsController.java

@@ -1,6 +1,7 @@
 package com.zanxiang.sdk.controller;
 
 import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.sdk.domain.params.SmsCheckParam;
 import com.zanxiang.sdk.domain.params.SmsSendParam;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
 import com.zanxiang.sdk.service.ISmsService;
@@ -32,4 +33,11 @@ public class SmsController {
     public ResultVo<Boolean> smsSend(@Validated @RequestBody SmsSendParam smsSendParam) {
         return smsService.smsSend(smsSendParam);
     }
+
+    @ApiOperation(value = "验证码校验")
+    @PostMapping("/check/msg")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
+    public ResultVo<String> smsCheck(@Validated @RequestBody SmsCheckParam smsCheckParam) {
+        return smsService.smsCheck(smsCheckParam);
+    }
 }

+ 7 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/UserController.java

@@ -64,4 +64,11 @@ public class UserController {
     public ResultVo updatePassword(@Validated @RequestBody UpdatePasswordParam updatePasswordParam) {
         return userService.updatePassword(updatePasswordParam);
     }
+
+    @ApiOperation(value = "用户获取信息详情")
+    @PostMapping("/get/user/detail")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
+    public ResultVo getUserDetail(@Validated @RequestBody UserDetailParam userDetailParam) {
+        return userService.getUserDetail(userDetailParam);
+    }
 }

+ 9 - 25
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/UpdatePasswordParam.java

@@ -14,12 +14,20 @@ import javax.validation.constraints.NotBlank;
 @Data
 public class UpdatePasswordParam {
 
+    /**
+     * 用户token
+     */
+    @ApiModelProperty(notes = "token")
+    @JsonAlias("verify_token")
+    @NotBlank(message = "注册用户名字不可为空")
+    private String token;
+
     /**
      * 用户名
      */
     @ApiModelProperty(notes = "用户名")
     @JsonAlias("mem-username")
-    @NotBlank(message = "注册用户名字不可为空")
+    @NotBlank(message = "用户名字不可为空")
     private String username;
 
     /**
@@ -29,28 +37,4 @@ public class UpdatePasswordParam {
     @NotBlank(message = "新密码不可为空")
     @JsonAlias("mem-password")
     private String password;
-
-    /**
-     * 验证码类型
-     */
-    @ApiModelProperty(notes = "验证码类型")
-    @NotBlank(message = "验证码类型不可为空")
-    @JsonAlias("sms-type")
-    private Integer type;
-
-    /**
-     * 手机号
-     */
-    @ApiModelProperty(notes = "手机号")
-    @NotBlank(message = "手机号不可为空")
-    @JsonAlias("sms-mobile")
-    private String mobile;
-
-    /**
-     * 验证码
-     */
-    @ApiModelProperty(notes = "验证码")
-    @NotBlank(message = "验证码不可为空")
-    @JsonAlias("sms-code")
-    private String code;
 }

+ 24 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/UserDetailParam.java

@@ -0,0 +1,24 @@
+package com.zanxiang.sdk.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-17
+ * @description : 用户详情参数
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class UserDetailParam extends CommonParam {
+
+    /**
+     * 用户token
+     */
+    @ApiModelProperty(notes = "token")
+    @NotBlank(message = "注册用户名字不可为空")
+    private String token;
+}

+ 2 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/UserLoginVO.java

@@ -1,5 +1,6 @@
 package com.zanxiang.sdk.domain.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -13,6 +14,7 @@ public class UserLoginVO {
     /**
      * 登录授权的token
      */
+    @ApiModelProperty(notes = "登录授权的token")
     private String token;
 
     /**

+ 61 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/UserVO.java

@@ -0,0 +1,61 @@
+package com.zanxiang.sdk.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-06-17
+ * @description : 用户信息
+ */
+@Data
+public class UserVO {
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(notes = "用户id")
+    private Long id;
+
+    /**
+     * 用户名
+     */
+    @ApiModelProperty(notes = "用户名")
+    private String username;
+
+    /**
+     * 昵称
+     */
+    @ApiModelProperty(notes = "昵称")
+    private String nickname;
+
+    /**
+     * 注册手机号
+     */
+    @ApiModelProperty(notes = "注册手机号")
+    private String regMobile;
+
+    /**
+     * 注册邮箱
+     */
+    @ApiModelProperty(notes = "注册邮箱")
+    private String regEmail;
+
+    /**
+     * 绑定邮箱
+     */
+    @ApiModelProperty(notes = "绑定邮箱")
+    private String email;
+
+    /**
+     * 绑定手机号码
+     */
+    @ApiModelProperty(notes = "绑定手机号码")
+    private String mobile;
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty(notes = "头像")
+    private String avatar;
+}

+ 9 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/ISmsService.java

@@ -2,6 +2,7 @@ package com.zanxiang.sdk.service;
 
 import com.zanxiang.common.domain.ResultVo;
 import com.zanxiang.common.enums.HttpStatusEnum;
+import com.zanxiang.sdk.domain.params.SmsCheckParam;
 import com.zanxiang.sdk.domain.params.SmsSendParam;
 
 /**
@@ -18,6 +19,14 @@ public interface ISmsService {
      */
     ResultVo<Boolean> smsSend(SmsSendParam smsSendParam);
 
+    /**
+     * 前端校验短信验证码
+     *
+     * @param smsCheckParam : 参数
+     * @return : 返回验证结果和token
+     */
+    ResultVo<String> smsCheck(SmsCheckParam smsCheckParam);
+
     /**
      * 校验短信验证码
      *

+ 9 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/IUserService.java

@@ -6,6 +6,7 @@ import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.sdk.domain.dto.UserDTO;
 import com.zanxiang.sdk.domain.params.*;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
+import com.zanxiang.sdk.domain.vo.UserVO;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -59,6 +60,14 @@ public interface IUserService extends IService<User> {
      */
     ResultVo updatePassword(UpdatePasswordParam updatePasswordParam);
 
+    /**
+     * 获取用户信息
+     *
+     * @param userDetailParam : 用户详情参数
+     * @return : 返回用户信息
+     */
+    ResultVo<UserVO> getUserDetail(UserDetailParam userDetailParam);
+
     /**
      * 检查用户手机号是否存在
      *

+ 11 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/IUserTokenService.java

@@ -1,6 +1,7 @@
 package com.zanxiang.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.mybatis.entity.UserToken;
 import com.zanxiang.sdk.domain.dto.UserTokenDTO;
 
@@ -29,6 +30,16 @@ public interface IUserTokenService extends IService<UserToken> {
      */
     UserTokenDTO getTokenInfoByUserDevice(Long userId, String deviceType);
 
+    /**
+     * 用户token校验
+     *
+     * @param token      : 用户token
+     * @param userId     : 用户id
+     * @param deviceType : 设备类型
+     * @return : 返回token校验结果
+     */
+    HttpStatusEnum checkUserToken(String token, Long userId, String deviceType);
+
     /**
      * 获取用户token
      *

+ 31 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/SmsServiceImpl.java

@@ -3,14 +3,16 @@ package com.zanxiang.sdk.service.Impl;
 import com.zanxiang.common.domain.ResultVo;
 import com.zanxiang.common.enums.ExpireTimeEnum;
 import com.zanxiang.common.enums.HttpStatusEnum;
+import com.zanxiang.common.enums.SmsTypeEnum;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.sdk.common.constant.RedisKeyConstant;
 import com.zanxiang.sdk.common.util.RedisUtils;
 import com.zanxiang.sdk.domain.dto.UserDTO;
-import com.zanxiang.common.enums.SmsTypeEnum;
+import com.zanxiang.sdk.domain.params.SmsCheckParam;
 import com.zanxiang.sdk.domain.params.SmsSendParam;
 import com.zanxiang.sdk.service.ISmsService;
 import com.zanxiang.sdk.service.IUserService;
+import com.zanxiang.sdk.service.IUserTokenService;
 import com.zanxiangnet.module.sms.pojo.SendResult;
 import com.zanxiangnet.module.sms.service.impl.AliSmsService;
 import lombok.extern.slf4j.Slf4j;
@@ -39,6 +41,9 @@ public class SmsServiceImpl implements ISmsService {
     @Autowired
     private AliSmsService aliSmsService;
 
+    @Autowired
+    private IUserTokenService userTokenService;
+
     /**
      * 发送短信验证码
      *
@@ -90,6 +95,31 @@ public class SmsServiceImpl implements ISmsService {
         return new ResultVo<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }
 
+    /**
+     * 前端校验短信验证码
+     *
+     * @param smsCheckParam : 参数
+     * @return : 返回验证结果和token
+     */
+    @Override
+    public ResultVo<String> smsCheck(SmsCheckParam smsCheckParam) {
+        //校验短信验证码
+        HttpStatusEnum httpStatusEnum = this.smsCheck(smsCheckParam.getType(), smsCheckParam.getMobile(), smsCheckParam.getCode());
+        //校验不通过
+        if (!Objects.equals(httpStatusEnum, HttpStatusEnum.SUCCESS)) {
+            return new ResultVo<>(httpStatusEnum);
+        }
+        //查询用户信息
+        UserDTO userDTO = userService.getUserInfoByMobile(smsCheckParam.getMobile());
+        if (userDTO == null) {
+            return new ResultVo<>(HttpStatusEnum.PHONE_NOT_REG);
+        }
+        //获取token
+        String userToken = userTokenService.getUserToken(userDTO.getId(), userDTO.getDeviceType());
+        //返回
+        return new ResultVo<>(HttpStatusEnum.SUCCESS, userToken);
+    }
+
     /**
      * 校验短信验证码
      *

+ 42 - 15
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.common.enums.AccountStatusEnum;
+import com.zanxiang.common.enums.CmfSaltEnum;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.IpUtils;
@@ -13,10 +15,10 @@ import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.mapper.UserMapper;
 import com.zanxiang.sdk.domain.dto.UserDTO;
-import com.zanxiang.common.enums.AccountStatusEnum;
-import com.zanxiang.common.enums.CmfSaltEnum;
+import com.zanxiang.sdk.domain.dto.UserTokenDTO;
 import com.zanxiang.sdk.domain.params.*;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
+import com.zanxiang.sdk.domain.vo.UserVO;
 import com.zanxiang.sdk.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
@@ -316,22 +318,24 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVo<Boolean> updatePassword(UpdatePasswordParam updatePasswordParam) {
-        String mobile = updatePasswordParam.getMobile();
-        Integer type = updatePasswordParam.getType();
-        String code = updatePasswordParam.getCode();
-        String username = updatePasswordParam.getUsername();
+        String token = updatePasswordParam.getToken();
         String password = updatePasswordParam.getPassword();
-        //根据用户名查询用户信息
-        User user = super.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getUsername, username)
-                .eq(User::getMobile, mobile));
+        String username = updatePasswordParam.getUsername();
+        //查询用户信息
+        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.checkPhone(username)) {
+            queryWrapper.eq(User::getMobile, username);
+        } else {
+            queryWrapper.eq(User::getUsername, username);
+        }
+        User user = super.getOne(queryWrapper);
         if (user == null) {
             return new ResultVo<>(HttpStatusEnum.USERNAME_NOT_EXISTS);
         }
-        //短信验证码校验
-        HttpStatusEnum httpStatusEnum = smsService.smsCheck(type, mobile, code);
-        if (!Objects.equals(httpStatusEnum, HttpStatusEnum.SUCCESS)) {
-            return new ResultVo<>(httpStatusEnum);
+        //验证token是否存在
+        HttpStatusEnum checkUserTokenEnum = userTokenService.checkUserToken(token, user.getId(), user.getDeviceType());
+        if (!Objects.equals(HttpStatusEnum.SUCCESS, checkUserTokenEnum)) {
+            return new ResultVo<>(checkUserTokenEnum);
         }
         //密码校验
         HttpStatusEnum checkPasswordEnum = this.checkPassword(password);
@@ -342,11 +346,34 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         super.update(new LambdaUpdateWrapper<User>()
                 .set(User::getPassword, this.cmfPassword(password))
                 .set(User::getUpdateTime, LocalDateTime.now())
-                .eq(User::getId, user.getId()));
+                .eq(User::getUsername, username));
         //返回修改成功
         return new ResultVo<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }
 
+    /**
+     * 获取用户信息
+     *
+     * @param userDetailParam : 用户详情参数
+     * @return : 返回用户信息
+     */
+    @Override
+    public ResultVo<UserVO> getUserDetail(UserDetailParam userDetailParam) {
+        String token = userDetailParam.getToken();
+        String deviceType = userDetailParam.getDeviceType();
+        UserTokenDTO userTokenDTO = userTokenService.getTokenInfoByTokenDevice(token, deviceType);
+        if (userTokenDTO == null) {
+            return new ResultVo<>(HttpStatusEnum.INVALID_PARAMS);
+        }
+        //查询用户信息
+        User user = super.getById(userTokenDTO.getUserId());
+        if (user == null) {
+            return new ResultVo<>(HttpStatusEnum.UNKNOWN_ERROR);
+        }
+        UserVO userVO = BeanUtils.copy(user, UserVO.class);
+        return new ResultVo<>(HttpStatusEnum.SUCCESS, userVO);
+    }
+
     /**
      * 密码cfm加密
      *

+ 19 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserTokenServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.nacos.common.utils.MD5Utils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.common.enums.ExpireTimeEnum;
+import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.text.UUID;
 import com.zanxiang.common.utils.DateUtils;
@@ -22,6 +23,7 @@ import org.springframework.stereotype.Service;
 import java.security.NoSuchAlgorithmException;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author : lingfeng
@@ -97,6 +99,23 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
         return BeanUtils.copy(userToken, UserTokenDTO.class);
     }
 
+    /**
+     * 用户token校验
+     *
+     * @param token      : 用户token
+     * @param userId     : 用户id
+     * @param deviceType : 设备类型
+     * @return : 返回token校验结果
+     */
+    @Override
+    public HttpStatusEnum checkUserToken(String token, Long userId, String deviceType) {
+        UserTokenDTO userTokenDTO = this.getTokenInfoByUserDevice(userId, deviceType);
+        if (userTokenDTO != null && Objects.equals(userTokenDTO.getToken(), token)) {
+            return HttpStatusEnum.SUCCESS;
+        }
+        return HttpStatusEnum.INVALID_PARAMS;
+    }
+
     /**
      * 获取用户token
      *