UserController.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package com.huaxu.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.huaxu.dto.UserDto;
  6. import com.huaxu.model.LoginUser;
  7. import com.huaxu.entity.User;
  8. import com.huaxu.model.AjaxMessage;
  9. import com.huaxu.model.Pagination;
  10. import com.huaxu.model.ResultStatus;
  11. import com.huaxu.service.UserService;
  12. import com.huaxu.util.ByteArrayUtils;
  13. import com.huaxu.util.RedisUtil;
  14. import com.huaxu.util.UserUtil;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiOperation;
  17. import io.swagger.annotations.ApiParam;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.security.oauth2.common.OAuth2AccessToken;
  21. import org.springframework.web.bind.annotation.*;
  22. import springfox.documentation.annotations.ApiIgnore;
  23. import javax.servlet.http.HttpServletRequest;
  24. import java.security.Principal;
  25. import java.util.List;
  26. import java.util.Optional;
  27. /**
  28. * 用户(User)控制层
  29. *
  30. * @author makejava
  31. * @since 2020-10-21 15:23:47
  32. */
  33. @RestController
  34. @RequestMapping("/user")
  35. @Api(tags = "用户接口")
  36. public class UserController {
  37. /**
  38. * 服务对象
  39. */
  40. @Autowired
  41. private UserService userService;
  42. @Autowired
  43. private RedisUtil redisUtil;
  44. /**
  45. * 登录
  46. *
  47. *
  48. *
  49. *
  50. */
  51. @RequestMapping(value = "login", method = RequestMethod.POST)
  52. @ApiOperation(value = "登录")
  53. public AjaxMessage< User> login(String mobile, String tenatId) {
  54. User user=new User();
  55. user.setPhone(mobile);
  56. user.setTenantId(tenatId);
  57. ;
  58. User user2 = userService.chooseUser(user);
  59. if(user2==null){
  60. return new AjaxMessage<>(ResultStatus.ROLE_HAS_DISABLE);
  61. }
  62. return new AjaxMessage<>(ResultStatus.OK,user2);
  63. }
  64. /**
  65. * 退出
  66. *
  67. *
  68. *
  69. *
  70. */
  71. @RequestMapping(value = "logout", method = RequestMethod.POST)
  72. @ApiOperation(value = "退出")
  73. public AjaxMessage logout(String access_token) {
  74. if (userService.logOut(access_token)) {
  75. return new AjaxMessage<>(ResultStatus.OK);
  76. } else {
  77. return new AjaxMessage<>(ResultStatus.ERROR);
  78. }
  79. }
  80. @GetMapping("/info")
  81. @CrossOrigin(allowCredentials = "true")
  82. @ApiOperation(value = "用户信息")
  83. public AjaxMessage info() {
  84. LoginUser loginUser = UserUtil.getCurrentUser();
  85. return new AjaxMessage<>(ResultStatus.OK,loginUser);
  86. }
  87. @ApiIgnore
  88. @GetMapping("/principal")
  89. @ApiOperation(value = "各子系统获取用户信息接口")
  90. public Principal user(Principal principal,HttpServletRequest request)
  91. {
  92. LoginUser currentUser = UserUtil.getCurrentUser();
  93. Integer roleId = currentUser.getRoleId();
  94. String roleKey="disableRole:"+roleId;
  95. String companyKey="disableCompany:"+currentUser.getCompanyId();
  96. String departmentKey="department:"+currentUser.getDepartmentId();
  97. String userKey="disableUser:" + currentUser.getId();
  98. byte[] bytes = redisUtil.get(roleKey.getBytes());
  99. byte[] bytes2 = redisUtil.get(companyKey.getBytes());
  100. byte[] bytes3 = redisUtil.get(departmentKey.getBytes());
  101. byte[] bytes4 = redisUtil.get(userKey.getBytes());
  102. String authorization = request.getHeader("Authorization");
  103. String token =authorization.substring(authorization.indexOf("Bearer")+6).trim();
  104. String tokenKey = "offlineStatus:" + token;
  105. boolean flag=false;
  106. int status=0;
  107. if(bytes!=null){
  108. status=2;
  109. flag=true;
  110. }
  111. if(bytes2!=null){
  112. status=3;
  113. flag=true;
  114. }
  115. if((currentUser.getDepartmentId()!=null&&bytes3!=null)){
  116. status=4;
  117. flag=true;
  118. }
  119. if(bytes4!=null){
  120. status=5;
  121. flag=true;
  122. }
  123. if(flag){
  124. redisUtil.setExpire(tokenKey.getBytes(),
  125. ByteArrayUtils.objectToBytes(status).get(), 1800);//15分钟过期
  126. }
  127. if(bytes!=null||bytes2!=null||(currentUser.getDepartmentId()!=null&&bytes3!=null)
  128. ||bytes4!=null){
  129. return null;
  130. }
  131. /* String authorization = request.getHeader("Authorization");
  132. String token =authorization.substring(authorization.indexOf("Bearer")+6).trim();
  133. redisUtil.setExpire("auth:"+token,60000);
  134. redisUtil.setExpire("access:"+token,60000);*/
  135. return principal;
  136. }
  137. /**
  138. * 新增一条注册数据
  139. *
  140. * @param user 实体类
  141. * @return Response对象
  142. */
  143. @RequestMapping(value = "insertRegister", method = RequestMethod.POST)
  144. @ApiOperation(value = "插入注册申请")
  145. public AjaxMessage<Integer> insertRegister(@ApiParam(value = "注册申请信息", required = true) @RequestBody User user) {
  146. if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPhone())||StringUtils.isEmpty(user.getUserType())) {
  147. return new AjaxMessage<>(ResultStatus.PARAM_ERROR);
  148. }
  149. int result = userService.insertRegister(user);
  150. return new AjaxMessage<>(ResultStatus.OK, result);
  151. }
  152. @RequestMapping(value = "getUserStatus")
  153. @ApiOperation(value = "获取用户当前状态",notes = "返回0代表超时,1有其他用户登录了,其他用户被禁用")
  154. public AjaxMessage<Integer> getUserStatus(@ApiParam(value = "accessToken", required = true)@RequestParam String accessToken) {
  155. String key="offlineStatus:"+ accessToken;
  156. byte[] bytes = redisUtil.get(key.getBytes());
  157. int result=0;
  158. if(bytes!=null){
  159. Optional<Integer> status = ByteArrayUtils.bytesToObject(bytes);
  160. result=status.get();
  161. }
  162. return new AjaxMessage<>(ResultStatus.OK, result);
  163. }
  164. }