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)); 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); void add(LawsWorkingGroup lawsWorkingGroup);
/**
* 修复所有权限
*
* @param
* @return
*/
void fixAllAuth();
/** /**
* 更新 * 更新
* *
@@ -1,5 +1,6 @@
package com.jero.modules.sys.service.impl; package com.jero.modules.sys.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.CommonConstant; import com.jero.common.constant.CommonConstant;
import com.jero.modules.sys.entity.LawsWorkingGroup; import com.jero.modules.sys.entity.LawsWorkingGroup;
@@ -24,33 +25,33 @@ import javax.annotation.Resource;
/** /**
* @Description: 内部工作组 * @Description: 内部工作组
* @Author: jero-boot * @Author: jero-boot
* @Date: 2023-09-06 * @Date: 2023-09-06
* @Version: V1.0 * @Version: V1.0
*/ */
@Service @Service
@Transactional(rollbackFor = JeroBootException.class) @Transactional(rollbackFor = JeroBootException.class)
public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMapper, LawsWorkingGroup> implements ILawsWorkingGroupService { public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMapper, LawsWorkingGroup> implements ILawsWorkingGroupService {
@Resource @Resource
private ISysUserService sysUserService; private ISysUserService sysUserService;
/** /**
* 列表查询 * 列表查询
*/ */
@Override @Override
public List<LawsWorkingGroup> queryList() { public List<LawsWorkingGroup> queryList() {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
return list(wrapper); return list(wrapper);
} }
/** /**
* 保存 * 保存
* *
* @param lawsWorkingGroup * @param lawsWorkingGroup
* @return * @return
*/ */
@Override @Override
public void add(LawsWorkingGroup lawsWorkingGroup) { public void add(LawsWorkingGroup lawsWorkingGroup) {
Date now = new Date(); Date now = new Date();
lawsWorkingGroup.setCreateTime(now); lawsWorkingGroup.setCreateTime(now);
@@ -58,177 +59,214 @@ public class LawsWorkingGroupServiceImpl extends ServiceImpl<LawsWorkingGroupMap
save(lawsWorkingGroup); save(lawsWorkingGroup);
} }
/** /**
* 更新 * 修复所有标准分会分配的管理权限
* *
* @param lawsWorkingGroup * @param
* @return * @return
*/ */
@Override @Override
public void editById(LawsWorkingGroup lawsWorkingGroup) { public void fixAllAuth() {
Date now = new Date(); // 获取所有二级工作组
lawsWorkingGroup.setUpdateTime(now); List<LawsWorkingGroup> list = this.list(
saveOrUpdate(lawsWorkingGroup); new LambdaQueryWrapper<LawsWorkingGroup>().eq(LawsWorkingGroup::getLevel, 2));
if (CollUtil.isNotEmpty(list)) {
list.forEach(this::editById);
}
} }
/** /**
* 通过id删除 * 更新
* *
* @param id * @param lawsWorkingGroup
* @return * @return
*/ */
@Override @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) { public void deleteById(String id) {
removeById(id); removeById(id);
} }
/** /**
* 批量删除 * 批量删除
* *
* @param ids * @param ids
* @return * @return
*/ */
@Override @Override
public void deleteByIds(List<String> ids) { public void deleteByIds(List<String> ids) {
removeByIds(ids); removeByIds(ids);
} }
/** /**
* 通过id查询 * 通过id查询
* *
* @param id * @param id
* @return * @return
*/ */
@Override @Override
public LawsWorkingGroup queryById(String id) { public LawsWorkingGroup queryById(String id) {
return getById(id); return getById(id);
} }
@Override @Override
public List<LawsWorkingGroup> realList() { public List<LawsWorkingGroup> realList() {
LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<LawsWorkingGroup> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); wrapper.eq(LawsWorkingGroup::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
List<LawsWorkingGroup> list = list(wrapper); List<LawsWorkingGroup> list = list(wrapper);
return list; return list;
} }
/** /**
* 对列表数据转树结构列表(pid为空当作开始节点) * 对列表数据转树结构列表(pid为空当作开始节点)
*/ */
@Override @Override
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list, String name) { public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list, String name) {
List<LawsWorkingGroup> matchedNodes = list.stream().filter(node -> node.getName().contains(name)).collect(Collectors.toList()); List<LawsWorkingGroup> matchedNodes = list.stream().filter(node -> node.getName().contains(name)).collect(Collectors.toList());
if (matchedNodes.isEmpty()) { if (matchedNodes.isEmpty()) {
return Collections.singletonList(list.get(0)); return Collections.singletonList(list.get(0));
} }
Set<LawsWorkingGroup> nodesSet = new HashSet<>(); Set<LawsWorkingGroup> nodesSet = new HashSet<>();
for (LawsWorkingGroup matchedNode : matchedNodes) { for (LawsWorkingGroup matchedNode : matchedNodes) {
nodesSet.addAll(findPathToRoot(list, matchedNode)); nodesSet.addAll(findPathToRoot(list, matchedNode));
nodesSet.addAll(findAllChildren(list, matchedNode)); nodesSet.addAll(findAllChildren(list, matchedNode));
} }
List<LawsWorkingGroup> LawsWorkingGroups = new ArrayList<>(nodesSet); List<LawsWorkingGroup> LawsWorkingGroups = new ArrayList<>(nodesSet);
return this.convertToTree(LawsWorkingGroups); 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;
}
@Override private Set<LawsWorkingGroup> findPathToRoot(List<LawsWorkingGroup> list, LawsWorkingGroup node) {
public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list) { Set<LawsWorkingGroup> pathNodes = new HashSet<>();
if (list == null || list.size() == 0){ LawsWorkingGroup currentHolder = node;
return new ArrayList<>(); while (currentHolder != null) {
} pathNodes.add(currentHolder);
List<LawsWorkingGroup> treeList = new ArrayList<>(); LawsWorkingGroup finalCurrentHolder = currentHolder;
List<SysUser> listSysUser = sysUserService.list(); currentHolder = list.stream()
for (LawsWorkingGroup group : list) { .filter(n -> n.getId().equals(finalCurrentHolder.getPid()))
if (StringUtils.isBlank(group.getPid())) { .findFirst().orElse(null);
group.setLevel(1); }
addChildGroups(group, list, listSysUser); return pathNodes;
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> 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());
@Override for (LawsWorkingGroup child : directChildren) {
public LawsWorkingGroup convertToTreeById(List<LawsWorkingGroup> list, String id) { childrenSet.add(child);
if (list == null || list.size() == 0 || StringUtils.isBlank(id)){ childrenSet.addAll(findAllChildren(list, child));
return null; }
} return childrenSet;
LawsWorkingGroup root = null; }
for (LawsWorkingGroup group : list) {
if (group.getId().equals(id)) { @Override
root = group; public List<LawsWorkingGroup> convertToTree(List<LawsWorkingGroup> list) {
break; if (list == null || list.size() == 0) {
} return new ArrayList<>();
} }
if (root == null) { List<LawsWorkingGroup> treeList = new ArrayList<>();
return null; // 如果没有找到指定的id,返回null List<SysUser> listSysUser = sysUserService.list();
} for (LawsWorkingGroup group : list) {
addChildGroupsById(root, list); if (StringUtils.isBlank(group.getPid())) {
return root; group.setLevel(1);
} addChildGroups(group, list, listSysUser);
private void addChildGroupsById(LawsWorkingGroup parentGroup, List<LawsWorkingGroup> list) { treeList.add(group);
List<LawsWorkingGroup> childGroups = new ArrayList<>(); }
for (LawsWorkingGroup group : list) { }
if (StringUtils.isNotBlank(group.getPid()) && parentGroup.getId().equals(group.getPid())) { return treeList;
addChildGroupsById(group, list); }
childGroups.add(group);
} private void addChildGroups(LawsWorkingGroup parentGroup, List<LawsWorkingGroup> list, List<SysUser> listSysUser) {
} List<LawsWorkingGroup> childGroups = new ArrayList<>();
parentGroup.setSubset(childGroups); 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 * 获取指定节点以及所有子节点ID
*/ */
@Override @Override
public List<String> allChildIdById(List<LawsWorkingGroup> list, String id, List<String> ids) { public List<String> allChildIdById(List<LawsWorkingGroup> list, String id, List<String> ids) {
if (list == null || list.size() == 0){ if (list == null || list.size() == 0) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<String> collect = list.stream().filter(LawsWorkingGroup -> id.equals(LawsWorkingGroup.getPid())).map(LawsWorkingGroup::getId).collect(Collectors.toList()); List<String> collect = list.stream().filter(LawsWorkingGroup -> id.equals(LawsWorkingGroup.getPid())).map(LawsWorkingGroup::getId).collect(Collectors.toList());
for (String s : collect) { for (String s : collect) {
allChildIdById(list, s, ids); allChildIdById(list, s, ids);
} }
ids.add(id); ids.add(id);
return ids; return ids;
} }
} }