package com.yupi.yuso.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yupi.yuso.annotation.AuthCheck; import com.yupi.yuso.common.BaseResponse; import com.yupi.yuso.common.DeleteRequest; import com.yupi.yuso.common.ErrorCode; import com.yupi.yuso.common.ResultUtils; import com.yupi.yuso.config.WxOpenConfig; import com.yupi.yuso.constant.UserConstant; import com.yupi.yuso.exception.BusinessException; import com.yupi.yuso.exception.ThrowUtils; import com.yupi.yuso.model.dto.user.UserAddRequest; import com.yupi.yuso.model.dto.user.UserLoginRequest; import com.yupi.yuso.model.dto.user.UserQueryRequest; import com.yupi.yuso.model.dto.user.UserRegisterRequest; import com.yupi.yuso.model.dto.user.UserUpdateMyRequest; import com.yupi.yuso.model.dto.user.UserUpdateRequest; import com.yupi.yuso.model.entity.User; import com.yupi.yuso.model.vo.LoginUserVO; import com.yupi.yuso.model.vo.UserVO; import com.yupi.yuso.service.UserService; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.WxOAuth2UserInfo; import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; import me.chanjar.weixin.mp.api.WxMpService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * 用户接口 * * @author 程序员鱼皮 * @from 编程导航知识星球 */ @RestController @RequestMapping("/user") @Slf4j public class UserController { @Resource private UserService userService; @Resource private WxOpenConfig wxOpenConfig; // region 登录相关 /** * 用户注册 * * @param userRegisterRequest * @return */ @PostMapping("/register") public BaseResponse userRegister(@RequestBody UserRegisterRequest userRegisterRequest) { if (userRegisterRequest == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } String userAccount = userRegisterRequest.getUserAccount(); String userPassword = userRegisterRequest.getUserPassword(); String checkPassword = userRegisterRequest.getCheckPassword(); if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) { return null; } long result = userService.userRegister(userAccount, userPassword, checkPassword); return ResultUtils.success(result); } /** * 用户登录 * * @param userLoginRequest * @param request * @return */ @PostMapping("/login") public BaseResponse userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) { if (userLoginRequest == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } String userAccount = userLoginRequest.getUserAccount(); String userPassword = userLoginRequest.getUserPassword(); if (StringUtils.isAnyBlank(userAccount, userPassword)) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } LoginUserVO loginUserVO = userService.userLogin(userAccount, userPassword, request); return ResultUtils.success(loginUserVO); } /** * 用户登录(微信开放平台) */ @GetMapping("/login/wx_open") public BaseResponse userLoginByWxOpen(HttpServletRequest request, HttpServletResponse response, @RequestParam("code") String code) { WxOAuth2AccessToken accessToken; try { WxMpService wxService = wxOpenConfig.getWxMpService(); accessToken = wxService.getOAuth2Service().getAccessToken(code); WxOAuth2UserInfo userInfo = wxService.getOAuth2Service().getUserInfo(accessToken, code); String unionId = userInfo.getUnionId(); String mpOpenId = userInfo.getOpenid(); if (StringUtils.isAnyBlank(unionId, mpOpenId)) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, "登录失败,系统错误"); } return ResultUtils.success(userService.userLoginByMpOpen(userInfo, request)); } catch (Exception e) { log.error("userLoginByWxOpen error", e); throw new BusinessException(ErrorCode.SYSTEM_ERROR, "登录失败,系统错误"); } } /** * 用户注销 * * @param request * @return */ @PostMapping("/logout") public BaseResponse userLogout(HttpServletRequest request) { if (request == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } boolean result = userService.userLogout(request); return ResultUtils.success(result); } /** * 获取当前登录用户 * * @param request * @return */ @GetMapping("/get/login") public BaseResponse getLoginUser(HttpServletRequest request) { User user = userService.getLoginUser(request); return ResultUtils.success(userService.getLoginUserVO(user)); } // endregion // region 增删改查 /** * 创建用户 * * @param userAddRequest * @param request * @return */ @PostMapping("/add") @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) public BaseResponse addUser(@RequestBody UserAddRequest userAddRequest, HttpServletRequest request) { if (userAddRequest == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } User user = new User(); BeanUtils.copyProperties(userAddRequest, user); boolean result = userService.save(user); ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); return ResultUtils.success(user.getId()); } /** * 删除用户 * * @param deleteRequest * @param request * @return */ @PostMapping("/delete") @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) public BaseResponse deleteUser(@RequestBody DeleteRequest deleteRequest, HttpServletRequest request) { if (deleteRequest == null || deleteRequest.getId() <= 0) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } boolean b = userService.removeById(deleteRequest.getId()); return ResultUtils.success(b); } /** * 更新用户 * * @param userUpdateRequest * @param request * @return */ @PostMapping("/update") @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) public BaseResponse updateUser(@RequestBody UserUpdateRequest userUpdateRequest, HttpServletRequest request) { if (userUpdateRequest == null || userUpdateRequest.getId() == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } User user = new User(); BeanUtils.copyProperties(userUpdateRequest, user); boolean result = userService.updateById(user); ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); return ResultUtils.success(true); } /** * 根据 id 获取用户(仅管理员) * * @param id * @param request * @return */ @GetMapping("/get") @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) public BaseResponse getUserById(long id, HttpServletRequest request) { if (id <= 0) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } User user = userService.getById(id); ThrowUtils.throwIf(user == null, ErrorCode.NOT_FOUND_ERROR); return ResultUtils.success(user); } /** * 根据 id 获取包装类 * * @param id * @param request * @return */ @GetMapping("/get/vo") public BaseResponse getUserVOById(long id, HttpServletRequest request) { BaseResponse response = getUserById(id, request); User user = response.getData(); return ResultUtils.success(userService.getUserVO(user)); } /** * 分页获取用户列表(仅管理员) * * @param userQueryRequest * @param request * @return */ @PostMapping("/list/page") @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) public BaseResponse> listUserByPage(@RequestBody UserQueryRequest userQueryRequest, HttpServletRequest request) { long current = userQueryRequest.getCurrent(); long size = userQueryRequest.getPageSize(); Page userPage = userService.page(new Page<>(current, size), userService.getQueryWrapper(userQueryRequest)); return ResultUtils.success(userPage); } /** * 分页获取用户封装列表 * * @param userQueryRequest * @param request * @return */ @PostMapping("/list/page/vo") public BaseResponse> listUserVOByPage(@RequestBody UserQueryRequest userQueryRequest, HttpServletRequest request) { if (userQueryRequest == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } long current = userQueryRequest.getCurrent(); long size = userQueryRequest.getPageSize(); // 限制爬虫 ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR); Page userPage = userService.page(new Page<>(current, size), userService.getQueryWrapper(userQueryRequest)); Page userVOPage = new Page<>(current, size, userPage.getTotal()); List userVO = userService.getUserVO(userPage.getRecords()); userVOPage.setRecords(userVO); return ResultUtils.success(userVOPage); } // endregion /** * 更新个人信息 * * @param userUpdateMyRequest * @param request * @return */ @PostMapping("/update/my") public BaseResponse updateMyUser(@RequestBody UserUpdateMyRequest userUpdateMyRequest, HttpServletRequest request) { if (userUpdateMyRequest == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } User loginUser = userService.getLoginUser(request); User user = new User(); BeanUtils.copyProperties(userUpdateMyRequest, user); user.setId(loginUser.getId()); boolean result = userService.updateById(user); ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); return ResultUtils.success(true); } }