🔧 简化 permission 模块的 VO

This commit is contained in:
YunaiV 2023-12-02 21:47:03 +08:00
parent 73d53dbaad
commit 2dd835893a
27 changed files with 193 additions and 352 deletions

View File

@ -21,7 +21,7 @@ public class OperateLogFrameworkServiceImpl implements OperateLogFrameworkServic
@Override @Override
@Async @Async
public void createOperateLog(OperateLog operateLog) { public void createOperateLog(OperateLog operateLog) {
OperateLogCreateReqDTO reqDTO = BeanUtil.copyProperties(operateLog, OperateLogCreateReqDTO.class); OperateLogCreateReqDTO reqDTO = BeanUtil.toBean(operateLog, OperateLogCreateReqDTO.class);
operateLogApi.createOperateLog(reqDTO); operateLogApi.createOperateLog(reqDTO);
} }

View File

@ -1,8 +1,11 @@
package cn.iocoder.yudao.module.system.enums.permission; package cn.iocoder.yudao.module.system.enums.permission;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import java.util.Arrays;
/** /**
* 数据范围枚举类 * 数据范围枚举类
* *
@ -12,7 +15,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum DataScopeEnum { public enum DataScopeEnum implements IntArrayValuable {
ALL(1), // 全部数据权限 ALL(1), // 全部数据权限
@ -27,4 +30,11 @@ public enum DataScopeEnum {
*/ */
private final Integer scope; private final Integer scope;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DataScopeEnum::getScope).toArray();
@Override
public int[] array() {
return ARRAYS;
}
} }

View File

@ -2,13 +2,16 @@ package cn.iocoder.yudao.module.system.controller.admin.permission;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.*; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.convert.permission.MenuConvert; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuRespVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSimpleRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import cn.iocoder.yudao.module.system.service.permission.MenuService; import cn.iocoder.yudao.module.system.service.permission.MenuService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -32,16 +35,16 @@ public class MenuController {
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建菜单") @Operation(summary = "创建菜单")
@PreAuthorize("@ss.hasPermission('system:menu:create')") @PreAuthorize("@ss.hasPermission('system:menu:create')")
public CommonResult<Long> createMenu(@Valid @RequestBody MenuCreateReqVO reqVO) { public CommonResult<Long> createMenu(@Valid @RequestBody MenuSaveVO createReqVO) {
Long menuId = menuService.createMenu(reqVO); Long menuId = menuService.createMenu(createReqVO);
return success(menuId); return success(menuId);
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "修改菜单") @Operation(summary = "修改菜单")
@PreAuthorize("@ss.hasPermission('system:menu:update')") @PreAuthorize("@ss.hasPermission('system:menu:update')")
public CommonResult<Boolean> updateMenu(@Valid @RequestBody MenuUpdateReqVO reqVO) { public CommonResult<Boolean> updateMenu(@Valid @RequestBody MenuSaveVO updateReqVO) {
menuService.updateMenu(reqVO); menuService.updateMenu(updateReqVO);
return success(true); return success(true);
} }
@ -60,20 +63,17 @@ public class MenuController {
public CommonResult<List<MenuRespVO>> getMenuList(MenuListReqVO reqVO) { public CommonResult<List<MenuRespVO>> getMenuList(MenuListReqVO reqVO) {
List<MenuDO> list = menuService.getMenuList(reqVO); List<MenuDO> list = menuService.getMenuList(reqVO);
list.sort(Comparator.comparing(MenuDO::getSort)); list.sort(Comparator.comparing(MenuDO::getSort));
return success(MenuConvert.INSTANCE.convertList(list)); return success(BeanUtils.toBean(list, MenuRespVO.class));
} }
@GetMapping("/list-all-simple") @GetMapping({"/list-all-simple", "simple-list"})
@Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" + @Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" +
"在多租户的场景下,会只返回租户所在套餐有的菜单") "在多租户的场景下,会只返回租户所在套餐有的菜单")
public CommonResult<List<MenuSimpleRespVO>> getSimpleMenuList() { public CommonResult<List<MenuSimpleRespVO>> getSimpleMenuList() {
// 获得菜单列表只要开启状态的 List<MenuDO> list = menuService.getMenuListByTenant(
MenuListReqVO reqVO = new MenuListReqVO(); new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()));
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
List<MenuDO> list = menuService.getMenuListByTenant(reqVO);
// 排序后返回给前端
list.sort(Comparator.comparing(MenuDO::getSort)); list.sort(Comparator.comparing(MenuDO::getSort));
return success(MenuConvert.INSTANCE.convertList02(list)); return success(BeanUtils.toBean(list, MenuSimpleRespVO.class));
} }
@GetMapping("/get") @GetMapping("/get")
@ -81,7 +81,7 @@ public class MenuController {
@PreAuthorize("@ss.hasPermission('system:menu:query')") @PreAuthorize("@ss.hasPermission('system:menu:query')")
public CommonResult<MenuRespVO> getMenu(Long id) { public CommonResult<MenuRespVO> getMenu(Long id) {
MenuDO menu = menuService.getMenu(id); MenuDO menu = menuService.getMenu(id);
return success(MenuConvert.INSTANCE.convert(menu)); return success(BeanUtils.toBean(menu, MenuRespVO.class));
} }
} }

