重新提取三元组接口初版

topo_dev
DESKTOP-DDTUS3E\yaxin 8 months ago
parent dda0953c35
commit b98ebcffbb

@ -110,6 +110,19 @@ public class RecordController {
return R.ok(noteRecordSplitService.uploadRecords(records)); return R.ok(noteRecordSplitService.uploadRecords(records));
} }
/**
*
* @param records
* @return R
* @throws IOException
*/
@PostMapping("/redoExtract")
public R<String> redoExtract(@RequestBody NoteRecordReqVO records) throws IOException {
return R.ok(noteRecordSplitService.redoExtract(records));
}
/** /**
* *
* *

@ -21,4 +21,6 @@ public interface NoteRecordSplitService extends IService<NoteRecordSplit> {
List<NoteRecordSplit> batchSaveRecordSplit(NoteRecord record, String fileId); List<NoteRecordSplit> batchSaveRecordSplit(NoteRecord record, String fileId);
Map<String, Object> queryRecordList(NoteRecord noteRecord, Integer page, Integer size); Map<String, Object> queryRecordList(NoteRecord noteRecord, Integer page, Integer size);
String redoExtract(NoteRecordReqVO records) throws IOException;
} }

@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Pair; import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.chat.client.LangChainChatService; import com.supervision.chat.client.LangChainChatService;
import com.supervision.common.utils.IPages; import com.supervision.common.utils.IPages;
@ -18,11 +19,11 @@ import com.supervision.minio.service.MinioService;
import com.supervision.neo4j.service.Neo4jService; import com.supervision.neo4j.service.Neo4jService;
import com.supervision.police.domain.*; import com.supervision.police.domain.*;
import com.supervision.police.dto.NoteRecordDTO; import com.supervision.police.dto.NoteRecordDTO;
import com.supervision.police.dto.NoteRecordFileDTO;
import com.supervision.police.vo.NoteRecordReqVO;
import com.supervision.police.dto.NoteRecordDetailDTO; import com.supervision.police.dto.NoteRecordDetailDTO;
import com.supervision.police.dto.NoteRecordFileDTO;
import com.supervision.police.mapper.NoteRecordSplitMapper; import com.supervision.police.mapper.NoteRecordSplitMapper;
import com.supervision.police.service.*; import com.supervision.police.service.*;
import com.supervision.police.vo.NoteRecordReqVO;
import com.supervision.utils.RecordRegexUtil; import com.supervision.utils.RecordRegexUtil;
import com.supervision.utils.WordReadUtil; import com.supervision.utils.WordReadUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -65,8 +66,6 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
private final Neo4jService neo4jService; private final Neo4jService neo4jService;
private final LangChainChatService langChainChatService;
private final ModelCaseService modelCaseService; private final ModelCaseService modelCaseService;
private final ModelAtomicResultService modelAtomicResultService; private final ModelAtomicResultService modelAtomicResultService;
@ -76,7 +75,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
@Override @Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public String uploadRecords(NoteRecordReqVO records) throws IOException { public String uploadRecords(NoteRecordReqVO records) {
ModelCase modelCase = modelCaseService.getById(records.getCaseId()); ModelCase modelCase = modelCaseService.getById(records.getCaseId());
Assert.notEmpty(modelCase.getCaseNo(), "案件编号不能为空"); Assert.notEmpty(modelCase.getCaseNo(), "案件编号不能为空");
@ -84,7 +83,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
NoteRecord record = records.toNoteRecord(); NoteRecord record = records.toNoteRecord();
String recordId = noteRecordService.saveOrUpdRecord(record); String recordId = noteRecordService.saveOrUpdRecord(record);
if (CollUtil.isEmpty(records.getFileIdList())){ if (CollUtil.isEmpty(records.getFileIdList())) {
log.info("uploadRecords:文件内容为空...不进行笔录分析操作..."); log.info("uploadRecords:文件内容为空...不进行笔录分析操作...");
return recordId; return recordId;
} }
@ -96,6 +95,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
// 如果校验结果为true,则说明需要进行分类以及三元组操作 // 如果校验结果为true,则说明需要进行分类以及三元组操作
if (taskStatus) { if (taskStatus) {
// 对笔录进行分类,并对笔录进行提取三元组 // 对笔录进行分类,并对笔录进行提取三元组
List<ModelRecordType> allTypeList = modelRecordTypeService.lambdaQuery().list(); List<ModelRecordType> allTypeList = modelRecordTypeService.lambdaQuery().list();
recordSplitProcessService.process(allTypeList, allNoteRecordSplits); recordSplitProcessService.process(allTypeList, allNoteRecordSplits);
} }
@ -117,7 +117,7 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
if (caseTaskRecordOpt.isEmpty()) { if (caseTaskRecordOpt.isEmpty()) {
log.info("recordProcessTaskStatusCheck:recordId:{}未查询到任务记录, 新建任务记录...",recordId); log.info("recordProcessTaskStatusCheck:recordId:{}未查询到任务记录, 新建任务记录...", recordId);
CaseTaskRecord newCaseTaskRecord = new CaseTaskRecord(); CaseTaskRecord newCaseTaskRecord = new CaseTaskRecord();
newCaseTaskRecord.setCaseId(caseId); newCaseTaskRecord.setCaseId(caseId);
newCaseTaskRecord.setRecordId(recordId); newCaseTaskRecord.setRecordId(recordId);
@ -330,14 +330,14 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
public List<NoteRecordSplit> batchSaveRecordSplit(NoteRecord record, String fileId) { public List<NoteRecordSplit> batchSaveRecordSplit(NoteRecord record, String fileId) {
String context = WordReadUtil.readWordInMinio(minioService, fileId); String context = WordReadUtil.readWordInMinio(minioService, fileId);
if (StrUtil.isEmpty(context)){ if (StrUtil.isEmpty(context)) {
log.info("文件id:{}内容为空,不进行解析...", fileId); log.info("文件id:{}内容为空,不进行解析...", fileId);
return null; return null;
} }
MinioFile minioFile = minioService.getMinioFile(fileId); MinioFile minioFile = minioService.getMinioFile(fileId);
List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, record.getName()); List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, record.getName());
log.info("文件:{}拆分问答对:{}",minioFile.getFilename(), qaList.size()); log.info("文件:{}拆分问答对:{}", minioFile.getFilename(), qaList.size());
List<NoteRecordSplit> splitList = new ArrayList<>(); List<NoteRecordSplit> splitList = new ArrayList<>();
for (QARecordNodeDTO qa : qaList) { for (QARecordNodeDTO qa : qaList) {
@ -386,19 +386,56 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
return IPages.buildDataMap(pager, noteRecordDetailDTOList.size()); return IPages.buildDataMap(pager, noteRecordDetailDTOList.size());
} }
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public String redoExtract(NoteRecordReqVO records) throws IOException {
// 删除旧数据
// 删除问答对数据
noteRecordSplitService.remove(new QueryWrapper<NoteRecordSplit>().eq("note_record_id", records.getId()));
// 删除任务数据
caseTaskRecordService.remove(new QueryWrapper<CaseTaskRecord>().eq("record_id", records.getId()));
// 删除neo4j的节点
List<TripleInfo> list = tripleInfoService.lambdaQuery().eq(TripleInfo::getRecordId, records.getId()).list();
list.forEach(item -> {
// 如果已经入库,就删除已经入库的图
if (StrUtil.equals("1", item.getAddNeo4j())) {
// 删除尾节点(不删除头节点),如果删除尾节点,关系会被自动删除
try {
if (ObjectUtil.isNotEmpty(item.getRelGraphId())) {
// 先移除关系
neo4jService.deleteRel(item.getRelGraphId());
}
if (ObjectUtil.isNotEmpty(item.getEndNodeGraphId())) {
// 再移除尾节点
neo4jService.delNode(item.getEndNodeGraphId());
}
if (ObjectUtil.isNotEmpty(item.getStartNodeGraphId())) {
// 尝试删除头节点(只有头节点不存在任何关系的时候才进行删除)
neo4jService.deleteNoRelationNode(item.getStartNodeGraphId());
}
} catch (Exception e) {
log.error("删除关系失败:{}", item.getRelation(), e);
}
}
});
// 删除三元组数据
tripleInfoService.remove(new QueryWrapper<TripleInfo>().eq("record_id", records.getId()));
return uploadRecords(records);
}
private void setRecordDetailSerialNumber(List<NoteRecordDetailDTO> noteRecordDetailDTOList) { private void setRecordDetailSerialNumber(List<NoteRecordDetailDTO> noteRecordDetailDTOList) {
List<Pair<String, Integer>> pairs = new ArrayList<>(); List<Pair<String, Integer>> pairs = new ArrayList<>();
for (NoteRecordDetailDTO noteRecordDetailDTO : noteRecordDetailDTOList) { for (NoteRecordDetailDTO noteRecordDetailDTO : noteRecordDetailDTOList) {
String personId = noteRecordDetailDTO.getPersonId(); String personId = noteRecordDetailDTO.getPersonId();
int index = findPair(pairs, personId); int index = findPair(pairs, personId);
if (index == -1){ if (index == -1) {
pairs.add(Pair.of(personId, 1)); pairs.add(Pair.of(personId, 1));
index = findPair(pairs, personId); index = findPair(pairs, personId);
}else { } else {
pairs.set(index, Pair.of(personId, pairs.get(index).getValue() + 1)); pairs.set(index, Pair.of(personId, pairs.get(index).getValue() + 1));
} }
noteRecordDetailDTO.setSerialNumber(index+1 + "." + pairs.get(index).getValue()); noteRecordDetailDTO.setSerialNumber(index + 1 + "." + pairs.get(index).getValue());
} }
} }
@ -414,5 +451,4 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
} }
} }

Loading…
Cancel
Save