diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java index c05de995e..ac44bc1e5 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java @@ -58,11 +58,20 @@ public class DictDataController { @Operation(summary = "删除字典数据") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('system:dict:delete')") - public CommonResult deleteDictData(Long id) { + public CommonResult deleteDictData(@RequestParam("id") Long id) { dictDataService.deleteDictData(id); return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除字典数据") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:dict:delete')") + public CommonResult deleteDictDataList(@RequestParam("ids") List ids) { + dictDataService.deleteDictDataList(ids); + return success(true); + } + @GetMapping(value = {"/list-all-simple", "simple-list"}) @Operation(summary = "获得全部字典数据列表", description = "一般用于管理后台缓存字典数据在本地") // 无需添加权限认证,因为前端全局都需要 @@ -73,7 +82,7 @@ public class DictDataController { } @GetMapping("/page") - @Operation(summary = "/获得字典类型的分页列表") + @Operation(summary = "获得字典类型的分页") @PreAuthorize("@ss.hasPermission('system:dict:query')") public CommonResult> getDictTypePage(@Valid DictDataPageReqVO pageReqVO) { PageResult pageResult = dictDataService.getDictDataPage(pageReqVO); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java index c40980cfc..8247f1325 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictTypeController.java @@ -62,6 +62,15 @@ public class DictTypeController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除字典类型") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:dict:delete')") + public CommonResult deleteDictTypeList(@RequestParam("ids") List ids) { + dictTypeService.deleteDictTypeList(ids); + return success(true); + } + @GetMapping("/page") @Operation(summary = "获得字典类型的分页列表") @PreAuthorize("@ss.hasPermission('system:dict:query')") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java index 824fe4104..e19e28500 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java +++ b/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; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; import java.util.Comparator; import java.util.List; @@ -57,6 +57,15 @@ public class MenuController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除菜单") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:menu:delete')") + public CommonResult deleteMenuList(@RequestParam("ids") List ids) { + menuService.deleteMenuList(ids); + return success(true); + } + @GetMapping("/list") @Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面") @PreAuthorize("@ss.hasPermission('system:menu:query')") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java index cf2268752..5109d9e7d 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java +++ b/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; 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.module.system.controller.admin.permission.vo.role.*; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleRespVO; +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.service.permission.RoleService; import io.swagger.v3.oas.annotations.Operation; @@ -61,6 +63,15 @@ public class RoleController { return success(true); } + @DeleteMapping("/delete-list") + @Operation(summary = "批量删除角色") + @Parameter(name = "ids", description = "编号列表", required = true) + @PreAuthorize("@ss.hasPermission('system:role:delete')") + public CommonResult deleteRoleList(@RequestParam("ids") List ids) { + roleService.deleteRoleList(ids); + return success(true); + } + @GetMapping("/get") @Operation(summary = "获得角色信息") @PreAuthorize("@ss.hasPermission('system:role:query')") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java index 25604ceb3..7fd6699b3 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java @@ -38,6 +38,13 @@ public interface PostService { */ void deletePost(Long id); + /** + * 批量删除岗位信息 + * + * @param ids 岗位编号数组 + */ + void deletePostList(List ids); + /** * 获得岗位列表 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java index fc2498f1b..3f4a3b9d0 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataService.java @@ -38,6 +38,13 @@ public interface DictDataService { */ void deleteDictData(Long id); + /** + * 批量删除字典数据 + * + * @param ids 字典数据编号列表 + */ + void deleteDictDataList(List ids); + /** * 获得字典数据列表 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java index b15fd506a..9248d2043 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java @@ -98,6 +98,18 @@ public class DictDataServiceImpl implements DictDataService { dictDataMapper.deleteById(id); } + @Override + public void deleteDictDataList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验是否存在 + ids.forEach(this::validateDictDataExists); + + // 批量删除字典数据 + dictDataMapper.deleteByIds(ids); + } + @Override public long getDictDataCountByDictType(String dictType) { return dictDataMapper.selectCountByDictType(dictType); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java index 40911891c..5f617e754 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeService.java @@ -36,6 +36,13 @@ public interface DictTypeService { */ void deleteDictType(Long id); + /** + * 批量删除字典类型 + * + * @param ids 字典类型编号列表 + */ + void deleteDictTypeList(List ids); + /** * 获得字典类型分页列表 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java index 21d2b4f74..953ed5abf 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java +++ b/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 import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; import cn.iocoder.yudao.module.system.dal.mysql.dict.DictTypeMapper; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @@ -87,6 +87,27 @@ public class DictTypeServiceImpl implements DictTypeService { dictTypeMapper.updateToDelete(id, LocalDateTime.now()); } + @Override + public void deleteDictTypeList(List ids) { + if (ids == null || ids.isEmpty()) { + return; + } + // 校验是否存在 + ids.forEach(this::validateDictTypeExists); + + // 校验是否有字典数据 + List dictTypes = dictTypeMapper.selectByIds(ids); + for (DictTypeDO dictType : dictTypes) { + if (dictDataService.getDictDataCountByDictType(dictType.getType()) > 0) { + throw exception(DICT_TYPE_HAS_CHILDREN); + } + } + + // 批量删除字典类型 + LocalDateTime now = LocalDateTime.now(); + ids.forEach(id -> dictTypeMapper.updateToDelete(id, now)); + } + @Override public List getDictTypeList() { return dictTypeMapper.selectList(); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java index d74dc6134..0d5f0fd84 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.service.permission; -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.MenuSaveVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import java.util.Collection; @@ -36,6 +36,13 @@ public interface MenuService { */ void deleteMenu(Long id); + /** + * 批量删除菜单 + * + * @param ids 菜单编号数组 + */ + void deleteMenuList(List ids); + /** * 获得所有菜单列表 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java index 51de2daba..e79c3afa1 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java @@ -104,6 +104,31 @@ public class MenuServiceImpl implements MenuService { permissionService.processMenuDeleted(id); } + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, allEntries = true) + public void deleteMenuList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 校验是否还有子菜单 + for (Long id : ids) { + if (menuMapper.selectCountByParentId(id) > 0) { + throw exception(MENU_EXISTS_CHILDREN); + } + } + // 校验删除的菜单是否存在 + List menus = menuMapper.selectByIds(ids); + if (menus.size() != ids.size()) { + throw exception(MENU_NOT_EXISTS); + } + + // 标记删除 + menuMapper.deleteByIds(ids); + // 删除授予给角色的权限 + ids.forEach(id -> permissionService.processMenuDeleted(id)); + } + @Override public List getMenuList() { return menuMapper.selectList(); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java index 6de8b515b..7426d981a 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java +++ b/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; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; - import jakarta.validation.Valid; + import java.util.Collection; import java.util.List; import java.util.Set; @@ -40,6 +40,13 @@ public interface RoleService { */ void deleteRole(Long id); + /** + * 批量删除角色 + * + * @param ids 角色编号数组 + */ + void deleteRoleList(List ids); + /** * 设置角色的数据权限 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java index c7cf847dc..7a60d7819 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java @@ -122,6 +122,21 @@ public class RoleServiceImpl implements RoleService { LogRecordContext.putVariable("role", role); } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteRoleList(List ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 1. 校验是否可以更新 + ids.forEach(this::validateRoleForUpdate); + + // 2.1 标记删除 + roleMapper.deleteByIds(ids); + // 2.2 删除相关数据 + ids.forEach(id -> permissionService.processRoleDeleted(id)); + } + /** * 校验角色的唯一字段是否重复 *