Commit 39d1954ec9422156382e28cf77959e4065463ccc

Authored by puhui999
1 parent a8a3720e

feat: system 模块新增批量删除接口

yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java
... ... @@ -58,11 +58,20 @@ public class DictDataController {
58 58 @Operation(summary = "删除字典数据")
59 59 @Parameter(name = "id", description = "编号", required = true, example = "1024")
60 60 @PreAuthorize("@ss.hasPermission('system:dict:delete')")
61   - public CommonResult<Boolean> deleteDictData(Long id) {
  61 + public CommonResult<Boolean> deleteDictData(@RequestParam("id") Long id) {
62 62 dictDataService.deleteDictData(id);
63 63 return success(true);
64 64 }
65 65  
  66 + @DeleteMapping("/delete-list")
  67 + @Operation(summary = "批量删除字典数据")
  68 + @Parameter(name = "ids", description = "编号列表", required = true)
  69 + @PreAuthorize("@ss.hasPermission('system:dict:delete')")
  70 + public CommonResult<Boolean> deleteDictDataList(@RequestParam("ids") List<Long> ids) {
  71 + dictDataService.deleteDictDataList(ids);
  72 + return success(true);
  73 + }
  74 +
66 75 @GetMapping(value = {"/list-all-simple", "simple-list"})
67 76 @Operation(summary = "获得全部字典数据列表", description = "一般用于管理后台缓存字典数据在本地")
68 77 // 无需添加权限认证,因为前端全局都需要
... ... @@ -73,7 +82,7 @@ public class DictDataController {
73 82 }
74 83  
75 84 @GetMapping("/page")
76   - @Operation(summary = "/获得字典类型的分页列表")
  85 + @Operation(summary = "获得字典类型的分页")
77 86 @PreAuthorize("@ss.hasPermission('system:dict:query')")
78 87 public CommonResult<PageResult<DictDataRespVO>> getDictTypePage(@Valid DictDataPageReqVO pageReqVO) {
79 88 PageResult<DictDataDO> pageResult = dictDataService.getDictDataPage(pageReqVO);
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java
... ... @@ -62,6 +62,15 @@ public class DictTypeController {
62 62 return success(true);
63 63 }
64 64  
  65 + @DeleteMapping("/delete-list")
  66 + @Operation(summary = "批量删除字典类型")
  67 + @Parameter(name = "ids", description = "编号列表", required = true)
  68 + @PreAuthorize("@ss.hasPermission('system:dict:delete')")
  69 + public CommonResult<Boolean> deleteDictTypeList(@RequestParam("ids") List<Long> ids) {
  70 + dictTypeService.deleteDictTypeList(ids);
  71 + return success(true);
  72 + }
  73 +
65 74 @GetMapping("/page")
66 75 @Operation(summary = "获得字典类型的分页列表")
67 76 @PreAuthorize("@ss.hasPermission('system:dict:query')")
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java
... ... @@ -12,12 +12,12 @@ import cn.iocoder.yudao.module.system.service.permission.MenuService;
12 12 import io.swagger.v3.oas.annotations.Operation;
13 13 import io.swagger.v3.oas.annotations.Parameter;
14 14 import io.swagger.v3.oas.annotations.tags.Tag;
  15 +import jakarta.annotation.Resource;
  16 +import jakarta.validation.Valid;
15 17 import org.springframework.security.access.prepost.PreAuthorize;
16 18 import org.springframework.validation.annotation.Validated;
17 19 import org.springframework.web.bind.annotation.*;
18 20  
19   -import jakarta.annotation.Resource;
20   -import jakarta.validation.Valid;
21 21 import java.util.Comparator;
22 22 import java.util.List;
23 23  
... ... @@ -57,6 +57,15 @@ public class MenuController {
57 57 return success(true);
58 58 }
59 59  
  60 + @DeleteMapping("/delete-list")
  61 + @Operation(summary = "批量删除菜单")
  62 + @Parameter(name = "ids", description = "编号列表", required = true)
  63 + @PreAuthorize("@ss.hasPermission('system:menu:delete')")
  64 + public CommonResult<Boolean> deleteMenuList(@RequestParam("ids") List<Long> ids) {
  65 + menuService.deleteMenuList(ids);
  66 + return success(true);
  67 + }
  68 +
60 69 @GetMapping("/list")
61 70 @Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面")
62 71 @PreAuthorize("@ss.hasPermission('system:menu:query')")
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java
... ... @@ -7,7 +7,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
7 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 8 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
9 9 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
10   -import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*;
  10 +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
  11 +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleRespVO;
  12 +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
11 13 import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
12 14 import cn.iocoder.yudao.module.system.service.permission.RoleService;
13 15 import io.swagger.v3.oas.annotations.Operation;
... ... @@ -61,6 +63,15 @@ public class RoleController {
61 63 return success(true);
62 64 }
63 65  
  66 + @DeleteMapping("/delete-list")
  67 + @Operation(summary = "批量删除角色")
  68 + @Parameter(name = "ids", description = "编号列表", required = true)
  69 + @PreAuthorize("@ss.hasPermission('system:role:delete')")
  70 + public CommonResult<Boolean> deleteRoleList(@RequestParam("ids") List<Long> ids) {
  71 + roleService.deleteRoleList(ids);
  72 + return success(true);
  73 + }
  74 +
64 75 @GetMapping("/get")
65 76 @Operation(summary = "获得角色信息")
66 77 @PreAuthorize("@ss.hasPermission('system:role:query')")
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java
... ... @@ -39,6 +39,13 @@ public interface PostService {
39 39 void deletePost(Long id);
40 40  
41 41 /**
  42 + * 批量删除岗位信息
  43 + *
  44 + * @param ids 岗位编号数组
  45 + */
  46 + void deletePostList(List<Long> ids);
  47 +
  48 + /**
42 49 * 获得岗位列表
43 50 *
44 51 * @param ids 岗位编号数组
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java
... ... @@ -39,6 +39,13 @@ public interface DictDataService {
39 39 void deleteDictData(Long id);
40 40  
41 41 /**
  42 + * 批量删除字典数据
  43 + *
  44 + * @param ids 字典数据编号列表
  45 + */
  46 + void deleteDictDataList(List<Long> ids);
  47 +
  48 + /**
42 49 * 获得字典数据列表
43 50 *
44 51 * @param status 状态
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java
... ... @@ -99,6 +99,18 @@ public class DictDataServiceImpl implements DictDataService {
99 99 }
100 100  
101 101 @Override
  102 + public void deleteDictDataList(List<Long> ids) {
  103 + if (CollUtil.isEmpty(ids)) {
  104 + return;
  105 + }
  106 + // 校验是否存在
  107 + ids.forEach(this::validateDictDataExists);
  108 +
  109 + // 批量删除字典数据
  110 + dictDataMapper.deleteByIds(ids);
  111 + }
  112 +
  113 + @Override
102 114 public long getDictDataCountByDictType(String dictType) {
103 115 return dictDataMapper.selectCountByDictType(dictType);
104 116 }
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java
... ... @@ -37,6 +37,13 @@ public interface DictTypeService {
37 37 void deleteDictType(Long id);
38 38  
39 39 /**
  40 + * 批量删除字典类型
  41 + *
  42 + * @param ids 字典类型编号列表
  43 + */
  44 + void deleteDictTypeList(List<Long> ids);
  45 +
  46 + /**
40 47 * 获得字典类型分页列表
41 48 *
42 49 * @param pageReqVO 分页请求
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java
... ... @@ -9,9 +9,9 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeSave
9 9 import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO;
10 10 import cn.iocoder.yudao.module.system.dal.mysql.dict.DictTypeMapper;
11 11 import com.google.common.annotations.VisibleForTesting;
  12 +import jakarta.annotation.Resource;
12 13 import org.springframework.stereotype.Service;
13 14  
14   -import jakarta.annotation.Resource;
15 15 import java.time.LocalDateTime;
16 16 import java.util.List;
17 17  
... ... @@ -88,6 +88,27 @@ public class DictTypeServiceImpl implements DictTypeService {
88 88 }
89 89  
90 90 @Override
  91 + public void deleteDictTypeList(List<Long> ids) {
  92 + if (ids == null || ids.isEmpty()) {
  93 + return;
  94 + }
  95 + // 校验是否存在
  96 + ids.forEach(this::validateDictTypeExists);
  97 +
  98 + // 校验是否有字典数据
  99 + List<DictTypeDO> dictTypes = dictTypeMapper.selectByIds(ids);
  100 + for (DictTypeDO dictType : dictTypes) {
  101 + if (dictDataService.getDictDataCountByDictType(dictType.getType()) > 0) {
  102 + throw exception(DICT_TYPE_HAS_CHILDREN);
  103 + }
  104 + }
  105 +
  106 + // 批量删除字典类型
  107 + LocalDateTime now = LocalDateTime.now();
  108 + ids.forEach(id -> dictTypeMapper.updateToDelete(id, now));
  109 + }
  110 +
  111 + @Override
91 112 public List<DictTypeDO> getDictTypeList() {
92 113 return dictTypeMapper.selectList();
93 114 }
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java
1 1 package cn.iocoder.yudao.module.system.service.permission;
2 2  
3   -import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
4 3 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
  4 +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
5 5 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
6 6  
7 7 import java.util.Collection;
... ... @@ -37,6 +37,13 @@ public interface MenuService {
37 37 void deleteMenu(Long id);
38 38  
39 39 /**
  40 + * 批量删除菜单
  41 + *
  42 + * @param ids 菜单编号数组
  43 + */
  44 + void deleteMenuList(List<Long> ids);
  45 +
  46 + /**
40 47 * 获得所有菜单列表
41 48 *
42 49 * @return 菜单列表
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java
... ... @@ -105,6 +105,31 @@ public class MenuServiceImpl implements MenuService {
105 105 }
106 106  
107 107 @Override
  108 + @Transactional(rollbackFor = Exception.class)
  109 + @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, allEntries = true)
  110 + public void deleteMenuList(List<Long> ids) {
  111 + if (CollUtil.isEmpty(ids)) {
  112 + return;
  113 + }
  114 + // 校验是否还有子菜单
  115 + for (Long id : ids) {
  116 + if (menuMapper.selectCountByParentId(id) > 0) {
  117 + throw exception(MENU_EXISTS_CHILDREN);
  118 + }
  119 + }
  120 + // 校验删除的菜单是否存在
  121 + List<MenuDO> menus = menuMapper.selectByIds(ids);
  122 + if (menus.size() != ids.size()) {
  123 + throw exception(MENU_NOT_EXISTS);
  124 + }
  125 +
  126 + // 标记删除
  127 + menuMapper.deleteByIds(ids);
  128 + // 删除授予给角色的权限
  129 + ids.forEach(id -> permissionService.processMenuDeleted(id));
  130 + }
  131 +
  132 + @Override
108 133 public List<MenuDO> getMenuList() {
109 134 return menuMapper.selectList();
110 135 }
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java
... ... @@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
5 5 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
6 6 import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
7   -
8 7 import jakarta.validation.Valid;
  8 +
9 9 import java.util.Collection;
10 10 import java.util.List;
11 11 import java.util.Set;
... ... @@ -41,6 +41,13 @@ public interface RoleService {
41 41 void deleteRole(Long id);
42 42  
43 43 /**
  44 + * 批量删除角色
  45 + *
  46 + * @param ids 角色编号数组
  47 + */
  48 + void deleteRoleList(List<Long> ids);
  49 +
  50 + /**
44 51 * 设置角色的数据权限
45 52 *
46 53 * @param id 角色编号
... ...
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java
... ... @@ -122,6 +122,21 @@ public class RoleServiceImpl implements RoleService {
122 122 LogRecordContext.putVariable("role", role);
123 123 }
124 124  
  125 + @Override
  126 + @Transactional(rollbackFor = Exception.class)
  127 + public void deleteRoleList(List<Long> ids) {
  128 + if (CollUtil.isEmpty(ids)) {
  129 + return;
  130 + }
  131 + // 1. 校验是否可以更新
  132 + ids.forEach(this::validateRoleForUpdate);
  133 +
  134 + // 2.1 标记删除
  135 + roleMapper.deleteByIds(ids);
  136 + // 2.2 删除相关数据
  137 + ids.forEach(id -> permissionService.processRoleDeleted(id));
  138 + }
  139 +
125 140 /**
126 141 * 校验角色的唯一字段是否重复
127 142 *
... ...