文件关系网状图,增加关系id和描述
This commit is contained in:
parent
7151243618
commit
061516f82e
|
|
@ -3,38 +3,18 @@ package com.electromagnetic.industry.software.manage.pojo.models;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Getter
|
@Getter
|
||||||
public class Edge {
|
public class Edge {
|
||||||
String source; // 起点
|
String source; // 起点
|
||||||
String target; // 终点
|
String target; // 终点
|
||||||
|
String relationId; //关系id
|
||||||
|
String relationship; //关系描述
|
||||||
|
|
||||||
public Edge(String source, String target) {
|
public Edge(String source, String target, String relationId, String relationship) {
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.target = target;
|
this.target = target;
|
||||||
}
|
this.relationId = relationId;
|
||||||
|
this.relationship = relationship;
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return source + " -- " + target;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if (this == obj) return true;
|
|
||||||
if (obj == null || getClass() != obj.getClass()) return false;
|
|
||||||
Edge edge = (Edge) obj;
|
|
||||||
// 无向边,两个方向都相等即认为是同一条边
|
|
||||||
return (Objects.equals(source, edge.source) && Objects.equals(target, edge.target)) ||
|
|
||||||
(Objects.equals(source, edge.target) && Objects.equals(target, edge.source));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
// 无向边需要对 source 和 target 排序后计算哈希值
|
|
||||||
return Objects.hash(Math.min(source.hashCode(), target.hashCode()),
|
|
||||||
Math.max(source.hashCode(), target.hashCode()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import com.electromagnetic.industry.software.manage.service.EdFileRelationServic
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -64,13 +65,15 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
* 获取关系数据
|
* 获取关系数据
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional
|
||||||
public FileRelationViewVO listRelations(String startId) {
|
public FileRelationViewVO listRelations(String startId) {
|
||||||
|
|
||||||
FileRelationViewVO fileRelationViewVO = new FileRelationViewVO();
|
FileRelationViewVO fileRelationViewVO = new FileRelationViewVO();
|
||||||
|
|
||||||
List<Edge> visitedEdges = new ArrayList<>();
|
List<Edge> visitedEdges = new ArrayList<>();
|
||||||
Set<String> visitedIds = new HashSet<>();
|
Set<String> visitedIds = new HashSet<>();
|
||||||
Set<Edge> uniqueEdges = new HashSet<>();
|
Set<String> uniqueRelationIds = new HashSet<>();
|
||||||
|
|
||||||
Queue<String> queue = new LinkedList<>();
|
Queue<String> queue = new LinkedList<>();
|
||||||
|
|
||||||
// 初始化 BFS
|
// 初始化 BFS
|
||||||
|
|
@ -84,9 +87,9 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
for (Edge edge : neighbors) {
|
for (Edge edge : neighbors) {
|
||||||
|
|
||||||
// 添加边信息
|
// 添加边信息
|
||||||
if (!uniqueEdges.contains(edge)) {
|
if (!uniqueRelationIds.contains(edge.getRelationId())) {
|
||||||
visitedEdges.add(edge);
|
visitedEdges.add(edge);
|
||||||
uniqueEdges.add(edge);
|
uniqueRelationIds.add(edge.getRelationId());
|
||||||
}
|
}
|
||||||
// 如果目标节点未访问,记录边并继续搜索
|
// 如果目标节点未访问,记录边并继续搜索
|
||||||
if (!visitedIds.contains(edge.getTarget())) {
|
if (!visitedIds.contains(edge.getTarget())) {
|
||||||
|
|
@ -116,9 +119,9 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
||||||
List<Edge> edges = new ArrayList<>();
|
List<Edge> edges = new ArrayList<>();
|
||||||
for (EdFileRelation edFileRelation : list) {
|
for (EdFileRelation edFileRelation : list) {
|
||||||
if (edFileRelation.getId1().equals(id)) {
|
if (edFileRelation.getId1().equals(id)) {
|
||||||
edges.add(new Edge(edFileRelation.getId1(), edFileRelation.getId2()));
|
edges.add(new Edge(edFileRelation.getId1(), edFileRelation.getId2(),edFileRelation.getId(),edFileRelation.getRelationship()));
|
||||||
} else {
|
} else {
|
||||||
edges.add(new Edge(edFileRelation.getId2(), edFileRelation.getId1()));
|
edges.add(new Edge(edFileRelation.getId2(), edFileRelation.getId1(),edFileRelation.getId(),edFileRelation.getRelationship()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return edges;
|
return edges;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue