From 0dd818017a4724e7a018f6413c2d2c728aea9792 Mon Sep 17 00:00:00 2001 From: yjz <3131811435@qq.com> Date: Mon, 8 Jan 2024 17:04:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=B5=84=E6=96=99=E4=B8=AD=E5=BF=83):=20?= =?UTF-8?q?=E8=B5=84=E6=96=99=E4=B8=AD=E5=BF=83=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jero/common/util/StreamUtils.java | 25 +++++ .../LawsDataCenterFolderController.java | 26 ++--- .../entity/LawsDataCenterFolder.java | 5 + .../mapper/LawsDataCenterFileMapper.java | 16 ++- .../mapper/xml/LawsDataCenterFileMapper.xml | 21 ++++ .../mapper/xml/LawsDataCenterFolderMapper.xml | 4 +- .../service/ILawsDataCenterFolderService.java | 2 +- .../impl/LawsDataCenterFileServiceImpl.java | 30 +++-- .../impl/LawsDataCenterFolderServiceImpl.java | 106 +++++++++++------- 9 files changed, 159 insertions(+), 76 deletions(-) create mode 100644 laws-base/laws-base-core/src/main/java/com/jero/common/util/StreamUtils.java diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/util/StreamUtils.java b/laws-base/laws-base-core/src/main/java/com/jero/common/util/StreamUtils.java new file mode 100644 index 00000000..a66810c8 --- /dev/null +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/util/StreamUtils.java @@ -0,0 +1,25 @@ +package com.jero.common.util; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class StreamUtils { + + private StreamUtils(){ + } + /** + * 按某个指定字段去重 + * + * @param keyExtractor 需要去重的字段 + * @return java.util.function.Predicate + * @author 陈賝 + * @date 2022/9/2 13:49 + */ + public static Predicate distinctByKey(Function keyExtractor) { + Map seen = new ConcurrentHashMap<>(); + return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } +} + diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/controller/LawsDataCenterFolderController.java b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/controller/LawsDataCenterFolderController.java index c3069f38..5169334b 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/controller/LawsDataCenterFolderController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/controller/LawsDataCenterFolderController.java @@ -1,25 +1,25 @@ package com.jero.modules.laws.dataCenter.controller; -import java.util.List; -import java.util.Map; - import com.jero.common.api.vo.Result; -import com.jero.common.exception.JeroBootException; -import com.jero.common.util.MessageUtils; import com.jero.common.api.vo.ResultCommon; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.util.MessageUtils; import com.jero.modules.laws.dataCenter.entity.LawsDataCenterFolder; import com.jero.modules.laws.dataCenter.service.ILawsDataCenterFolderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import com.jero.common.system.base.controller.JeroController; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import com.jero.common.aspect.annotation.AutoLog; -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.formula.functions.T; + +import java.util.List; +import java.util.Map; /** @@ -39,8 +39,8 @@ public class LawsDataCenterFolderController extends JeroController> getTreeList() { - List treeList = lawsDataCenterFolderService.getTreeList(); + public Result> getTreeList(String folderName) { + List treeList = lawsDataCenterFolderService.getTreeList(folderName); return Result.OK(treeList); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/entity/LawsDataCenterFolder.java b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/entity/LawsDataCenterFolder.java index 3b0b21f6..628df581 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/entity/LawsDataCenterFolder.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/entity/LawsDataCenterFolder.java @@ -143,4 +143,9 @@ public class LawsDataCenterFolder implements Serializable { */ @TableField(exist = false) private java.lang.String pId; + /** + * 层级结构名 用于搜索过滤 + */ + @TableField(exist = false) + private java.lang.String structureName; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/LawsDataCenterFileMapper.java b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/LawsDataCenterFileMapper.java index 2ea7972a..97094171 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/LawsDataCenterFileMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/LawsDataCenterFileMapper.java @@ -1,10 +1,11 @@ package com.jero.modules.laws.dataCenter.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import com.jero.modules.laws.dataCenter.entity.LawsDataCenterFile; +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.jero.modules.laws.dataCenter.entity.LawsDataCenterFile; +import org.apache.ibatis.annotations.Param; /** * @Description: 资料中心-文件数据 @@ -14,4 +15,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface LawsDataCenterFileMapper extends BaseMapper { + /** + * + * @param page + * @param queryWrapper + * @return + */ + Page queryByPage(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFileMapper.xml b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFileMapper.xml index a05b90a3..cc1e34b2 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFileMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFileMapper.xml @@ -16,4 +16,25 @@ + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFolderMapper.xml b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFolderMapper.xml index f26d8963..5e02d60a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFolderMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/mapper/xml/LawsDataCenterFolderMapper.xml @@ -27,6 +27,8 @@ FROM laws_data_center_folder ldcf WHERE del_flag = 0 AND (ldcf.owner_id = #{userId} - OR ldcf.auth_view_ids LIKE CONCAT('%',#{userId},'%')) + OR ldcf.auth_view_ids LIKE CONCAT('%',#{userId},'%') + OR ldcf.auth_manage_ids LIKE CONCAT('%',#{userId},'%')) + order by ldcf.sort, ldcf.create_time \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/ILawsDataCenterFolderService.java b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/ILawsDataCenterFolderService.java index 7c3568a3..ff44b986 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/ILawsDataCenterFolderService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/ILawsDataCenterFolderService.java @@ -17,7 +17,7 @@ public interface ILawsDataCenterFolderService extends IService getTreeList(); + List getTreeList(String folderName); /** * 保存 diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFileServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFileServiceImpl.java index fc31a860..30d9f4b7 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFileServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFileServiceImpl.java @@ -1,6 +1,6 @@ package com.jero.modules.laws.dataCenter.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -50,6 +50,8 @@ public class LawsDataCenterFileServiceImpl extends ServiceImpl queryPage(LawsDataCenterFile lawsDataCenterFile, Integer pageNo, Integer pageSize) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); Page page = new Page<>(pageNo, pageSize); queryWrapper.like(StringUtils.isNotBlank(lawsDataCenterFile.getFileName()), - LawsDataCenterFile::getFileName, lawsDataCenterFile.getFileName()); + "file_name", lawsDataCenterFile.getFileName()); queryWrapper.like(StringUtils.isNotBlank(lawsDataCenterFile.getUploader()), - LawsDataCenterFile::getUploader, lawsDataCenterFile.getUploader()); + "uploader", lawsDataCenterFile.getUploader()); if (StringUtils.isNotBlank(lawsDataCenterFile.getUploadTime())) { String[] timeArr = lawsDataCenterFile.getUploadTime().split(","); - queryWrapper.between(LawsDataCenterFile::getCreateTime, + queryWrapper.between("create_time", DateUtil.getDateSecond(timeArr[0]), DateUtil.getDateSecond(timeArr[1])); } - if (StringUtils.isBlank(lawsDataCenterFile.getFolderId())) { - queryWrapper.and(qw -> qw - .isNull(LawsDataCenterFile::getFolderId).or() - .like(LawsDataCenterFile::getPushRangeIds, CurrentUserUtil.getId()) - ); - } else { - queryWrapper.eq(LawsDataCenterFile::getFolderId, lawsDataCenterFile.getFolderId()); - } + queryWrapper.eq(StringUtils.isNotBlank(lawsDataCenterFile.getFolderId()), "folder_id", lawsDataCenterFile.getFolderId()); if (!CurrentUserUtil.getRoles().contains(FieldCommon.ROLE_ADMIN)) { queryWrapper.and(qw -> qw - .eq(LawsDataCenterFile::getOwnerId, CurrentUserUtil.getId()).or() - .like(LawsDataCenterFile::getPushRangeIds, CurrentUserUtil.getId()) + .eq("owner_id", CurrentUserUtil.getId()).or() + .like("push_range_ids", CurrentUserUtil.getId()) + .or().like("auth_manage_ids", CurrentUserUtil.getId()) ); } - queryWrapper.orderByDesc(LawsDataCenterFile::getCreateTime); - Page result = page(page, queryWrapper); + queryWrapper.orderByDesc("create_time"); + Page result = lawsDataCenterFileMapper.queryByPage(page, queryWrapper); if (!CurrentUserUtil.getRoles().contains(FieldCommon.ROLE_ADMIN)){ for (LawsDataCenterFile file : result.getRecords()) { // 管理权限标识 diff --git a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFolderServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFolderServiceImpl.java index 6171eeb2..127b9432 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFolderServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/dataCenter/service/impl/LawsDataCenterFolderServiceImpl.java @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.api.vo.ResultCommon; import com.jero.common.exception.JeroBootException; -import com.jero.modules.laws.common.constant.FieldCommon; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.BeanCopyUtils; +import com.jero.common.util.StreamUtils; import com.jero.modules.laws.common.util.CurrentUserUtil; import com.jero.modules.laws.common.util.TreeNodeComparator; import com.jero.modules.laws.dataCenter.entity.LawsDataCenterFile; @@ -14,14 +16,15 @@ import com.jero.modules.laws.dataCenter.mapper.LawsDataCenterFolderMapper; import com.jero.modules.laws.dataCenter.service.ILawsDataCenterFileService; import com.jero.modules.laws.dataCenter.service.ILawsDataCenterFolderService; import com.jero.modules.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -35,6 +38,7 @@ import java.util.stream.Collectors; */ @Service @Transactional(rollbackFor = JeroBootException.class) +@Slf4j public class LawsDataCenterFolderServiceImpl extends ServiceImpl implements ILawsDataCenterFolderService { @Autowired @@ -43,54 +47,76 @@ public class LawsDataCenterFolderServiceImpl extends ServiceImpl getTreeList() { - // 获取全部文件夹集合 - List folders = list(); - // 翻译 - folders.forEach(root -> { - root.setAuthManageIdsDictText(sysUserService.dictByIdsOrUserNames(root.getAuthManageIds(), "")); - root.setAuthViewIdsDictText(sysUserService.dictByIdsOrUserNames(root.getAuthViewIds(), "")); - }); + public List getTreeList(String folderName) { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String roleIds = loginUser.getRoleIds(); + // 全部数据 + List lawsDataCenterFolderList = list(new LambdaQueryWrapper() + .orderByAsc(LawsDataCenterFolder::getSort).orderByAsc(LawsDataCenterFolder::getCreateTime)); + List allList = BeanCopyUtils.copyBeanList(lawsDataCenterFolderList, LawsDataCenterFolder.class); - // 创建节点映射,方便查找节点 - Map nodeMap = new HashMap<>(); - folders.forEach(node -> { - node.setPId(node.getParentId()); - nodeMap.put(node.getId(), node); - }); - - // 非管理员角色只能查看自己拥有权限的文件夹 - if (!CurrentUserUtil.getRoles().contains(FieldCommon.ROLE_ADMIN)) { - // 获取自己拥有权限的文件夹集合 - List myFolders = lawsDataCenterFolderMapper.getMyFolderList(CurrentUserUtil.getId()); - - Map myNodeMap = new HashMap<>(); - myFolders.forEach(node -> { - node.setPId(node.getParentId()); - myNodeMap.put(node.getId(), node); - }); - - // 如果有子级没有父级,则将子级挂在父级的父级上 - myFolders.forEach(node -> buildParent(node, nodeMap, myNodeMap)); - folders = myFolders; + // 非管理员只能看到自己创建的 or 拥有管理权限 or 拥有查看权限的文件夹 + if (!roleIds.contains("admin")){ + lawsDataCenterFolderList = lawsDataCenterFolderList.stream() + .filter(v -> (StringUtils.isNotBlank(v.getAuthManageIds()) && v.getAuthManageIds().contains(loginUser.getId())) + || (StringUtils.isNotBlank(v.getAuthViewIds()) && v.getAuthViewIds().contains(loginUser.getId())) + || v.getOwnerId().equals(loginUser.getId())) + .collect(Collectors.toList()); } - // 创建根节点列表 - List roots = folders.stream().filter(folder -> - "0".equals(folder.getParentId())).collect(Collectors.toList()); + // 搜索 + if (StringUtils.isNotBlank(folderName)) { + // 过滤搜索数据 + lawsDataCenterFolderList = lawsDataCenterFolderList.stream().filter(v -> v.getFolderName().contains(folderName)).collect(Collectors.toList()); + } - // 对根节点进行排序 - roots.sort(new TreeNodeComparator()); + // 翻译 + for (LawsDataCenterFolder lawsDataCenterFolder : lawsDataCenterFolderList) { + lawsDataCenterFolder.setAuthManageIdsDictText(sysUserService.dictByIdsOrUserNames(lawsDataCenterFolder.getAuthManageIds(), "")); + lawsDataCenterFolder.setAuthViewIdsDictText(sysUserService.dictByIdsOrUserNames(lawsDataCenterFolder.getAuthViewIds(), "")); + } - // 递归构建子节点 - roots.forEach(root -> buildChildren(root, nodeMap)); - return roots; + // 寻找每个子级的父节点直到最上级 + List fatherNodeList = new ArrayList<>(); + findFatherNode(lawsDataCenterFolderList, allList, fatherNodeList); + lawsDataCenterFolderList.addAll(fatherNodeList); + // 过滤重复数据 + lawsDataCenterFolderList = lawsDataCenterFolderList.stream().filter(StreamUtils.distinctByKey(LawsDataCenterFolder::getId)).collect(Collectors.toList()); + + // 构建树结构 + List finalLawsDataCenterFolderList = lawsDataCenterFolderList; + return lawsDataCenterFolderList.stream().filter(v -> "0".equals(v.getParentId())) + .map(v -> v.setChildren(createChildrenList(v, finalLawsDataCenterFolderList))) + .collect(Collectors.toList()); + } + + private void findFatherNode(List lawsDataCenterFolderList, List allList, List fatherNodeList) { + for (LawsDataCenterFolder lawsDataCenterFolder : lawsDataCenterFolderList) { + String parentId = lawsDataCenterFolder.getParentId(); + if ("0".equals(parentId)){ + continue; + } + List list = allList.stream().filter(v -> v.getId().equals(parentId)).collect(Collectors.toList()); + // 没被添加过 + boolean b = list.stream().noneMatch(v -> v.equals(lawsDataCenterFolder)); + if (!list.isEmpty() && b){ + fatherNodeList.add(list.get(0)); + findFatherNode(list, allList, fatherNodeList); + } + } + } + + private List createChildrenList(LawsDataCenterFolder treeList, List lawsDataCenterFolderList) { + return lawsDataCenterFolderList.stream().filter(children -> treeList.getId().equals(children.getParentId())) + .map(folder -> folder.setChildren(createChildrenList(folder, lawsDataCenterFolderList))) + .collect(Collectors.toList()); } /** @@ -153,7 +179,7 @@ public class LawsDataCenterFolderServiceImpl extends ServiceImpl