View File

@ -2,16 +2,17 @@ package cn.iocoder.yudao.module.system.controller.admin.permission;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*;
import cn.iocoder.yudao.module.system.convert.permission.RoleConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.module.system.service.permission.RoleService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -39,15 +40,15 @@ public class RoleController {
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建角色") @Operation(summary = "创建角色")
@PreAuthorize("@ss.hasPermission('system:role:create')") @PreAuthorize("@ss.hasPermission('system:role:create')")
public CommonResult<Long> createRole(@Valid @RequestBody RoleCreateReqVO reqVO) { public CommonResult<Long> createRole(@Valid @RequestBody RoleSaveReqVO createReqVO) {
return success(roleService.createRole(reqVO, null)); return success(roleService.createRole(createReqVO, null));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "修改角色") @Operation(summary = "修改角色")
@PreAuthorize("@ss.hasPermission('system:role:update')") @PreAuthorize("@ss.hasPermission('system:role:update')")
public CommonResult<Boolean> updateRole(@Valid @RequestBody RoleUpdateReqVO reqVO) { public CommonResult<Boolean> updateRole(@Valid @RequestBody RoleSaveReqVO updateReqVO) {
roleService.updateRole(reqVO); roleService.updateRole(updateReqVO);
return success(true); return success(true);
} }
@ -73,34 +74,35 @@ public class RoleController {
@PreAuthorize("@ss.hasPermission('system:role:query')") @PreAuthorize("@ss.hasPermission('system:role:query')")
public CommonResult<RoleRespVO> getRole(@RequestParam("id") Long id) { public CommonResult<RoleRespVO> getRole(@RequestParam("id") Long id) {
RoleDO role = roleService.getRole(id); RoleDO role = roleService.getRole(id);
return success(RoleConvert.INSTANCE.convert(role)); return success(BeanUtils.toBean(role, RoleRespVO.class));
} }
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得角色分页") @Operation(summary = "获得角色分页")
@PreAuthorize("@ss.hasPermission('system:role:query')") @PreAuthorize("@ss.hasPermission('system:role:query')")
public CommonResult<PageResult<RoleDO>> getRolePage(RolePageReqVO reqVO) { public CommonResult<PageResult<RoleRespVO>> getRolePage(RolePageReqVO pageReqVO) {
return success(roleService.getRolePage(reqVO)); PageResult<RoleDO> pageResult = roleService.getRolePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, RoleRespVO.class));
} }
@GetMapping("/list-all-simple") @GetMapping("/list-all-simple")
@Operation(summary = "获取角色精简信息列表", description = "只包含被开启的角色,主要用于前端的下拉选项") @Operation(summary = "获取角色精简信息列表", description = "只包含被开启的角色,主要用于前端的下拉选项")
public CommonResult<List<RoleSimpleRespVO>> getSimpleRoleList() { public CommonResult<List<RoleSimpleRespVO>> getSimpleRoleList() {
// 获得角色列表只要开启状态的
List<RoleDO> list = roleService.getRoleListByStatus(singleton(CommonStatusEnum.ENABLE.getStatus())); List<RoleDO> list = roleService.getRoleListByStatus(singleton(CommonStatusEnum.ENABLE.getStatus()));
// 排序后返回给前端
list.sort(Comparator.comparing(RoleDO::getSort)); list.sort(Comparator.comparing(RoleDO::getSort));
return success(RoleConvert.INSTANCE.convertList02(list)); return success(BeanUtils.toBean(list, RoleSimpleRespVO.class));
} }
@GetMapping("/export") @GetMapping("/export-excel")
@Operation(summary = "导出角色 Excel")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
@PreAuthorize("@ss.hasPermission('system:role:export')") @PreAuthorize("@ss.hasPermission('system:role:export')")
public void export(HttpServletResponse response, @Validated RoleExportReqVO reqVO) throws IOException { public void export(HttpServletResponse response, @Validated RolePageReqVO exportReqVO) throws IOException {
List<RoleDO> list = roleService.getRoleList(reqVO); exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<RoleExcelVO> data = RoleConvert.INSTANCE.convertList03(list); List<RoleDO> list = roleService.getRolePage(exportReqVO).getList();
// 输出 // 输出
ExcelUtils.write(response, "角色数据.xls", "角色列表", RoleExcelVO.class, data); ExcelUtils.write(response, "角色数据.xls", "数据", RoleRespVO.class,
BeanUtils.toBean(list, RoleRespVO.class));
} }
} }

