diff --git a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java index b95b1ea..ab7d153 100644 --- a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java +++ b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java @@ -186,7 +186,7 @@ public class CaseEvidenceController { return R.ok(directoryName); } - @Operation(summary = "查询证据详情-结果以树的方式展示") + @Operation(summary = "迁移证据信息") @GetMapping("/fresh") public R<String> generateDirectoryName() { caseEvidenceService.refreshCaseEvidence(); diff --git a/src/main/java/com/supervision/police/domain/ModelCase.java b/src/main/java/com/supervision/police/domain/ModelCase.java index 39da9d2..88b4818 100644 --- a/src/main/java/com/supervision/police/domain/ModelCase.java +++ b/src/main/java/com/supervision/police/domain/ModelCase.java @@ -26,6 +26,8 @@ public class ModelCase implements Serializable { */ @TableId private String id; + + private String knowledgeBaseId; /** * 案件名称 diff --git a/src/main/java/com/supervision/police/service/ModelCaseService.java b/src/main/java/com/supervision/police/service/ModelCaseService.java index b1bc4d2..13ff506 100644 --- a/src/main/java/com/supervision/police/service/ModelCaseService.java +++ b/src/main/java/com/supervision/police/service/ModelCaseService.java @@ -49,5 +49,14 @@ public interface ModelCaseService extends IService<ModelCase> { IPage<IndexDetail> getIndexDetail(IndexResultQuery query, Integer page, Integer size); + + void initCaseKnowledgeBase(String caseId); + + + /** + * 迁移知识库 + */ + void migrateRecordKnowledgeBase(); + } diff --git a/src/main/java/com/supervision/police/service/NoteRecordService.java b/src/main/java/com/supervision/police/service/NoteRecordService.java index 08ea553..4832899 100644 --- a/src/main/java/com/supervision/police/service/NoteRecordService.java +++ b/src/main/java/com/supervision/police/service/NoteRecordService.java @@ -13,5 +13,8 @@ public interface NoteRecordService extends IService<NoteRecord> { void uploadFileToLangChainChat(String caseId); + void uploadRecordFileToDifyKnowledgeBase(String caseId); + + String saveOrUpdRecord(NoteRecord noteRecord); } diff --git a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java index bb85ece..c14c8e1 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java @@ -3,6 +3,8 @@ package com.supervision.police.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.TimeInterval; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; @@ -14,8 +16,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.chat.client.LangChainChatService; -import com.supervision.chat.client.dto.CreateBaseDTO; -import com.supervision.chat.client.dto.LangChainChatRes; import com.supervision.common.domain.R; import com.supervision.common.enums.ResultStatusEnum; import com.supervision.common.exception.CustomException; @@ -28,6 +28,7 @@ import com.supervision.police.dto.*; import com.supervision.police.mapper.ModelCaseMapper; import com.supervision.police.service.*; import com.supervision.police.vo.ModelCaseVO; +import com.supervision.utils.DifyApiUtil; import com.supervision.utils.IndexRuleUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -76,6 +77,8 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase private final EvidenceDirectoryService directoryService; + private final DifyApiUtil difyApiUtil; + /** * 查询列表 * @@ -166,6 +169,12 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase Long count = super.lambdaQuery().eq(ModelCase::getCaseNo, modelCase.getCaseNo()).count(); Assert.isTrue(count == 0, "案件编号已存在,请更换案件编号!"); + // 这里需要调用知识库的接口,去保存知识库 + String databaseId = difyApiUtil.createDataset(modelCase.getCaseName(), modelCase.getCaseDetail()); + if (StrUtil.isEmpty(databaseId)) { + throw new BusinessException("保存知识库失败"); + } + modelCase.setKnowledgeBaseId(databaseId); Long num = modelCaseMapper.selectCount(null); modelCase.setIndexNum(Integer.parseInt(num.toString()) + 1); i = modelCaseMapper.insert(modelCase); @@ -173,15 +182,6 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase // 保存案件行为人 casePersonService.saveCaseActor(modelCase.getId(), modelCaseBase.getCaseActorName(), modelCaseBase.getCaseActorIdCard()); caseEvidenceService.initCaseEvidenceDirectory(modelCase.getId(), modelCase.getCaseType()); - - // 这里需要调用知识库的接口,去保存知识库 - CreateBaseDTO createBaseDTO = new CreateBaseDTO(); - createBaseDTO.setKnowledge_base_name(modelCase.getCaseNo()); - LangChainChatRes chat = langChainChatService.createBase(createBaseDTO); - log.info("创建知识库:{}", chat); - if (200 != chat.getCode()) { - throw new BusinessException("保存知识库失败"); - } } if (i > 0) { return R.okMsg("保存成功"); @@ -208,13 +208,9 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase public R<?> realDeleteByIds(List<String> ids) { List<ModelCase> modelCases = modelCaseMapper.selectBatchIds(ids); if (modelCases != null && !modelCases.isEmpty()) { - modelCases.forEach(modelCase -> { - LangChainChatRes<Object> langChainChatRes = langChainChatService.deleteBase(modelCase.getCaseNo()); - if (200 != langChainChatRes.getCode()) { - log.error("删除知识库失败:{}, caseNo:{}", langChainChatRes.getMsg(), modelCase.getCaseNo()); -// throw new BusinessException("删除知识库失败"); - } - }); + modelCases.stream() + .filter(modelCase -> StrUtil.isNotEmpty(modelCase.getKnowledgeBaseId())) + .forEach(modelCase -> difyApiUtil.deleteDataset(modelCase.getKnowledgeBaseId())); } noteRecordService.list(new QueryWrapper<NoteRecord>().in("case_id", ids)).forEach(noteRecord -> noteRecordSplitService.delRecords(noteRecord.getId())); List<String> personIds = casePersonService.list(new QueryWrapper<CasePerson>().in("case_id", ids)).stream().map(CasePerson::getId).collect(Collectors.toList()); @@ -362,7 +358,7 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase } private Map<String, Object> errorMapBuilder(ModelCase modelCase, String errorText) { - return new HashMap<String, Object>(2) {{ + return new HashMap<>(2) {{ put("caseNo", modelCase.getCaseNo()); put("caseName", modelCase.getCaseName()); put("errorText", errorText); @@ -384,6 +380,56 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase return iPage; } + @Override + public void initCaseKnowledgeBase(String caseId) { + ModelCase modelCase = this.getById(caseId); + if (StrUtil.isEmpty(modelCase.getKnowledgeBaseId())){ + log.info("案件:{} 尚未创建知识库,即将创建知识库库...",modelCase.getCaseName()); + String knowledgeBaseId = difyApiUtil.createDataset( + StrUtil.join("_", modelCase.getCaseName(), modelCase.getCaseNo()), modelCase.getCaseDetail()); + if (StrUtil.isEmpty(knowledgeBaseId)){ + log.error("案件:{} 创建支持库失败...",modelCase.getCaseName()); + return; + } + modelCase.setKnowledgeBaseId(knowledgeBaseId); + modelCaseMapper.updateById(modelCase); + log.info("案件:{} 创建支持库成功,知识库id为:{}",modelCase.getCaseName(),modelCase.getKnowledgeBaseId()); + }else { + log.info("案件:{} 已创建知识库,不进行创建...",modelCase.getCaseName()); + } + + log.info("案件:{} 开始上传笔录到支持库...",modelCase.getCaseName()); + noteRecordService.uploadRecordFileToDifyKnowledgeBase(caseId); + log.info("案件:{} 上传笔录到支持库成功...",modelCase.getCaseName()); + + } + + @Override + public void migrateRecordKnowledgeBase() { + // 获取所有案件 + int success = 0; + int fail = 0; + // 只 同步 已经分析的案件 + List<ModelCase> allModelCase = this.lambdaQuery().isNotNull(ModelCase::getCaseAnalysisSuccessTime).list(); + log.info("===========>>>>>案件总数:{},开始迁移笔录到支持库...<<<<<===========",allModelCase.size()); + TimeInterval timer = DateUtil.timer(); + timer.start(); + for (ModelCase modelCase : allModelCase) { + try { + log.info("开始迁移案件:{} 笔录到支持库,当前总体进度:{}...",modelCase.getCaseName(),NumberUtil.formatPercent((success + fail)/(allModelCase.size()*1.0), 2)); + timer.start(modelCase.getId()); + initCaseKnowledgeBase(modelCase.getId()); + log.info("案件:{} 迁移笔录到支持库成功,耗时:{}秒...",modelCase.getCaseName(),timer.intervalSecond(modelCase.getId())); + success++; + } catch (Exception e) { + log.error("案件:{} 迁移笔录到支持库失败..",modelCase.getCaseName(),e); + fail++; + } + } + + log.info("===========>>>>>迁移笔录到支持库完成,成功个数:{},失败个数:{},总耗时:{}秒...<<<<<===========",success,allModelCase.size()-success,timer.intervalSecond()); + } + /** * 添加 指标结果附属内容 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 bb4b51d..07e987c 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -171,7 +171,7 @@ public class ModelServiceImpl implements ModelService { calculateFinalScore(analyseCaseDTO, modelCase, atomicResultMap); caseStatusManageService.whenAnalyseCaseSuccess(analyseCaseDTO.getCaseId(), modelCase.getTotalScore()); // 计算完成之后,把所有的笔录上传到模型 - noteRecordService.uploadFileToLangChainChat(analyseCaseDTO.getCaseId()); + noteRecordService.uploadRecordFileToDifyKnowledgeBase(analyseCaseDTO.getCaseId()); return R.ok(); } @@ -323,7 +323,7 @@ public class ModelServiceImpl implements ModelService { modelCase.setTotalScore(max); log.info("更新案件得分情况。最终得分:{}分(共性+入罪/共性+出罪 取最大值)。入罪:{}分。出罪:{}分。共性:{}分。", max, rz, cz, gx); caseStatusManageService.whenAnalyseCaseSuccess(analyseCaseDTO.getCaseId(), modelCase.getTotalScore()); - noteRecordService.uploadFileToLangChainChat(analyseCaseDTO.getCaseId()); + noteRecordService.uploadRecordFileToDifyKnowledgeBase(analyseCaseDTO.getCaseId()); return R.ok(); } 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 54f3720..40cd137 100644 --- a/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java @@ -1,6 +1,7 @@ package com.supervision.police.service.impl; -import cn.hutool.json.JSONUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.chat.UploadParamEnum; import com.supervision.chat.client.CustomMultipartFile; @@ -8,7 +9,6 @@ import com.supervision.chat.client.LangChainChatService; import com.supervision.chat.client.dto.DeleteFileDTO; import com.supervision.chat.client.dto.LangChainChatRes; import com.supervision.common.utils.StringUtils; -import com.supervision.config.BusinessException; import com.supervision.minio.domain.MinioFile; import com.supervision.minio.service.MinioService; import com.supervision.police.domain.ModelCase; @@ -17,14 +17,15 @@ import com.supervision.police.dto.NoteRecordDTO; import com.supervision.police.mapper.NoteRecordMapper; import com.supervision.police.service.ModelCaseService; import com.supervision.police.service.NoteRecordService; +import com.supervision.utils.DifyApiUtil; +import com.supervision.utils.Document; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.InputStream; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service @@ -38,6 +39,8 @@ public class NoteRecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRec private final MinioService minioService; + private final DifyApiUtil difyApiUtil; + @Override public List<NoteRecordDTO> selectNoteRecordDTOList(NoteRecord noteRecord) { return super.getBaseMapper().selectNoteRecordDTOList(noteRecord); @@ -103,6 +106,64 @@ public class NoteRecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRec } + @Override + public void uploadRecordFileToDifyKnowledgeBase(String caseId) { + + ModelCase modelCase = modelCaseService.getById(caseId); + if (null == modelCase || StrUtil.isEmpty(modelCase.getKnowledgeBaseId())){ + log.warn("uploadRecordFileToKnowledgeBase:案件:{}案件或者知识库为空,不进行知识库维护!", caseId); + return; + } + + List<Document> documents = difyApiUtil.queryDocuments(modelCase.getKnowledgeBaseId()); + Set<String> documentFileIds = documents.stream().map(Document::getFileId).collect(Collectors.toSet()); + + List<NoteRecord> recordList = this.lambdaQuery().eq(NoteRecord::getCaseId, caseId).list(); + + // 只上传 doc docx、txt、md、pdf 文件,且文件大小不能超过15mb + List<String> allFileIds = recordList.stream().map(NoteRecord::getFileIds).filter(StrUtil::isNotEmpty) + .flatMap(s -> StrUtil.split(s, ",").stream()).collect(Collectors.toList()); + + List<MinioFile> minioFiles = minioService.listMinioFile(allFileIds); + List<String> recordFileIds = minioFiles.stream().filter(minioFile -> { + boolean currentFileSize = minioFile.getSize() < 15 * 1024 * 1024; + if (!currentFileSize) { + log.warn("文件大小超过15mb,不进行知识库维护:{}", minioFile.getFilename()); + return false; + } + boolean currentFileType = StrUtil.equalsAny(minioFile.getFileType(), "doc", "docx", "txt", "md", "pdf"); + if (!currentFileType) { + log.warn("文件:{}类型非doc、docx、txt、md、pdf,不进行知识库维护...", minioFile.getFilename()); + return false; + } + return true; + }).map(MinioFile::getId).toList(); + + Map<String, MinioFile> fileMap = minioFiles.stream().collect(Collectors.toMap(MinioFile::getId, target -> target)); + + log.info("案件:{},共有:{}个笔录文件,符合上传要求的文件有:{}",modelCase.getCaseName(), allFileIds.size(), recordFileIds.size()); + for (String recordId : recordFileIds) { + // 把新增的笔录数据添加到到知识库 + if (!documentFileIds.contains(recordId)){ + log.info("案件:{},笔录文件:{},添加到知识库...",modelCase.getCaseName(), fileMap.get(recordId).getFilename()); + difyApiUtil.createDocumentByFile(modelCase.getKnowledgeBaseId(),recordId); + } + } + + + if (CollUtil.isNotEmpty(recordFileIds)){ + for (Document document : documents) { + String fileId = document.getFileId(); + if (StrUtil.isNotEmpty(fileId) && !recordFileIds.contains(fileId)){ + // 删除不在笔录文件列表中的知识库 + log.info("案件:{},笔录文件:{},从知识库中删除...",modelCase.getCaseName(), document.getName()); + difyApiUtil.deleteDocument(modelCase.getKnowledgeBaseId(),document.getId()); + } + } + } + log.info("案件:{}上传笔录文件到知识库完成!",modelCase.getCaseName()); + } + @Override public String saveOrUpdRecord(NoteRecord noteRecord) { diff --git a/src/main/java/com/supervision/utils/DifyApiUtil.java b/src/main/java/com/supervision/utils/DifyApiUtil.java index 0152909..eb5232e 100644 --- a/src/main/java/com/supervision/utils/DifyApiUtil.java +++ b/src/main/java/com/supervision/utils/DifyApiUtil.java @@ -1,5 +1,9 @@ package com.supervision.utils; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Pair; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -14,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.hc.client5.http.ClientProtocolException; import org.apache.hc.client5.http.classic.methods.HttpDelete; import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.client5.http.entity.mime.HttpMultipartMode; import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; @@ -24,6 +29,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + import static com.supervision.common.constant.DifyConstants.*; @Component @@ -87,7 +96,7 @@ public class DifyApiUtil { datasetReqVO.setName(name); datasetReqVO.setDescription(description); log.info("创建知识库【{}】", datasetReqVO.getName()); - StringEntity entity = new StringEntity(new JSONObject(datasetReqVO).toString(), ContentType.APPLICATION_FORM_URLENCODED); + StringEntity entity = new StringEntity(new JSONObject(datasetReqVO).toString(), ContentType.APPLICATION_JSON); httpPost.setEntity(entity); id = httpClient.execute(httpPost, response -> { final int status = response.getCode(); @@ -155,11 +164,14 @@ public class DifyApiUtil { log.error("文件不存在!ID:{}", fileId); return null; } + String fileName = generateDocumentName(minioFile.getFilename(), fileId); HttpEntity entity = MultipartEntityBuilder.create() + .setCharset(StandardCharsets.UTF_8) + .setMode(HttpMultipartMode.LEGACY) // JSON 部分 .addTextBody("data", "{\"indexing_technique\":\"high_quality\",\"process_rule\":{\"mode\":\"automatic\"}}", ContentType.APPLICATION_JSON) // 文件部分 - .addBinaryBody("file", minioService.getObjectInputStream(minioFile), ContentType.DEFAULT_BINARY, minioFile.getFilename()) + .addBinaryBody("file", minioService.getObjectInputStream(minioFile), ContentType.DEFAULT_BINARY, fileName) .build(); httpPost.setEntity(entity); @@ -212,4 +224,87 @@ public class DifyApiUtil { log.error("删除知识库文档失败!", e); } } + + public DocumentResult queryDocuments(String datasetId, int page, int size){ + cn.hutool.http.HttpRequest request = HttpUtil.createGet(difyUrl+ METHOD_DATASET + "/" + datasetId + METHOD_DOCUMENTS); + request.auth(difyDatasetAuth).form("page",page,"limit",size); + + try (cn.hutool.http.HttpResponse execute = request.execute()){ + String body = execute.body(); + if (200 != execute.getStatus()){ + log.error("queryDocuments:请求知识库文件列表接口出错error:{}",body); + throw new RuntimeException("queryDocuments:请求知识库文件列表接口出错error:"+body); + } + DocumentResult documentResult = new Gson().fromJson(body, DocumentResult.class); + if (CollUtil.isNotEmpty(documentResult.getData())){ + documentResult.getData().forEach(document -> document.setFileId(decodeDocumentName(document.getName()).getValue())); + } + return documentResult; + } + } + + + public List<Document> queryDocuments(String datasetId){ + + DocumentResult documentResult = queryDocuments(datasetId, 1, 100); + List<Document> documents = new ArrayList<>(documentResult.getData()); + while (documentResult.isHas_more()){ + documentResult = queryDocuments(datasetId, documentResult.getPage()+1, 100); + documents.addAll(documentResult.getData()); + } + + return documents; + } + + + /** + * 生成文档名称 + * @param fileName 文件名 + * @param fileId 文件id + * @return 一个完整的文档名: 文件名 + "_" + 文件ID +"." + 后缀 + */ + public String generateDocumentName(String fileName, String fileId) { + + String[] split = fileName.split("\\."); + List<String> nameTrunk = new ArrayList<>(); + for (int i = 0; i < split.length-1; i++) { + nameTrunk.add(split[i]); + } + String documentName = StrUtil.join(".", nameTrunk) + "_" + fileId; + if (split.length > 1) { + documentName = documentName + "." + split[split.length -1]; + } + return documentName; + } + + + /** + * 解码文档名称 + * @param documentName 文档名 + * @return key:文件名,value:文件id + */ + public Pair<String,String> decodeDocumentName(String documentName){ + + if (StrUtil.isEmpty(documentName)){ + return Pair.of(null,null); + } + String[] firstSplit = documentName.split("\\."); + List<String> nameTrunk = new ArrayList<>(); + for (int i = 0; i < firstSplit.length -1; i++) { + nameTrunk.add(firstSplit[i]); + } + String name = StrUtil.join(".", nameTrunk); + + String[] secondSplit = name.split("_"); + + nameTrunk = new ArrayList<>(); + for (int i = 0; i < secondSplit.length -1; i++) { + nameTrunk.add(secondSplit[i]); + } + + String completeName = StrUtil.join("_", nameTrunk) + "." + firstSplit[firstSplit.length-1]; + String fileId = secondSplit[secondSplit.length-1]; + + return Pair.of(completeName,fileId); + } } diff --git a/src/main/java/com/supervision/utils/Document.java b/src/main/java/com/supervision/utils/Document.java new file mode 100644 index 0000000..ab81852 --- /dev/null +++ b/src/main/java/com/supervision/utils/Document.java @@ -0,0 +1,13 @@ +package com.supervision.utils; + +import lombok.Data; + +@Data +public class Document { + + private String id; + + private String name; + + private String fileId; +} diff --git a/src/main/java/com/supervision/utils/DocumentResult.java b/src/main/java/com/supervision/utils/DocumentResult.java new file mode 100644 index 0000000..453fc8a --- /dev/null +++ b/src/main/java/com/supervision/utils/DocumentResult.java @@ -0,0 +1,19 @@ +package com.supervision.utils; + +import lombok.Data; +import java.util.List; + +@Data +public class DocumentResult { + + private List<Document> data; + + private boolean has_more; + + private int limit; + + private int total; + + private int page; + +} diff --git a/src/test/java/com/supervision/demo/DifyTest.java b/src/test/java/com/supervision/demo/DifyTest.java index 8b60bcd..e59ad77 100644 --- a/src/test/java/com/supervision/demo/DifyTest.java +++ b/src/test/java/com/supervision/demo/DifyTest.java @@ -2,10 +2,12 @@ package com.supervision.demo; import com.supervision.police.vo.dify.ChatReqVO; import com.supervision.utils.DifyApiUtil; +import com.supervision.utils.Document; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.util.List; import java.util.Map; @SpringBootTest @@ -42,4 +44,11 @@ public class DifyTest { chatReqVO.setInputs(Map.of("dataset_id", "13c60b8c-341f-43ea-b3cc-5289a518abd9")); difyApiUtil.chat(chatReqVO); } + + @Test + public void testQueryDocuments() { + List<Document> documents = difyApiUtil.queryDocuments("d6c3e9fa-05a3-4d10-b482-d2797d7eee25"); + + System.out.println(documents.size()); + } } diff --git a/src/test/java/com/supervision/demo/FuHsiApplicationTests.java b/src/test/java/com/supervision/demo/FuHsiApplicationTests.java index c82d124..1a05115 100644 --- a/src/test/java/com/supervision/demo/FuHsiApplicationTests.java +++ b/src/test/java/com/supervision/demo/FuHsiApplicationTests.java @@ -15,12 +15,10 @@ import com.supervision.demo.controller.ExampleChatController; import com.supervision.police.domain.ModelRecordType; import com.supervision.police.domain.NotePrompt; import com.supervision.police.domain.NoteRecordSplit; -import com.supervision.police.dto.EvidenceDirectoryDTO; import com.supervision.police.dto.NotePromptExtractAttributesDto; import com.supervision.police.dto.RetrieveReqDTO; import com.supervision.police.dto.RetrieveResDTO; import com.supervision.police.service.*; -import com.supervision.police.vo.GraphDebugReqVO; import com.supervision.thread.RecordSplitClassifyTask; import lombok.AllArgsConstructor; import lombok.Data; @@ -417,12 +415,16 @@ public class FuHsiApplicationTests { @Autowired ModelIndexService modelIndexService; + @Autowired + ModelCaseService modelCaseService; + @Test + public void initCaseKnowledgeBaseTest(){ + modelCaseService.initCaseKnowledgeBase("1823935118734643202"); + } + @Test - public void aaa(){ - GraphDebugReqVO graphDebugReqVO = new GraphDebugReqVO(); - graphDebugReqVO.setQueryLang("MATCH (m:`行为人`), (n:`他人`) where m.name=$lawActor and m.caseId = n.caseId =$caseId and m.picType = n.picType = '1' OPTIONAL MATCH (m)-[r:`签订先行合同`]->(n) RETURN id(m) as startId, id(n) as endId, id(r) as relId, m.recordId as recordId, n.recordSplitId as recordSplitId"); - graphDebugReqVO.setCaseId("1835994976247951362"); - modelIndexService.graphDebug(graphDebugReqVO); + public void migrateRecordKnowledgeBaseTest(){ + modelCaseService.migrateRecordKnowledgeBase(); } }