PassportController.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.care.client.controller;
  2. import com.care.client.service.PassportService;
  3. import com.care.client.vo.MemberInitParams;
  4. import com.care.common.entity.CareMemberInfo;
  5. import com.care.common.service.CareMemberInfoService;
  6. import com.care.common.service.SmsSendService;
  7. import com.care.common.util.CheckUtils;
  8. import com.care.common.util.Result;
  9. import com.google.common.cache.Cache;
  10. import com.google.common.cache.CacheBuilder;
  11. import io.swagger.annotations.*;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.web.bind.annotation.*;
  14. import javax.annotation.Resource;
  15. import java.util.Random;
  16. import java.util.concurrent.TimeUnit;
  17. @Api(tags = "登录")
  18. @RestController
  19. @RequestMapping("/pinanbao")
  20. public class PassportController {
  21. @Resource
  22. private PassportService passportService;
  23. @Resource
  24. private SmsSendService smsSendService;
  25. @Resource
  26. private CareMemberInfoService careMemberInfoService;
  27. public final Cache<String, String> smsTimeoutCache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build();
  28. @ApiOperation(value = "小程序登录", notes = "小程序授权登录")
  29. @ApiParam(name = "params", value = "登录参数")
  30. @PostMapping("login")
  31. public Result<Object> login(@RequestBody MemberInitParams params) {
  32. if ("wx".equalsIgnoreCase(params.getLoginType())) {
  33. CheckUtils.valueIsNull(params, "code");
  34. } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
  35. if (StringUtils.isBlank(params.getPhone())) {
  36. return Result.error("请输入手机号码");
  37. }
  38. if (StringUtils.isBlank(params.getPassword())) {
  39. return Result.error("请输入密码");
  40. }
  41. }
  42. return passportService.login(params);
  43. }
  44. @ApiOperation(value = "新用户注册", notes = "新用户注册")
  45. @GetMapping("registerPhone")
  46. @ApiImplicitParams(value = {
  47. @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
  48. @ApiImplicitParam(paramType = "query", name = "vcode", value = "验证码"),
  49. @ApiImplicitParam(paramType = "query", name = "password", value = "密码 "),
  50. })
  51. public Result<Object> registerPhone(@RequestHeader(value = "token") String token,
  52. @RequestParam(value = "phone", required = true) String phone,
  53. @RequestParam(value = "vcode", required = true) String vcode,
  54. @RequestParam(value = "password", required = true) String password) {
  55. if (StringUtils.isBlank(phone)) {
  56. return Result.error("请输入手机号");
  57. }
  58. if (!StringUtils.equalsIgnoreCase(vcode, smsTimeoutCache.getIfPresent(phone))) {
  59. return Result.error("请输入正确的验证码");
  60. }
  61. if (StringUtils.isBlank(password)) {
  62. return Result.error("请输入密码");
  63. }
  64. if (StringUtils.isNotBlank(phone) && StringUtils.isNotBlank(password)) {
  65. CareMemberInfo careMemberInfo = new CareMemberInfo();
  66. careMemberInfo.setPhone(phone);
  67. careMemberInfo.setPassword(password);
  68. boolean flag = careMemberInfoService.save(careMemberInfo);
  69. if (flag) {
  70. return Result.success();
  71. }
  72. }
  73. return Result.error("绑定手机号码失败");
  74. }
  75. @ApiOperation(value = "新用户注册-获取验证码", notes = "新用户注册-获取验证码")
  76. @GetMapping("getVCode")
  77. @ApiImplicitParams(value = {
  78. @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
  79. })
  80. public Result<String> getVCode(@RequestParam(value = "phone", required = true) String phone) {
  81. String vcode = String.format("%04d",new Random().nextInt(9999));
  82. boolean flag = smsSendService.sendSmsCode4RegisterPhone(phone, vcode);
  83. if (flag) {
  84. smsTimeoutCache.put(phone, vcode);
  85. return Result.success();
  86. } else {
  87. return Result.error("获取验证码失败");
  88. }
  89. }
  90. @ApiOperation(value = "小程序登出", notes = "小程序登出")
  91. @PostMapping("logout")
  92. public Result<Object> logout(@RequestHeader String token) {
  93. passportService.logout(token);
  94. return Result.success();
  95. }
  96. }