fix: 内部工作组权限问题及修复权限数据接口

This commit is contained in:
2024-06-14 11:37:21 +08:00
parent c1f978d28a
commit 724f8f4781
3 changed files with 224 additions and 167 deletions
@@ -223,4 +223,15 @@ public class LawsWorkingGroupController extends JeroController<LawsWorkingGroup,
}
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
/**
* 修复所有权限
*/
@ApiOperationSupport(order = 7)
@ApiOperation(value="内部工作组-修复所有权限", notes="内部工作组-修复所有权限")
@GetMapping(value = "/fixAllAuth")
public Result<T> fixAllAuth() {
lawsWorkingGroupService.fixAllAuth();
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
}
@@ -27,6 +27,14 @@ public interface ILawsWorkingGroupService extends IService<LawsWorkingGroup> {
*/
void add(LawsWorkingGroup lawsWorkingGroup);
/**
* 修复所有权限
*
* @param
* @return
*/
void fixAllAuth();
/**
* 更新
*
@@ -1,5 +1,6 @@
package com.jero.modules.sys.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.CommonConstant;
import com.jero.modules.sys.entity.LawsWorkingGroup;
@@ -24,33 +25,33 @@ import javax.annotation.Resource;
/**
* @Description: 内部工作组
* @Author: jero-boot
* @Date: 2023-09-06
* @Date: 2023-09-06
* @Version: V1.0
*/
@Service
@Transactional(rollbackFor = JeroBootException.class)
public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMapper, LawsWorkingGroup> implements ILawsWorkingGroupService {
@Resource
private ISysUserService sysUserService;
@Resource
private ISysUserService sysUserService;
/**
* 列表查询
*/
@Override
public List<LawsWorkingGroup> queryList() {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
return list(wrapper);
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
return list(wrapper);
}
/**
* 保存
*
* @param lawsWorkingGroup
* @return
*/
@Override
/**
* 保存
*
* @param lawsWorkingGroup
* @return
*/
@Override
public void add(LawsWorkingGroup lawsWorkingGroup) {
Date now = new Date();
lawsWorkingGroup.setCreateTime(now);
@@ -58,177 +59,214 @@ public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMap
save(lawsWorkingGroup);
}
/**
* 更新
*
* @param lawsWorkingGroup
* @return
*/
@Override
public void editById(LawsWorkingGroup lawsWorkingGroup) {
Date now = new Date();
lawsWorkingGroup.setUpdateTime(now);
saveOrUpdate(lawsWorkingGroup);
/**
* 修复所有标准分会分配的管理权限
*
* @param
* @return
*/
@Override
public void fixAllAuth() {
// 获取所有二级工作组
List<LawsWorkingGroup> list = this.list(
new LambdaQueryWrapper<LawsWorkingGroup>().eq(LawsWorkingGroup::getLevel, 2));
if (CollUtil.isNotEmpty(list)) {
list.forEach(this::editById);
}
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
/**
* 更新
*
* @param lawsWorkingGroup
* @return
*/
@Override
public void editById(LawsWorkingGroup lawsWorkingGroup) {
LawsWorkingGroup old = getById(lawsWorkingGroup.getId());
// 找到所有子集工作组 更新userId
List<LawsWorkingGroup> subset = this.getSubset(old.getId());
subset.forEach(item -> item.setUserId(lawsWorkingGroup.getUserId()));
saveOrUpdateBatch(subset);
Date now = new Date();
lawsWorkingGroup.setUpdateTime(now);
saveOrUpdate(lawsWorkingGroup);
}
/**
* 根据父级id获取所有子集工作组
*
* @param pId
* @return
*/
private List<LawsWorkingGroup> getSubset(String pId) {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getPid, pId);
return list(wrapper);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public LawsWorkingGroup queryById(String id) {
return getById(id);
}
@Override
public List<LawsWorkingGroup> realList() {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
List<LawsWorkingGroup> list = list(wrapper);
return list;
}
@Override
public List<LawsWorkingGroup> realList() {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
List<LawsWorkingGroup> list = list(wrapper);
return list;
}
/**
* 对列表数据转树结构列表(pid为空当作开始节点)
*/
@Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list, String name) {
List<LawsWorkingGroup> matchedNodes = list.stream().filter(node -> node.getName().contains(name)).collect(Collectors.toList());
if (matchedNodes.isEmpty()) {
return Collections.singletonList(list.get(0));
}
Set<LawsWorkingGroup> nodesSet = new HashSet<>();
for (LawsWorkingGroup matchedNode : matchedNodes) {
nodesSet.addAll(findPathToRoot(list, matchedNode));
nodesSet.addAll(findAllChildren(list, matchedNode));
}
List<LawsWorkingGroup> LawsWorkingGroups = new ArrayList<>(nodesSet);
return this.convertToTree(LawsWorkingGroups);
}
private Set<LawsWorkingGroup> findPathToRoot(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
Set<LawsWorkingGroup> pathNodes = new HashSet<>();
LawsWorkingGroup currentHolder = node;
while (currentHolder != null) {
pathNodes.add(currentHolder);
LawsWorkingGroup finalCurrentHolder = currentHolder;
currentHolder = list.stream()
.filter(n -> n.getId().equals(finalCurrentHolder.getPid()))
.findFirst().orElse(null);
}
return pathNodes;
}
private Set<LawsWorkingGroup> findAllChildren(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
Set<LawsWorkingGroup> childrenSet = new HashSet<>();
List<LawsWorkingGroup> directChildren = list.stream().filter(n -> n.getPid().equals(node.getId())).collect(Collectors.toList());
for (LawsWorkingGroup child : directChildren) {
childrenSet.add(child);
childrenSet.addAll(findAllChildren(list, child));
}
return childrenSet;
}
/**
* 对列表数据转树结构列表(pid为空当作开始节点)
*/
@Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list, String name) {
List<LawsWorkingGroup> matchedNodes = list.stream().filter(node -> node.getName().contains(name)).collect(Collectors.toList());
if (matchedNodes.isEmpty()) {
return Collections.singletonList(list.get(0));
}
Set<LawsWorkingGroup> nodesSet = new HashSet<>();
for (LawsWorkingGroup matchedNode : matchedNodes) {
nodesSet.addAll(findPathToRoot(list, matchedNode));
nodesSet.addAll(findAllChildren(list, matchedNode));
}
List<LawsWorkingGroup> LawsWorkingGroups = new ArrayList<>(nodesSet);
return this.convertToTree(LawsWorkingGroups);
}
@Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list) {
if (list == null || list.size() == 0){
return new ArrayList<>();
}
List<LawsWorkingGroup> treeList = new ArrayList<>();
List<SysUser> listSysUser = sysUserService.list();
for (LawsWorkingGroup group : list) {
if (StringUtils.isBlank(group.getPid())) {
group.setLevel(1);
addChildGroups(group, list, listSysUser);
treeList.add(group);
}
}
return treeList;
}
private void addChildGroups(LawsWorkingGroup parentGroup, List<LawsWorkingGroup> list, List<SysUser> listSysUser) {
List<LawsWorkingGroup> childGroups = new ArrayList<>();
for (LawsWorkingGroup group : list) {
if (StringUtils.isNotBlank(group.getPid()) && parentGroup.getId().equals(group.getPid())) {
group.setLevel(parentGroup.getLevel() + 1);
if(!CollectionUtils.isEmpty(listSysUser) && !StringUtils.isBlank(group.getUserId())){
Optional<SysUser> op = listSysUser.stream().filter(o->Objects.equals(o.getId(),group.getUserId())).findFirst();
op.ifPresent(sysUser -> group.setUserName(sysUser.getRealname() + "(" + sysUser.getUsername() + ")"));
}
addChildGroups(group, list, listSysUser);
childGroups.add(group);
}
}
parentGroup.setSubset(childGroups);
}
private Set<LawsWorkingGroup> findPathToRoot(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
Set<LawsWorkingGroup> pathNodes = new HashSet<>();
LawsWorkingGroup currentHolder = node;
while (currentHolder != null) {
pathNodes.add(currentHolder);
LawsWorkingGroup finalCurrentHolder = currentHolder;
currentHolder = list.stream()
.filter(n -> n.getId().equals(finalCurrentHolder.getPid()))
.findFirst().orElse(null);
}
return pathNodes;
}
/**
* 对列表数据转树结构列表(指定开始节点)
*/
@Override
public LawsWorkingGroup convertToTreeById(List<LawsWorkingGroup> list, String id) {
if (list == null || list.size() == 0 || StringUtils.isBlank(id)){
return null;
}
LawsWorkingGroup root = null;
for (LawsWorkingGroup group : list) {
if (group.getId().equals(id)) {
root = group;
break;
}
}
if (root == null) {
return null; // 如果没有找到指定的id,返回null
}
addChildGroupsById(root, list);
return root;
}
private void addChildGroupsById(LawsWorkingGroup parentGroup, List<LawsWorkingGroup> list) {
List<LawsWorkingGroup> childGroups = new ArrayList<>();
for (LawsWorkingGroup group : list) {
if (StringUtils.isNotBlank(group.getPid()) && parentGroup.getId().equals(group.getPid())) {
addChildGroupsById(group, list);
childGroups.add(group);
}
}
parentGroup.setSubset(childGroups);
}
private Set<LawsWorkingGroup> findAllChildren(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
Set<LawsWorkingGroup> childrenSet = new HashSet<>();
List<LawsWorkingGroup> directChildren = list.stream().filter(n -> n.getPid().equals(node.getId())).collect(Collectors.toList());
for (LawsWorkingGroup child : directChildren) {
childrenSet.add(child);
childrenSet.addAll(findAllChildren(list, child));
}
return childrenSet;
}
@Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list) {
if (list == null || list.size() == 0) {
return new ArrayList<>();
}
List<LawsWorkingGroup> treeList = new ArrayList<>();
List<SysUser> listSysUser = sysUserService.list();
for (LawsWorkingGroup group : list) {
if (StringUtils.isBlank(group.getPid())) {
group.setLevel(1);
addChildGroups(group, list, listSysUser);
treeList.add(group);
}
}
return treeList;
}
private void addChildGroups(LawsWorkingGroup parentGroup, List<LawsWorkingGroup> list, List<SysUser> listSysUser) {
List<LawsWorkingGroup> childGroups = new ArrayList<>();
for (LawsWorkingGroup group : list) {
if (StringUtils.isNotBlank(group.getPid()) && parentGroup.getId().equals(group.getPid())) {
group.setLevel(parentGroup.getLevel() + 1);
if (!CollectionUtils.isEmpty(listSysUser) && !StringUtils.isBlank(group.getUserId())) {
Optional<SysUser> op = listSysUser.stream().filter(o -> Objects.equals(o.getId(), group.getUserId())).findFirst();
op.ifPresent(sysUser -> group.setUserName(sysUser.getRealname() + "(" + sysUser.getUsername() + ")"));
}
addChildGroups(group, list, listSysUser);
childGroups.add(group);
}
}
parentGroup.setSubset(childGroups);
}
/**
* 对列表数据转树结构列表(指定开始节点)
*/
@Override
public LawsWorkingGroup convertToTreeById(List<LawsWorkingGroup> list, String id) {
if (list == null || list.size() == 0 || StringUtils.isBlank(id)) {
return null;
}
LawsWorkingGroup root = null;
for (LawsWorkingGroup group : list) {
if (group.getId().equals(id)) {
root = group;
break;
}
}
if (root == null) {
return null; // 如果没有找到指定的id,返回null
}
addChildGroupsById(root, list);
return root;
}
private void addChildGroupsById(LawsWorkingGroup parentGroup, List<LawsWorkingGroup> list) {
List<LawsWorkingGroup> childGroups = new ArrayList<>();
for (LawsWorkingGroup group : list) {
if (StringUtils.isNotBlank(group.getPid()) && parentGroup.getId().equals(group.getPid())) {
addChildGroupsById(group, list);
childGroups.add(group);
}
}
parentGroup.setSubset(childGroups);
}
/**
* 获取指定节点以及所有子节点ID
*/
@Override
public List<String> allChildIdById(List<LawsWorkingGroup> list, String id, List<String> ids) {
if (list == null || list.size() == 0){
return new ArrayList<>();
}
List<String> collect = list.stream().filter(LawsWorkingGroup -> id.equals(LawsWorkingGroup.getPid())).map(LawsWorkingGroup::getId).collect(Collectors.toList());
for (String s : collect) {
allChildIdById(list, s, ids);
}
ids.add(id);
return ids;
}
/**
* 获取指定节点以及所有子节点ID
*/
@Override
public List<String> allChildIdById(List<LawsWorkingGroup> list, String id, List<String> ids) {
if (list == null || list.size() == 0) {
return new ArrayList<>();
}
List<String> collect = list.stream().filter(LawsWorkingGroup -> id.equals(LawsWorkingGroup.getPid())).map(LawsWorkingGroup::getId).collect(Collectors.toList());
for (String s : collect) {
allChildIdById(list, s, ids);
}
ids.add(id);
return ids;
}
}