From 0612e81e1a20d4c46cac0557bcb45f5593773fe4 Mon Sep 17 00:00:00 2001 From: s2042968 Date: Thu, 19 Dec 2024 17:27:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2=EF=BC=8C?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=A7=92=E8=89=B2=EF=BC=8C=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=A7=93=E5=90=8D=E6=A0=A1=E9=AA=8C=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PermissionController.java | 1 - .../manage/controller/RoleController.java | 27 ++++ .../software/manage/pojo/models/Role.java | 10 +- .../manage/pojo/models/RolePermission.java | 2 + .../software/manage/pojo/req/RoleDTO.java | 29 ++++ .../manage/pojo/req/RolePermissionDTO.java | 29 ++++ .../manage/service/RolePermissionService.java | 7 + .../software/manage/service/RoleService.java | 22 +++ .../manage/service/UserRoleService.java | 7 + .../RolePermissionServiceImpl.java | 11 ++ .../service/serviceimpl/RoleServiceImpl.java | 153 ++++++++++++++++++ .../serviceimpl/UserRoleServiceImpl.java | 11 ++ 12 files changed, 304 insertions(+), 5 deletions(-) create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RoleDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePermissionDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RolePermissionService.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserRoleService.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RolePermissionServiceImpl.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserRoleServiceImpl.java diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java index b2d6eb1..11ade56 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/PermissionController.java @@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.List; @RestController @RequestMapping("/data/ed/permission") diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/RoleController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/RoleController.java index e30924a..787a657 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/RoleController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/RoleController.java @@ -1,9 +1,36 @@ package com.electromagnetic.industry.software.manage.controller; +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; +import com.electromagnetic.industry.software.manage.pojo.req.RoleDTO; +import com.electromagnetic.industry.software.manage.service.RoleService; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; + @RestController @RequestMapping("/data/ed/role") public class RoleController { + @Resource + private RoleService roleService; + + @ApiOperation(value = "新建角色", notes = "") + @RequestMapping(value = "/createRole", method = RequestMethod.POST) + public ElectromagneticResult createRole(@RequestBody RoleDTO roleDTO) { + return ElectromagneticResultUtil.success(roleService.createRole(roleDTO)); + } + + @ApiOperation(value = "更新角色", notes = "") + @RequestMapping(value = "/updateRole", method = RequestMethod.POST) + public ElectromagneticResult updateRole(@RequestBody RoleDTO roleDTO) { + return ElectromagneticResultUtil.success(roleService.updateRole(roleDTO)); + } + + @ApiOperation(value = "删除角色", notes = "") + @GetMapping(value = "/deleteRole/{roleId}") + public ElectromagneticResult deleteRole(@PathVariable("roleId") String roleId) { + return ElectromagneticResultUtil.success(roleService.deleteRole(roleId)); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/Role.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/Role.java index fcf3c88..8e6c2b9 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/Role.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/Role.java @@ -2,12 +2,13 @@ package com.electromagnetic.industry.software.manage.pojo.models; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; -import java.time.LocalDateTime; +import java.util.Date; @Data @TableName("ed_role") // 指定表名 public class Role { + @TableId(type = IdType.AUTO) private Long id; /** @@ -48,8 +49,8 @@ public class Role { /** * 创建时间 */ - @TableField(fill = FieldFill.INSERT) - private LocalDateTime gmtCreate; + @TableField(value = "gmt_create", fill = FieldFill.INSERT) + private Date gmtCreate; /** * 编辑者用户编码 @@ -66,12 +67,13 @@ public class Role { * 编辑时间 */ @TableField(value = "gmt_modified", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime gmtModified; + private Date gmtModified; /** * 是否有效:0-无效 1-有效 */ @TableField(value="effect_flag") + @TableLogic(value = "1", delval = "0") private Integer effectFlag; } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java index 1f128bf..6b8c312 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/RolePermission.java @@ -2,10 +2,12 @@ package com.electromagnetic.industry.software.manage.pojo.models; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; import lombok.Data; @Data @TableName("ed_role_permission") +@AllArgsConstructor public class RolePermission { /** diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RoleDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RoleDTO.java new file mode 100644 index 0000000..fe0301e --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RoleDTO.java @@ -0,0 +1,29 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +import java.util.List; + +@Data +public class RoleDTO { + + /** + * 角色编号 + */ + private String roleId; + + /** + * 角色姓名 + */ + private String roleName; + + /** + * 角色描述 + */ + private String roleDesc; + + /** + * 权限数据 + */ + private List data; +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePermissionDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePermissionDTO.java new file mode 100644 index 0000000..2e691c6 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePermissionDTO.java @@ -0,0 +1,29 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +import java.util.List; + +@Data +public class RolePermissionDTO { + + /** + * 目录(文件)编号 + */ + private String fileId; + + /** + * 目录(文件)名称 + */ + private String fileName; + + /** + * 权限列表 + */ + private List permission; + + /** + * 子目录 + */ + private List children; +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RolePermissionService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RolePermissionService.java new file mode 100644 index 0000000..4a3b40c --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RolePermissionService.java @@ -0,0 +1,7 @@ +package com.electromagnetic.industry.software.manage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.electromagnetic.industry.software.manage.pojo.models.RolePermission; + +public interface RolePermissionService extends IService { +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RoleService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RoleService.java index 32e5d4f..ea457a0 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RoleService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/RoleService.java @@ -2,8 +2,30 @@ package com.electromagnetic.industry.software.manage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.electromagnetic.industry.software.manage.pojo.models.Role; +import com.electromagnetic.industry.software.manage.pojo.req.RoleDTO; +import org.springframework.transaction.annotation.Transactional; public interface RoleService extends IService { + /** + * 新建角色 + * @param roleDTO + * @return + */ + Boolean createRole(RoleDTO roleDTO); + + /** + * 更新角色 + * @param roleDTO + * @return + */ + Boolean updateRole(RoleDTO roleDTO); + + /** + * 删除角色 + * @param roleId + * @return + */ + Boolean deleteRole(String roleId); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserRoleService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserRoleService.java new file mode 100644 index 0000000..cd39579 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserRoleService.java @@ -0,0 +1,7 @@ +package com.electromagnetic.industry.software.manage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.electromagnetic.industry.software.manage.pojo.models.UserRole; + +public interface UserRoleService extends IService { +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RolePermissionServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RolePermissionServiceImpl.java new file mode 100644 index 0000000..52ceee6 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RolePermissionServiceImpl.java @@ -0,0 +1,11 @@ +package com.electromagnetic.industry.software.manage.service.serviceimpl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper; +import com.electromagnetic.industry.software.manage.pojo.models.RolePermission; +import com.electromagnetic.industry.software.manage.service.RolePermissionService; +import org.springframework.stereotype.Service; + +@Service +public class RolePermissionServiceImpl extends ServiceImpl implements RolePermissionService { +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RoleServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RoleServiceImpl.java index 0c7d1f2..2f2cc87 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RoleServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/RoleServiceImpl.java @@ -1,13 +1,166 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.common.exception.BizException; +import com.electromagnetic.industry.software.common.util.EleLog; +import com.electromagnetic.industry.software.common.util.IdWorker; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.mapper.RoleMapper; import com.electromagnetic.industry.software.manage.pojo.models.Role; +import com.electromagnetic.industry.software.manage.pojo.models.RolePermission; +import com.electromagnetic.industry.software.manage.pojo.models.UserRole; +import com.electromagnetic.industry.software.manage.pojo.req.RoleDTO; +import com.electromagnetic.industry.software.manage.pojo.req.RolePermissionDTO; +import com.electromagnetic.industry.software.manage.service.RolePermissionService; import com.electromagnetic.industry.software.manage.service.RoleService; +import com.electromagnetic.industry.software.manage.service.UserRoleService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; @Service public class RoleServiceImpl extends ServiceImpl implements RoleService { + @Resource + private RolePermissionService rolePermissionService; + @Resource + private UserRoleService userRoleService; + @Autowired + private RoleMapper roleMapper; + + private EleLog log = new EleLog(RoleServiceImpl.class); + + /** + * 新建角色 + * @param roleDTO + * @return + */ + @Transactional + @Override + public Boolean createRole(RoleDTO roleDTO){ + + checkRoleNameUnique(roleDTO); + + // 创建角色 + Role role = new Role(); + // 创建角色编号 + String roleId = IdWorker.getSnowFlakeIdString(); + + role.setRoleId(roleId); + role.setRoleName(roleDTO.getRoleName()); + role.setRoleDesc(roleDTO.getRoleDesc()); + role.setCreator(UserThreadLocal.getUserId()); + role.setCreatorName(UserThreadLocal.getUsername()); + this.save(role); + + // 创建权限 + List data = roleDTO.getData(); + List list = flattenTree(data, roleId); + rolePermissionService.saveBatch(list); + return true; + + } + + /** + * 更新角色 + * @param roleDTO + * @return + */ + @Transactional + @Override + public Boolean updateRole(RoleDTO roleDTO){ + + // 更新角色信息 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("role_id", roleDTO.getRoleId()); + updateWrapper.set("role_name", roleDTO.getRoleName()); + updateWrapper.set("role_desc", roleDTO.getRoleDesc()); + updateWrapper.set("modifier", UserThreadLocal.getUserId()); + updateWrapper.set("modifier_name", UserThreadLocal.getUsername()); + this.update(updateWrapper); + + // 删除旧权限信息 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_id", roleDTO.getRoleId()); + rolePermissionService.remove(queryWrapper); + + // 插入新权限信息 + List data = roleDTO.getData(); + List list = flattenTree(data, roleDTO.getRoleId()); + rolePermissionService.saveBatch(list); + + return true; + } + + /** + * 删除角色 + * @param roleId + * @return + */ + @Transactional + @Override + public Boolean deleteRole(String roleId){ + + // 保留角色权限关联表 + // 删除用户角色关联表 + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.eq("role_id", roleId); + userRoleService.remove(queryWrapper1); + + // 逻辑删除角色 + QueryWrapper queryWrapper2 = new QueryWrapper<>(); + queryWrapper2.eq("role_id", roleId); + this.remove(queryWrapper2); + return true; + } + + /** + * 校验当前角色名称是否唯一 + * + * @param roleDTO + * @return + */ + private void checkRoleNameUnique(RoleDTO roleDTO) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_name", roleDTO.getRoleName()); + Role role = this.getOne(queryWrapper); + if (role != null && !role.getRoleId().equals(roleDTO.getRoleId())) { + String info = "当前角色名称已存在:" + roleDTO.getRoleName(); + log.error(info); + throw new BizException(-1,info); + } + } + + /** + * 权限层级数据扁平化 + * @param nodes + * @param roleId + * @return + */ + private List flattenTree(List nodes, String roleId) { + List flatList = new ArrayList<>(); + for (RolePermissionDTO node : nodes) { + flattenNode(node, flatList, roleId); + } + return flatList; + } + + private void flattenNode(RolePermissionDTO node, List flatList, String roleId) { + node.getPermission().forEach(code -> + flatList.add(new RolePermission(roleId, node.getFileId(), code)) + ); + // 添加当前节点 + if (node.getChildren() != null && !node.getChildren().isEmpty()) { + for (RolePermissionDTO child : node.getChildren()) { + flattenNode(child, flatList, roleId); // 递归处理子节点 + } + } + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserRoleServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserRoleServiceImpl.java new file mode 100644 index 0000000..57d236e --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserRoleServiceImpl.java @@ -0,0 +1,11 @@ +package com.electromagnetic.industry.software.manage.service.serviceimpl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.manage.mapper.UserRoleMapper; +import com.electromagnetic.industry.software.manage.pojo.models.UserRole; +import com.electromagnetic.industry.software.manage.service.UserRoleService; +import org.springframework.stereotype.Service; + +@Service +public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { +}