Commit c60c749e authored by liming's avatar liming

feat(初始化项目): 用户登录

parent 727c68a6
......@@ -89,4 +89,10 @@ public class Result {
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);
}
}
......@@ -29,16 +29,17 @@ public class GlobalControllerExceptionHandler {
public String profile;
@ExceptionHandler(value = Exception.class)
public ResponseEntity<Result> businessExceptionHandler(HttpServletRequest req, Exception e, Model model) throws Exception {
public ResponseEntity<Result> businessExceptionHandler(HttpServletRequest req, Exception e, Model model) {
String operateUser = "no-user";
//日志打印异常
String errorCode = UUIDUtil.createUUID().substring(0, 8);
logger.error(operateUser + "->request:" + req.getRequestURI() + "-异常代码:" + errorCode, e);
logger.error(operateUser + "->request:" + req.getRequestURI() + "-异常代码:" + errorCode + "-" + e.getMessage());
Result baseDTO = new Result();
if (e instanceof BusinessException) {
baseDTO.setRespCode(RespCodeEnum.BUSINESS_ERROR.getCode());
baseDTO.setRespMsg(e.getMessage());
baseDTO.setRespMsg(e.getMessage());
} else {
baseDTO.setRespCode(RespCodeEnum.CONTROLLER_ERROR.getCode());
if (profile != null && profile.equals("prod")) {
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>antai-sport-http-server</artifactId>
<groupId>com.antai.sport.http.server</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>constants</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
\ No newline at end of file
package com.antai.sport.http.server.constants;
/**
* @Author liming
* @Date 2021/8/21 21:32
* @Email lmmax@126.com
* @Description:
*/
public class DeleteStatus {
public static final byte UNDELETED = 0;
public static final byte DELETED = 1;
}
package com.antai.sport.http.server.constants;
/**
* @Author liming
* @Date 2021/8/21 21:14
* @Email lmmax@126.com
* @Description:
*/
public class LoginMode {
//密码登录
public final static Integer PASSWORD = 1;
//短信验证码登录
public final static Integer SMS_CAPTCHA = 1;
}
......@@ -34,6 +34,11 @@
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.antai.sport.http.server</groupId>
<artifactId>constants</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
......
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.game.api.business.sport.user.dto.ReqLogin;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static com.antai.sport.http.server.common.base.Result.success;
/**
* @Author liming
* @Date 2021/8/21 19:41
* @Email lmmax@126.com
* @Description:
*/
@RestController
@Api(tags={"用户相关接口"})
public class SportUserController {
@Resource
private SportUserService sportUserService;
@ApiOperation(value="登录接口",notes = "登录成功后返回长短token")
@PostMapping("/login")
public ResponseEntity<Result> login(@RequestBody ReqLogin param) {
return success(sportUserService.login(param));
}
}
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.exception.BusinessException;
import com.antai.sport.http.server.constants.DeleteStatus;
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.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* @Author liming
* @Date 2021/8/21 19:41
* @Email lmmax@126.com
* @Description:
*/
@Service
public class SportUserService {
@Resource
private SportUserMapper sportUserMapper;
public Result login(ReqLogin param) {
if (param.getMode() == null || (!param.getMode().equals(LoginMode.PASSWORD) && !param.getMode().equals(LoginMode.SMS_CAPTCHA))) {
throw new BusinessException("请选择正确的登录模式");
}
if (StringUtils.isBlank(param.getUsername())) {
throw new BusinessException("请输入用户名");
}
List<SportUser> sportUserList = sportUserMapper.selectList(new QueryWrapper<SportUser>()
.eq("phone", param.getUsername())
.eq("deleted", DeleteStatus.UNDELETED));
if (sportUserList.isEmpty()) {
throw new BusinessException("用户名或密码错误");
}
SportUser sportUser = sportUserList.get(0);
Result result = new Result();
if (param.getMode().equals(LoginMode.PASSWORD)) {
if (sportUser.getPassword() == null) {
throw new BusinessException("当前用户还没有设置密码,请使用验证码方式登录");
}
if (StringUtils.isBlank(param.getPassword())) {
throw new BusinessException("请输入密码");
}
String hashPwd = DigestUtils.md5DigestAsHex(param.getPassword().getBytes());
if (hashPwd.equals(sportUser.getPassword())) {
result.setRespMsg("登录成功");
result.setData(true);
} else {
throw new BusinessException("用户名或密码错误");
}
} else {
if (StringUtils.isBlank(param.getSmsCaptcha())) {
throw new BusinessException("请输入验证码");
}
}
return result;
}
}
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liming
* @Date 2021/8/21 19:47
* @Email lmmax@126.com
* @Description:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("登录接口传入参数")
public class ReqLogin {
@ApiModelProperty("登录模式 1.密码 2.短信验证码")
private Integer mode;
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("短信验证码")
private String smsCaptcha;
}
package com.antai.sport.http.server.game.api.controller;
import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.repository.base.entity.BaseArea;
import com.antai.sport.http.server.repository.base.mapper.BaseAreaMapper;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.antai.sport.http.server.common.base.Result.success;
/**
* @author 厉明
* @date 2021/8/18 11:40
* @email lmmax@126.com
* @description
*/
@RestController
public class TestController {
@Resource
private BaseAreaMapper baseAreaMapper;
@GetMapping("test")
public ResponseEntity<Result> test(HttpServletRequest request, BaseArea baseArea) {
System.out.println(request.getHeader("Authorization"));
Map<String, Object> result = new HashMap<>();
List<BaseArea> areaList = baseAreaMapper.selectList(null);
result.put("areaList", areaList);
return success(result);
}
}
......@@ -19,6 +19,7 @@
<module>profile</module>
<module>code-generator</module>
<module>common</module>
<module>constants</module>
</modules>
......
package com.antai.sport.http.server.repository.sport.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 运动用户表
* </p>
*
* @author liming
* @since 2021-08-21
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 手机号
*/
private String phone;
/**
* 密码
*/
private String password;
/**
* 昵称
*/
private String nickname;
/**
* 真实名称
*/
private String realName;
/**
* 生日
*/
private LocalDateTime birthday;
/**
* 性别 1:男 2:女
*/
private Integer sex;
/**
* 头像
*/
private String avatar;
/**
* 级别
*/
private Integer level;
/**
* 国家
*/
private String country;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 已初始化
*/
private Boolean initialized;
/**
* 备注
*/
private String remark;
/**
* 排序号
*/
private Integer showOrder;
/**
* 数据版本号
*/
private Integer version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 最后修改人
*/
private Integer lmUserId;
/**
* 最后修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 运动用户表 Mapper 接口
* </p>
*
* @author liming
* @since 2021-08-21
*/
public interface SportUserMapper extends BaseMapper<SportUser> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antai.sport.http.server.repository.sport.mapper.SportUserMapper">
</mapper>
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