From e014b70574a59c36e1164605446b58dd4db4fae5 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 21 Jan 2025 17:29:58 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=B8=89=E5=85=83=E7=BB=84=E6=8A=BD?= =?UTF-8?q?=E5=8F=96=E5=AE=8C=E6=88=90=E5=90=8E=E7=9B=B4=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../neo4j/service/Neo4jService.java | 2 ++ .../neo4j/service/impl/Neo4jServiceImpl.java | 31 +++++++++++++++++++ .../police/service/TripleInfoService.java | 3 ++ .../impl/ExtractTripleInfoServiceImpl.java | 18 +++++++++-- .../impl/ModelRecordTypeServiceImpl.java | 3 -- .../police/service/impl/ModelServiceImpl.java | 2 +- .../service/impl/TaskRecordServiceImpl.java | 1 + .../service/impl/TripleInfoServiceImpl.java | 19 +++++++++++- 8 files changed, 71 insertions(+), 8 deletions(-) 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(); + } }