ApiUserLoginController.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package com.ruoyi.api.controller.user;
  2. import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
  3. import cn.hutool.core.date.DateUtil;
  4. import com.ruoyi.api.controller.common.AbstractApiController;
  5. import com.ruoyi.common.core.domain.R;
  6. import com.ruoyi.common.core.validate.RegGroup;
  7. import com.ruoyi.common.enums.FilePathSplicingType;
  8. import com.ruoyi.common.filepathsplicing.FilePathSplicing;
  9. import com.ruoyi.framework.web.service.ApiTokenService;
  10. import com.ruoyi.system.enums.SequencePrefixEnum;
  11. import com.ruoyi.system.service.ISysSequenceService;
  12. import com.ruoyi.user.domain.User;
  13. import com.ruoyi.user.enums.UserThirdType;
  14. import com.ruoyi.user.service.IUserService;
  15. import com.ruoyi.weixin.domain.WxUserDto;
  16. import com.ruoyi.weixin.service.WxUserService;
  17. import io.swagger.annotations.Api;
  18. import io.swagger.annotations.ApiOperation;
  19. import lombok.RequiredArgsConstructor;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.data.redis.core.StringRedisTemplate;
  22. import org.springframework.validation.annotation.Validated;
  23. import org.springframework.web.bind.annotation.PostMapping;
  24. import org.springframework.web.bind.annotation.RequestBody;
  25. import org.springframework.web.bind.annotation.RequestMapping;
  26. import org.springframework.web.bind.annotation.RestController;
  27. import java.util.Date;
  28. import java.util.HashMap;
  29. import java.util.Map;
  30. /**
  31. * 小程序用户管理Controller
  32. *
  33. * @author wuchao
  34. * @date 2022-03-03
  35. */
  36. @Validated
  37. @Api(value = "小程序用户管理控制器", tags = {"小程序用户管理管理"})
  38. @RequiredArgsConstructor
  39. @RestController
  40. @RequestMapping("/api/miniapp/user")
  41. public class ApiUserLoginController extends AbstractApiController {
  42. @Autowired
  43. private IUserService userService;
  44. @Autowired
  45. private ApiTokenService apiTokenService;
  46. private final WxUserService wxUserService;
  47. private final ISysSequenceService sysSequenceService;
  48. private final StringRedisTemplate stringRedisTemplate;
  49. /**
  50. * 获取小程序openId
  51. */
  52. @ApiOperation("获取小程序openId")
  53. @PostMapping("/user/getOpenId")
  54. public R<Map<String, Object>> getOpenId(@RequestBody WxUserDto dto) {
  55. String openId = userService.getOpenId(dto.getCode());
  56. Map<String, Object> stringObjectHashMap = new HashMap<>();
  57. stringObjectHashMap.put("openId", openId);
  58. return R.ok(stringObjectHashMap);
  59. }
  60. /**
  61. * 小程序授权登录
  62. */
  63. @ApiOperation("小程序授权登录")
  64. @PostMapping("/user/authorization/login")
  65. public R<Map<String, Object>> loginAuthorization(@RequestBody WxUserDto dto) {
  66. User user = userService.loginAuthorization(dto.getOpenId());
  67. String token = apiTokenService.generateToken(user);
  68. HashMap<String, Object> result = new HashMap<>();
  69. result.put("token", token);
  70. return R.ok(result);
  71. }
  72. /**
  73. * 小程序获取手机号
  74. */
  75. @ApiOperation("小程序获取手机号")
  76. @PostMapping("/user/phone")
  77. public R<Map<String, Object>> wxPhone(@RequestBody WxUserDto dto) {
  78. WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxUserService.getPhoneByCode(dto.getCode());
  79. HashMap<String, Object> result = new HashMap<>();
  80. result.put("phone", wxMaPhoneNumberInfo.getPhoneNumber());
  81. return R.ok(result);
  82. }
  83. /**
  84. * 注册用户,小程序授权且获取了手机号
  85. */
  86. @FilePathSplicing(type = FilePathSplicingType.REQUEST)
  87. @ApiOperation("注册用户,小程序授权且获取了手机号")
  88. @PostMapping("/user/authorization/register")
  89. public R<Map<String, Object>> registerAuthorization(@RequestBody @Validated(RegGroup.class) WxUserDto wxUserDto) {
  90. wxUserDto.setBusinessId(sysSequenceService.generateSequence(SequencePrefixEnum.PRE_USER, DateUtil.format(new Date(), "yyMMdd"), 6));
  91. User user = userService.authorization(wxUserDto);
  92. String token = apiTokenService.generateToken(user);
  93. HashMap<String, Object> result = new HashMap<>();
  94. result.put("token", token);
  95. return R.ok(result);
  96. }
  97. @ApiOperation("登出方法")
  98. @PostMapping("/wxLogout")
  99. public R<Void> wxLogout() {
  100. userService.logout(getUserId(true), UserThirdType.WX_MINI_PROGRAM.getCode());
  101. // apiTokenService.removeToken(getToken());
  102. return R.ok("退出成功");
  103. }
  104. }