Commit 164408e0 authored by liming's avatar liming

feat(初始化项目): 登录注册统一接口

parent 91353747
package com.antai.sport.http.server.common.base; package com.antai.sport.http.server.common.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import java.util.ArrayList;
import java.util.List;
/** /**
* @Author liming * @Author liming
...@@ -21,78 +14,27 @@ import java.util.List; ...@@ -21,78 +14,27 @@ import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class Result { public class Result<T> {
public final static Integer SUCCESS = 1; public final static Integer SUCCESS = 1;
public final static Integer FAIL = 2; public final static Integer FAIL = 2;
@ApiModelProperty(value = "请求结果 1:成功 2:失败")
private Integer resultType = SUCCESS; private Integer resultType = SUCCESS;
@ApiModelProperty(value = "响应Code")
private String respCode; private String respCode;
@ApiModelProperty(value = "响应信息")
private String respMsg; private String respMsg;
@ApiModelProperty(value = "异常代码")
private String errorCode; private String errorCode;
private Object data; @ApiModelProperty(value = "数据包")
private T data;
@ApiModelProperty(value = "是否需要刷新Token")
private boolean refreshToken; private boolean refreshToken;
@ApiModelProperty(value = "长Token,仅当短Token失效时使用")
private String longToken; private String longToken;
@ApiModelProperty(value = "短Token")
private String shortToken; private String shortToken;
public static ResponseEntity<Result> error(RespCodeEnum RespCodeEnum) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.getCode());
Result.setRespMsg(RespCodeEnum.getMessage());
Result.setResultType(FAIL);
return new ResponseEntity<>(Result, HttpStatus.OK);
}
public static ResponseEntity<Result> error(RespCodeEnum RespCodeEnum, String errorMsg) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.getCode());
Result.setRespMsg(errorMsg);
Result.setResultType(FAIL);
return new ResponseEntity<>(Result, HttpStatus.OK);
}
public static ResponseEntity<Result> error(RespCodeEnum RespCodeEnum, BindingResult bindingResult) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.getCode());
Result.setRespMsg(RespCodeEnum.getMessage());
Result.setResultType(FAIL);
StringBuilder errorStr = new StringBuilder();
List<String> errorList = new ArrayList<>();
for (int i = 0; i < bindingResult.getErrorCount(); i++) {
ObjectError oe = bindingResult.getAllErrors().get(i);
errorList.add(oe.getDefaultMessage());
if (i == 0) {
errorStr.append(oe.getDefaultMessage());
} else {
errorStr.append(",").append(oe.getDefaultMessage());
}
}
Result.setData(errorStr.toString());
return new ResponseEntity<>(Result, HttpStatus.OK);
}
public static ResponseEntity<Result> success(HttpHeaders httpHeaders, Object object) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.SUCCESS.getCode());
Result.setRespMsg(RespCodeEnum.SUCCESS.getMessage());
Result.setData(object);
Result.setResultType(SUCCESS);
return new ResponseEntity<>(Result, httpHeaders, HttpStatus.OK);
}
public static ResponseEntity<Result> success(Object object) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.SUCCESS.getCode());
Result.setRespMsg(RespCodeEnum.SUCCESS.getMessage());
Result.setData(object);
Result.setResultType(SUCCESS);
return new ResponseEntity<>(Result, new HttpHeaders(), HttpStatus.OK);
}
public static ResponseEntity<Result> success(Result result) {
result.setRespCode(RespCodeEnum.SUCCESS.getCode());
result.setResultType(SUCCESS);
return new ResponseEntity<>(result, new HttpHeaders(), HttpStatus.OK);
}
} }
package com.antai.sport.http.server.common.util;
import com.antai.sport.http.server.common.base.RespCodeEnum;
import com.antai.sport.http.server.common.base.Result;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import java.util.ArrayList;
import java.util.List;
/**
* @Author liming
* @Date 2021/8/23 13:30
* @Email lmmax@126.com
* @Description:
*/
public class ResultUtil {
public static ResponseEntity<Result> success() {
Result result = new Result();
result.setRespCode(RespCodeEnum.SUCCESS.getCode());
result.setResultType(Result.SUCCESS);
return new ResponseEntity<>(result, new HttpHeaders(), HttpStatus.OK);
}
public static ResponseEntity<Result> error(RespCodeEnum RespCodeEnum) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.getCode());
Result.setRespMsg(RespCodeEnum.getMessage());
Result.setResultType(Result.FAIL);
return new ResponseEntity<>(Result, HttpStatus.OK);
}
public static ResponseEntity<Result> error(RespCodeEnum RespCodeEnum, String errorMsg) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.getCode());
Result.setRespMsg(errorMsg);
Result.setResultType(Result.FAIL);
return new ResponseEntity<>(Result, HttpStatus.OK);
}
public static ResponseEntity<Result> error(RespCodeEnum RespCodeEnum, BindingResult bindingResult) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.getCode());
Result.setRespMsg(RespCodeEnum.getMessage());
Result.setResultType(Result.FAIL);
StringBuilder errorStr = new StringBuilder();
List<String> errorList = new ArrayList<>();
for (int i = 0; i < bindingResult.getErrorCount(); i++) {
ObjectError oe = bindingResult.getAllErrors().get(i);
errorList.add(oe.getDefaultMessage());
if (i == 0) {
errorStr.append(oe.getDefaultMessage());
} else {
errorStr.append(",").append(oe.getDefaultMessage());
}
}
Result.setData(errorStr.toString());
return new ResponseEntity<>(Result, HttpStatus.OK);
}
public static <T> ResponseEntity<Result<T>> success(HttpHeaders httpHeaders, T data) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.SUCCESS.getCode());
Result.setRespMsg(RespCodeEnum.SUCCESS.getMessage());
Result.setData(data);
Result.setResultType(Result.SUCCESS);
return new ResponseEntity<>(Result, httpHeaders, HttpStatus.OK);
}
public static <T> ResponseEntity<Result<T>> success(T data) {
Result Result = new Result();
Result.setRespCode(RespCodeEnum.SUCCESS.getCode());
Result.setRespMsg(RespCodeEnum.SUCCESS.getMessage());
Result.setData(data);
Result.setResultType(Result.SUCCESS);
return new ResponseEntity<>(Result, new HttpHeaders(), HttpStatus.OK);
}
public static <T> ResponseEntity<Result<T>> success(Result<T> result) {
result.setRespCode(RespCodeEnum.SUCCESS.getCode());
result.setResultType(Result.SUCCESS);
return new ResponseEntity<>(result, new HttpHeaders(), HttpStatus.OK);
}
}
...@@ -2,6 +2,7 @@ package com.antai.sport.http.server.game.api.business.sport.user; ...@@ -2,6 +2,7 @@ package com.antai.sport.http.server.game.api.business.sport.user;
import com.antai.sport.http.server.common.base.Result; import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.game.api.business.sport.user.dto.ReqLogin; import com.antai.sport.http.server.game.api.business.sport.user.dto.ReqLogin;
import com.antai.sport.http.server.game.api.business.sport.user.dto.RespLogin;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -9,7 +10,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -9,7 +10,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import static com.antai.sport.http.server.common.base.Result.success; import static com.antai.sport.http.server.common.util.ResultUtil.success;
/** /**
* @Author liming * @Author liming
...@@ -26,7 +27,7 @@ public class SportUserController { ...@@ -26,7 +27,7 @@ public class SportUserController {
@ApiOperation(value = "登录接口", notes = "登录成功后返回长短token") @ApiOperation(value = "登录接口", notes = "登录成功后返回长短token")
@PostMapping("/login") @PostMapping("/login")
public ResponseEntity<Result> login(@RequestBody ReqLogin param) { public ResponseEntity<Result<RespLogin>> login(@RequestBody ReqLogin param) {
return success(sportUserService.login(param)); return success(sportUserService.login(param));
} }
...@@ -34,6 +35,6 @@ public class SportUserController { ...@@ -34,6 +35,6 @@ public class SportUserController {
@GetMapping("/login/sms/captcha/{phone}") @GetMapping("/login/sms/captcha/{phone}")
public ResponseEntity<Result> sendLoginSmsCaptcha(@PathVariable String phone) { public ResponseEntity<Result> sendLoginSmsCaptcha(@PathVariable String phone) {
sportUserService.sendLoginSmsCaptcha(phone); sportUserService.sendLoginSmsCaptcha(phone);
return success(true); return success();
} }
} }
...@@ -10,6 +10,7 @@ import com.antai.sport.http.server.common.util.RandomUtil; ...@@ -10,6 +10,7 @@ import com.antai.sport.http.server.common.util.RandomUtil;
import com.antai.sport.http.server.constants.DeleteStatus; import com.antai.sport.http.server.constants.DeleteStatus;
import com.antai.sport.http.server.constants.LoginMode; import com.antai.sport.http.server.constants.LoginMode;
import com.antai.sport.http.server.game.api.business.sport.user.dto.ReqLogin; import com.antai.sport.http.server.game.api.business.sport.user.dto.ReqLogin;
import com.antai.sport.http.server.game.api.business.sport.user.dto.RespLogin;
import com.antai.sport.http.server.repository.sport.entity.SportUser; import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper; import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -20,6 +21,7 @@ import org.springframework.stereotype.Service; ...@@ -20,6 +21,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils; import org.springframework.util.DigestUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -45,7 +47,7 @@ public class SportUserService { ...@@ -45,7 +47,7 @@ public class SportUserService {
@Resource @Resource
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
public Result login(ReqLogin param) { public Result<RespLogin> login(ReqLogin param) {
if (param.getMode() == null || (!param.getMode().equals(LoginMode.PASSWORD) && !param.getMode().equals(LoginMode.SMS_CAPTCHA))) { if (param.getMode() == null || (!param.getMode().equals(LoginMode.PASSWORD) && !param.getMode().equals(LoginMode.SMS_CAPTCHA))) {
throw new BusinessException("请选择正确的登录模式"); throw new BusinessException("请选择正确的登录模式");
} }
...@@ -55,15 +57,17 @@ public class SportUserService { ...@@ -55,15 +57,17 @@ public class SportUserService {
List<SportUser> sportUserList = sportUserMapper.selectList(new QueryWrapper<SportUser>() List<SportUser> sportUserList = sportUserMapper.selectList(new QueryWrapper<SportUser>()
.eq("phone", param.getUsername()) .eq("phone", param.getUsername())
.eq("deleted", DeleteStatus.UNDELETED)); .eq("deleted", DeleteStatus.UNDELETED));
if (sportUserList.isEmpty()) {
throw new BusinessException("用户名或密码错误");
}
SportUser sportUser = sportUserList.get(0);
Result result = new Result();
Result<RespLogin> result = new Result();
SportUser sportUser;
if (param.getMode().equals(LoginMode.PASSWORD)) { if (param.getMode().equals(LoginMode.PASSWORD)) {
if (sportUserList.isEmpty()) {
throw new BusinessException("用户不存在,请先使用手机短信验证码登录");
}
sportUser = sportUserList.get(0);
if (sportUser.getPassword() == null) { if (sportUser.getPassword() == null) {
throw new BusinessException("当前用户还没有设置密码,请使用验证码方式登录"); throw new BusinessException("当前用户还没有设置密码,请使用验证码方式登录,在个人设置中设置密码");
} }
if (StringUtils.isBlank(param.getPassword())) { if (StringUtils.isBlank(param.getPassword())) {
throw new BusinessException("请输入密码"); throw new BusinessException("请输入密码");
...@@ -85,18 +89,34 @@ public class SportUserService { ...@@ -85,18 +89,34 @@ public class SportUserService {
if (!loginSmsCaptcha.equals(param.getSmsCaptcha())) { if (!loginSmsCaptcha.equals(param.getSmsCaptcha())) {
throw new BusinessException("短信验证码错误"); throw new BusinessException("短信验证码错误");
} }
if (sportUserList.isEmpty()) {
sportUser = new SportUser();
sportUser.setPhone(param.getUsername());
sportUser.setCtDate(LocalDateTime.now());
sportUser.setRoleInitialized(false);
sportUser.setInfoInitialized(false);
sportUser.setEquipmentInitialized(false);
sportUserMapper.insert(sportUser);
} else {
sportUser = sportUserList.get(0);
}
redisTemplate.delete(redisKey); redisTemplate.delete(redisKey);
} }
result.setRespMsg("登录成功"); result.setRespMsg("登录成功");
TokenVO tokenVO = tokenService.initToken(param.getUsername()); TokenVO tokenVO = tokenService.initToken(param.getUsername());
RespLogin respLogin = new RespLogin();
respLogin.setInfoInitialized(sportUser.getInfoInitialized());
respLogin.setRoleInitialized(sportUser.getRoleInitialized());
respLogin.setEquipmentInitialized(sportUser.getEquipmentInitialized());
result.setLongToken(tokenVO.getLongToken()); result.setLongToken(tokenVO.getLongToken());
result.setShortToken(tokenVO.getShortToken()); result.setShortToken(tokenVO.getShortToken());
result.setData(true); result.setData(respLogin);
return result; return result;
} }
/** /**
* 发送验证码逻辑 * 发送验证码逻辑
*
* @param phone 电话号码 * @param phone 电话号码
*/ */
public void sendLoginSmsCaptcha(String phone) { public void sendLoginSmsCaptcha(String phone) {
......
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author liming
* @Date 2021/8/23 13:00
* @Email lmmax@126.com
* @Description:
*/
@Data
@ApiModel("登录返回对象")
public class RespLogin {
@ApiModelProperty(value = "是否已初始化个人信息")
private Boolean infoInitialized;
@ApiModelProperty(value = "是否已初始化角色")
private Boolean roleInitialized;
@ApiModelProperty(value = "是否已初始化设备配置")
private Boolean equipmentInitialized;
}
package com.antai.sport.http.server.repository.sport.entity; package com.antai.sport.http.server.repository.sport.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* 运动用户表 * 运动用户表
* </p> * </p>
* *
* @author liming * @author liming
* @since 2021-08-21 * @since 2021-08-23
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
...@@ -58,6 +58,16 @@ public class SportUser implements Serializable { ...@@ -58,6 +58,16 @@ public class SportUser implements Serializable {
*/ */
private Integer sex; private Integer sex;
/**
* 身高
*/
private BigDecimal height;
/**
* 体重
*/
private BigDecimal weight;
/** /**
* 头像 * 头像
*/ */
...@@ -84,9 +94,19 @@ public class SportUser implements Serializable { ...@@ -84,9 +94,19 @@ public class SportUser implements Serializable {
private String city; private String city;
/** /**
* 已初始化 * 初始化个人信息
*/
private Boolean infoInitialized;
/**
* 初始化接角色
*/
private Boolean roleInitialized;
/**
* 设备初始化
*/ */
private Boolean initialized; private Boolean equipmentInitialized;
/** /**
* 备注 * 备注
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment