Merge branch 'dev_1.0.0' into dev_1.1.0

topo_dev
xueqingkun 8 months ago
commit b86fe16277

@ -16,4 +16,10 @@ public class WebRelDTO {
this.target = String.valueOf(target);
this.name = name;
}
public WebRelDTO(String source, String target, String name) {
this.source = source;
this.target = target;
this.name = name;
}
}

@ -1,9 +1,6 @@
package com.supervision.neo4j.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.supervision.common.domain.R;
@ -15,16 +12,16 @@ import com.supervision.neo4j.service.Neo4jService;
import com.supervision.neo4j.utils.Neo4jUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.neo4j.cypherdsl.core.Case;
import org.neo4j.driver.*;
import org.neo4j.driver.Record;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @author qmy
@ -312,31 +309,112 @@ public class Neo4jServiceImpl implements Neo4jService {
} catch (Exception e) {
e.printStackTrace();
}
// 节点和关系合并
Map<String, NodeMapRecord> nodeRecordMap = electNodeRecord(nodes);
list = mergerWebRel(list,nodeRecordMap);
nodes = mergeNode(nodes, nodeRecordMap);
map.put("list", list);
map.put("nodes", nodes);
return R.ok(map);
}
// @Override
// public R<?> test() {
// Session session = driver.session();
// Map<String, Object> params = new HashMap<>();
// params.put("lawActor", "行为人");
// params.put("lawParty", "aaaaaa");
// Result run = session.run("MATCH (m:LawActor), (n:FictionalOrgan) where m.name=$lawActor OPTIONAL MATCH (m)-[r:`冒充`]->(n) RETURN id(m) as startId, id(n) as endId, id(r) as relId, m.recordId as recordId, m.recordsId as recordsId", params);
// while (run.hasNext()) {
// Record record = run.next();
//
// String id = Neo4jUtils.valueTransportString(record.get("startId"));
// String endId = Neo4jUtils.valueTransportString(record.get("endId"));
// String relId = Neo4jUtils.valueTransportString(record.get("relId"));
// System.out.println("************" + id);
// System.out.println("************" + endId);
// System.out.println("************" + relId);
// }
// return R.ok("222");
// }
record NodeMapRecord(String name, String id, Set<String> idSet) {
}
/**
*
* @param nodes key: name ,entityName,id
* @return
*/
private Map<String, NodeMapRecord> electNodeRecord(List<Map<String, String>> nodes){
Map<String, NodeMapRecord> nodeRecordMap = new HashMap<>();
for (Map<String, String> node : nodes) {
String name = node.get("name");
String id = node.get("id");
NodeMapRecord nodeMapRecord = nodeRecordMap.get(name);
if (nodeMapRecord == null){
Set<String> idSet = new HashSet<>();
idSet.add(id);
nodeRecordMap.put(name, new NodeMapRecord(name, id,idSet));
}else {
nodeMapRecord.idSet.add(id);
}
}
return nodeRecordMap;
}
/**
*
*
* name
* @param nodes key: name ,entityName,id
* @param nodeRecordMap
* @return
*/
private List<Map<String, String>> mergeNode(List<Map<String, String>> nodes,Map<String, NodeMapRecord> nodeRecordMap) {
return nodes.stream().map(map -> {
Map<String, String> nodeMap = new HashMap<>();
nodeMap.put("name", map.get("name"));
nodeMap.put("entityName", map.get("entityName"));
NodeMapRecord nodeMapRecord = nodeRecordMap.get(map.get("name"));
if (null == nodeMapRecord) {
log.warn("mergeNode:节点信息异常nodeRecordMap中不存在节点名称为{}的NodeMapRecord", map.get("name"));
return nodeMap;
}
if (!nodeMapRecord.idSet.contains(map.get("id"))) {
log.warn("mergeNode:节点信息异常nodeMapRecord.idSet中不包含节点id:{},节点名称为:{}", map.get("id"), map.get("name"));
return nodeMap;
}
nodeMap.put("id", nodeMapRecord.id);
return nodeMap;
}).filter(map -> StrUtil.isNotEmpty(map.get("id")))
.filter(distinctPredicate(m->m.get("id"))).collect(Collectors.toList());
}
/**
*
* @param webRelDTOList
* @param nodeRecordMap
* @return
*/
private List<WebRelDTO> mergerWebRel(List<WebRelDTO> webRelDTOList, Map<String, NodeMapRecord> nodeRecordMap) {
Map<String, NodeMapRecord> idNodeRecordMap = nodeRecordMap.entrySet().stream()
.collect(Collectors.toMap(entry -> entry.getValue().id, Map.Entry::getValue));
return webRelDTOList.stream().map(webRelDTO -> {
String target = webRelDTO.getTarget();
String source = webRelDTO.getSource();
String name = webRelDTO.getName();
String sourceNew = idNodeRecordMap.entrySet().stream()
.filter(entry -> entry.getValue().idSet.contains(source))
.findAny().map(Map.Entry::getKey).orElse("");
String targetNew = idNodeRecordMap.entrySet().stream()
.filter(entry -> entry.getValue().idSet.contains(target))
.findAny().map(Map.Entry::getKey).orElse("");
if (StrUtil.isEmpty(sourceNew) || StrUtil.isEmpty(targetNew)){
log.warn("mergerWebRel:关系信息异常nodeRecordMap中不存在节点id:{}或节点id:{}信息,节点名称为:{}", source, target, name);
}
return new WebRelDTO(sourceNew, targetNew, name);
}).filter(webRelDTO -> StrUtil.isNotEmpty(webRelDTO.getSource()) && StrUtil.isNotEmpty(webRelDTO.getTarget()))
.filter(distinctPredicate(rel -> rel.getSource() + rel.getTarget())).toList();
}
private <K> Predicate<K> distinctPredicate(Function<K,Object> function){
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>();
return (t)-> null == map.putIfAbsent(function.apply(t),true);
}
@Override
public void createAbstractGraph(String path, String sheetName) {

@ -1,12 +1,13 @@
package com.supervision.police.dto;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.supervision.minio.domain.MinioFile;
import com.supervision.police.domain.NoteRecord;
import lombok.Data;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@Data
@ -105,8 +106,14 @@ public class NoteRecordDetailDTO {
this.role = noteRecordDTO.getRole();
this.confessionMaterial = String.valueOf(noteRecordDTO.getConfessionMaterial());
this.lawAsker = noteRecordDTO.getLawAsker();
this.confessionStartTime = noteRecordDTO.getConfessionStartTime();
this.confessionEndTime = noteRecordDTO.getConfessionEndTime();
if (StrUtil.isNotEmpty(noteRecordDTO.getConfessionStartTime())){
this.confessionStartTime = LocalDateTimeUtil.parse(noteRecordDTO.getConfessionStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
}
if (StrUtil.isNotEmpty(noteRecordDTO.getConfessionEndTime())){
this.confessionEndTime = LocalDateTimeUtil.parse(noteRecordDTO.getConfessionEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
}
this.createTime = noteRecordDTO.getCreateTime();
this.updateTime = noteRecordDTO.getUpdateTime();
this.personIdCard = noteRecordDTO.getCasePersonIdCard();

@ -34,8 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;

Loading…
Cancel
Save