1. 调整谱查询调试接口

topo_dev
xueqingkun 7 months ago
parent 1706c3c326
commit f18e619ff6

@ -1,8 +1,10 @@
package com.supervision.neo4j.service; package com.supervision.neo4j.service;
import cn.hutool.core.lang.Pair;
import com.supervision.common.domain.R; import com.supervision.common.domain.R;
import com.supervision.neo4j.domain.CaseNode; import com.supervision.neo4j.domain.CaseNode;
import com.supervision.neo4j.domain.Rel; import com.supervision.neo4j.domain.Rel;
import com.supervision.neo4j.dto.WebRelDTO;
import org.neo4j.driver.Record; import org.neo4j.driver.Record;
import com.supervision.police.vo.GraphReqVO; import com.supervision.police.vo.GraphReqVO;
@ -44,6 +46,9 @@ public interface Neo4jService {
*/ */
R<?> getCaseGraph(GraphReqVO graphReqVO); R<?> getCaseGraph(GraphReqVO graphReqVO);
Pair<List<WebRelDTO>, List<Map<String, String>>> mergeRecord(List<Map<String, String>> nodes, List<WebRelDTO> relDTOS);
/** /**
* *
* *

@ -1,5 +1,6 @@
package com.supervision.neo4j.service.impl; package com.supervision.neo4j.service.impl;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelUtil;
@ -325,15 +326,19 @@ public class Neo4jServiceImpl implements Neo4jService {
(existing, replacement) -> existing)) // 如果有重复 ID保留第一个 (existing, replacement) -> existing)) // 如果有重复 ID保留第一个
.values()); .values());
// 节点和关系合并 // 节点和关系合并
Map<String, NodeMapRecord> nodeRecordMap = electNodeRecord(distinctNodes); Pair<List<WebRelDTO>, List<Map<String, String>>> pair = mergeRecord(distinctNodes, list);
list = mergerWebRel(list, nodeRecordMap);
nodes = mergeNode(nodes, nodeRecordMap);
map.put("list", list); map.put("list", pair.getKey());
map.put("nodes", nodes); map.put("nodes", pair.getValue());
return R.ok(map); return R.ok(map);
} }
public Pair<List<WebRelDTO>, List<Map<String, String>>> mergeRecord(List<Map<String, String>> nodes, List<WebRelDTO> relDTOS) {
Map<String, NodeMapRecord> nodeRecordMap = electNodeRecord(nodes);
return Pair.of(mergerWebRel(relDTOS, nodeRecordMap), mergeNode(nodes, nodeRecordMap));
}
@Override @Override
public R<?> getNodeAndRelationListByCaseId(String picType, String caseId) { public R<?> getNodeAndRelationListByCaseId(String picType, String caseId) {
Map<String, Set<String>> map = new HashMap<>(); Map<String, Set<String>> map = new HashMap<>();

@ -427,7 +427,7 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
Map<String, Object> parameters = new HashMap<>(); Map<String, Object> parameters = new HashMap<>();
parameters.put("caseId", graphDebugDTO.getCaseId()); parameters.put("caseId", graphDebugDTO.getCaseId());
if (null != casePerson){ if (null != casePerson){
parameters.put("lawActor", casePerson.getId()); parameters.put("lawActor", casePerson.getName());
} }
// 执行查询语句 // 执行查询语句
@ -444,8 +444,10 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
graphDebugResVO.setRecordTitleList(records.get(0).keys()); graphDebugResVO.setRecordTitleList(records.get(0).keys());
} }
graphDebugResVO.setRecordList(mapRecords(records)); graphDebugResVO.setRecordList(mapRecords(records));
graphDebugResVO.setGraphRelList(generateRelations(records));
graphDebugResVO.setGraphNodeList(generateNodes(records)); Pair<List<WebRelDTO>, List<Map<String, String>>> pair = this.neo4jService.mergeRecord(generateNodes(records), generateRelations(records));
graphDebugResVO.setGraphRelList(pair.getKey());
graphDebugResVO.setGraphNodeList(pair.getValue());
// 尝试转换为图形数据 // 尝试转换为图形数据
return graphDebugResVO; return graphDebugResVO;
@ -481,16 +483,17 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
} }
} }
return graphRelList; Set<String> relIdSet = new HashSet<>();
return graphRelList.stream().filter(map -> relIdSet.add(StrUtil.join("-", map.getSource(), map.getTarget()))).toList();
} }
private List<Map<String, Object>> generateNodes(List<Record> records) { private List<Map<String, String>> generateNodes(List<Record> records) {
List<Map<String, Object>> graphNodeList = records.stream().flatMap(record -> record.values().stream()) List<Map<String, String>> graphNodeList = records.stream().flatMap(record -> record.values().stream())
.filter(value -> value.type().name().equals("NODE")).map(value ->{ .filter(value -> value.type().name().equals("NODE")).map(value ->{
Map<String, Object> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
Node node = value.asNode(); Node node = value.asNode();
map.put("id", String.valueOf(node.id())); map.put("id", String.valueOf(node.id()));
map.put("name", node.get("name").asString()); map.put("name", node.get("name").asString());
@ -518,7 +521,7 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
List<Record> extendRecord = neo4jService.executeCypher("MATCH (n) where id(n) in $nodeIds return n", Map.of("nodeIds", nodeIds)); List<Record> extendRecord = neo4jService.executeCypher("MATCH (n) where id(n) in $nodeIds return n", Map.of("nodeIds", nodeIds));
if (CollUtil.isNotEmpty(extendRecord)){ if (CollUtil.isNotEmpty(extendRecord)){
graphNodeList.addAll(extendRecord.stream().flatMap(r -> r.values().stream()).map(r -> { graphNodeList.addAll(extendRecord.stream().flatMap(r -> r.values().stream()).map(r -> {
Map<String, Object> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
map.put("id", String.valueOf(r.asNode().id())); map.put("id", String.valueOf(r.asNode().id()));
map.put("name", r.get("name").asString()); map.put("name", r.get("name").asString());
map.put("entityName", r.get("name").asString()); map.put("entityName", r.get("name").asString());
@ -528,7 +531,7 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
} }
Set<String> nodeIdSet = new HashSet<>(); Set<String> nodeIdSet = new HashSet<>();
return graphNodeList.stream().filter(map -> nodeIdSet.add((String) map.get("id"))).toList(); return graphNodeList.stream().filter(map -> nodeIdSet.add(map.get("id"))).toList();
} }
private List<Map<String, Object>> mapRecords(List<Record> records) { private List<Map<String, Object>> mapRecords(List<Record> records) {

@ -34,6 +34,6 @@ public class GraphDebugResVO {
/** /**
* name/entityName/id * name/entityName/id
*/ */
private List<Map<String, Object>> graphNodeList; private List<Map<String, String>> graphNodeList;
} }

Loading…
Cancel
Save