diff --git a/src/main/java/com/supervision/police/service/NoteRecordService.java b/src/main/java/com/supervision/police/service/NoteRecordService.java index 9f5d272..08ea553 100644 --- a/src/main/java/com/supervision/police/service/NoteRecordService.java +++ b/src/main/java/com/supervision/police/service/NoteRecordService.java @@ -11,4 +11,7 @@ public interface NoteRecordService extends IService<NoteRecord> { List<NoteRecordDTO> selectNoteRecordDTOList(NoteRecord noteRecord); void uploadFileToLangChainChat(String caseId); + + + String saveOrUpdRecord(NoteRecord noteRecord); } diff --git a/src/main/java/com/supervision/police/service/NoteRecordSplitService.java b/src/main/java/com/supervision/police/service/NoteRecordSplitService.java index 5596c4e..0b60226 100644 --- a/src/main/java/com/supervision/police/service/NoteRecordSplitService.java +++ b/src/main/java/com/supervision/police/service/NoteRecordSplitService.java @@ -1,6 +1,7 @@ package com.supervision.police.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.demo.dto.QARecordNodeDTO; import com.supervision.police.domain.NoteRecord; import com.supervision.police.domain.NoteRecordSplit; import com.supervision.police.vo.NoteRecordReqVO; @@ -16,4 +17,6 @@ public interface NoteRecordSplitService extends IService<NoteRecordSplit> { void delRecords(String id); + NoteRecordSplit saveRecordSplit(NoteRecord record, String fileName, String question, String answer); + } diff --git a/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java b/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java index 15242c6..8ad4441 100644 --- a/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java @@ -102,4 +102,9 @@ public class NoteRecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRec } } + + @Override + public String saveOrUpdRecord(NoteRecord noteRecord) { + return null; + } } diff --git a/src/main/java/com/supervision/police/service/impl/NoteRecordSplitServiceImpl.java b/src/main/java/com/supervision/police/service/impl/NoteRecordSplitServiceImpl.java index f51c474..25f0de1 100644 --- a/src/main/java/com/supervision/police/service/impl/NoteRecordSplitServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/NoteRecordSplitServiceImpl.java @@ -2,6 +2,7 @@ package com.supervision.police.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -83,64 +84,52 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe @Override @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public String uploadRecords(NoteRecordReqVO records) throws IOException { - int i; + ModelCase modelCase = modelCaseService.getById(records.getCaseId()); - if (StringUtils.isEmpty(modelCase.getCaseNo())) { - throw new BusinessException("案件编号不能为空"); - } + Assert.notEmpty(modelCase.getCaseNo(), "案件编号不能为空"); + NoteRecord record = records.toNoteRecord(); - if (StringUtils.isEmpty(records.getId())) { - i = noteRecordService.getBaseMapper().insert(record); - } else { - i = noteRecordService.getBaseMapper().updateById(record); + String recordId = noteRecordService.saveOrUpdRecord(record); + + if (CollUtil.isEmpty(records.getFileIdList())){ + log.info("uploadRecords:文件内容为空...不进行笔录分析操作..."); + return recordId; } //所有对话类型 + extracted(records.getFileIdList(), record); + caseStatusManageService.whenUploadRecord(record.getCaseId()); + return record.getId(); + } + + private void extracted(List<String> recordIds, NoteRecord record) { + // 拆分笔录 List<ModelRecordType> allTypeList = modelRecordTypeService.lambdaQuery().list(); - if (i > 0 && CollUtil.isNotEmpty(records.getFileIdList())) { - // 拆分笔录 - for (String fileId : records.getFileIdList()) { - MinioFile minioFile = minioService.getMinioFile(fileId); - InputStream inputStream = null; - try { - inputStream = minioService.getObjectInputStream(minioFile); - } catch (Exception e) { - e.printStackTrace(); - log.error("从minio中获取文件失败:{}", e.getMessage()); - continue; - } - String context = WordReadUtil.readWord(inputStream); - List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, record.getName()); - log.info("拆分问答对:{}", qaList.size()); - List<NoteRecordSplit> splitList = new ArrayList<>(); - for (QARecordNodeDTO qa : qaList) { - try { - NoteRecordSplit noteRecord = new NoteRecordSplit(); - noteRecord.setCaseId(record.getCaseId()); - noteRecord.setNoteRecordId(record.getId()); - noteRecord.setNoteName(minioFile.getFilename()); - noteRecord.setPersonName(record.getName()); - noteRecord.setQuestion(qa.getQuestion()); - noteRecord.setAnswer(qa.getAnswer()); - noteRecord.setCreateTime(LocalDateTime.now()); - this.save(noteRecord); - splitList.add(noteRecord); - - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - // 创建任务之后,再开始 - boolean taskStatus = saveRecordProcessTask(record.getCaseId(), record.getId(), qaList.size()); - // 如果校验结果为true,则说明需要进行分类以及三元组操作 - if (taskStatus) { - // 对笔录进行分类,并对笔录进行提取三元组 - recordSplitProcessService.process(allTypeList, splitList); - } + for (String fileId : recordIds) { + + String context = WordReadUtil.readWordInMinio(minioService, fileId); + if (StrUtil.isEmpty(context)){ + log.info("文件id:{}内容为空,不进行解析...", fileId); + continue; + } + + MinioFile minioFile = minioService.getMinioFile(fileId); + List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, minioFile.getFilename()); + log.info("拆分问答对:{}", qaList.size()); + + List<NoteRecordSplit> splitList = new ArrayList<>(); + for (QARecordNodeDTO qa : qaList) { + splitList.add( + saveRecordSplit(record, record.getName(), qa.getQuestion(), qa.getAnswer()) + ); + } + + // 创建任务之后,再开始 + boolean taskStatus = saveRecordProcessTask(record.getCaseId(), record.getId(), qaList.size()); + // 如果校验结果为true,则说明需要进行分类以及三元组操作 + if (taskStatus) { + // 对笔录进行分类,并对笔录进行提取三元组 + recordSplitProcessService.process(allTypeList, splitList); } - caseStatusManageService.whenUploadRecord(record.getCaseId()); - return "保存成功"; - } else { - return "保存笔录失败"; } } @@ -333,4 +322,19 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe modelAtomicResultService.lambdaUpdate().eq(ModelAtomicResult::getRecordId, id).remove(); } + @Override + public NoteRecordSplit saveRecordSplit(NoteRecord record, String fileName, String question, String answer) { + NoteRecordSplit noteRecord = new NoteRecordSplit(); + noteRecord.setCaseId(record.getCaseId()); + noteRecord.setNoteRecordId(record.getId()); + noteRecord.setNoteName(fileName); + noteRecord.setPersonName(record.getName()); + noteRecord.setQuestion(question); + noteRecord.setAnswer(answer); + noteRecord.setCreateTime(LocalDateTime.now()); + + this.save(noteRecord); + return noteRecord; + } + } diff --git a/src/main/java/com/supervision/utils/WordReadUtil.java b/src/main/java/com/supervision/utils/WordReadUtil.java index 04f446c..ede7468 100644 --- a/src/main/java/com/supervision/utils/WordReadUtil.java +++ b/src/main/java/com/supervision/utils/WordReadUtil.java @@ -1,5 +1,7 @@ package com.supervision.utils; +import com.supervision.minio.domain.MinioFile; +import com.supervision.minio.service.MinioService; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; @@ -71,4 +73,14 @@ public class WordReadUtil { return stringBuilder.toString(); } + public static String readWordInMinio(MinioService minioService, String fileId) { + + try (InputStream inputStream = minioService.getObjectInputStream(fileId)){ + return readWord(inputStream); + } catch (Exception e) { + log.error("从minio中获取文件失败", e); + return null; + } + } + }