diff --git a/README.md b/README.md index 3a0d302e..787a20bc 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,15 @@ #### 项目简介 -eladmin基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前后端分离的后台管理系统, 权限控制的方式为RBAC,项目支持数据字典与数据权限管理,支持一键生成前后端代码,支持前端菜单动态路由 +一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue的前后端分离的后台管理系统 -**开发文档** [https://docs.auauz.net/](https://docs.auauz.net) +**项目开发文档:** [https://docs.auauz.net/](https://docs.auauz.net) -**体验地址** [https://auauz.net/](https://auauz.net/) +**稳定版本体验地址:** [https://auauz.net/](https://auauz.net/) -**账号密码** ```admin/123456```(默认密码都是123456) +**开发版本体验地址:** [http://dev.auauz.net/](http://dev.auauz.net/) + +**账号密码:** `admin/123456` (默认密码都是123456) #### 项目源码 @@ -24,22 +26,30 @@ eladmin基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前 | github | https://github.com/elunez/eladmin | https://github.com/elunez/eladmin-web | | 码云 | https://gitee.com/elunez/eladmin | https://gitee.com/elunez/eladmin-web | +#### 主要特性 +- 使用最新技术栈,社区资源丰富。 +- 项目按功能模块化,提升开发,测试效率。 +- 高效率开发,使用代码生成器可以一键生成前后端代码 +- 支持数据字典,可方便的对一些状态进行管理 +- 支持接口限流,避免恶意请求导致服务层压力过大 +- 支持接口级别的功能权限与数据权限,可自定义操作 +- 自定义权限注解与匿名接口注解,可快速对某一接口拦截与放行 +- 对一些常用的前端组件封装:表格数据请求、数据字典等 +- 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断 #### 系统功能 - 用户管理:提供用户的相关配置,新增用户后,默认密码为123456 - 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限 - 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单 - 部门管理:可配置系统组织架构,树形表格展示 - 岗位管理:配置各个部门的职位 -- 字典管理:应广大码友的要求加入字典管理,可维护常用一些固定的数据,如:状态,性别等 +- 字典管理:可维护常用一些固定的数据,如:状态,性别等 - 操作日志:记录用户操作的日志 - 异常日志:记录异常日志,方便开发人员定位错误 -- 系统缓存:使用jedis将缓存操作可视化,并提供对redis的基本操作,可根据需求自行扩展 - SQL监控:采用druid 监控数据库访问性能,默认用户名admin,密码123456 -- 服务器监控:被监控服务器运行eladmin-monitor信息收集工具后,可以在页面上看到CPU内存以及磁盘使用情况 - 定时任务:整合Quartz做定时任务,加入任务日志,任务运行情况一目了然 - 代码生成:高灵活度一键生成前后端代码,减少百分之80左右的工作任务 - 邮件工具:配合富文本,发送html格式的邮件 -- 免费图床:使用sm.ms图床,用作公共图片上传使用 +- 免费图床:使用sm.ms图床,用作公共图片上传使用,该图床不怎么稳定,不太建议使用 - 七牛云存储:可同步七牛云存储的数据到系统,无需登录七牛云直接操作云数据 - 支付宝支付:整合了支付宝支付并且提供了测试账号,可自行测试 @@ -47,20 +57,19 @@ eladmin基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前 项目采用按功能分模块开发方式,将通用的配置放在公共模块,```system```模块为系统核心模块也是项目入口模块,```logging``` 模块为系统的日志模块,```tools``` 为第三方工具模块,包含了图床、邮件、七牛云、支付宝,```generator``` 为系统的代码生成模块 - eladmin-common 公共模块 - - annotation 为系统自定义注解 - - aspect 自定义注解的切面 - - base 提供了Entity、DTO基类和mapstruct的通用mapper - - config 自定义权限实现、redis配置、swagger配置 - - exception 项目统一异常的处理 - - utils 系统通用工具类 + - annotation 为系统自定义注解 + - aspect 自定义注解的切面 + - base 提供了Entity、DTO基类和mapstruct的通用mapper + - config 自定义权限实现、redis配置、swagger配置 + - exception 项目统一异常的处理 + - utils 系统通用工具类 - eladmin-system 系统核心模块(系统启动入口) - - config 配置跨域与静态资源,与数据权限 - - thread 线程池相关 - - modules 系统相关模块(登录授权、系统监控、定时任务等) + - config 配置跨域与静态资源,与数据权限 + - thread 线程池相关 + - modules 系统相关模块(登录授权、系统监控、定时任务等) - eladmin-logging 系统日志模块 - eladmin-tools 系统第三方工具模块 - - config 文件上传临时路径配置 - - modules 工具相关模块(第三方工具、代码生成工具) +- eladmin-generator 系统代码生成模块 #### 系统预览 @@ -83,6 +92,6 @@ eladmin基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前 #### 项目捐赠 -项目的发展离不开你的支持,请作者喝杯咖啡吧!ps:辣条也行 ☕! [Donate](https://docs.auauz.net/#/jz) +项目的发展离不开你的支持,请作者喝杯咖啡吧☕ [Donate](https://docs.auauz.net/#/jz) #### 反馈交流 - QQ交流群:891137268 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/rest/ServerController.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/rest/ServerController.java index 4c1fef46..7bc005ed 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/rest/ServerController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/rest/ServerController.java @@ -13,6 +13,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Set; + /** * @author Zhang houying * @date 2019-11-03 @@ -53,12 +55,12 @@ public class ServerController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @DeleteMapping(value = "/{id}") + @DeleteMapping @Log("删除服务监控") @ApiOperation("删除服务监控") @PreAuthorize("@el.check('server:del')") - public ResponseEntity delete(@PathVariable Integer id){ - serverService.delete(id); - return new ResponseEntity(HttpStatus.OK); + public ResponseEntity delete(@RequestBody Set ids){ + serverService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/ServerService.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/ServerService.java index c12da3f8..b9269e59 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/ServerService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/ServerService.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Pageable; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Zhang houying @@ -53,6 +54,6 @@ public interface ServerService { * 删除 * @param id / */ - void delete(Integer id); + void delete(Set id); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java index 0de0177b..4a3a942b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Zhang houying @@ -91,8 +92,10 @@ public class ServerServiceImpl implements ServerService { @Override @Transactional(rollbackFor = Exception.class) - public void delete(Integer id) { - serverRepository.deleteById(id); + public void delete(Set ids) { + for (Integer id : ids) { + serverRepository.deleteById(id); + } } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java index 9336b3a5..6a0e5631 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java @@ -48,7 +48,7 @@ public class AuthController { private Long expiration; @Value("${rsa.private_key}") private String privateKey; - @Value("${single.login:true}") + @Value("${single.login:false}") private Boolean singleLogin; private final SecurityProperties properties; private final RedisUtils redisUtils; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/OnlineController.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/OnlineController.java index 4a128a7e..34d599f8 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/OnlineController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/OnlineController.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.Set; /** * @author Zheng Jie @@ -43,10 +44,12 @@ public class OnlineController { } @ApiOperation("踢出用户") - @DeleteMapping(value = "/{key}") + @DeleteMapping @PreAuthorize("@el.check()") - public ResponseEntity delete(@PathVariable String key) throws Exception { - onlineUserService.kickOut(key); + public ResponseEntity delete(@RequestBody Set keys) throws Exception { + for (String key : keys) { + onlineUserService.kickOut(key); + } return new ResponseEntity<>(HttpStatus.OK); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java index bc0a0de1..6893ed52 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java @@ -51,7 +51,6 @@ public class TokenFilter extends GenericFilterBean { } else { log.debug("no valid JWT token found, uri: {}", requestRri); } - filterChain.doFilter(servletRequest, servletResponse); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java index f5976b21..856ddc7f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; +import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; @@ -44,7 +45,7 @@ public class User implements Serializable { private UserAvatar userAvatar; @NotBlank - @Pattern(regexp = "([a-z0-9A-Z]+[-|.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}",message = "格式错误") + @Email private String email; @NotBlank diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java index 51c72ef7..78a5fb88 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java @@ -1,5 +1,7 @@ package me.zhengjie.modules.system.rest; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.zhengjie.aop.log.Log; @@ -9,6 +11,7 @@ import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.dto.DeptDto; import me.zhengjie.modules.system.service.dto.DeptQueryCriteria; +import me.zhengjie.utils.RedisUtils; import me.zhengjie.utils.ThrowableUtil; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -17,7 +20,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -80,13 +85,21 @@ public class DeptController { @Log("删除部门") @ApiOperation("删除部门") - @DeleteMapping(value = "/{id}") + @DeleteMapping @PreAuthorize("@el.check('dept:del')") - public ResponseEntity delete(@PathVariable Long id){ + public ResponseEntity delete(@RequestBody Set ids){ + Set deptDtos = new HashSet<>(); + for (Long id : ids) { + List deptList = deptService.findByPid(id); + deptDtos.add(deptService.findById(id)); + if(CollectionUtil.isNotEmpty(deptList)){ + deptDtos = deptService.getDeleteDepts(deptList, deptDtos); + } + } try { - deptService.delete(id); + deptService.delete(deptDtos); }catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "该部门存在岗位或者角色关联,请取消关联后再试"); + ThrowableUtil.throwForeignKeyException(e, "所选部门中存在岗位或者角色关联,请取消关联后再试"); } return new ResponseEntity<>(HttpStatus.OK); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java index 911ceeb5..70d2b3b6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java @@ -15,10 +15,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; - import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -80,13 +79,13 @@ public class JobController { @Log("删除岗位") @ApiOperation("删除岗位") - @DeleteMapping(value = "/{id}") + @DeleteMapping @PreAuthorize("@el.check('job:del')") - public ResponseEntity delete(@PathVariable Long id){ + public ResponseEntity delete(@RequestBody Set ids){ try { - jobService.delete(id); + jobService.delete(ids); }catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "该岗位存在用户关联,请取消关联后再试"); + ThrowableUtil.throwForeignKeyException(e, "所选岗位存在用户关联,请取消关联后再试"); } return new ResponseEntity<>(HttpStatus.OK); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java index fd15fcab..61989954 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java @@ -103,13 +103,15 @@ public class MenuController { @Log("删除菜单") @ApiOperation("删除菜单") - @DeleteMapping(value = "/{id}") + @DeleteMapping @PreAuthorize("@el.check('menu:del')") - public ResponseEntity delete(@PathVariable Long id){ - List menuList = menuService.findByPid(id); + public ResponseEntity delete(@RequestBody Set ids){ Set menuSet = new HashSet<>(); - menuSet.add(menuService.findOne(id)); - menuSet = menuService.getDeleteMenus(menuList, menuSet); + for (Long id : ids) { + List menuList = menuService.findByPid(id); + menuSet.add(menuService.findOne(id)); + menuSet = menuService.getDeleteMenus(menuList, menuSet); + } menuService.delete(menuSet); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java index 39def419..6f95ab6b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java @@ -26,6 +26,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -116,14 +117,10 @@ public class RoleController { @Log("删除角色") @ApiOperation("删除角色") - @DeleteMapping(value = "/{id}") + @DeleteMapping @PreAuthorize("@el.check('roles:del')") - public ResponseEntity delete(@PathVariable Long id){ - try { - roleService.delete(id); - }catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "该角色存在用户关联,请取消关联后再试"); - } + public ResponseEntity delete(@RequestBody Set ids){ + roleService.delete(ids); return new ResponseEntity<>(HttpStatus.OK); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java index 3c6dcc29..c4207dea 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java @@ -138,17 +138,18 @@ public class UserController { @Log("删除用户") @ApiOperation("删除用户") - @DeleteMapping(value = "/{id}") + @DeleteMapping @PreAuthorize("@el.check('user:del')") - public ResponseEntity delete(@PathVariable Long id){ + public ResponseEntity delete(@RequestBody Set ids){ UserDto user = userService.findByName(SecurityUtils.getUsername()); - Integer currentLevel = Collections.min(roleService.findByUsersId(user.getId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); - Integer optLevel = Collections.min(roleService.findByUsersId(id).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); - - if (currentLevel > optLevel) { - throw new BadRequestException("角色权限不足"); + for (Long id : ids) { + Integer currentLevel = Collections.min(roleService.findByUsersId(user.getId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); + Integer optLevel = Collections.min(roleService.findByUsersId(id).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); + if (currentLevel > optLevel) { + throw new BadRequestException("角色权限不足,不能删除:" + userService.findByName(SecurityUtils.getUsername()).getUsername()); + } } - userService.delete(id); + userService.delete(ids); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java index fa230bf5..b898c800 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java @@ -44,9 +44,10 @@ public interface DeptService { /** * 删除 - * @param id / + * @param deptDtos / + * */ - void delete(Long id); + void delete(Set deptDtos); /** * 构建树形数据 @@ -76,4 +77,12 @@ public interface DeptService { * @throws IOException / */ void download(List queryAll, HttpServletResponse response) throws IOException; + + /** + * 获取待删除的部门 + * @param deptList / + * @param deptDtos / + * @return / + */ + Set getDeleteDepts(List deptList, Set deptDtos); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java index 270d4f87..d0eb9f6a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java @@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Zheng Jie @@ -38,9 +39,9 @@ public interface JobService { /** * 删除 - * @param id / + * @param ids / */ - void delete(Long id); + void delete(Set ids); /** * 分页查询 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java index 764122ae..058edb40 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java @@ -5,7 +5,6 @@ import me.zhengjie.modules.system.service.dto.RoleDto; import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDto; import me.zhengjie.modules.system.service.dto.UserDto; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Pageable; import org.springframework.security.core.GrantedAuthority; @@ -43,9 +42,9 @@ public interface RoleService { /** * 删除 - * @param id / + * @param ids / */ - void delete(Long id); + void delete(Set ids); /** * 根据用户ID查询 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java index 7a19964b..f019753f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java @@ -8,6 +8,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -37,9 +38,9 @@ public interface UserService { /** * 删除用户 - * @param id / + * @param ids / */ - void delete(Long id); + void delete(Set ids); /** * 根据用户名查询 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index 8c5c0636..e0381010 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -17,7 +17,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; - import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; @@ -129,8 +128,10 @@ public class DeptServiceImpl implements DeptService { @Override @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - deptRepository.deleteById(id); + public void delete(Set deptDtos) { + for (DeptDto deptDto : deptDtos) { + deptRepository.deleteById(deptDto.getId()); + } } @Override @@ -145,4 +146,16 @@ public class DeptServiceImpl implements DeptService { } FileUtil.downloadExcel(list, response); } + + @Override + public Set getDeleteDepts(List menuList, Set deptDtos) { + for (Dept dept : menuList) { + deptDtos.add(deptMapper.toDto(dept)); + List depts = deptRepository.findByPid(dept.getId()); + if(depts!=null && depts.size()!=0){ + getDeleteDepts(depts, deptDtos); + } + } + return deptDtos; + } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java index 268b71fe..60b935de 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java @@ -22,10 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author Zheng Jie @@ -94,8 +91,10 @@ public class JobServiceImpl implements JobService { @Override @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - jobRepository.deleteById(id); + public void delete(Set ids) { + for (Long id : ids) { + jobRepository.deleteById(id); + } } @Override diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index 7f4b4ea0..14c16de1 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -125,8 +125,14 @@ public class RoleServiceImpl implements RoleService { @Override @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - roleRepository.deleteById(id); + public void delete(Set ids) { + for (Long id : ids) { + try { + roleRepository.deleteById(id); + }catch (Throwable e){ + ThrowableUtil.throwForeignKeyException(e, "该角色存在用户关联,请取消关联后再试"); + } + } } @Override diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 1ef40a9f..1fd47e7d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -138,8 +138,10 @@ public class UserServiceImpl implements UserService { @Override @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - userRepository.deleteById(id); + public void delete(Set ids) { + for (Long id : ids) { + userRepository.deleteById(id); + } } @Override