提交 adc7c161 作者: yanxin

文件预览、编辑、导出逻辑优化

上级 bf3ec374
......@@ -68,7 +68,7 @@
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.8</version>
<version>5.5.7</version>
</dependency>
<!-- jsoup html解析 -->
<dependency>
......@@ -219,6 +219,7 @@
</dependency>
</dependencies>
<build>
<finalName>know-base</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
......
package com.zzsn.knowbase.controller;
import com.zzsn.knowbase.entity.KbKnowledgeProject;
import com.zzsn.knowbase.entity.KbKnowledgeProjectType;
import com.zzsn.knowbase.service.KbKnowledgeProjectService;
import com.zzsn.knowbase.service.KbKnowledgeProjectTypeService;
import com.zzsn.knowbase.util.tree.Node;
import com.zzsn.knowbase.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
......@@ -20,8 +25,20 @@ import org.springframework.web.bind.annotation.*;
public class KbKnowledgeProjectTypeController {
@Autowired
KbKnowledgeProjectTypeService knowledgeProjectTypeService;
@Autowired
KbKnowledgeProjectService knowledgeProjectService;
/**
* 树形结构分类配置查询
* */
@GetMapping("treeList")
public Result<?> treeList(){
List<KbKnowledgeProjectType> typelist = knowledgeProjectTypeService.list();
List<KbKnowledgeProject> list = knowledgeProjectService.list();
List<Node> treeList = knowledgeProjectTypeService.getTreeList(typelist,list);
return Result.OK(treeList);
}
/**
* 根据id查询
* */
@GetMapping
......
package com.zzsn.knowbase.controller;
import cn.hutool.core.util.ZipUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zzsn.knowbase.entity.KbAuthorizedUser;
import com.zzsn.knowbase.entity.KnowFile;
import com.zzsn.knowbase.entity.Knowledge;
import com.zzsn.knowbase.entity.KnowledgeExcel;
import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.entity.*;
import com.zzsn.knowbase.service.IEnclosureService;
import com.zzsn.knowbase.service.IKnowledgeService;
import com.zzsn.knowbase.service.ILocalFileService;
import com.zzsn.knowbase.util.*;
......@@ -18,6 +18,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
......@@ -27,8 +29,8 @@ import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.CompletableFuture;
......@@ -55,6 +57,9 @@ public class KnowledgeController {
@Autowired
private RedisUtil redisUtil;
@Autowired
private IEnclosureService enclosureService;
/**
* 分页列表查询
*/
......@@ -90,6 +95,28 @@ public class KnowledgeController {
}
return Result.OK(knowledgeVO);
}
/**
* 根据附件id查询详情
*/
@GetMapping(value = "/getEnclosureById")
public Result<?> getEnclosureById(@RequestParam String id) {
Enclosure byId = enclosureService.getById(id);
if(byId==null){
return Result.OK("文件不存在!");
}
byId.setUrlDomain(MinioUtil.getDomainUrl());
return Result.OK(byId);
}
/**
* 附件上传
*/
@PostMapping(value = "/uploadFile")
public Result<?> uploadFile(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
Result<List<KnowFile>> result = localFileService.upload(fileMap);
return Result.OK(result);
}
@GetMapping(value = "/listFromPython")
......@@ -209,9 +236,8 @@ public class KnowledgeController {
@RequestMapping(value = "/download")
public Result<?> download(HttpServletRequest request, HttpServletResponse response) {
try {
File fileDir = ExcelExportUtil.getFileDir();
List<KnowledgeExcel> dataList = new ArrayList<>();
String filePath = fileDir.getAbsolutePath() + File.separator + "info.xlsx";
String filePath = Constants.TEMP_FILES_DIR + "template.xlsx";
ExcelExportUtil.writeExcelFront(dataList, "知识库列表导入模板", filePath, KnowledgeExcel.class);
ExcelExportUtil.download(response, filePath, true);
} catch (Exception e) {
......@@ -298,7 +324,58 @@ public class KnowledgeController {
}
}
/**
* Minio多文件打包下载
* @param response
*/
@GetMapping("/downloadMinioFiles")
public void downloadMinioFiles(String fileIds,HttpServletResponse response) throws IOException {
List<Enclosure> fileList = enclosureService.getFilePathByIds(fileIds);
//被压缩文件InputStream
InputStream[] srcFiles = new InputStream[fileList.size()];
//被压缩文件名称
String[] srcFileNames = new String[fileList.size()];
for (int i = 0; i < fileList.size(); i++) {
String fileUrl = fileList.get(i).getUrlPath();
if(fileUrl.startsWith("/")){
fileUrl = fileUrl.substring(1);
}
//提取存储桶名
String bucketName = fileUrl.split("/")[0];
String fileName = fileUrl.replace(bucketName+"/","");
InputStream inputStream = MinioUtil.getMinioFile(bucketName,fileName);
if (inputStream == null) {
continue;
}
srcFiles[i] = inputStream;
srcFileNames[i] = fileList.get(i).getName();
}
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("下载测试.zip", "UTF-8"));
//多个文件压缩成压缩包返回
ZipUtil.zip(response.getOutputStream(), srcFileNames, srcFiles);
}
/**
* 文本类数据导出
* @param response
*/
@RequestMapping(value = "/downloadNewsFiles")
public void downloadNewsFiles(String newsIds,HttpServletResponse response) throws Exception {
List<KnowledgeVO> knowledgeList = knowledgeService.queryListByIds(newsIds);
//封装数据
List<KnowledgeExcel> dataList = new ArrayList<>();
for (KnowledgeVO knowledgeVO : knowledgeList) {
KnowledgeExcel knowledgeExcel = new KnowledgeExcel();
BeanUtils.copyProperties(knowledgeVO, knowledgeExcel);
dataList.add(knowledgeExcel);
if(StringUtils.isEmpty(knowledgeExcel.getContent())){
knowledgeExcel.setContent(ContentUtility.TransferHTML2Text(knowledgeExcel.getContentWithTag()));
}
}
String filePath = Constants.TEMP_FILES_DIR + "downloadNewsFiles.xlsx";
ExcelExportUtil.writeExcelFront(dataList, "数据导出", filePath, KnowledgeExcel.class);
ExcelExportUtil.download(response, filePath, true);
}
}
@Data
......
......@@ -60,4 +60,7 @@ public class Enclosure implements Serializable {
@ApiModelProperty(value = "fileSize")
private Long fileSize;
@TableField(exist = false)
private String urlDomain;
}
......@@ -25,33 +25,22 @@ import java.util.List;
@AllArgsConstructor
public class KnowledgeExcel {
/**
* 标题
*/
@ExcelProperty(value = "标题", index = 0)
@ExcelProperty(value = "数据id", index = 0)
private String id;
@ExcelProperty(value = "标题", index = 1)
private String title;
@ExcelProperty(value = "正文", index = 1)
@ExcelProperty(value = "正文", index = 2)
private String content;
/**
* 作者
*/
@ExcelProperty(value = "作者", index = 2)
@ExcelProperty(value = "正文(带标签)", index = 3)
private String contentWithTag;
@ExcelProperty(value = "作者", index = 4)
private String author;
/**
* 来源
*/
@ExcelProperty(value = "来源", index = 3)
@ExcelProperty(value = "来源", index = 5)
private String origin;
/**
* 发布时间
*/
@ExcelProperty(value = "发布时间", index = 4)
@ExcelProperty(value = "发布时间", index = 6)
private String publishDate;
@ExcelProperty(value = "原文链接", index = 7)
private String sourceAddress;
}
......@@ -4,6 +4,8 @@ package com.zzsn.knowbase.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzsn.knowbase.entity.Enclosure;
import java.util.List;
/**
* @Description: 附件表
......@@ -14,4 +16,6 @@ import com.zzsn.knowbase.entity.Enclosure;
public interface IEnclosureService extends IService<Enclosure> {
Enclosure getByMd5(String contentMd5);
List<Enclosure> getFilePathByIds(String ids);
}
......@@ -48,6 +48,8 @@ public interface IKnowledgeService {
*/
IPage<KnowledgeVO> queryPageList(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
List<KnowledgeVO> queryListByIds(String ids);
IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
KnowledgeVO getById(String id);
......
package com.zzsn.knowbase.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzsn.knowbase.entity.KbKnowledgeProject;
import com.zzsn.knowbase.entity.KbKnowledgeProjectType;
import com.zzsn.knowbase.util.tree.Node;
import java.util.List;
/**
* <p>
......@@ -13,4 +17,5 @@ import com.zzsn.knowbase.entity.KbKnowledgeProjectType;
*/
public interface KbKnowledgeProjectTypeService extends IService<KbKnowledgeProjectType> {
List<Node> getTreeList(List<KbKnowledgeProjectType> typelist, List<KbKnowledgeProject> list);
}
......@@ -8,6 +8,8 @@ import com.zzsn.knowbase.mapper.EnclosureMapper;
import com.zzsn.knowbase.service.IEnclosureService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description: 附件表
* @Author: jeecg-boot
......@@ -23,4 +25,11 @@ public class EnclosureServiceImpl extends ServiceImpl<EnclosureMapper, Enclosure
queryWrapper.eq(Enclosure::getContentMd5,contentMd5);
return this.getOne(queryWrapper);
}
@Override
public List<Enclosure> getFilePathByIds(String ids) {
LambdaQueryWrapper<Enclosure> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.in(Enclosure::getId,ids.split(","));
return this.list(queryWrapper);
}
}
......@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
......@@ -460,9 +461,9 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
.form("username",user.getUsername())
.form("excludeIds",finalExists)
.execute().body();
Result bean = JSONUtil.toBean(body, Result.class);
Result bean = JSON.parseObject(body, Result.class);
Page page = JSONUtil.toBean(JSONUtil.toJsonStr(bean.getResult()), Page.class);
Page page = JSON.parseObject(JSONUtil.toJsonStr(bean.getResult()), Page.class);
List<KbAuthorizedUser> list = JSONUtil.toList(JSONUtil.parseArray(JSONUtil.toJsonStr(page.getRecords())), KbAuthorizedUser.class);
Page<KbAuthorizedUser> result = new Page<>();
......@@ -831,7 +832,7 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
boolean success = res.isSuccess();
if(200 == res.getCode() && success){
/**校验成功,获取到第三方用户信息*/
KbAuthorizedUser one = JSONUtil.toBean(JSONUtil.toJsonStr(res.getResult()), KbAuthorizedUser.class);
KbAuthorizedUser one = JSON.parseObject(JSONUtil.toJsonStr(res.getResult()), KbAuthorizedUser.class);
one.setIsAll(0);
one.setRoleId("1742844597970673665");
/**校验第三方用户是否进行了授权*//*
......@@ -918,9 +919,9 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
.form("username",username)
.form("excludeIds",finalExists)
.execute().body();
Result bean = JSONUtil.toBean(body, Result.class);
Result bean = JSON.parseObject(body, Result.class);
Page page = JSONUtil.toBean(JSONUtil.toJsonStr(bean.getResult()), Page.class);
Page page = JSON.parseObject(JSONUtil.toJsonStr(bean.getResult()), Page.class);
List<KbAuthorizedUser> list = JSONUtil.toList(JSONUtil.parseArray(JSONUtil.toJsonStr(page.getRecords())), KbAuthorizedUser.class);
Page<KbAuthorizedUser> result = new Page<>();
......@@ -937,7 +938,7 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
String body = HttpRequest.post(checkuserurl).header("X-Access-Token", token).execute().body();
Result bean = null;
try {
bean = JSONUtil.toBean(body, Result.class);
bean = JSON.parseObject(body, Result.class);
} catch (Exception e) {
return Result.error("第三方用户校验异常");
}
......@@ -950,7 +951,7 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
boolean success = res.isSuccess();
if(200 == res.getCode() && success) {
/**校验成功,获取到第三方用户信息*/
KbAuthorizedUser bean = JSONUtil.toBean(JSONUtil.toJsonStr(res.getResult()), KbAuthorizedUser.class);
KbAuthorizedUser bean = JSON.parseObject(JSONUtil.toJsonStr(res.getResult()), KbAuthorizedUser.class);
// /**校验第三方用户是否进行了授权*/
// List<KbAuthorizedUser> list = super.list(Wrappers.<KbAuthorizedUser>lambdaQuery().eq(KbAuthorizedUser::getUserId, bean.getUserId()));
// if (CollectionUtil.isEmpty(list)) {
......
......@@ -2,11 +2,17 @@ package com.zzsn.knowbase.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzsn.knowbase.entity.KbKnowledgeProject;
import com.zzsn.knowbase.entity.KbKnowledgeProjectType;
import com.zzsn.knowbase.mapper.KbKnowledgeProjectTypeMapper;
import com.zzsn.knowbase.service.KbKnowledgeProjectTypeService;
import com.zzsn.knowbase.util.tree.Node;
import com.zzsn.knowbase.util.tree.TreeUtil;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 服务实现类
......@@ -18,4 +24,23 @@ import org.springframework.stereotype.Service;
@Service
public class KbKnowledgeProjectTypeServiceImpl extends ServiceImpl<KbKnowledgeProjectTypeMapper, KbKnowledgeProjectType> implements KbKnowledgeProjectTypeService {
@Override
public List<Node> getTreeList(List<KbKnowledgeProjectType> typelist, List<KbKnowledgeProject> list) {
List<Node> nodes = new ArrayList<>();
for (KbKnowledgeProjectType type : typelist) {
Node node = new Node();
node.setId(type.getId());
node.setName(type.getName());
node.setPid("0");
nodes.add(node);
}
for (KbKnowledgeProject item : list) {
Node node = new Node();
node.setId(item.getId());
node.setName(item.getTypeName());
node.setPid("0".equals(item.getPid())?item.getCategory():item.getPid());
nodes.add(node);
}
return TreeUtil.tree(nodes, "0");
}
}
......@@ -119,14 +119,15 @@ class KnowledgeServiceImpl implements IKnowledgeService {
knowledge.setDeleteFlag(0);
KnowledgeMessage knowledgeMessage = new KnowledgeMessage();
if (Integer.valueOf("0").equals(knowledge.getImportData())) {
if (knowledge.getImportData()!=null && knowledge.getImportData()!=1) {
//创建临时文件
File file = null;
try {
File dirFile = new File(Constants.TEMP_FILES_DIR);
dirFile.mkdirs();
file = File.createTempFile(Constants.TEMP_FILES_DIR, knowFile.getFileType(), dirFile);
} catch (IOException e) {
log.info("创建临时文件失败");
log.info("创建临时文件失败e:{}",e.getMessage(),e);
return;
}
try (FileOutputStream fos = new FileOutputStream(file)){
......@@ -369,12 +370,12 @@ class KnowledgeServiceImpl implements IKnowledgeService {
@Override
public void updateKnowledge(Knowledge knowledge) {
esOpUtil.docSavaByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), knowledge);
//sync data
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
if (null == userInfo) {
return;
}
esOpUtil.docSavaByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), knowledge);
KnowledgeVO knowledgeVO = this.getById(knowledge.getId());
addKnowledge(knowledgeVO.getFiles().get(0), knowledge, userInfo);
}
......@@ -575,7 +576,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
List<KnowledgeVO> list = new ArrayList<>();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
KnowledgeVO info = JSONUtil.toBean(queryInfo, KnowledgeVO.class);
KnowledgeVO info = JSON.parseObject(queryInfo, KnowledgeVO.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
info.setVerifyTime(EsDateUtil.esFieldDateMapping(info.getVerifyTime()));
list.add(info);
......@@ -590,6 +591,42 @@ class KnowledgeServiceImpl implements IKnowledgeService {
}
@Override
public List<KnowledgeVO> queryListByIds(String ids) {
List<String> idList = Arrays.asList(ids.split(","));
SearchRequest searchRequest = new SearchRequest(Constants.ES_DATA_FOR_KNOWLEDGE);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//设置分页参数
searchSourceBuilder.size(idList.size());
searchSourceBuilder.from(0);
//按发布时间倒序
searchSourceBuilder.sort("publishDate", SortOrder.DESC);
//默认最大数量是10000,设置为true后,显示准确数量
searchSourceBuilder.trackTotalHits(true);
//创建查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.termsQuery("id", idList));
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
List<KnowledgeVO> list = new ArrayList<>();
if (null != searchResponse && null != searchResponse.getHits()) {
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
KnowledgeVO info = JSON.parseObject(queryInfo, KnowledgeVO.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
info.setVerifyTime(EsDateUtil.esFieldDateMapping(info.getVerifyTime()));
list.add(info);
}
}
return list;
}
@Override
public IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order) {
Object data = redisUtil.get(genKey(knowledgeParam));
......@@ -775,7 +812,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
KnowledgeVO info = JSONUtil.toBean(queryInfo, KnowledgeVO.class);
KnowledgeVO info = JSON.parseObject(queryInfo, KnowledgeVO.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
list.add(info);
}
......
......@@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLDecoder;
import java.util.Date;
......@@ -42,7 +43,9 @@ public class MinioUtil {
public static String getMinioUrl() {
return minioUrl;
}
public static String getDomainUrl() {
return minioUrl.substring(0,minioUrl.lastIndexOf("/"));
}
public static String getBucketName() {
return bucketName;
}
......
......@@ -2,6 +2,7 @@ package com.zzsn.knowbase.util;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.entity.KbAuthorizedUser;
import lombok.extern.slf4j.Slf4j;
......@@ -142,6 +143,6 @@ public class SpringContextUtils implements ApplicationContextAware {
return null;
}
return JSONUtil.toBean(request.getAttribute(Constants.USER_INFO).toString(), KbAuthorizedUser.class);
return JSON.parseObject(request.getAttribute(Constants.USER_INFO).toString(), KbAuthorizedUser.class);
}
}
package com.zzsn.knowbase.util.tree;
import lombok.Data;
import java.util.List;
/**
* @author lkg
* @description: 树形节点
* @date 2021/12/15 14:11
*/
@Data
public class Node {
private String id;
private String name;
private String pid;
private Integer level;
private Integer orderNo;
private Integer hasChild;
private List<? extends Node> children;
}
package com.zzsn.knowbase.util.tree;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author lkg
* @description: 构造树形结构工具类
* @date 2021/12/15 14:18
*/
public class TreeUtil {
/**
* 单个树
*
* @param list 数据集合
* @param node 根节点数据
* @author lkg
* @date 2021/12/17 16:33
*/
public static <T extends Node> void tree(List<T> list, T node) {
String id = node.getId();
List<T> tree = tree(list, id);
node.setChildren(tree);
}
/**
* 树 集合
*
* @param list 数据集合
* @param rootId 根节点id
* @author lkg
* @date 2021/12/17 16:33
*/
public static <T extends Node> List<T> tree(List<T> list, String rootId) {
Map<String, List<T>> treeMap = new HashMap<>();
for (T item : list) {
String parentId = item.getPid();
List<T> children;
if (treeMap.containsKey(parentId)) {
children = treeMap.get(parentId);
} else {
children = new ArrayList<>();
treeMap.put(parentId, children);
}
children.add(item);
}
return getTreeByMap(treeMap, rootId);
}
/**
* 根据当前节点获取所有上级节点
*
* @param list 数据集合
* @param currentNode 当前节点
* @param flag 是否包含自己本身(true-是;false-否)
* @author lkg
* @date 2022/12/27 11:32
*/
public static <T extends Node> LinkedHashSet<T> getUpList(List<T> list, T currentNode, boolean flag) {
if (ObjectUtils.isNotEmpty(currentNode)) {
LinkedHashSet<T> treeSet = new LinkedHashSet<>();
if (flag) {
treeSet.add(currentNode);
}
String pid = currentNode.getPid();
List<T> parentNodes = list.stream().filter(node -> node.getId().equals(pid)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(parentNodes)) {
T parentNode = parentNodes.get(0);
treeSet.add(parentNode);
LinkedHashSet<T> upTreeSet = getUpList(list, parentNode, flag);
if (CollectionUtils.isNotEmpty(upTreeSet)) {
treeSet.addAll(upTreeSet);
}
}
return treeSet;
}
return null;
}
/**
* 获取某节点下所有节点id得集合
*
* @param list: 数据集合
* @param rootId: 节点id
* @param flag: 是否包含自己本身(true-是;false-否)
* @author lkg
* @date 2023/2/23
*/
public static <T extends Node> List<String> belowList(List<T> list, String rootId, boolean flag) {
List<String> nodes = new ArrayList<>();
if (flag) {
nodes.add(rootId);
}
Map<String, List<T>> treeMap = new HashMap<>();
for (T item : list) {
String parentId = item.getPid();
List<T> children;
if (treeMap.containsKey(parentId)) {
children = treeMap.get(parentId);
} else {
children = new ArrayList<>();
treeMap.put(parentId, children);
}
children.add(item);
}
getBelowList(treeMap, rootId, nodes);
return nodes;
}
private static <T extends Node> List<T> getBelowList(Map<String, List<T>> treeMap, String parentId, List<String> belowList) {
List<T> children = treeMap.get(parentId);
if (children == null) {
return null;
}
for (T item : children) {
belowList.add(item.getId());
item.setChildren(getBelowList(treeMap, item.getId(), belowList));
}
return children;
}
private static <T extends Node> List<T> getTreeByMap(Map<String, List<T>> treeMap, String parentId) {
List<T> children = treeMap.get(parentId);
if (children == null) {
return null;
}
for (Node item : children) {
item.setChildren(getTreeByMap(treeMap, item.getId()));
}
return children;
}
}
......@@ -36,6 +36,7 @@ public class KnowledgeVO {
private String subjectId;
private String contentWithTag;
private String contentAll;
private String sourceAddress;;
private List<Content> contents;
private List<KnowFile> files;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论