AppLoginController.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package com.ruoyi.app.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.ruoyi.app.annotation.PassToken;
  6. import com.ruoyi.app.base.AppLoginUser;
  7. import com.ruoyi.app.base.AppTokenService;
  8. import com.ruoyi.app.domain.TbAppUser;
  9. import com.ruoyi.app.domain.vo.AppLoginVo;
  10. import com.ruoyi.app.domain.vo.AppMemberVo;
  11. import com.ruoyi.app.service.ITbAppUserService;
  12. import com.ruoyi.app.util.AliSMSUtil;
  13. import com.ruoyi.common.constant.Constants;
  14. import com.ruoyi.common.core.domain.AjaxResult;
  15. import com.ruoyi.common.core.redis.RedisCache;
  16. import com.ruoyi.common.utils.DateUtils;
  17. import com.ruoyi.common.utils.ServletUtils;
  18. import com.ruoyi.common.utils.StringUtils;
  19. import com.ruoyi.common.utils.ip.IpUtils;
  20. import io.swagger.annotations.Api;
  21. import io.swagger.annotations.ApiImplicitParam;
  22. import io.swagger.annotations.ApiImplicitParams;
  23. import io.swagger.annotations.ApiOperation;
  24. import lombok.RequiredArgsConstructor;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.servlet.http.HttpServletRequest;
  28. import java.util.Date;
  29. import java.util.Map;
  30. /**
  31. * 会员登录
  32. *
  33. * @author Alex
  34. * @date 2020-09-24
  35. */
  36. @Api(value = "APP登录",tags = "APP登录")
  37. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  38. @RestController
  39. @RequestMapping("/app" )
  40. public class AppLoginController {
  41. private final AppTokenService appTokenService;
  42. private final ITbAppUserService userService;
  43. /**
  44. * 登录
  45. */
  46. @PassToken
  47. @ApiOperation(value = "APP登录", notes = "APP登录")
  48. @PostMapping("/login")
  49. public AjaxResult login(@RequestBody AppLoginVo loginVo){
  50. if (StringUtils.isBlank(loginVo.getMobile())) {
  51. return AjaxResult.error("手机号不能为空");
  52. }
  53. if (StringUtils.isBlank(loginVo.getCaptcha())){
  54. return AjaxResult.error("验证码不能为空");
  55. }
  56. //手机短信验证
  57. // boolean ckCaptcha = AliSMSUtil.getInstance().validateSmsCode(loginVo.getMobile(), loginVo.getCaptcha());
  58. // if (!ckCaptcha) {
  59. // return AjaxResult.error("验证码错误");
  60. // }
  61. AppMemberVo appUser = userService.getAppMember(null,loginVo.getMobile());
  62. boolean ck;
  63. Date date = new Date();
  64. // 为空则新增
  65. if (appUser == null) {
  66. appUser = new AppMemberVo();
  67. appUser.setMobile(loginVo.getMobile());
  68. appUser.setNickName(loginVo.getMobile());
  69. appUser.setQrcode(DateUtils.getCurrentTimeRandom());
  70. appUser.setCreateTime(date);
  71. ck = userService.saveOrUpdate(appUser);
  72. if (!ck){
  73. return AjaxResult.error("未知异常,登录失败");
  74. }
  75. appUser.setCreateBy(appUser.getUserId().toString());
  76. }
  77. String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
  78. appUser.setClientId(loginVo.getClientId());
  79. appUser.setLoginIp(ip);
  80. appUser.setLoginTime(date);
  81. appUser.setUpdateBy(appUser.getUserId().toString());
  82. appUser.setUpdateTime(date);
  83. ck = userService.saveOrUpdate(appUser);
  84. if (!ck){
  85. return AjaxResult.error("未知异常,登录失败");
  86. }
  87. //每次登录前,先删除缓存,保证登录唯一性
  88. appTokenService.delLoginUser(loginVo.getMobile());
  89. JSONObject jsonObject = new JSONObject();
  90. AppLoginUser loginUser = new AppLoginUser();
  91. loginUser.setUser(appUser);
  92. String token = appTokenService.createToken(loginUser);
  93. jsonObject.put("token", token);
  94. jsonObject.put("user", appUser);
  95. return AjaxResult.success(jsonObject);
  96. }
  97. /**
  98. * 发送短信验证码
  99. * @param type 1、用户注册;2、登录确认;3、身份验证;4、登录异常;5、修改密码;6、信息变更;
  100. * @param mobile 手机号码
  101. * @return
  102. */
  103. @PassToken
  104. @ApiOperation(value = "发送短信验证码", notes = "发送短信验证码")
  105. @ApiImplicitParams({
  106. @ApiImplicitParam(name = "type", value = "1.用户注册;2.登录确认;3.身份验证;4.登录异常;5.修改密码;6.信息变更",paramType="int"),
  107. @ApiImplicitParam(name = "mobile", value = "手机号",paramType="string")
  108. })
  109. @GetMapping("/captchaSend")
  110. public AjaxResult sendCaptcha(Integer type, String mobile){
  111. if(StringUtils.isBlank(mobile)){
  112. return AjaxResult.error("请输入手机号");
  113. }
  114. Map<String,String> map = AliSMSUtil.getInstance().sendSmsCode(type, mobile);
  115. if(map.get("code").equals("200")) {
  116. return AjaxResult.success("发送成功");
  117. }
  118. return AjaxResult.error(map.get("msg"));
  119. }
  120. /**
  121. * 校验验证码
  122. * @param mobile
  123. * @param captcha
  124. * @return
  125. */
  126. @PassToken
  127. @ApiOperation(value = "校验短信验证码", notes = "校验短信验证码")
  128. @GetMapping("/captchaValidate")
  129. @ApiImplicitParams({
  130. @ApiImplicitParam(name = "mobile", value = "手机号",paramType="string"),
  131. @ApiImplicitParam(name = "captcha", value = "验证码",paramType="string")
  132. })
  133. public AjaxResult validateCaptcha(String mobile, String captcha){
  134. if (StringUtils.isBlank(mobile)) {
  135. return AjaxResult.error("手机号不能为空");
  136. }
  137. if (StringUtils.isBlank(captcha)){
  138. return AjaxResult.error("验证码不能为空");
  139. }
  140. //手机短信验证
  141. boolean ckCaptcha = AliSMSUtil.getInstance().validateSmsCode(mobile, captcha);
  142. if (!ckCaptcha) {
  143. return AjaxResult.error("验证码错误");
  144. }
  145. return AjaxResult.success("验证成功");
  146. }
  147. }