diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java index 32ef925..2a86631 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/EdMetaObjectHandler.java @@ -17,6 +17,12 @@ public class EdMetaObjectHandler implements MetaObjectHandler { if (metaObject.hasGetter("createdAt")) { this.strictInsertFill(metaObject, "createdAt", Date.class, new Date()); } + if (metaObject.hasSetter("gmtModified")) { + this.strictUpdateFill(metaObject, "gmtModified", Date.class, new Date()); + } + if (metaObject.hasGetter("updatedAt")) { + this.strictUpdateFill(metaObject, "updatedAt", Date.class, new Date()); + } } @Override 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 98f4f43..342f2ff 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,11 +1,13 @@ package com.electromagnetic.industry.software.manage.controller; +import com.electromagnetic.industry.software.common.exception.BizException; 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 io.swagger.annotations.ApiOperation; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -20,13 +22,23 @@ public class RoleController { @ApiOperation(value = "新建角色", notes = "") @RequestMapping(value = "/createRole", method = RequestMethod.POST) public ElectromagneticResult createRole(@RequestBody RoleDTO roleDTO) { - return ElectromagneticResultUtil.success(roleService.createRole(roleDTO)); + try { + Boolean res = roleService.createRole(roleDTO); + return ElectromagneticResultUtil.success(res); + } catch (BizException e) { + return ElectromagneticResultUtil.fail("400", e.getMsg()); + } } @ApiOperation(value = "更新角色", notes = "") @RequestMapping(value = "/updateRole", method = RequestMethod.POST) public ElectromagneticResult updateRole(@RequestBody RoleDTO roleDTO) { - return ElectromagneticResultUtil.success(roleService.updateRole(roleDTO)); + try { + Boolean res = roleService.updateRole(roleDTO); + return ElectromagneticResultUtil.success(res); + } catch (BizException e) { + return ElectromagneticResultUtil.fail("400", e.getMsg()); + } } @ApiOperation(value = "删除角色", notes = "") @@ -58,4 +70,10 @@ public class RoleController { public ElectromagneticResult getRoleNames() { return ElectromagneticResultUtil.success(roleService.getAllRoleNames()); } + + @ApiOperation(value="获得角色配置模版", notes = "") + @GetMapping(value = "/getRoleTemplate") + public ElectromagneticResult getRoleTemplate() { + return ElectromagneticResultUtil.success(roleService.getRoleTemplate()); + } } 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 a3d4dbb..1ae409b 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 @@ -20,16 +20,25 @@ public interface RoleMapper extends BaseMapper { " r.role_name AS roleName, " + " r.role_desc AS roleDesc, " + " GROUP_CONCAT(DISTINCT f.file_name) AS dataScope, " + - " GROUP_CONCAT(DISTINCT rp.permission_code) AS allowedActions " + + " GROUP_CONCAT(DISTINCT rp.permission_code) AS allowedActions, " + + " CASE " + + " WHEN MAX(u.is_activated) = 1 THEN 1 " + + " ELSE 0 " + + " END AS isBind " + "FROM " + " ed_role r " + "LEFT JOIN " + " ed_role_permission rp ON r.role_id = rp.role_id " + "LEFT JOIN " + " ed_file_info f ON rp.file_id = f.id " + + "LEFT JOIN" + + " ed_user_role ur ON r.role_id = ur.user_id " + + "LEFT JOIN" + + " ed_users u ON ur.user_id = u.user_id " + "WHERE " + - "" + - " ${ew.sqlSegment} " + + " 1=1 " + + "" + + " AND ${ew.sqlSegment} " + "" + "GROUP BY " + " r.role_id" + 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 e7acf97..7e6c67e 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 @@ -61,13 +61,7 @@ public class Role { /** * 编辑时间 */ - @TableField(value = "gmt_modified", fill = FieldFill.UPDATE) + @TableField(value = "gmt_modified", fill = FieldFill.INSERT_UPDATE) private Date gmtModified; - - /** - * 是否有效:0-无效 1-有效 - */ - @TableField(value = "effect_flag") - private Integer effectFlag; } 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 index b5f480a..a25ebc1 100644 --- 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 @@ -32,6 +32,11 @@ public class RoleDTO { */ private String allowedActions; + /** + * 是否绑定用户 + */ + private Boolean isBind; + /** * 权限数据 */ 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 74866ce..100db4f 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 @@ -65,5 +65,12 @@ public interface RoleService extends IService { * @return */ RoleDTO getRoleByName(String roleName); + + /** + * 空树 + * + * @return + */ + RoleDTO getRoleTemplate(); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java index 572b6e2..a4c5858 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java @@ -61,7 +61,7 @@ public class EdFileRelationServiceImpl extends ServiceImpl list = this.list(queryWrapper); if (!list.isEmpty()) { - throw new BizException (HttpStatus.BAD_REQUEST.value(), "请勿重复建立关系"); + throw new BizException (-1, "请勿重复建立关系"); } edFileRelation.setId(IdWorker.getSnowFlakeIdString()); @@ -137,8 +137,6 @@ public class EdFileRelationServiceImpl extends ServiceImpl uploadFileAndRelation(String parentId, String id, MultipartFile file, String descrption) { Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), NAME_VALID_MSG); - EdFileInfo fileInfo = edFileInfoService.getById(parentId); - Assert.isTrue(fileInfo.getDataType().equals(EleDataTypeEnum.FOLDER.code) && !fileInfo.getPrjDir(), "层级目录不允许上传文件"); + // 查找下一层,看是否存在顶级定义相关文件,如果存在,则该层属于管理员层级定义的,不允许上传文件 + long dirCount = edFileInfoService.count(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getParentId, parentId) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) + .eq(EdFileInfo::getPrjDir, true) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)); + Assert.isTrue(dirCount == 0, "层级目录不允许上传文件"); + String fileName = file.getOriginalFilename(); String mainName = FileUtil.mainName(fileName); String suffix = FileUtil.getSuffix(fileName); 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 d0cfca9..8c0b28e 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 @@ -5,13 +5,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.core.toolkit.Wrappers; 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.enums.EleDataTypeEnum; +import com.electromagnetic.industry.software.common.enums.FilePermission; 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.EdFileInfoMapper; 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; @@ -20,10 +24,7 @@ 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.PermissionService; -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; @@ -44,14 +45,15 @@ 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 + @Resource private RoleMapper roleMapper; + @Resource + private EdFileInfoMapper edFileInfoMapper; /** * 新建角色 @@ -63,7 +65,11 @@ public class RoleServiceImpl extends ServiceImpl implements Ro @Override public Boolean createRole(RoleDTO roleDTO) { - checkRoleNameUnique(roleDTO); + if (!checkRoleNameUnique(roleDTO) ) { + String info = "当前角色名称已存在:" + roleDTO.getRoleName(); + log.error(info); + throw new BizException(-1, info); + } // 创建角色 Role role = new Role(); @@ -95,7 +101,11 @@ public class RoleServiceImpl extends ServiceImpl implements Ro @Override public Boolean updateRole(RoleDTO roleDTO) { - checkRoleNameUnique(roleDTO); + if (!checkRoleNameUnique(roleDTO) ) { + String info = "当前角色名称已存在:" + roleDTO.getRoleName(); + log.error(info); + throw new BizException(-1, info); + } // 更新角色信息 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -129,17 +139,20 @@ public class RoleServiceImpl extends ServiceImpl implements Ro @Override public Boolean deleteRole(String roleId) { - // 保留角色权限关联表 + // 删除角色权限关联表 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(RolePermission::getRoleId, roleId); + rolePermissionService.remove(queryWrapper); + // 删除用户角色关联表 LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); queryWrapper1.eq(UserRole::getRoleId, roleId); userRoleService.remove(queryWrapper1); - // 逻辑删除角色 - LambdaUpdateWrapper queryWrapper2 = new LambdaUpdateWrapper<>(); - queryWrapper2.eq(Role::getRoleId, roleId) - .set(Role::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code); - return this.update(queryWrapper2); + // 删除角色 + LambdaQueryWrapper queryWrapper2 = new LambdaQueryWrapper<>(); + queryWrapper2.eq(Role::getRoleId, roleId); + return this.remove(queryWrapper2); } /** @@ -160,8 +173,7 @@ public class RoleServiceImpl extends ServiceImpl implements Ro roleDTO.setRoleName(role.getRoleName()); roleDTO.setRoleDesc(role.getRoleDesc()); - // 查询当前层级树,若层级树查询条件修改,此处也需修改 - List infos = commonService.selectAllAdminFolder(PRJ_PARENT_ID); + List infos = getFiles(); List nodes = new ArrayList<>(); for (EdFileInfo info : infos) { @@ -223,8 +235,6 @@ public class RoleServiceImpl extends ServiceImpl implements Ro 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); } @@ -237,8 +247,7 @@ public class RoleServiceImpl extends ServiceImpl implements Ro @Override public List> getAllRoleNames() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.select(Role::getRoleName) - .eq(Role::getEffectFlag, EffectFlagEnum.EFFECT.code); + queryWrapper.select(Role::getRoleName); List roleNames = this.listObjs(queryWrapper).stream().map(Object::toString).collect(Collectors.toList()); List> result = new ArrayList<>(); @@ -251,21 +260,49 @@ public class RoleServiceImpl extends ServiceImpl implements Ro return result; } + /** + * 空树 + * + * @return + */ + @Transactional + @Override + public RoleDTO getRoleTemplate() { + RoleDTO roleDTO = new RoleDTO(); + + List infos = getFiles(); + + 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 = new ArrayList<>(); + 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 roleDTO * @return */ - private void checkRoleNameUnique(RoleDTO roleDTO) { + private Boolean 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); - } + return role == null || role.getRoleId().equals(roleDTO.getRoleId()); } /** @@ -290,6 +327,11 @@ public class RoleServiceImpl extends ServiceImpl implements Ro flatList.add(new RolePermission(roleId, node.getId(), code)); } }); + + if (node.getDataAuth().get("data").equals(Boolean.TRUE)) { + flatList.add(new RolePermission(roleId, node.getId(), FilePermission.VIEW.getCode())); + } + // 添加当前节点 if (node.getChildren() != null && !node.getChildren().isEmpty()) { for (RolePermissionDTO child : node.getChildren()) { @@ -320,5 +362,16 @@ public class RoleServiceImpl extends ServiceImpl implements Ro .peek(node -> node.setChildren(findChildren(node, nodes))) // 递归设置子节点 .collect(Collectors.toList()); } + + /** + * 获取层级树结构 + * @return + */ + private List getFiles() { + return edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) + .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) + .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code) + .eq(EdFileInfo::getPrjDir, true)); + } } 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 06acec2..08c261e 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 @@ -49,7 +49,7 @@ public class UserServiceImpl implements UserService { private TokenMapper tokenMapper; @Resource private UserRoleMapper userRoleMapper; - @Autowired + @Resource private RoleMapper roleMapper; /** @@ -278,7 +278,7 @@ public class UserServiceImpl implements UserService { @Override public Boolean bindRoles(UserRoleRequest userRolesRequest) { if (userRolesRequest == null || userRolesRequest.getBindData().isEmpty()) { - throw new BizException(HttpStatus.BAD_REQUEST.value(), "请勿发布空数据"); + throw new BizException(-1, "请勿发布空数据"); } for (UserBindRoleDTO dto : userRolesRequest.getBindData()) { activeRole(dto);