View File

@ -1,10 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@Schema(description = "管理后台 - 菜单创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class MenuCreateReqVO extends MenuBaseVO {
}

View File

@ -6,21 +6,66 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Schema(description = "管理后台 - 菜单信息 Response VO") @Schema(description = "管理后台 - 菜单信息 Response VO")
@Data @Data
@NoArgsConstructor public class MenuRespVO {
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class MenuRespVO extends MenuBaseVO {
@Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id; private Long id;
@Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
@NotBlank(message = "菜单名称不能为空")
@Size(max = 50, message = "菜单名称长度不能超过50个字符")
private String name;
@Schema(description = "权限标识,仅菜单类型为按钮时,才需要传递", example = "sys:menu:add")
@Size(max = 100)
private String permission;
@Schema(description = "类型,参见 MenuTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "菜单类型不能为空")
private Integer type;
@Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "显示顺序不能为空")
private Integer sort;
@Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "父菜单 ID 不能为空")
private Long parentId;
@Schema(description = "路由地址,仅菜单类型为菜单或者目录时,才需要传", example = "post")
@Size(max = 200, message = "路由地址不能超过200个字符")
private String path;
@Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list")
private String icon;
@Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index")
@Size(max = 200, message = "组件路径不能超过255个字符")
private String component;
@Schema(description = "组件名", example = "SystemUser")
private String componentName;
@Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "状态不能为空")
private Integer status; private Integer status;
@Schema(description = "是否可见", example = "false")
private Boolean visible;
@Schema(description = "是否缓存", example = "false")
private Boolean keepAlive;
@Schema(description = "是否总是显示", example = "false")
private Boolean alwaysShow;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
private LocalDateTime createTime; private LocalDateTime createTime;

View File

