diff --git a/src/main/java/com/supervision/neo4j/controller/Neo4jController.java b/src/main/java/com/supervision/neo4j/controller/Neo4jController.java index e7ca8e2..338bcdf 100644 --- a/src/main/java/com/supervision/neo4j/controller/Neo4jController.java +++ b/src/main/java/com/supervision/neo4j/controller/Neo4jController.java @@ -1,5 +1,6 @@ package com.supervision.neo4j.controller; +import cn.hutool.core.util.ObjectUtil; import com.supervision.common.domain.R; import com.supervision.neo4j.domain.CaseNode; import com.supervision.neo4j.domain.Rel; @@ -78,8 +79,8 @@ public class Neo4jController { @PostMapping("/saveRelation") public R saveRelation(@RequestBody Rel rel) { - Boolean result = neo4jService.saveRelation(rel); - return R.judgeResult(result, null, "保存失败"); + Rel rel1 = neo4jService.saveRelation(rel); + return R.judgeResult(ObjectUtil.isNotEmpty(rel1), null, "保存失败"); } /*************************************************************************************/ diff --git a/src/main/java/com/supervision/neo4j/service/Neo4jService.java b/src/main/java/com/supervision/neo4j/service/Neo4jService.java index e1e8f15..77fa0c6 100644 --- a/src/main/java/com/supervision/neo4j/service/Neo4jService.java +++ b/src/main/java/com/supervision/neo4j/service/Neo4jService.java @@ -16,6 +16,11 @@ public interface Neo4jService { void delNode(Long id); + /** + * 移除不具备任何连接关系的节点 + */ + void deleteNoRelationNode(Long id); + void deleteRel(Long relId); CaseNode findById(Long id); @@ -26,7 +31,7 @@ public interface Neo4jService { Rel findRelation(Rel rel); - Boolean saveRelation(Rel rel); + Rel saveRelation(Rel rel); R getNode(String picType, String caseId); diff --git a/src/main/java/com/supervision/neo4j/service/impl/Neo4jServiceImpl.java b/src/main/java/com/supervision/neo4j/service/impl/Neo4jServiceImpl.java index 3a7e0a3..873f50e 100644 --- a/src/main/java/com/supervision/neo4j/service/impl/Neo4jServiceImpl.java +++ b/src/main/java/com/supervision/neo4j/service/impl/Neo4jServiceImpl.java @@ -1,6 +1,7 @@ package com.supervision.neo4j.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import com.supervision.common.domain.R; @@ -98,6 +99,23 @@ public class Neo4jServiceImpl implements Neo4jService { } } + @Override + public void deleteNoRelationNode(Long id) { + try { + Session session = driver.session(); + StringBuffer cql = new StringBuffer(); + cql.append("MATCH (n) WHERE n.id = " ).append(id).append(" AND NOT (n)--() DELETE n"); + log.info(cql.toString()); + Result run = session.run(cql.toString()); + while (run.hasNext()) { + Record next = run.next(); + // log.info(next.toString()); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + /** * 删除边 * @@ -234,7 +252,7 @@ public class Neo4jServiceImpl implements Neo4jService { } @Override - public Boolean saveRelation(Rel rel) { + public Rel saveRelation(Rel rel) { Rel res = null; try { Session session = driver.session(); @@ -250,7 +268,7 @@ public class Neo4jServiceImpl implements Neo4jService { } catch (Exception e) { e.printStackTrace(); } - return rel != null; + return rel; } @Override diff --git a/src/main/java/com/supervision/police/domain/TripleInfo.java b/src/main/java/com/supervision/police/domain/TripleInfo.java index 1da778e..919d162 100644 --- a/src/main/java/com/supervision/police/domain/TripleInfo.java +++ b/src/main/java/com/supervision/police/domain/TripleInfo.java @@ -71,6 +71,11 @@ public class TripleInfo implements Serializable { */ private Long startNodeGraphId; + /** + * 关系ID(neo4j关系id) + */ + private Long relGraphId; + /** * neo4j结束节点的ID */ diff --git a/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java index cd276fb..6f3a513 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java @@ -1,6 +1,7 @@ package com.supervision.police.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.druid.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -431,20 +432,61 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl any = tripleInfos.stream().findAny(); + if (any.isPresent()) { + TripleInfo anyTripleInfo = any.get(); + String recordId = anyTripleInfo.getRecordId(); + List existNeoList = tripleInfoService.lambdaQuery().eq(TripleInfo::getRecordId, recordId).eq(TripleInfo::getAddNeo4j, "1").list(); + Map existNeoMap = existNeoList.stream().collect(Collectors.toMap(TripleInfo::getId, Function.identity())); + // 去掉已经添加的 + Set existNeoIdSet = existNeoMap.keySet(); + ids.forEach(existNeoIdSet::remove); + // 剩下的就是需要删除的 + for (String needDeleteId : existNeoIdSet) { + TripleInfo tripleInfo = existNeoMap.get(needDeleteId); + if (ObjectUtil.isNotEmpty(tripleInfo.getRelGraphId())) { + // 先移除关系 + neo4jService.deleteRel(tripleInfo.getRelGraphId()); + } else { + break; + } + if (ObjectUtil.isNotEmpty(tripleInfo.getStartNodeGraphId())) { + // 再移除尾节点 + neo4jService.delNode(tripleInfo.getEndNodeGraphId()); + } else { + break; + } + if (ObjectUtil.isNotEmpty(tripleInfo.getEndNodeGraphId())) { + // 尝试删除头节点(只有头节点不存在任何关系的时候才进行删除) + neo4jService.deleteNoRelationNode(tripleInfo.getStartNodeGraphId()); + } else { + break; + } + // 更新状态 + tripleInfoService.lambdaUpdate().set(TripleInfo::getAddNeo4j, "0") + .set(TripleInfo::getEndNodeGraphId, null) + .set(TripleInfo::getRelGraphId, null) + .set(TripleInfo::getStartNodeGraphId, null) + .eq(TripleInfo::getId, needDeleteId).update(); + } + + } + return ("成功插入" + i + "条信息"); } } diff --git a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java index 27c14e2..16b6a48 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -308,6 +308,8 @@ public class ModelServiceImpl implements ModelService { if (ql.contains("$lawParty") && split.length > 1) { i = split.length; } + // 只有有符合的,就认为符合,不进行遍历了 + judge: for (int j = 0; j < i; j++) { if (split.length > 0) { params.put("lawParty", split[j]); @@ -324,15 +326,18 @@ public class ModelServiceImpl implements ModelService { if (res.isEmpty()) { result.setAtomicResult("-1"); } else { - ResultDTO resultDTO = res.get(0); - if (StringUtils.isNotEmpty(resultDTO.getRelId())) { - //存在关系 - result.setAtomicResult("1"); - result.setRecordSplitId(resultDTO.getRecordSplitId()); - result.setRecordId(resultDTO.getRecordId()); - break; - } else { - result.setAtomicResult("0"); + // 设置为0,不符合 + result.setAtomicResult("0"); + // 进行遍历,如果有存在的,就设置为有 + for (ResultDTO resultDTO : res) { + if (StringUtils.isNotEmpty(resultDTO.getRelId())) { + //存在关系 + result.setAtomicResult("1"); + result.setRecordSplitId(resultDTO.getRecordSplitId()); + result.setRecordId(resultDTO.getRecordId()); + // 如果只要存在,就不进行校验了,直接跳出循环 + break judge; + } } } }