diff --git a/src/main/java/com/supervision/neo4j/service/Neo4jService.java b/src/main/java/com/supervision/neo4j/service/Neo4jService.java index acc81b4..d03563b 100644 --- a/src/main/java/com/supervision/neo4j/service/Neo4jService.java +++ b/src/main/java/com/supervision/neo4j/service/Neo4jService.java @@ -70,4 +70,6 @@ public interface Neo4jService { List executeCypher(String cypher, Map parameters); TripleInfo saveTripleInfo(TripleInfo tripleInfo); + + void deleteTripleInfo(TripleInfo tripleInfo); } 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 b16fc77..8858877 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.lang.Pair; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; @@ -669,4 +670,34 @@ public class Neo4jServiceImpl implements Neo4jService { tripleInfo.setEndNodeGraphId(endNode.getId()); return tripleInfo; } + + @Override + public void deleteTripleInfo(TripleInfo tripleInfo) { + if (ObjectUtil.isNotEmpty(tripleInfo.getRelGraphId())) { + // 先移除关系 + try { + this.deleteRel(tripleInfo.getRelGraphId()); + } catch (Exception e) { + log.error("删除关系失败:{}", tripleInfo.getRelation(), e); + return; + } + } + if (ObjectUtil.isNotEmpty(tripleInfo.getEndNodeGraphId())) { + // 再移除尾节点 + try { + this.deleteNoRelationNode(tripleInfo.getEndNodeGraphId()); + } catch (Exception e) { + log.error("删除尾节点失败:{}", tripleInfo.getEndNode(), e); + return; + } + } + if (ObjectUtil.isNotEmpty(tripleInfo.getStartNodeGraphId())) { + // 尝试删除头节点(只有头节点不存在任何关系的时候才进行删除) + try { + this.deleteNoRelationNode(tripleInfo.getStartNodeGraphId()); + } catch (Exception e) { + log.error("删除头节点失败:{}", tripleInfo.getStartNode(), e); + } + } + } } diff --git a/src/main/java/com/supervision/police/service/TripleInfoService.java b/src/main/java/com/supervision/police/service/TripleInfoService.java index 175053e..6b2bf50 100644 --- a/src/main/java/com/supervision/police/service/TripleInfoService.java +++ b/src/main/java/com/supervision/police/service/TripleInfoService.java @@ -1,6 +1,7 @@ package com.supervision.police.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.police.domain.NotePrompt; import com.supervision.police.domain.TripleInfo; import java.util.List; @@ -16,4 +17,6 @@ public interface TripleInfoService extends IService { void updateNeo4jFlag(List ids, String neo4jFlag); + + List queryByRecordIdAndPrompt(String recordId, NotePrompt notePrompt); } diff --git a/src/main/java/com/supervision/police/service/impl/ExtractTripleInfoServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ExtractTripleInfoServiceImpl.java index 325261d..1001835 100644 --- a/src/main/java/com/supervision/police/service/impl/ExtractTripleInfoServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ExtractTripleInfoServiceImpl.java @@ -3,7 +3,7 @@ package com.supervision.police.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; +import com.supervision.neo4j.service.Neo4jService; import com.supervision.police.domain.CasePerson; import com.supervision.police.domain.NotePrompt; import com.supervision.police.domain.NoteRecordSplit; @@ -42,6 +42,8 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService { @Autowired private NoteRecordSplitService noteRecordSplitService; + private final Neo4jService neo4jService; + @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public void extractTripleInfo(String caseId, String name, String recordSplitId) { @@ -108,7 +110,11 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService { // 如果有提取到三元组信息 if (CollUtil.isNotEmpty(tripleInfos)) { for (TripleInfo tripleInfo : tripleInfos) { - log.info("doTripleExtractTask:笔录片段:{}三元组提取任务执行结束...,三元组信息入库:{}",tripleInfo.getRecordSplitId(), JSONUtil.toJsonStr(tripleInfo)); + // 三元组入库到neo4j + log.info("doTripleExtractTask:笔录片段:{}三元组提取任务执行结束,开始三元组信息入库",tripleInfo.getRecordSplitId()); + neo4jService.saveTripleInfo(tripleInfo); + log.info("doTripleExtractTask:笔录片段:{}三元组提取任务执行结束...,开始三元组信息入库",tripleInfo.getRecordSplitId()); + tripleInfo.setAddNeo4j("1"); tripleInfoService.saveOrUpdateByBusiness(tripleInfo); } } @@ -143,7 +149,13 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService { Assert.notNull(notePrompt, "notePrompt不能为空"); Assert.notEmpty(recordId, "recordId不能为空"); Assert.notEmpty(caseId, "caseId不能为空"); - + // 先清除之前的三元组信息 + List tripleInfos = tripleInfoService.queryByRecordIdAndPrompt(recordId, notePrompt); + log.info("extractTripleInfo:笔录片段:{}清除之前的三元组信息,三元组个数:{}", recordId, tripleInfos.size()); + for (TripleInfo tripleInfo : tripleInfos) { + neo4jService.deleteTripleInfo(tripleInfo); + tripleInfoService.removeById(tripleInfo.getId()); + } CasePerson mainActor = casePersonService.getMainActor(caseId); List noteRecordSplits = noteRecordSplitService.queryRecordSplitList(recordId); return extractTripleInfo(notePrompt, mainActor, noteRecordSplits); 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 0b122a7..7267257 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java @@ -48,9 +48,6 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl StringUtils.isNotEmpty(r.getRelId()) && StringUtils.isNotEmpty(r.getRecordSplitId())) - .map(ResultDTO::getRecordSplitId).collect(Collectors.joining(",")); + .map(ResultDTO::getRecordSplitId).distinct().collect(Collectors.joining(",")); atomicResult.setRecordSplitId(recordSplitIdJoin); } } diff --git a/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java b/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java index 8642d7a..d4093c8 100644 --- a/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java @@ -143,6 +143,7 @@ public class TaskRecordServiceImpl extends ServiceImpl queryByRecordIdAndPrompt(String recordId, NotePrompt notePrompt) { + if (StrUtil.isEmpty(recordId)){ + return new ArrayList<>(); + } + // 没有直接通过提示词id查询的原因是应为为了兼容老数据 + return super.lambdaQuery().eq(TripleInfo::getRecordId, recordId) + .eq(TripleInfo::getStartNodeType, notePrompt.getStartEntityType()) + .eq(TripleInfo::getEndNodeType, notePrompt.getEndEntityType()) + .eq(TripleInfo::getRelation, notePrompt.getRelType()) + .list(); + } }