package com.bm.server.serverImpl;
import com.bm.dao.*;
import com.bm.pojo.addr.PlaceOrigin;
import com.bm.pojo.disease.Disease;
import com.bm.pojo.relationship.NodeRelationship;
import com.bm.pojo.sort.AllNode;
import com.bm.pojo.sort.GrapeSort;
import com.bm.pojo.wine.Wine;
import com.bm.server.Neo4jViewActionServer;
import com.google.gson.Gson;
import org.neo4j.driver.Record;
import org.neo4j.driver.StatementResult;
import org.neo4j.driver.Value;
import org.neo4j.driver.types.Node;
import org.neo4j.driver.types.Relationship;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* Created with IntelliJ IDEA.
* User: sx
* Date: 2022/2/9
* Time: 20:17
* Description: java
*/
@Service
public class Neo4jViewActionServerImpl implements Neo4jViewActionServer {
@Resource
private Neo4jGrapeRepository neo4jGrapeRepository;
@Autowired
private Neo4jIndexDao neo4jIndexDao;
@Resource
private Neo4jPlaceOriginRepository neo4jPlaceOriginRepository;
@Resource
private Neo4jDiseaseRepository neo4jDiseaseRepository;
@Resource
private Neo4jWineRepository neo4jWineRepository;
@Override
public String getSearchString(String string) {
String msgString="";
String cql = "match (n:grapeTu)-[r:`产区`]->(p:producingArea) where n.grapeName=~"+"'.*" + string + ".*'"+"or p.name=~"+"'.*" + string + ".*'"+" return n,r,p";
HashMap list = neo4jIndexDao.getList(cql);
if(list.size()<1 || list==null){
msgString= "查无此节点";
}else {
Gson gson = new Gson();
msgString = gson.toJson(list);
}
return msgString;
}
@Override
public List<String> getSort() {
List<String> list = new ArrayList<>();
Iterable<GrapeSort> all = neo4jGrapeRepository.findAll();
for (GrapeSort g:all
) {
list.add(g.getGrapeName());
}
return list;
}
@Override
public List<String> getPlaceOrigin() {
List<String> list = new ArrayList<>();
Iterable<PlaceOrigin> all = neo4jPlaceOriginRepository.findAll();
for (PlaceOrigin p:all
) {
list.add(p.getName());
}
return list;
}
@Override
public List<String> wine() {
List<String> list = new ArrayList<>();
Iterable<Wine> all = neo4jWineRepository.findAll();
for (Wine p:all
) {
list.add(p.getName());
}
return list;
}
@Override
public List<String> disease() {
List<String> list = new ArrayList<>();
Iterable<Disease> all = neo4jDiseaseRepository.findAll();
for (Disease p:all
) {
list.add(p.getName());
}
return list;
}
@Override
public String getsSearching(String string,Integer jingDu) {
double flag=0.0;
//精准度
if(jingDu==1){
flag=0.5;
}else if(jingDu==2){
flag=0.3;
}else {
flag=0.05;
}
List<Record> list=null;
StatementResult indexNode = neo4jIndexDao.getIndexNode(string,flag);
list=indexNode.list();
List<Map<String,String>> nodeNames = new ArrayList<>();
String json="";
if(list.size()>0 && list !=null){
for (Record record:list) {
Value value = record.get(0);
Node node = value.asNode();
Map<String, Object> getNode = node.asMap();
Map<String, String> Map = new HashMap<>();
if(getNode.get("grapeName")!=null){
Map.put("name",(String) getNode.get("grapeName"));
Map.put("label",(String) getNode.get("label"));
Map.put("details",(String) getNode.get("details"));
}else {
Map.put("name",(String) getNode.get("name"));
Map.put("label",(String) getNode.get("label"));
Map.put("details",(String) getNode.get("details"));
}
nodeNames.add(Map);
}
}else {
return null;
}
// 去重
HashSet<AllNode> allNodes = new HashSet<>();
List<AllNode> nodes = new ArrayList<>();
List<NodeRelationship> links = new ArrayList<>();
for (int i=0;i<nodeNames.size();i++){
// 获取检索节点的子节点
List<Record> nodeToRetrieve = neo4jIndexDao.getNodeToRetrieve(nodeNames.get(i));
for (Record r:nodeToRetrieve) {
if(r.size()>1){
Node node1 = r.get(0).asNode();
AllNode start = getNode(node1);
Relationship relationship = r.get(1).asRelationship();
NodeRelationship relationship1 = getRelationship(relationship);
Node node2 = r.get(2).asNode();
AllNode end = getNode(node2);
nodes.add(start);
nodes.add(end);
allNodes.add(start);
allNodes.add(end);
links.add(relationship1);
}else {
Node node1 = r.get(0).asNode();
AllNode start = getNode(node1);
nodes.add(start);
}
}
}
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("nodes",allNodes);
hashMap.put("links",links);
//获取相似度前十的节点
if(nodeNames.size()>=10){
List<Map<String, String>> maps = nodeNames.subList(0, 10);
hashMap.put("list",maps);
}else{
hashMap.put("list",nodeNames);
}
Gson gson = new Gson();
json = gson.toJson(hashMap);//转成字符串
return json;
}
@Override
public String getAllNodes() {
HashMap<String, List<Record>> nodeToRetrieve = neo4jIndexDao.getAll();
HashSet<AllNode> allNodes = new HashSet<>();
List<NodeRelationship> links = new ArrayList<>();
for (Record r:nodeToRetrieve.get("nodes")) {
Node node1 = r.get(0).asNode();
AllNode node = getNode(node1);
if(node.getLabel() ==null && node.getDetails()==null){
continue;
}
allNodes.add(node);
}
for (Record r:nodeToRetrieve.get("links")) {
Relationship relationship = r.get(0).asRelationship();
NodeRelationship relationship1 = getRelationship(relationship);
links.add(relationship1);
}
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("nodes",allNodes);
hashMap.put("links",links);
hashMap.put("list","");
Gson gson = new Gson();
return gson.toJson(hashMap);//转成字符串
}
/**
* 重新整理节点
* @param node
* @return
*/
public AllNode getNode(Node node){
Map<String, Object> nodeMap = node.asMap();
AllNode start = new AllNode();
if(nodeMap.get("grapeName")!=null){
start.setName((String)nodeMap.get("grapeName"));
}else {
start.setName((String)nodeMap.get("name"));
}
start.setDetails((String)nodeMap.get("details"));
start.setId(node.id());
start.setLabel((String)nodeMap.get("label"));
return start;
}
/**
*
* @param relationship
* @return
*/
public NodeRelationship getRelationship(Relationship relationship){
NodeRelationship nodeRelationship = new NodeRelationship();
nodeRe
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
创作小达人
- 粉丝: 2109
- 资源: 655
最新资源
- FFT傅里叶变换驱动的QPSK基带信号频偏估计与补偿算法的FPGA实现及验证方案,基于FFT傅里叶变换的QPSK基带信号频偏估计与补偿算法的FPGA实现:从调制到补偿的完整流程及软件版本与操作指南,N
- LBM方法在三维两相流计算中的应用:灵活调整相饱和度曲线、粘度比及接触角的研究,基于LBM方法的三维两相流体计算模型:可调参数及相饱和度曲线的输出解析,LBM方法三维两相计算 相饱和度曲线可输出,粘
- 基于comsol技术的磁可调双带高效吸收器,COMSOL磁可调双带吸收器技术解析与应用探讨,comsol磁可调双带吸收器 ,comsol;磁可调;双带;吸收器,COMSOL磁可调双带高效吸收器
- Simulink下的永磁同步电机FOC矢量控制模型与源代码仿真:集成SVPWM、DPWM等功能与死区补偿及过调制技术,Simulink下的永磁同步电机FOC矢量控制模型与代码实践:集成SVPWM、DP
- 风能储能协同运行模型:永磁风机与储能系统深度融合的电网接入策略及控制技术研究,《风能储能协同运行模型:永磁风机发电机与储能系统的高效并网策略研究及参数选择参考资料》,风力发电+储能并网协同运行模型含
- 基于C++的视觉框架:全方位视觉算法与操作界面源码包,助力二次开发,基于C++的智能视觉算法框架:源码全开放,包含可视化操作界面与多种视觉算法工具,基于c++的视觉框架,不仅提供了可视化操作界面源码
- Abaqus焊接仿真培训资料大全:热源模型、子程序及多焊缝焊接模拟实战教程,Abaqus焊接仿真全面解析:从热源模型到协同软件应用,多场景案例分析,abaqus焊接仿真培训资料,含热源模型,子程序 焊
- Comsol结合达西与PDE模拟地下水流:孔隙率增大与非均质性的导水路径及速度场、压力场分析,“Comsol达西与PDE结合揭示地下水流作用下孔隙率变化与导水路径可视化研究”,Comsol达西与pde
- MATLAB环境下基于随机游走拉普拉斯算子谱聚类算法的快速实现与可视化分析,基于MATLAB R2018A的随机游走拉普拉斯算子快速谱聚类算法与可视化分析,MATLAB环境下基于随机游走拉普拉斯算子的
- CocosCreatorHowToUse-cocos资源
- 基于蒙特卡洛模拟和Copula函数的风光典型场景生成及多类型电动汽车优化调度研究,基于蒙特卡洛模拟和Copula函数的风光典型场景生成及多类型电动汽车优化调度研究,考虑风光消纳的自适应电动汽车优化调度
- PSCAD仿真研究:220kv三相空载输电线路的合空线与切空线过电压分析及抑制策略探究,PSCAD仿真研究:三相空载输电线路的合闸过电压及其抑制策略分析,pscad仿真 采用pscad搭建220kv三
- 蓝桥杯之软件测试-蓝桥杯资源
- scratch-scratch资源
- 兼容霍尔有感与无感无霍尔的无刷电机驱动方案:基于8051内核STC8H1k的PCB设计与Keil驱动开发,兼容霍尔有感与无感无霍尔的无刷电机驱动方案:基于8051内核STC8H1k的资料整合包,无刷电
- go-fastdfs-golang资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)