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/depart/controller/SysDepartController.java

187 lines
8.5 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.depart.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 请求数据传输对象类
import com.yf.exam.core.api.dto.BaseIdReqDTO;
// 导入自定义的基础多个 ID 请求数据传输对象类
import com.yf.exam.core.api.dto.BaseIdsReqDTO;
// 导入自定义的分页请求数据传输对象类
import com.yf.exam.core.api.dto.PagingReqDTO;
// 导入自定义的 Bean 映射工具类,用于对象属性的复制
import com.yf.exam.core.utils.BeanMapper;
// 导入系统部门数据传输对象类,用于在不同层之间传输部门信息
import com.yf.exam.modules.sys.depart.dto.SysDepartDTO;
// 导入部门排序请求数据传输对象类,用于接收部门排序的请求信息
import com.yf.exam.modules.sys.depart.dto.request.DepartSortReqDTO;
// 导入系统部门树状数据传输对象类,用于返回部门的树状结构信息
import com.yf.exam.modules.sys.depart.dto.response.SysDepartTreeDTO;
// 导入系统部门实体类,对应数据库中的部门表
import com.yf.exam.modules.sys.depart.entity.SysDepart;
// 导入系统部门服务接口,用于调用部门相关的业务逻辑
import com.yf.exam.modules.sys.depart.service.SysDepartService;
// 导入 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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
// 导入 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 框架的控制器注解,标记该类为 RESTful 风格的控制器
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 部门信息控制器,处理与系统部门信息相关的接口请求
* </p>
*
* @author 聪明笨狗
* @since 2020-09-02 17:25
*/
// 为 Swagger 文档标记该控制器的标签为 "部门信息"
@Api(tags={"部门信息"})
// 标记该类为 RESTful 风格的控制器,返回数据直接作为 HTTP 响应体
@RestController
// 定义该控制器处理的请求路径前缀
@RequestMapping("/exam/api/sys/depart")
public class SysDepartController extends BaseController {
// 自动注入系统部门服务实例,用于调用部门相关的业务逻辑
@Autowired
private SysDepartService baseService;
/**
* 添加或修改部门信息
* @param reqDTO 部门信息数据传输对象,包含要添加或修改的部门信息
* @return 封装了操作结果的 API 统一响应对象
*/
// 要求用户具有 "sa" 角色才能访问该接口
@RequiresRoles("sa")
// 为 Swagger 文档标记该接口的操作描述为 "添加或修改"
@ApiOperation(value = "添加或修改")
// 映射请求路径为 "/save",并指定请求方法为 POST
@RequestMapping(value = "/save", method = { RequestMethod.POST})
public ApiRest save(@RequestBody SysDepartDTO reqDTO) {
// 调用部门服务的保存方法,保存或更新部门信息
baseService.save(reqDTO);
// 调用父类的成功响应方法,返回操作成功的响应对象
return super.success();
}
/**
* 批量删除部门信息
* @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();
}
/**
* 查找部门详情信息
* @param reqDTO 包含单个部门 ID 的请求数据传输对象,用于指定要查找的部门
* @return 封装了部门详情信息的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "查找详情")
@RequestMapping(value = "/detail", method = { RequestMethod.POST})
public ApiRest<SysDepartDTO> find(@RequestBody BaseIdReqDTO reqDTO) {
// 根据传入的部门 ID调用部门服务的获取方法获取部门实体对象
SysDepart entity = baseService.getById(reqDTO.getId());
// 创建一个新的部门数据传输对象
SysDepartDTO dto = new SysDepartDTO();
// 将部门实体对象的属性复制到部门数据传输对象中
BeanUtils.copyProperties(entity, dto);
return super.success(dto);
}
/**
* 分页查找部门信息
* @param reqDTO 分页请求数据传输对象,包含分页查询的条件和参数
* @return 封装了分页查询结果的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "分页查找")
@RequestMapping(value = "/paging", method = { RequestMethod.POST})
public ApiRest<IPage<SysDepartTreeDTO>> paging(@RequestBody PagingReqDTO<SysDepartDTO> reqDTO) {
// 调用部门服务的分页查询方法,进行分页查询并将结果转换为树状数据传输对象
IPage<SysDepartTreeDTO> page = baseService.paging(reqDTO);
return super.success(page);
}
/**
* 查找部门列表,每次最多返回 200 条数据
* @param reqDTO 部门信息数据传输对象,包含查询部门列表的条件
* @return 封装了部门列表信息的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "查找列表")
@RequestMapping(value = "/list", method = { RequestMethod.POST})
public ApiRest<List<SysDepartDTO>> list(@RequestBody SysDepartDTO reqDTO) {
// 创建一个 MyBatis-Plus 的查询条件构造器
QueryWrapper<SysDepart> wrapper = new QueryWrapper<>();
// 调用部门服务的列表查询方法,根据查询条件获取部门实体列表
List<SysDepart> list = baseService.list(wrapper);
// 使用 Bean 映射工具类将部门实体列表转换为部门数据传输对象列表
List<SysDepartDTO> dtoList = BeanMapper.mapList(list, SysDepartDTO.class);
return super.success(dtoList);
}
/**
* 获取部门树列表
* @return 封装了部门树列表信息的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "树列表")
@RequestMapping(value = "/tree", method = { RequestMethod.POST})
public ApiRest<List<SysDepartTreeDTO>> tree() {
// 调用部门服务的查找树列表方法,获取部门树列表数据传输对象列表
List<SysDepartTreeDTO> dtoList = baseService.findTree();
return super.success(dtoList);
}
/**
* 对部门进行分类排序
* @param reqDTO 部门排序请求数据传输对象,包含要排序的部门 ID 和排序值
* @return 封装了操作结果的 API 统一响应对象
*/
@RequiresRoles("sa")
@ApiOperation(value = "分类排序")
@RequestMapping(value = "/sort", method = { RequestMethod.POST})
public ApiRest sort(@RequestBody DepartSortReqDTO reqDTO) {
// 调用部门服务的排序方法,根据传入的部门 ID 和排序值对部门进行排序
baseService.sort(reqDTO.getId(), reqDTO.getSort());
return super.success();
}
}