You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
exam/sys/user/controller/SysUserController.java

246 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 声明当前类所在的包,该包属于系统用户控制器模块
package com.yf.exam.modules.sys.user.controller;
// 导入 MyBatis-Plus 的查询条件构造器,用于构建数据库查询条件
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
// 导入 MyBatis-Plus 的分页元数据接口,用于处理分页查询结果
import com.baomidou.mybatisplus.core.metadata.IPage;
// 导入自定义的 API 统一响应类,用于封装接口返回数据
import com.yf.exam.core.api.ApiRest;
// 导入自定义的基础控制器类,提供一些通用的控制器方法
import com.yf.exam.core.api.controller.BaseController;
// 导入自定义的基础多个 ID 请求数据传输对象类,用于批量操作时传递 ID 列表
import com.yf.exam.core.api.dto.BaseIdsReqDTO;
// 导入自定义的基础状态请求数据传输对象类,用于传递状态修改请求
import com.yf.exam.core.api.dto.BaseStateReqDTO;
// 导入自定义的分页请求数据传输对象类,用于分页查询时传递请求参数
import com.yf.exam.core.api.dto.PagingReqDTO;
// 导入系统用户数据传输对象类,用于在不同层之间传输用户信息
import com.yf.exam.modules.sys.user.dto.SysUserDTO;
// 导入系统用户登录请求数据传输对象类,用于用户登录时传递请求信息
import com.yf.exam.modules.sys.user.dto.request.SysUserLoginReqDTO;
// 导入系统用户保存请求数据传输对象类,用于保存或修改用户信息时传递请求信息
import com.yf.exam.modules.sys.user.dto.request.SysUserSaveReqDTO;
// 导入系统用户登录响应数据传输对象类,用于用户登录成功后返回响应信息
import com.yf.exam.modules.sys.user.dto.response.SysUserLoginDTO;
// 导入系统用户实体类,对应数据库中的用户表
import com.yf.exam.modules.sys.user.entity.SysUser;
// 导入系统用户服务接口,用于调用用户相关的业务逻辑
import com.yf.exam.modules.sys.user.service.SysUserService;
// 导入 Swagger 注解,用于生成 API 文档,标记控制器的标签
import io.swagger.annotations.Api;
// 导入 Swagger 注解,用于生成 API 文档,标记接口的操作描述
import io.swagger.annotations.ApiOperation;
// 导入 Shiro 注解,用于权限控制,要求用户具有指定角色才能访问接口
import org.apache.shiro.authz.annotation.RequiresRoles;
// 导入 Spring 框架的依赖注入注解,用于自动注入依赖的 Bean
import org.springframework.beans.factory.annotation.Autowired;
// 导入 Spring 框架的跨域请求注解,允许跨域访问该接口
import org.springframework.web.bind.annotation.CrossOrigin;
// 导入 Spring 框架的请求体注解,用于将请求体中的数据绑定到方法参数上
import org.springframework.web.bind.annotation.RequestBody;
// 导入 Spring 框架的请求映射注解,用于映射请求路径
import org.springframework.web.bind.annotation.RequestMapping;
// 导入 Spring 框架的请求方法注解,用于指定请求的 HTTP 方法
import org.springframework.web.bind.annotation.RequestMethod;
// 导入 Spring 框架的请求参数注解,用于获取请求参数
import org.springframework.web.bind.annotation.RequestParam;
// 导入 Spring 框架的控制器注解,标记该类为 RESTful 风格的控制器
import org.springframework.web.bind.annotation.RestController;
// 导入 HttpServletRequest 类,用于获取 HTTP 请求信息
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 管理用户控制器,处理与系统用户相关的各种请求,如登录、登出、修改资料等操作。
* </p>
*
* @author 聪明笨狗
* @since 2020-04-13 16:57
*/
// 为 Swagger 文档标记该控制器的标签为 "管理用户"
@Api(tags = {"管理用户"})
// 标记该类为 RESTful 风格的控制器,返回数据直接作为 HTTP 响应体
@RestController
// 定义该控制器处理的请求路径前缀
@RequestMapping("/exam/api/sys/user")
public class SysUserController extends BaseController {
// 自动注入系统用户服务实例,用于调用用户相关的业务逻辑
@Autowired
private SysUserService baseService;
/**
* 用户登录接口,接收用户登录请求信息,调用服务层方法进行登录验证,并返回登录结果。
*
* @param reqDTO 包含用户登录信息的请求数据传输对象
* @return 封装了用户登录响应信息的 API 统一响应对象
*/
@CrossOrigin
@ApiOperation(value = "用户登录")
@RequestMapping(value = "/login", method = {RequestMethod.POST})
public ApiRest<SysUserLoginDTO> login(@RequestBody SysUserLoginReqDTO reqDTO) {
// 调用服务层的登录方法,传入用户名和密码,获取登录响应信息
SysUserLoginDTO respDTO = baseService.login(reqDTO.getUsername(), reqDTO.getPassword());
// 调用父类的成功响应方法,返回包含登录响应信息的响应对象
return super.success(respDTO);
}
/**
* 用户登出接口,接收 HTTP 请求,从请求头中获取 token调用服务层方法进行登出操作并返回操作结果。
*
* @param request HTTP 请求对象,用于获取请求头中的 token
* @return 封装了登出操作结果的 API 统一响应对象
*/
@CrossOrigin
@ApiOperation(value = "用户登录")
@RequestMapping(value = "/logout", method = {RequestMethod.POST})
public ApiRest logout(HttpServletRequest request) {
// 从请求头中获取 token
String token = request.getHeader("token");
// 打印当前会话的 token 信息
System.out.println("+++++当前会话为:"+token);
// 调用服务层的登出方法,传入 token 进行登出操作
baseService.logout(token);
// 调用父类的成功响应方法,返回操作成功的响应对象
return super.success();
}
/**
* 获取会话信息接口,接收 token 参数,调用服务层方法根据 token 获取用户会话信息,并返回会话信息。
*
* @param token 用户的 token用于验证用户身份并获取会话信息
* @return 封装了用户会话信息的 API 统一响应对象
*/
@ApiOperation(value = "获取会话")
@RequestMapping(value = "/info", method = {RequestMethod.POST})
public ApiRest info(@RequestParam("token") String token) {
// 调用服务层的 token 方法,传入 token 获取用户会话信息
SysUserLoginDTO respDTO = baseService.token(token);
// 调用父类的成功响应方法,返回包含会话信息的响应对象
return success(respDTO);
}
/**
* 修改用户资料接口,接收用户资料修改请求信息,调用服务层方法进行用户资料修改,并返回操作结果。
*
* @param reqDTO 包含用户资料修改信息的请求数据传输对象
* @return 封装了用户资料修改操作结果的 API 统一响应对象
*/
@ApiOperation(value = "修改用户资料")
@RequestMapping(value = "/update", method = {RequestMethod.POST})
public ApiRest update(@RequestBody SysUserDTO reqDTO) {
// 调用服务层的更新方法,传入用户资料修改信息进行用户资料修改
baseService.update(reqDTO);
// 调用父类的成功响应方法,返回操作成功的响应对象
return success();
}
/**
* 保存或修改系统用户接口,要求用户具有 "sa" 角色,接收用户保存或修改请求信息,调用服务层方法进行用户保存或修改操作,并返回操作结果。
*
* @param reqDTO 包含用户保存或修改信息的请求数据传输对象
* @return 封装了用户保存或修改操作结果的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "保存或修改")
@RequestMapping(value = "/save", method = {RequestMethod.POST})
public ApiRest save(@RequestBody SysUserSaveReqDTO reqDTO) {
// 调用服务层的保存方法,传入用户保存或修改信息进行用户保存或修改操作
baseService.save(reqDTO);
// 调用父类的成功响应方法,返回操作成功的响应对象
return success();
}
/**
* 批量删除用户接口,要求用户具有 "sa" 角色,接收包含多个用户 ID 的请求信息,调用服务层方法根据 ID 批量删除用户,并返回操作结果。
*
* @param reqDTO 包含多个用户 ID 的请求数据传输对象,用于指定要删除的用户
* @return 封装了批量删除用户操作结果的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "批量删除")
@RequestMapping(value = "/delete", method = { RequestMethod.POST})
public ApiRest edit(@RequestBody BaseIdsReqDTO reqDTO) {
// 根据传入的用户 ID 列表,调用服务层的删除方法批量删除用户
baseService.removeByIds(reqDTO.getIds());
// 调用父类的成功响应方法,返回操作成功的响应对象
return super.success();
}
/**
* 分页查找用户接口,要求用户具有 "sa" 角色,接收分页请求信息,调用服务层方法进行分页查询,并返回分页查询结果。
*
* @param reqDTO 包含分页查询条件和参数的请求数据传输对象
* @return 封装了分页查询结果的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "分页查找")
@RequestMapping(value = "/paging", method = { RequestMethod.POST})
public ApiRest<IPage<SysUserDTO>> paging(@RequestBody PagingReqDTO<SysUserDTO> reqDTO) {
// 调用服务层的分页查询方法,传入分页请求信息进行分页查询并转换结果
IPage<SysUserDTO> page = baseService.paging(reqDTO);
// 调用父类的成功响应方法,返回包含分页查询结果的响应对象
return super.success(page);
}
/**
* 修改用户状态接口,要求用户具有 "sa" 角色,接收用户状态修改请求信息,构建查询条件,调用服务层方法修改用户状态,并返回操作结果。
*
* @param reqDTO 包含用户状态修改信息的请求数据传输对象
* @return 封装了用户状态修改操作结果的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "修改状态")
@RequestMapping(value = "/state", method = { RequestMethod.POST})
public ApiRest state(@RequestBody BaseStateReqDTO reqDTO) {
// 创建 MyBatis-Plus 的查询条件构造器,用于构建查询条件
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
// 使用 Lambda 表达式构建查询条件,筛选出 ID 在请求 ID 列表中且用户名不为 "admin" 的用户
wrapper.lambda()
.in(SysUser::getId, reqDTO.getIds())
.ne(SysUser::getUserName, "admin");
// 创建一个新的用户实体对象,用于设置要修改的状态
SysUser record = new SysUser();
// 设置用户状态为请求中的状态
record.setState(reqDTO.getState());
// 调用服务层的更新方法,根据查询条件更新用户状态
baseService.update(record, wrapper);
// 调用父类的成功响应方法,返回操作成功的响应对象
return super.success();
}
/**
* 学员注册接口,接收学员注册请求信息,调用服务层方法进行学员注册,并返回注册结果。
*
* @param reqDTO 包含学员注册信息的请求数据传输对象
* @return 封装了学员注册响应信息的 API 统一响应对象
*/
@ApiOperation(value = "学员注册")
@RequestMapping(value = "/reg", method = {RequestMethod.POST})
public ApiRest<SysUserLoginDTO> reg(@RequestBody SysUserDTO reqDTO) {
// 调用服务层的注册方法,传入学员注册信息进行学员注册,获取注册响应信息
SysUserLoginDTO respDTO = baseService.reg(reqDTO);
// 调用父类的成功响应方法,返回包含注册响应信息的响应对象
return success(respDTO);
}
/**
* 快速注册接口,接收用户信息,调用服务层方法进行快速注册,如果手机号存在则登录,不存在就注册,并返回操作结果。
*
* @param reqDTO 包含用户信息的请求数据传输对象
* @return 封装了快速注册响应信息的 API 统一响应对象
*/
@ApiOperation(value = "快速注册")
@RequestMapping(value = "/quick-reg", method = {RequestMethod.POST})
public ApiRest<SysUserLoginDTO> quick(@RequestBody SysUserDTO reqDTO) {
// 调用服务层的快速注册方法,传入用户信息进行快速注册,获取注册或登录响应信息
SysUserLoginDTO respDTO = baseService.quickReg(reqDTO);
// 调用父类的成功响应方法,返回包含注册或登录响应信息的响应对象
return success(respDTO);
}
}