|
@@ -201,6 +201,67 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public boolean saveRoleReportNew(SysRole role) {
|
|
|
+ try {
|
|
|
+ SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
+ Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : null;
|
|
|
+ if (Objects.isNull(schoolId) && Objects.isNull(role.getSchoolId())) {
|
|
|
+ role.setSchoolId(sysUser.getSchoolId());
|
|
|
+ } else if (Objects.nonNull(schoolId)) {
|
|
|
+ role.setSchoolId(schoolId);
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(role.getId())) {//编辑
|
|
|
+ List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(role.getId());
|
|
|
+ QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
|
|
|
+ sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, role.getPrivilegeIds());
|
|
|
+ List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
|
|
|
+ Set<String> relatedSet = sysPrivilegeList.stream().filter(s -> Objects.nonNull(s.getRelated())).map(s -> s.getRelated()).collect(Collectors.toSet());
|
|
|
+ Set<Long> finalRelatedSet = new HashSet<>(Arrays.asList(role.getPrivilegeIds()));
|
|
|
+ for (String s : relatedSet) {
|
|
|
+ if (s.contains(",")) {
|
|
|
+ String[] arrays = s.split(",");
|
|
|
+ for (int i = 0; i < arrays.length; i++) {
|
|
|
+ finalRelatedSet.add(Long.parseLong(arrays[i].trim()));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ finalRelatedSet.add(Long.parseLong(s));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Long> relatedList = new ArrayList<>(finalRelatedSet);
|
|
|
+ int count = (int) sysRolePrivilegeList.stream().filter(s -> relatedList.contains(s.getPrivilegeId())).count();
|
|
|
+ role.updateInfo(sysUser.getId());
|
|
|
+ sysRoleService.updateById(role);
|
|
|
+ commonCacheService.updateRoleCache(role.getId());
|
|
|
+ if (count != sysRolePrivilegeList.size() || count != finalRelatedSet.size()) {
|
|
|
+ // 删除权限前先更新涉及特殊权限用户 -> 需要重新同步
|
|
|
+ sysRolePrivilegeService.removeByRoleId(role.getId());
|
|
|
+ sysRolePrivilegeService.saveBatch(role);//角色权限
|
|
|
+ commonCacheService.updateRolePrivilegeCache(role.getId());
|
|
|
+ //绑定该角色的用户都需要清除鉴权缓存
|
|
|
+ List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(role.getId());
|
|
|
+ commonService.removeUserInfoBatch(sysUserRoleList.stream().map(s -> s.getUserId()).collect(Collectors.toList()), true);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ role.insertInfo(sysUser.getId());
|
|
|
+ sysRoleService.save(role);
|
|
|
+ sysRolePrivilegeService.saveBatch(role);//角色权限
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ if (e instanceof DuplicateKeyException) {
|
|
|
+ String errorColumn = e.getCause().toString();
|
|
|
+ String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
|
|
|
+ throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
|
|
|
+ } else if (e instanceof ApiException) {
|
|
|
+ ResultUtil.error((ApiException) e, e.getMessage());
|
|
|
+ } else {
|
|
|
+ ResultUtil.error(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public boolean enable(SysRole role) throws NoSuchAlgorithmException {
|
|
|
UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
|
|
@@ -223,6 +284,23 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public boolean enableReport(SysRole role) throws NoSuchAlgorithmException {
|
|
|
+ UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.lambda().set(SysRole::getEnable, role.getEnable()).eq(SysRole::getId, role.getId());
|
|
|
+ this.update(updateWrapper);
|
|
|
+
|
|
|
+ commonCacheService.updateRoleCache(role.getId());
|
|
|
+ //如果状态为禁用,需要踢下线重新登录
|
|
|
+ if (!role.getEnable()) {
|
|
|
+ List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(role.getId());
|
|
|
+ for (SysUserRole s : sysUserRoleList) {
|
|
|
+ commonService.removeUserInfo(s.getUserId(), true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public boolean remove(Long id) {
|
|
@@ -244,6 +322,22 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public boolean removeReport(Long id) {
|
|
|
+ // 判断绑定用户
|
|
|
+ List<SysUserRole> userRoleList = sysUserRoleService.listByRoleId(id);
|
|
|
+ if (userRoleList != null && userRoleList.size() > 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("用户绑定,不能删除");
|
|
|
+ }
|
|
|
+ //删除权限
|
|
|
+ sysRolePrivilegeService.removeByRoleId(id);
|
|
|
+ this.removeById(id);
|
|
|
+
|
|
|
+ commonCacheService.removeRoleCache(id);
|
|
|
+ commonCacheService.removeRolePrivilegeCache(id);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<Long> getUserRoles(Long userId) {
|
|
|
QueryWrapper<SysUserRole> queryWrapper = new QueryWrapper<>();
|