@ -7,12 +7,12 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
/** @Schema(description = "管理后台 - 菜单创建/修改 Request VO")
* 菜单 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data @Data
public class MenuBaseVO { public class MenuSaveVO {
@Schema(description = "菜单编号", example = "1024")
private Long id;
@Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
@NotBlank(message = "菜单名称不能为空") @NotBlank(message = "菜单名称不能为空")

View File

@ -9,8 +9,6 @@ import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 菜单精简信息 Response VO") @Schema(description = "管理后台 - 菜单精简信息 Response VO")
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
public class MenuSimpleRespVO { public class MenuSimpleRespVO {
@Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")

View File

@ -1,17 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 菜单更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class MenuUpdateReqVO extends MenuBaseVO {
@Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "菜单编号不能为空")
private Long id;
}

View File

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission; package cn.iocoder.yudao.module.system.controller.admin.permission.vo.permission;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@ -17,7 +19,7 @@ public class PermissionAssignRoleDataScopeReqVO {
@Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "数据范围不能为空") @NotNull(message = "数据范围不能为空")
// TODO 这里要多一个枚举校验 @InEnum(value = DataScopeEnum.class, message = "数据范围必须是 {value}")
private Integer dataScope; private Integer dataScope;
@Schema(description = "部门编号列表,只有范围类型为 DEPT_CUSTOM 时,该字段才需要", example = "1,3,5") @Schema(description = "部门编号列表,只有范围类型为 DEPT_CUSTOM 时,该字段才需要", example = "1,3,5")

View File

@ -1,12 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 角色创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class RoleCreateReqVO extends RoleBaseVO {
}

View File

@ -1,34 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* 角色 Excel 导出响应 VO
*/
@Data
public class RoleExcelVO {
@ExcelProperty("角色序号")
private Long id;
@ExcelProperty("角色名称")
private String name;
@ExcelProperty("角色标志")
private String code;
@ExcelProperty("角色排序")
private Integer sort;
@ExcelProperty("数据范围")
private Integer dataScope;
@ExcelProperty(value = "角色状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.COMMON_STATUS)
private String status;
}

View File

@ -1,28 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 角色分页 Request VO")
@Data
public class RoleExportReqVO {
@Schema(description = "角色名称,模糊匹配", example = "芋道")
private String name;
@Schema(description = "角色标识,模糊匹配", example = "yudao")
private String code;
@Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1")
private Integer status;
@Schema(description = "开始时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -1,36 +1,56 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role; package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Set; import java.util.Set;
@Schema(description = "管理后台 - 角色信息 Response VO") @Schema(description = "管理后台 - 角色信息 Response VO")
@Data @Data
@NoArgsConstructor @ExcelIgnoreUnannotated
@AllArgsConstructor public class RoleRespVO {
@EqualsAndHashCode(callSuper = true)
public class RoleRespVO extends RoleBaseVO {
@Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("角色序号")
private Long id; private Long id;
@Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员")
private Integer dataScope; @ExcelProperty("角色名称")
private String name;
@Schema(description = "数据范围(指定部门数组)", example = "1") @NotBlank(message = "角色标志不能为空")
private Set<Long> dataScopeDeptIds; @ExcelProperty("角色标志")
private String code;
@Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@ExcelProperty("角色排序")
private Integer sort;
@Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty(value = "角色状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.COMMON_STATUS)
private Integer status; private Integer status;
@Schema(description = "角色类型,参见 RoleTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "角色类型,参见 RoleTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer type; private Integer type;
@Schema(description = "备注", example = "我是一个角色")
private String remark;
@Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("数据范围")
private Integer dataScope;
@Schema(description = "数据范围(指定部门数组)", example = "1")
private Set<Long> dataScopeDeptIds;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
private LocalDateTime createTime; private LocalDateTime createTime;

View File

@ -7,12 +7,12 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
/** @Schema(description = "管理后台 - 角色创建 Request VO")
* 角色 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data @Data
public class RoleBaseVO { public class RoleSaveReqVO {
@Schema(description = "角色编号", example = "1")
private Long id;
@Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员") @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员")
@NotBlank(message = "角色名称不能为空") @NotBlank(message = "角色名称不能为空")

View File

@ -7,8 +7,6 @@ import lombok.NoArgsConstructor;
@Schema(description = "管理后台 - 角色精简信息 Response VO") @Schema(description = "管理后台 - 角色精简信息 Response VO")
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
public class RoleSimpleRespVO { public class RoleSimpleRespVO {
@Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")

View File

@ -1,18 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.permission.vo.role;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 角色更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class RoleUpdateReqVO extends RoleBaseVO {
@Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "角色编号不能为空")
private Long id;
}

View File

@ -1,28 +0,0 @@
package cn.iocoder.yudao.module.system.convert.permission;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuRespVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSimpleRespVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface MenuConvert {
MenuConvert INSTANCE = Mappers.getMapper(MenuConvert.class);
List<MenuRespVO> convertList(List<MenuDO> list);
MenuDO convert(MenuCreateReqVO bean);
MenuDO convert(MenuUpdateReqVO bean);
MenuRespVO convert(MenuDO bean);
List<MenuSimpleRespVO> convertList02(List<MenuDO> list);
}

View File

@ -1,28 +0,0 @@
package cn.iocoder.yudao.module.system.convert.permission;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.service.permission.bo.RoleCreateReqBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface RoleConvert {
RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class);
RoleDO convert(RoleUpdateReqVO bean);
RoleRespVO convert(RoleDO bean);
RoleDO convert(RoleCreateReqVO bean);
List<RoleSimpleRespVO> convertList02(List<RoleDO> list);
List<RoleExcelVO> convertList03(List<RoleDO> list);
RoleDO convert(RoleCreateReqBO bean);
}

View File

@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -25,14 +24,6 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
.orderByDesc(RoleDO::getId)); .orderByDesc(RoleDO::getId));
} }
default List<RoleDO> selectList(RoleExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<RoleDO>()
.likeIfPresent(RoleDO::getName, reqVO.getName())
.likeIfPresent(RoleDO::getCode, reqVO.getCode())
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime()));
}
default RoleDO selectByName(String name) { default RoleDO selectByName(String name) {
return selectOne(RoleDO::getName, name); return selectOne(RoleDO::getName, name);
} }

View File

@ -1,8 +1,7 @@
package cn.iocoder.yudao.module.system.service.permission; package cn.iocoder.yudao.module.system.service.permission;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import java.util.Collection; import java.util.Collection;
@ -18,17 +17,17 @@ public interface MenuService {
/** /**
* 创建菜单 * 创建菜单
* *
* @param reqVO 菜单信息 * @param createReqVO 菜单信息
* @return 创建出来的菜单编号 * @return 创建出来的菜单编号
*/ */
Long createMenu(MenuCreateReqVO reqVO); Long createMenu(MenuSaveVO createReqVO);
/** /**
* 更新菜单 * 更新菜单
* *
* @param reqVO 菜单信息 * @param updateReqVO 菜单信息
*/ */
void updateMenu(MenuUpdateReqVO reqVO); void updateMenu(MenuSaveVO updateReqVO);
/** /**
* 删除菜单 * 删除菜单

View File

@ -1,10 +1,9 @@
package cn.iocoder.yudao.module.system.service.permission; package cn.iocoder.yudao.module.system.service.permission;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO;
import cn.iocoder.yudao.module.system.convert.permission.MenuConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
@ -45,16 +44,16 @@ public class MenuServiceImpl implements MenuService {
private TenantService tenantService; private TenantService tenantService;
@Override @Override
@CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#reqVO.permission", @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#createReqVO.permission",
condition = "#reqVO.permission != null") condition = "#createReqVO.permission != null")
public Long createMenu(MenuCreateReqVO reqVO) { public Long createMenu(MenuSaveVO createReqVO) {
// 校验父菜单存在 // 校验父菜单存在
validateParentMenu(reqVO.getParentId(), null); validateParentMenu(createReqVO.getParentId(), null);
// 校验菜单自己 // 校验菜单自己
validateMenu(reqVO.getParentId(), reqVO.getName(), null); validateMenu(createReqVO.getParentId(), createReqVO.getName(), null);
// 插入数据库 // 插入数据库
MenuDO menu = MenuConvert.INSTANCE.convert(reqVO); MenuDO menu = BeanUtils.toBean(createReqVO, MenuDO.class);
initMenuProperty(menu); initMenuProperty(menu);
menuMapper.insert(menu); menuMapper.insert(menu);
// 返回 // 返回
@ -64,20 +63,20 @@ public class MenuServiceImpl implements MenuService {
@Override @Override
@CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST,
allEntries = true) // allEntries 清空所有缓存因为 permission 如果变更涉及到新老两个 permission直接清理简单有效 allEntries = true) // allEntries 清空所有缓存因为 permission 如果变更涉及到新老两个 permission直接清理简单有效
public void updateMenu(MenuUpdateReqVO reqVO) { public void updateMenu(MenuSaveVO updateReqVO) {
// 校验更新的菜单是否存在 // 校验更新的菜单是否存在
if (menuMapper.selectById(reqVO.getId()) == null) { if (menuMapper.selectById(updateReqVO.getId()) == null) {
throw exception(MENU_NOT_EXISTS); throw exception(MENU_NOT_EXISTS);
} }
// 校验父菜单存在 // 校验父菜单存在
validateParentMenu(reqVO.getParentId(), reqVO.getId()); validateParentMenu(updateReqVO.getParentId(), updateReqVO.getId());
// 校验菜单自己 // 校验菜单自己
validateMenu(reqVO.getParentId(), reqVO.getName(), reqVO.getId()); validateMenu(updateReqVO.getParentId(), updateReqVO.getName(), updateReqVO.getId());
// 更新到数据库 // 更新到数据库
MenuDO updateObject = MenuConvert.INSTANCE.convert(reqVO); MenuDO updateObj = BeanUtils.toBean(updateReqVO, MenuDO.class);
initMenuProperty(updateObject); initMenuProperty(updateObj);
menuMapper.updateById(updateObject); menuMapper.updateById(updateObj);
} }
@Override @Override

View File

@ -1,10 +1,8 @@
package cn.iocoder.yudao.module.system.service.permission; package cn.iocoder.yudao.module.system.service.permission;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import javax.validation.Valid; import javax.validation.Valid;
@ -22,18 +20,18 @@ public interface RoleService {
/** /**
* 创建角色 * 创建角色
* *
* @param reqVO 创建角色信息 * @param createReqVO 创建角色信息
* @param type 角色类型 * @param type 角色类型
* @return 角色编号 * @return 角色编号
*/ */
Long createRole(@Valid RoleCreateReqVO reqVO, Integer type); Long createRole(@Valid RoleSaveReqVO createReqVO, Integer type);
/** /**
* 更新角色 * 更新角色
* *
* @param reqVO 更新角色信息 * @param updateReqVO 更新角色信息
*/ */
void updateRole(@Valid RoleUpdateReqVO reqVO); void updateRole(@Valid RoleSaveReqVO updateReqVO);
/** /**
* 删除角色 * 删除角色
@ -114,14 +112,6 @@ public interface RoleService {
*/ */
PageResult<RoleDO> getRolePage(RolePageReqVO reqVO); PageResult<RoleDO> getRolePage(RolePageReqVO reqVO);
/**
* 获得角色列表
*
* @param reqVO 列表查询
* @return 角色列表
*/
List<RoleDO> getRoleList(RoleExportReqVO reqVO);
/** /**
* 判断角色编号数组中是否有管理员 * 判断角色编号数组中是否有管理员
* *

View File

@ -6,11 +6,9 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
import cn.iocoder.yudao.module.system.convert.permission.RoleConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
@ -50,11 +48,11 @@ public class RoleServiceImpl implements RoleService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createRole(RoleCreateReqVO reqVO, Integer type) { public Long createRole(RoleSaveReqVO createReqVO, Integer type) {
// 校验角色 // 校验角色
validateRoleDuplicate(reqVO.getName(), reqVO.getCode(), null); validateRoleDuplicate(createReqVO.getName(), createReqVO.getCode(), null);
// 插入到数据库 // 插入到数据库
RoleDO role = RoleConvert.INSTANCE.convert(reqVO); RoleDO role = BeanUtils.toBean(createReqVO, RoleDO.class);
role.setType(ObjectUtil.defaultIfNull(type, RoleTypeEnum.CUSTOM.getType())); role.setType(ObjectUtil.defaultIfNull(type, RoleTypeEnum.CUSTOM.getType()));
role.setStatus(CommonStatusEnum.ENABLE.getStatus()); role.setStatus(CommonStatusEnum.ENABLE.getStatus());
role.setDataScope(DataScopeEnum.ALL.getScope()); // 默认可查看所有数据原因是可能一些项目不需要项目权限 role.setDataScope(DataScopeEnum.ALL.getScope()); // 默认可查看所有数据原因是可能一些项目不需要项目权限
@ -64,15 +62,15 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
@CacheEvict(value = RedisKeyConstants.ROLE, key = "#reqVO.id") @CacheEvict(value = RedisKeyConstants.ROLE, key = "#updateReqVO.id")
public void updateRole(RoleUpdateReqVO reqVO) { public void updateRole(RoleSaveReqVO updateReqVO) {
// 校验是否可以更新 // 校验是否可以更新
validateRoleForUpdate(reqVO.getId()); validateRoleForUpdate(updateReqVO.getId());
// 校验角色的唯一字段是否重复 // 校验角色的唯一字段是否重复
validateRoleDuplicate(reqVO.getName(), reqVO.getCode(), reqVO.getId()); validateRoleDuplicate(updateReqVO.getName(), updateReqVO.getCode(), updateReqVO.getId());
// 更新到数据库 // 更新到数据库
RoleDO updateObj = RoleConvert.INSTANCE.convert(reqVO); RoleDO updateObj = BeanUtils.toBean(updateReqVO, RoleDO.class);
roleMapper.updateById(updateObj); roleMapper.updateById(updateObj);
} }
@ -208,11 +206,6 @@ public class RoleServiceImpl implements RoleService {
return roleMapper.selectPage(reqVO); return roleMapper.selectPage(reqVO);
} }
@Override
public List<RoleDO> getRoleList(RoleExportReqVO reqVO) {
return roleMapper.selectList(reqVO);
}
@Override @Override
public boolean hasAnySuperAdmin(Collection<Long> ids) { public boolean hasAnySuperAdmin(Collection<Long> ids) {
if (CollectionUtil.isEmpty(ids)) { if (CollectionUtil.isEmpty(ids)) {

View File

@ -11,7 +11,7 @@ import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.tenant.config.TenantProperties; import cn.iocoder.yudao.framework.tenant.config.TenantProperties;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantExportReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
@ -130,7 +130,7 @@ public class TenantServiceImpl implements TenantService {
private Long createRole(TenantPackageDO tenantPackage) { private Long createRole(TenantPackageDO tenantPackage) {
// 创建角色 // 创建角色
RoleCreateReqVO reqVO = new RoleCreateReqVO(); RoleSaveReqVO reqVO = new RoleSaveReqVO();
reqVO.setName(RoleCodeEnum.TENANT_ADMIN.getName()).setCode(RoleCodeEnum.TENANT_ADMIN.getCode()) reqVO.setName(RoleCodeEnum.TENANT_ADMIN.getName()).setCode(RoleCodeEnum.TENANT_ADMIN.getCode())
.setSort(0).setRemark("系统自动生成"); .setSort(0).setRemark("系统自动生成");
Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType()); Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());

View File

@ -2,9 +2,8 @@ package cn.iocoder.yudao.module.system.service.permission;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper;
import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum; import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum;
@ -14,7 +13,8 @@ import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
@ -51,16 +51,16 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
menuMapper.insert(menuDO); menuMapper.insert(menuDO);
Long parentId = menuDO.getId(); Long parentId = menuDO.getId();
// 准备参数 // 准备参数
MenuCreateReqVO reqVO = randomPojo(MenuCreateReqVO.class, o -> { MenuSaveVO reqVO = randomPojo(MenuSaveVO.class, o -> {
o.setParentId(parentId); o.setParentId(parentId);
o.setName("testSonName"); o.setName("testSonName");
o.setType(MenuTypeEnum.MENU.getType()); o.setType(MenuTypeEnum.MENU.getType());
}); }).setId(null); // 防止 id 被赋值
Long menuId = menuService.createMenu(reqVO); Long menuId = menuService.createMenu(reqVO);
// 校验记录的属性是否正确 // 校验记录的属性是否正确
MenuDO dbMenu = menuMapper.selectById(menuId); MenuDO dbMenu = menuMapper.selectById(menuId);
assertPojoEquals(reqVO, dbMenu); assertPojoEquals(reqVO, dbMenu, "id");
} }
@Test @Test
@ -69,7 +69,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
MenuDO sonMenuDO = createParentAndSonMenu(); MenuDO sonMenuDO = createParentAndSonMenu();
Long sonId = sonMenuDO.getId(); Long sonId = sonMenuDO.getId();
// 准备参数 // 准备参数
MenuUpdateReqVO reqVO = randomPojo(MenuUpdateReqVO.class, o -> { MenuSaveVO reqVO = randomPojo(MenuSaveVO.class, o -> {
o.setId(sonId); o.setId(sonId);
o.setName("testSonName"); // 修改名字 o.setName("testSonName"); // 修改名字
o.setParentId(sonMenuDO.getParentId()); o.setParentId(sonMenuDO.getParentId());
@ -86,7 +86,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testUpdateMenu_sonIdNotExist() { public void testUpdateMenu_sonIdNotExist() {
// 准备参数 // 准备参数
MenuUpdateReqVO reqVO = randomPojo(MenuUpdateReqVO.class); MenuSaveVO reqVO = randomPojo(MenuSaveVO.class);
// 调用并断言异常 // 调用并断言异常
assertServiceException(() -> menuService.updateMenu(reqVO), MENU_NOT_EXISTS); assertServiceException(() -> menuService.updateMenu(reqVO), MENU_NOT_EXISTS);
} }

View File

@ -4,10 +4,8 @@ import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper;
import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum;
@ -52,13 +50,14 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testCreateRole() { public void testCreateRole() {
// 准备参数 // 准备参数
RoleCreateReqVO reqVO = randomPojo(RoleCreateReqVO.class); RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class)
.setId(null); // 防止 id 被赋值
// 调用 // 调用
Long roleId = roleService.createRole(reqVO, null); Long roleId = roleService.createRole(reqVO, null);
// 断言 // 断言
RoleDO roleDO = roleMapper.selectById(roleId); RoleDO roleDO = roleMapper.selectById(roleId);
assertPojoEquals(reqVO, roleDO); assertPojoEquals(reqVO, roleDO, "id");
assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType()); assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType());
assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus()); assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus());
assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope()); assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope());
@ -71,7 +70,7 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
roleMapper.insert(roleDO); roleMapper.insert(roleDO);
// 准备参数 // 准备参数
Long id = roleDO.getId(); Long id = roleDO.getId();
RoleUpdateReqVO reqVO = randomPojo(RoleUpdateReqVO.class, o -> o.setId(id)); RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class, o -> o.setId(id));
// 调用 // 调用
roleService.updateRole(reqVO); roleService.updateRole(reqVO);
@ -256,36 +255,6 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
} }
} }
@Test
public void testGetRoleList() {
// mock 数据
RoleDO dbRole = randomPojo(RoleDO.class, o -> { // 等会查询到
o.setName("土豆");
o.setCode("tudou");
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
o.setCreateTime(buildTime(2022, 2, 8));
});
roleMapper.insert(dbRole);
// 测试 name 不匹配
roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setName("红薯")));
// 测试 code 不匹配
roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCode("hong")));
// 测试 createTime 不匹配
roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCreateTime(buildTime(2022, 2, 16))));
// 准备参数
RoleExportReqVO reqVO = new RoleExportReqVO();
reqVO.setName("土豆");
reqVO.setCode("tu");
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
reqVO.setCreateTime(buildBetweenTime(2022, 2, 1, 2022, 2, 12));
// 调用
List<RoleDO> list = roleService.getRoleList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbRole, list.get(0));
}
@Test @Test
public void testGetRolePage() { public void testGetRolePage() {
// mock 数据 // mock 数据