UserController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package com.yupi.yuso.controller;
  2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  3. import com.yupi.yuso.annotation.AuthCheck;
  4. import com.yupi.yuso.common.BaseResponse;
  5. import com.yupi.yuso.common.DeleteRequest;
  6. import com.yupi.yuso.common.ErrorCode;
  7. import com.yupi.yuso.common.ResultUtils;
  8. import com.yupi.yuso.config.WxOpenConfig;
  9. import com.yupi.yuso.constant.UserConstant;
  10. import com.yupi.yuso.exception.BusinessException;
  11. import com.yupi.yuso.exception.ThrowUtils;
  12. import com.yupi.yuso.model.dto.user.UserAddRequest;
  13. import com.yupi.yuso.model.dto.user.UserLoginRequest;
  14. import com.yupi.yuso.model.dto.user.UserQueryRequest;
  15. import com.yupi.yuso.model.dto.user.UserRegisterRequest;
  16. import com.yupi.yuso.model.dto.user.UserUpdateMyRequest;
  17. import com.yupi.yuso.model.dto.user.UserUpdateRequest;
  18. import com.yupi.yuso.model.entity.User;
  19. import com.yupi.yuso.model.vo.LoginUserVO;
  20. import com.yupi.yuso.model.vo.UserVO;
  21. import com.yupi.yuso.service.UserService;
  22. import java.util.List;
  23. import javax.annotation.Resource;
  24. import javax.servlet.http.HttpServletRequest;
  25. import javax.servlet.http.HttpServletResponse;
  26. import lombok.extern.slf4j.Slf4j;
  27. import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
  28. import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
  29. import me.chanjar.weixin.mp.api.WxMpService;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.web.bind.annotation.GetMapping;
  33. import org.springframework.web.bind.annotation.PostMapping;
  34. import org.springframework.web.bind.annotation.RequestBody;
  35. import org.springframework.web.bind.annotation.RequestMapping;
  36. import org.springframework.web.bind.annotation.RequestParam;
  37. import org.springframework.web.bind.annotation.RestController;
  38. /**
  39. * 用户接口
  40. *
  41. * @author <a href="https://github.com/liyupi">程序员鱼皮</a>
  42. * @from <a href="https://yupi.icu">编程导航知识星球</a>
  43. */
  44. @RestController
  45. @RequestMapping("/user")
  46. @Slf4j
  47. public class UserController {
  48. @Resource
  49. private UserService userService;
  50. @Resource
  51. private WxOpenConfig wxOpenConfig;
  52. // region 登录相关
  53. /**
  54. * 用户注册
  55. *
  56. * @param userRegisterRequest
  57. * @return
  58. */
  59. @PostMapping("/register")
  60. public BaseResponse<Long> userRegister(@RequestBody UserRegisterRequest userRegisterRequest) {
  61. if (userRegisterRequest == null) {
  62. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  63. }
  64. String userAccount = userRegisterRequest.getUserAccount();
  65. String userPassword = userRegisterRequest.getUserPassword();
  66. String checkPassword = userRegisterRequest.getCheckPassword();
  67. if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) {
  68. return null;
  69. }
  70. long result = userService.userRegister(userAccount, userPassword, checkPassword);
  71. return ResultUtils.success(result);
  72. }
  73. /**
  74. * 用户登录
  75. *
  76. * @param userLoginRequest
  77. * @param request
  78. * @return
  79. */
  80. @PostMapping("/login")
  81. public BaseResponse<LoginUserVO> userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {
  82. if (userLoginRequest == null) {
  83. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  84. }
  85. String userAccount = userLoginRequest.getUserAccount();
  86. String userPassword = userLoginRequest.getUserPassword();
  87. if (StringUtils.isAnyBlank(userAccount, userPassword)) {
  88. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  89. }
  90. LoginUserVO loginUserVO = userService.userLogin(userAccount, userPassword, request);
  91. return ResultUtils.success(loginUserVO);
  92. }
  93. /**
  94. * 用户登录(微信开放平台)
  95. */
  96. @GetMapping("/login/wx_open")
  97. public BaseResponse<LoginUserVO> userLoginByWxOpen(HttpServletRequest request, HttpServletResponse response,
  98. @RequestParam("code") String code) {
  99. WxOAuth2AccessToken accessToken;
  100. try {
  101. WxMpService wxService = wxOpenConfig.getWxMpService();
  102. accessToken = wxService.getOAuth2Service().getAccessToken(code);
  103. WxOAuth2UserInfo userInfo = wxService.getOAuth2Service().getUserInfo(accessToken, code);
  104. String unionId = userInfo.getUnionId();
  105. String mpOpenId = userInfo.getOpenid();
  106. if (StringUtils.isAnyBlank(unionId, mpOpenId)) {
  107. throw new BusinessException(ErrorCode.SYSTEM_ERROR, "登录失败,系统错误");
  108. }
  109. return ResultUtils.success(userService.userLoginByMpOpen(userInfo, request));
  110. } catch (Exception e) {
  111. log.error("userLoginByWxOpen error", e);
  112. throw new BusinessException(ErrorCode.SYSTEM_ERROR, "登录失败,系统错误");
  113. }
  114. }
  115. /**
  116. * 用户注销
  117. *
  118. * @param request
  119. * @return
  120. */
  121. @PostMapping("/logout")
  122. public BaseResponse<Boolean> userLogout(HttpServletRequest request) {
  123. if (request == null) {
  124. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  125. }
  126. boolean result = userService.userLogout(request);
  127. return ResultUtils.success(result);
  128. }
  129. /**
  130. * 获取当前登录用户
  131. *
  132. * @param request
  133. * @return
  134. */
  135. @GetMapping("/get/login")
  136. public BaseResponse<LoginUserVO> getLoginUser(HttpServletRequest request) {
  137. User user = userService.getLoginUser(request);
  138. return ResultUtils.success(userService.getLoginUserVO(user));
  139. }
  140. // endregion
  141. // region 增删改查
  142. /**
  143. * 创建用户
  144. *
  145. * @param userAddRequest
  146. * @param request
  147. * @return
  148. */
  149. @PostMapping("/add")
  150. @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
  151. public BaseResponse<Long> addUser(@RequestBody UserAddRequest userAddRequest, HttpServletRequest request) {
  152. if (userAddRequest == null) {
  153. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  154. }
  155. User user = new User();
  156. BeanUtils.copyProperties(userAddRequest, user);
  157. boolean result = userService.save(user);
  158. ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
  159. return ResultUtils.success(user.getId());
  160. }
  161. /**
  162. * 删除用户
  163. *
  164. * @param deleteRequest
  165. * @param request
  166. * @return
  167. */
  168. @PostMapping("/delete")
  169. @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
  170. public BaseResponse<Boolean> deleteUser(@RequestBody DeleteRequest deleteRequest, HttpServletRequest request) {
  171. if (deleteRequest == null || deleteRequest.getId() <= 0) {
  172. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  173. }
  174. boolean b = userService.removeById(deleteRequest.getId());
  175. return ResultUtils.success(b);
  176. }
  177. /**
  178. * 更新用户
  179. *
  180. * @param userUpdateRequest
  181. * @param request
  182. * @return
  183. */
  184. @PostMapping("/update")
  185. @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
  186. public BaseResponse<Boolean> updateUser(@RequestBody UserUpdateRequest userUpdateRequest,
  187. HttpServletRequest request) {
  188. if (userUpdateRequest == null || userUpdateRequest.getId() == null) {
  189. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  190. }
  191. User user = new User();
  192. BeanUtils.copyProperties(userUpdateRequest, user);
  193. boolean result = userService.updateById(user);
  194. ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
  195. return ResultUtils.success(true);
  196. }
  197. /**
  198. * 根据 id 获取用户(仅管理员)
  199. *
  200. * @param id
  201. * @param request
  202. * @return
  203. */
  204. @GetMapping("/get")
  205. @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
  206. public BaseResponse<User> getUserById(long id, HttpServletRequest request) {
  207. if (id <= 0) {
  208. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  209. }
  210. User user = userService.getById(id);
  211. ThrowUtils.throwIf(user == null, ErrorCode.NOT_FOUND_ERROR);
  212. return ResultUtils.success(user);
  213. }
  214. /**
  215. * 根据 id 获取包装类
  216. *
  217. * @param id
  218. * @param request
  219. * @return
  220. */
  221. @GetMapping("/get/vo")
  222. public BaseResponse<UserVO> getUserVOById(long id, HttpServletRequest request) {
  223. BaseResponse<User> response = getUserById(id, request);
  224. User user = response.getData();
  225. return ResultUtils.success(userService.getUserVO(user));
  226. }
  227. /**
  228. * 分页获取用户列表(仅管理员)
  229. *
  230. * @param userQueryRequest
  231. * @param request
  232. * @return
  233. */
  234. @PostMapping("/list/page")
  235. @AuthCheck(mustRole = UserConstant.ADMIN_ROLE)
  236. public BaseResponse<Page<User>> listUserByPage(@RequestBody UserQueryRequest userQueryRequest,
  237. HttpServletRequest request) {
  238. long current = userQueryRequest.getCurrent();
  239. long size = userQueryRequest.getPageSize();
  240. Page<User> userPage = userService.page(new Page<>(current, size),
  241. userService.getQueryWrapper(userQueryRequest));
  242. return ResultUtils.success(userPage);
  243. }
  244. /**
  245. * 分页获取用户封装列表
  246. *
  247. * @param userQueryRequest
  248. * @param request
  249. * @return
  250. */
  251. @PostMapping("/list/page/vo")
  252. public BaseResponse<Page<UserVO>> listUserVOByPage(@RequestBody UserQueryRequest userQueryRequest,
  253. HttpServletRequest request) {
  254. if (userQueryRequest == null) {
  255. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  256. }
  257. long current = userQueryRequest.getCurrent();
  258. long size = userQueryRequest.getPageSize();
  259. // 限制爬虫
  260. ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR);
  261. Page<User> userPage = userService.page(new Page<>(current, size),
  262. userService.getQueryWrapper(userQueryRequest));
  263. Page<UserVO> userVOPage = new Page<>(current, size, userPage.getTotal());
  264. List<UserVO> userVO = userService.getUserVO(userPage.getRecords());
  265. userVOPage.setRecords(userVO);
  266. return ResultUtils.success(userVOPage);
  267. }
  268. // endregion
  269. /**
  270. * 更新个人信息
  271. *
  272. * @param userUpdateMyRequest
  273. * @param request
  274. * @return
  275. */
  276. @PostMapping("/update/my")
  277. public BaseResponse<Boolean> updateMyUser(@RequestBody UserUpdateMyRequest userUpdateMyRequest,
  278. HttpServletRequest request) {
  279. if (userUpdateMyRequest == null) {
  280. throw new BusinessException(ErrorCode.PARAMS_ERROR);
  281. }
  282. User loginUser = userService.getLoginUser(request);
  283. User user = new User();
  284. BeanUtils.copyProperties(userUpdateMyRequest, user);
  285. user.setId(loginUser.getId());
  286. boolean result = userService.updateById(user);
  287. ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
  288. return ResultUtils.success(true);
  289. }
  290. }