From fe7c60b713a81f7e37ddbc9883c2f77c51a7dfbc Mon Sep 17 00:00:00 2001 From: s2042968 Date: Thu, 26 Dec 2024 15:03:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=E5=92=8C?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=BB=91=E5=AE=9A=E9=A1=B5=E9=9D=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electrmangnetic/pom.xml | 6 + .../manage/config/MybatisPlusConfig.java | 17 ++ .../manage/controller/RoleController.java | 24 ++- .../manage/controller/UserController.java | 8 + .../software/manage/mapper/RoleMapper.java | 29 ++++ .../software/manage/mapper/UserMapper.java | 6 + .../software/manage/pojo/models/Role.java | 7 - .../software/manage/pojo/models/User.java | 12 +- .../manage/pojo/other/SearchKeyWords.java | 5 + .../manage/pojo/other/SingleUserResponse.java | 21 +++ .../software/manage/pojo/req/RolePageDTO.java | 26 +++ .../manage/pojo/req/RolePermissionDTO.java | 9 +- .../manage/pojo/req/SearchUserRequest.java | 5 + .../manage/pojo/req/UserBindRoleDTO.java | 20 +++ .../manage/pojo/req/UserRoleRequest.java | 9 +- .../manage/service/PermissionService.java | 19 ++- .../software/manage/service/RoleService.java | 24 +++ .../serviceimpl/PermissionServiceImpl.java | 92 ++++++---- .../service/serviceimpl/RoleServiceImpl.java | 159 +++++++++++++++--- .../service/serviceimpl/UserServiceImpl.java | 85 +++++++--- .../main/resources/sqlmapper/UserMapper.xml | 30 ++++ .../software/common/cons/UserConstants.java | 7 +- .../software/common/enums/ActiveEnum.java | 23 +++ 23 files changed, 540 insertions(+), 103 deletions(-) create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/MybatisPlusConfig.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePageDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserBindRoleDTO.java create mode 100644 electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/ActiveEnum.java diff --git a/electrmangnetic/pom.xml b/electrmangnetic/pom.xml index b9ccd7e..b6085a5 100644 --- a/electrmangnetic/pom.xml +++ b/electrmangnetic/pom.xml @@ -61,6 +61,12 @@ com.github.pagehelper pagehelper + + + com.github.jsqlparser + jsqlparser + + 5.1.2 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/MybatisPlusConfig.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/MybatisPlusConfig.java new file mode 100644 index 0000000..059ca17 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/MybatisPlusConfig.java @@ -0,0 +1,17 @@ +package com.electromagnetic.industry.software.manage.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 添加分页插件 + return interceptor; + } +} 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 b53412d..84574cc 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 @@ -3,9 +3,8 @@ 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.pojo.req.RolePageDTO; import com.electromagnetic.industry.software.manage.service.RoleService; -import com.electromagnetic.industry.software.manage.service.UserService; -import com.electromagnetic.industry.software.manage.service.serviceimpl.CommonService; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -17,13 +16,10 @@ public class RoleController { @Resource private RoleService roleService; - @Resource - private CommonService commonService; @ApiOperation(value = "新建角色", notes = "") @RequestMapping(value = "/createRole", method = RequestMethod.POST) public ElectromagneticResult createRole(@RequestBody RoleDTO roleDTO) { - commonService.queryAllPrjInfo(); return ElectromagneticResultUtil.success(roleService.createRole(roleDTO)); } @@ -44,4 +40,22 @@ public class RoleController { public ElectromagneticResult getRole(@PathVariable("roleId") String roleId) { return ElectromagneticResultUtil.success(roleService.getRole(roleId)); } + + @ApiOperation(value = "获取角色列表", notes = "") + @RequestMapping(value = "/list", method = RequestMethod.POST) + public ElectromagneticResult getRoles(@RequestBody RolePageDTO rolePageDTO) { + return ElectromagneticResultUtil.success(roleService.getRoles(rolePageDTO)); + } + + @ApiOperation(value="通过角色名查看角色权限", notes = "") + @GetMapping(value = "/getRoleByName") + public ElectromagneticResult getRoleByName(@RequestParam("roleName") String roleName) { + return ElectromagneticResultUtil.success(roleService.getRoleByName(roleName)); + } + + @ApiOperation(value = "角色名列表", notes = "") + @GetMapping(value = "/getRoleNames") + public ElectromagneticResult getRoleNames() { + return ElectromagneticResultUtil.success(roleService.getAllRoleNames()); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java index 018a63f..7e00d52 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java @@ -1,5 +1,6 @@ package com.electromagnetic.industry.software.manage.controller; +import com.electromagnetic.industry.software.common.enums.PublishEnum; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; import com.electromagnetic.industry.software.manage.pojo.req.*; @@ -70,6 +71,13 @@ public class UserController { return userService.logout(token); } + @ApiOperation(value = "人员绑定界面查询用户", notes = "") + @RequestMapping(value = "/bindRole/list", method = RequestMethod.POST) + public ElectromagneticResult getPublishedUsers(@RequestBody SearchUserRequest searchUserRequest) { + searchUserRequest.setIsPublished(PublishEnum.PUBLISHED.getCode().toString()); + return userService.searchUser(searchUserRequest); + } + @ApiOperation(value = "人员绑定", notes = "") @RequestMapping(value = "/bindRoles", method = RequestMethod.POST) public ElectromagneticResult bindRoles(@RequestBody UserRoleRequest userRoleRequest) { diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java index de49196..a3d4dbb 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java @@ -1,9 +1,38 @@ package com.electromagnetic.industry.software.manage.mapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.electromagnetic.industry.software.manage.pojo.models.Role; +import com.electromagnetic.industry.software.manage.pojo.req.RoleDTO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; @Mapper public interface RoleMapper extends BaseMapper { + + + @Select("") + Page getPageRoleDTO(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java index ba89135..0c3d24b 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java @@ -75,4 +75,10 @@ public interface UserMapper { */ int deleteUser(UserDeleteKeyWords userDeleteKeyWords); + /** + * 查找用户角色名称 + * @param userId + * @return + */ + List selectUserRoles(String userId); } 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 1516097..13fe816 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 @@ -30,12 +30,6 @@ public class Role { @TableField(value = "role_desc") private String roleDesc; - /** - * 角色状态 - */ - @TableField(value = "role_status") - private String roleStatus; - /** * 创建者用户编码 */ @@ -74,7 +68,6 @@ public class Role { * 是否有效: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/User.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java index 84ef804..f68d977 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java @@ -44,6 +44,11 @@ public class User { */ private String userTitle; + /** + * 账户 + */ + private String userAccount; + /** * 登录密码 */ @@ -65,10 +70,15 @@ public class User { private Date internshipEndDate; /** - * 是否已发布 + * 是否已发布(系统管理员) */ private Integer isPublished; + /** + * 是否已激活(安全管理员) + */ + private Integer isActivated; + /** * 盐 */ diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SearchKeyWords.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SearchKeyWords.java index 3ec3e9d..6998e63 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SearchKeyWords.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SearchKeyWords.java @@ -19,6 +19,11 @@ public class SearchKeyWords { */ private String isPublished; + /** + * 用户激活状态 + */ + private String isActivated; + /** * 排序方式: "asc" 或 "desc" 或 “” */ diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java index 27d8652..95af546 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; +import java.util.List; @Data public class SingleUserResponse { @@ -45,11 +46,26 @@ public class SingleUserResponse { */ private String userTitle; + /** + * 账户 + */ + private String userAccount; + /** * 登录密码 */ private String userPwd; + /** + * 角色名称拼接字符串 + */ + private String roles; + + /** + * 角色名称列表 + */ + private List roleList; + /** * 入职日期 */ @@ -72,6 +88,11 @@ public class SingleUserResponse { */ private Integer isPublished; + /** + * 是否已激活 + */ + private Integer isActivated; + /** * 盐 */ diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePageDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePageDTO.java new file mode 100644 index 0000000..9845e6c --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/RolePageDTO.java @@ -0,0 +1,26 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +@Data +public class RolePageDTO { + /** + * 角色编号 + */ + private String roleId; + + /** + * 角色姓名 + */ + private String roleName; + + /** + * 页码 + */ + private Integer pageIndex; + + /** + * 页数据量 + */ + private Integer pageSize; +} 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 index 1311e71..c63385b 100644 --- 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 @@ -9,9 +9,14 @@ import java.util.Map; public class RolePermissionDTO { /** - * 目录(文件)编号 + * 目录(文件)主键 */ - private String fileId; + private String id; + + /** + * 父ID + */ + private String parentId; /** * 目录(文件)名称 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/SearchUserRequest.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/SearchUserRequest.java index 74e7404..2b28c12 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/SearchUserRequest.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/SearchUserRequest.java @@ -24,6 +24,11 @@ public class SearchUserRequest extends BaseRequest implements Serializable { */ private String isPublished; + /** + * 用户激活状态 + */ + private String isActivated; + /** * 排序方式: "asc" 或 "desc" 或 “” */ diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserBindRoleDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserBindRoleDTO.java new file mode 100644 index 0000000..f8a9e49 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserBindRoleDTO.java @@ -0,0 +1,20 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +import java.util.List; + +@Data +public class UserBindRoleDTO { + + /** + * 用户编号 + */ + String userId; + + /** + * 角色名称列表(角色名称唯一) + */ + List roleList; + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserRoleRequest.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserRoleRequest.java index 7f81120..3ef12a4 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserRoleRequest.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/UserRoleRequest.java @@ -7,13 +7,6 @@ import java.util.List; @Data public class UserRoleRequest { - /** - * 用户编号 - */ - String userId; + List bindData; - /** - * 角色编号列表 - */ - List roleIds; } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java index 4133f4a..18004f1 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/PermissionService.java @@ -9,10 +9,10 @@ public interface PermissionService { * 查询当前用户在当前目录的功能权限 * * @param userId - * @param fileId + * @param id * @return */ - Map getUserPermission(String userId, String fileId); + Map getUserPermission(String userId, String id); /** * 获取当前用户有权限访问的目录id @@ -20,4 +20,19 @@ public interface PermissionService { * @return */ List getAccessibleTree(); + + /** + * 获得当前角色权限 + * @param roleId + * @param fileId + * @return + */ + List getPermissionCodes(String roleId, String fileId); + + /** + * 用户权限列表 转换为 哈希 + * @param permissionCodes + * @return + */ + Map transToMap(List permissionCodes); } 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 ec4df8b..368ef5b 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 @@ -1,10 +1,14 @@ package com.electromagnetic.industry.software.manage.service; +import com.baomidou.mybatisplus.core.metadata.IPage; 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 com.electromagnetic.industry.software.manage.pojo.req.RolePageDTO; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + public interface RoleService extends IService { /** @@ -34,5 +38,25 @@ public interface RoleService extends IService { * @return */ RoleDTO getRole(String roleId); + + /** + * 查看角色列表 + * @param rolePageDTO + * @return + */ + IPage getRoles(RolePageDTO rolePageDTO); + + /** + * 获取所有角色名 + * @return + */ + List getAllRoleNames(); + + /** + * 通过角色名称查看角色权限 + * @param roleName + * @return + */ + RoleDTO getRoleByName(String roleName); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java index c85f9b8..d2b7e26 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/PermissionServiceImpl.java @@ -1,6 +1,6 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.electromagnetic.industry.software.common.enums.FilePermission; import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper; @@ -28,32 +28,21 @@ public class PermissionServiceImpl implements PermissionService { * 查询当前用户在当前目录的功能权限 * * @param userId - * @param fileId + * @param id * @return */ @Override - public Map getUserPermission(String userId, String fileId) { - Map result = new HashMap<>(); + public Map getUserPermission(String userId, String id) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.select("role_id").eq("user_id", userId); - List roleIds = userRoleMapper.selectObjs(queryWrapper); + List roleIds = getRoles(userId); - QueryWrapper queryWrapper1 = new QueryWrapper<>(); - queryWrapper1.select("permission_code") - .eq("file_id", fileId) - .in("role_id", roleIds); - List permissionCodes = rolePermissionMapper.selectObjs(queryWrapper1); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.select(RolePermission::getPermissionCode) + .eq(RolePermission::getFileId, id) + .in(RolePermission::getRoleId, roleIds); + List permissionCodes = rolePermissionMapper.selectObjs(queryWrapper1).stream().map(Object::toString).collect(Collectors.toList()); - List allCodes = FilePermission.getAllCodes(); - for (String code : allCodes) { - if (permissionCodes.contains(code)) { - result.put(code, true); - } else { - result.put(code, false); - } - } - return result; + return transToMap(permissionCodes); } /** @@ -64,18 +53,57 @@ public class PermissionServiceImpl implements PermissionService { @Override public List getAccessibleTree() { String userId = UserThreadLocal.getUserId(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.select("role_id").eq("user_id", userId); - List roleIds = userRoleMapper.selectObjs(queryWrapper); + List roleIds = getRoles(userId); - QueryWrapper queryWrapper1 = new QueryWrapper<>(); - queryWrapper1.select("file_id") - .in("role_id", roleIds) - .eq("permission_code", FilePermission.VIEW); - List fileIds = rolePermissionMapper.selectObjs(queryWrapper1); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.select(RolePermission::getFileId) + .in(RolePermission::getRoleId, roleIds) + .eq(RolePermission::getPermissionCode, FilePermission.VIEW); + return rolePermissionMapper.selectObjs(queryWrapper1).stream().map(Object::toString).collect(Collectors.toList()); + } - return fileIds.stream() - .map(Object::toString) // 将 Object 转为 String - .collect(Collectors.toList()); + /** + * 根据用户获得角色 + * @param userId + * @return + */ + private List getRoles (String userId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(UserRole::getRoleId).eq(UserRole::getUserId, userId); + return userRoleMapper.selectObjs(queryWrapper).stream().map(Object::toString).collect(Collectors.toList()); + } + + /** + * 获得角色权限 + * @param roleId + * @param fileId + * @return + */ + @Override + public List getPermissionCodes(String roleId, String fileId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(RolePermission::getPermissionCode) + .eq(RolePermission::getFileId, fileId) + .eq(RolePermission::getRoleId, roleId); + return rolePermissionMapper.selectObjs(queryWrapper).stream().map(Object::toString).collect(Collectors.toList()); + } + + /** + * 用户权限列表 转换为 哈希 + * @param permissionCodes + * @return + */ + @Override + public Map transToMap(List permissionCodes) { + Map result = new HashMap<>(); + List allCodes = FilePermission.getAllCodes(); + for (String code : allCodes) { + if (permissionCodes.contains(code)) { + result.put(code, true); + } else { + result.put(code, false); + } + } + return result; } } 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 2a77a9e..08a3bf3 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,27 +1,35 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; 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.EdFileInfo; 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.RolePageDTO; 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 com.electromagnetic.industry.software.manage.service.*; +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; +import java.util.*; +import java.util.stream.Collectors; + +import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.PRJ_PARENT_ID; @Service public class RoleServiceImpl extends ServiceImpl implements RoleService { @@ -30,8 +38,14 @@ public class RoleServiceImpl extends ServiceImpl implements Ro private RolePermissionService rolePermissionService; @Resource private UserRoleService userRoleService; + @Resource + private CommonService commonService; + @Resource + private PermissionService permissionService; private EleLog log = new EleLog(RoleServiceImpl.class); + @Autowired + private RoleMapper roleMapper; /** * 新建角色 @@ -73,18 +87,20 @@ public class RoleServiceImpl extends ServiceImpl implements Ro @Override public Boolean updateRole(RoleDTO roleDTO){ + checkRoleNameUnique(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()); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Role::getRoleId, roleDTO.getRoleId()) + .set(Role::getRoleName, roleDTO.getRoleName()) + .set(Role::getRoleDesc, roleDTO.getRoleDesc()) + .set(Role::getModifier, UserThreadLocal.getUserId()) + .set(Role::getModifierName, UserThreadLocal.getUsername()); this.update(updateWrapper); // 删除旧权限信息 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("role_id", roleDTO.getRoleId()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(RolePermission::getRoleId, roleDTO.getRoleId()); rolePermissionService.remove(queryWrapper); // 插入新权限信息 @@ -106,15 +122,15 @@ public class RoleServiceImpl extends ServiceImpl implements Ro // 保留角色权限关联表 // 删除用户角色关联表 - QueryWrapper queryWrapper1 = new QueryWrapper<>(); - queryWrapper1.eq("role_id", roleId); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(UserRole::getRoleId, roleId); userRoleService.remove(queryWrapper1); // 逻辑删除角色 - QueryWrapper queryWrapper2 = new QueryWrapper<>(); - queryWrapper2.eq("role_id", roleId); - this.remove(queryWrapper2); - return true; + LambdaUpdateWrapper queryWrapper2 = new LambdaUpdateWrapper<>(); + queryWrapper2.eq(Role::getRoleId, roleId) + .set(Role::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code); + return this.update(queryWrapper2); } /** @@ -134,9 +150,85 @@ public class RoleServiceImpl extends ServiceImpl implements Ro roleDTO.setRoleName(role.getRoleName()); roleDTO.setRoleDesc(role.getRoleDesc()); + // 查询当前层级树,若层级树查询条件修改,此处也需修改 + List infos = commonService.selectAllAdminFolder(PRJ_PARENT_ID); + + List nodes = new ArrayList<>(); + for (EdFileInfo info : infos) { + RolePermissionDTO rolePermissionDTO = new RolePermissionDTO(); + rolePermissionDTO.setId(info.getId()); + rolePermissionDTO.setParentId(info.getParentId()); + rolePermissionDTO.setFileName(info.getFileName()); + List permissionCodes = permissionService.getPermissionCodes(roleId, info.getId()); + if (!permissionCodes.isEmpty()) { + Map dataAuth = new HashMap<>(); + dataAuth.put("data", true); + rolePermissionDTO.setDataAuth(dataAuth); + } else { + Map dataAuth = new HashMap<>(); + dataAuth.put("data", false); + rolePermissionDTO.setDataAuth(dataAuth); + } + rolePermissionDTO.setPermission(permissionService.transToMap(permissionCodes)); + nodes.add(rolePermissionDTO); + } + + roleDTO.setData(buildTree(nodes)); + return roleDTO; } + /** + * 通过角色名查看角色 + * @param roleName + * @return + */ + @Transactional + @Override + public RoleDTO getRoleByName(String roleName){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Role::getRoleName, roleName); + Role role = this.getOne(queryWrapper); + return getRole(role.getRoleId()); + } + + /** + * 查看角色列表 + * @param rolePageDTO + * @return + */ + @Transactional + @Override + public IPage getRoles(RolePageDTO rolePageDTO) { + + // 创建分页对象 + Page page = new Page<>(rolePageDTO.getPageIndex(), rolePageDTO.getPageSize()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (StringUtils.isNotBlank(rolePageDTO.getRoleId())){ + queryWrapper.eq("r.role_id", rolePageDTO.getRoleId()); + } + if (StringUtils.isNotBlank(rolePageDTO.getRoleName())){ + queryWrapper.eq("r.role_name", rolePageDTO.getRoleName()); + } + queryWrapper.eq("r.effect_flag", EffectFlagEnum.EFFECT.code); + + return roleMapper.getPageRoleDTO(page, queryWrapper); + } + + /** + * 获取所有角色名 + * @return + */ + @Transactional + @Override + public List getAllRoleNames() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(Role::getRoleName) + .eq(Role::getEffectFlag, EffectFlagEnum.EFFECT.code); + return this.listObjs(queryWrapper).stream().map(Object::toString).collect(Collectors.toList()); + } + /** * 校验当前角色名称是否唯一 * @@ -160,7 +252,7 @@ public class RoleServiceImpl extends ServiceImpl implements Ro * @param roleId * @return */ - private List flattenTree(List nodes, String roleId) { + private List flattenTree(List nodes, String roleId) { List flatList = new ArrayList<>(); for (RolePermissionDTO node : nodes) { flattenNode(node, flatList, roleId); @@ -172,7 +264,7 @@ public class RoleServiceImpl extends ServiceImpl implements Ro node.getPermission().forEach((code, hasPermission) -> { if (Boolean.TRUE.equals(hasPermission)) { // 检查权限值是否为 true - flatList.add(new RolePermission(roleId, node.getFileId(), code)); + flatList.add(new RolePermission(roleId, node.getId(), code)); } }); // 添加当前节点 @@ -182,5 +274,28 @@ public class RoleServiceImpl extends ServiceImpl implements Ro } } } + + // 构建层级结构 + private List buildTree(List nodes) { + // 找到所有的根节点 + List rootNodes = nodes.stream() + .filter(node -> node.getParentId().equals(PRJ_PARENT_ID)) + .collect(Collectors.toList()); + + // 递归设置子节点 + for (RolePermissionDTO rootNode : rootNodes) { + rootNode.setChildren(findChildren(rootNode, nodes)); + } + + return rootNodes; + } + + // 递归查找子节点 + private List findChildren(RolePermissionDTO parent, List nodes) { + return nodes.stream() + .filter(node -> parent.getId().equals(node.getParentId())) // 匹配父子关系 + .peek(node -> node.setChildren(findChildren(node, nodes))) // 递归设置子节点 + .collect(Collectors.toList()); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java index 609d055..13133b2 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java @@ -3,18 +3,20 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.SystemClock; import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.electromagnetic.industry.software.common.cons.UserConstants; +import com.electromagnetic.industry.software.common.enums.ActiveEnum; import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; import com.electromagnetic.industry.software.common.enums.ElectromagneticErrorEnum; import com.electromagnetic.industry.software.common.enums.PublishEnum; +import com.electromagnetic.industry.software.common.exception.BizException; import com.electromagnetic.industry.software.common.pojo.UserLoginInfo; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.*; -import com.electromagnetic.industry.software.manage.mapper.TokenMapper; -import com.electromagnetic.industry.software.manage.mapper.UserMapper; -import com.electromagnetic.industry.software.manage.mapper.UserMappers; -import com.electromagnetic.industry.software.manage.mapper.UserRoleMapper; +import com.electromagnetic.industry.software.manage.mapper.*; +import com.electromagnetic.industry.software.manage.pojo.models.Role; import com.electromagnetic.industry.software.manage.pojo.models.Token; import com.electromagnetic.industry.software.manage.pojo.models.User; import com.electromagnetic.industry.software.manage.pojo.models.UserRole; @@ -28,12 +30,13 @@ import com.electromagnetic.industry.software.manage.pojo.resp.UserSearchResponse import com.electromagnetic.industry.software.manage.service.UserService; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static cn.hutool.core.date.DateTime.now; @@ -46,6 +49,8 @@ public class UserServiceImpl implements UserService { private TokenMapper tokenMapper; @Resource private UserRoleMapper userRoleMapper; + @Autowired + private RoleMapper roleMapper; /** * 用户登录 @@ -81,14 +86,12 @@ public class UserServiceImpl implements UserService { public Boolean checkUserValid(User user) { if (user == null - || user.getIsPublished() == PublishEnum.UNPUBLISHED.getCode() - || user.getEffectFlag() == EffectFlagEnum.NOT_EFFECTIVE.code + || Objects.equals(user.getIsPublished(), PublishEnum.UNPUBLISHED.getCode()) + || Objects.equals(user.getIsActivated(), ActiveEnum.UNACTIVATED.getCode()) + || Objects.equals(user.getEffectFlag(), EffectFlagEnum.NOT_EFFECTIVE.code) ) { return false; - } else if (user.getInternshipEndDate() != null && user.getInternshipEndDate().before(now())) { - return false; - } - return true; + } else return user.getInternshipEndDate() == null || !user.getInternshipEndDate().before(now()); } public String createToken(UserLoginInfo loginInfo) { @@ -123,6 +126,11 @@ public class UserServiceImpl implements UserService { user.setUserId(IdWorker.getSnowFlakeIdString()); user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt())); user.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS); + user.setIsActivated(UserConstants.DEFAULT_ACTIVE_STATUS); + + // 暂时将账户设置为工号 + user.setUserAccount(user.getWorkNumber()); + user.setCreator(UserThreadLocal.getUserId()); user.setCreatorName(UserThreadLocal.getUsername()); return ElectromagneticResultUtil.success(userMapper.insert(user) > 0); @@ -203,12 +211,23 @@ public class UserServiceImpl implements UserService { @Override public ElectromagneticResult searchUser(SearchUserRequest searchUserRequest) { searchUserRequest.setPageIndex((searchUserRequest.getPageIndex() - 1) * searchUserRequest.getPageSize()); - SearchKeyWords model = UserMappers.INSTANCE.getSearchKeywordsRequestToModel(searchUserRequest); + SearchKeyWords model = new SearchKeyWords(); + BeanUtils.copyProperties(searchUserRequest, model); List userList = userMapper.search(model); int totalCount = userMapper.getTotalCount(model); - List singleUserResponseList = UserMappers.INSTANCE.userListToResponseList(userList); + + List list = new ArrayList<>(); + for (User user : userList) { + SingleUserResponse singleUserResponse = new SingleUserResponse(); + BeanUtils.copyProperties(user, singleUserResponse); + List roleList = userMapper.selectUserRoles(user.getUserId()); + String roles = String.join(",", roleList); + singleUserResponse.setRoles(roles); + singleUserResponse.setRoleList(roleList); + list.add(singleUserResponse); + } UserSearchResponse userSearchResponse = new UserSearchResponse(); - userSearchResponse.setUserList(singleUserResponseList); + userSearchResponse.setUserList(list); userSearchResponse.setTotalCount(totalCount); return ElectromagneticResultUtil.success(userSearchResponse); } @@ -247,24 +266,44 @@ public class UserServiceImpl implements UserService { */ @Override public Boolean bindRoles(UserRoleRequest userRolesRequest) { - String userId = userRolesRequest.getUserId(); - List roleIds = userRolesRequest.getRoleIds(); - if (userId == null) { - return Boolean.FALSE; + if (userRolesRequest==null || userRolesRequest.getBindData().isEmpty()) { + throw new BizException(HttpStatus.BAD_REQUEST.value(), "请勿发布空数据"); } + for (UserBindRoleDTO dto: userRolesRequest.getBindData()) { + activeRole(dto); + bindRole(dto); + } + return Boolean.TRUE; + } + + private void activeRole (UserBindRoleDTO dto) { + User user = userMapper.getSingleUser(dto.getUserId()); + if (user.getIsActivated().equals(ActiveEnum.UNACTIVATED.getCode())) { + user.setIsActivated(ActiveEnum.ACTIVATED.getCode()); + userMapper.modify(user); + } + } + + private void bindRole (UserBindRoleDTO dto) { + String userId = dto.getUserId(); + List roleNames = dto.getRoleList(); // 删除当前用户原绑定角色 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", userId); userRoleMapper.delete(queryWrapper); - if (roleIds != null) { - for (String roleId : roleIds) { + if (roleNames != null) { + for (String roleName : roleNames) { + LambdaQueryWrapper roleQueryWrapper = new LambdaQueryWrapper<>(); + roleQueryWrapper.select(Role::getRoleId) + .eq(Role::getRoleName, roleName); + String roleId = roleMapper.selectOne(roleQueryWrapper).getRoleId(); + UserRole userRole = new UserRole(); userRole.setUserId(userId); userRole.setRoleId(roleId); userRoleMapper.insert(userRole); } } - return Boolean.TRUE; } } diff --git a/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml b/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml index a0473b3..a2931e6 100644 --- a/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml +++ b/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml @@ -12,6 +12,7 @@ + @@ -34,6 +35,7 @@ user_pwd, join_time, is_published, + is_activated, salt, user_status, internship_end_date, @@ -58,6 +60,7 @@ user_pwd, join_time, is_published, + is_activated, salt, user_status, internship_end_date, @@ -75,6 +78,7 @@ #{userPwd}, #{joinTime}, #{isPublished}, + #{isActivated}, #{salt}, #{userStatus}, #{internshipEndDate}, @@ -95,6 +99,7 @@ user_title = #{userTitle}, join_time = #{joinTime}, user_status = #{userStatus}, + is_activated = #{isActivated}, internship_end_date = #{internshipEndDate}, modifier = #{modifier}, modifier_name = #{modifierName}, @@ -145,6 +150,15 @@ + + + + + + AND is_activated = CAST(#{isActivated} AS SIGNED) + + + and effect_flag=1 @@ -190,6 +204,15 @@ + + + + + + AND is_activated = CAST(#{isActivated} AS SIGNED) + + + and effect_flag=1 @@ -228,4 +251,11 @@ where user_id = #{userId} + + \ No newline at end of file diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/UserConstants.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/UserConstants.java index cc68708..2b6801c 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/UserConstants.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/cons/UserConstants.java @@ -8,10 +8,15 @@ public interface UserConstants { String DEFAULT_PASSWORD = "123456"; /** - * 默认发布状态(未发布) + * 默认发布状态(未发布) 系统管理员 */ int DEFAULT_PUBLISH_STATUS = 0; + /** + * 默认激活状态(未激活)安全管理员 + */ + int DEFAULT_ACTIVE_STATUS = 0; + /** * 默认令牌过期时间(7天) */ diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/ActiveEnum.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/ActiveEnum.java new file mode 100644 index 0000000..43210cb --- /dev/null +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/enums/ActiveEnum.java @@ -0,0 +1,23 @@ +package com.electromagnetic.industry.software.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +/** + * 安全管理员 + */ +public enum ActiveEnum { + /** + * 已发布 + */ + ACTIVATED(1, "已激活"), + /** + * 未发布 + */ + UNACTIVATED(0, "未激活"), + ; + private final Integer code; + private final String desc; +}