From 3ec4963db1ddf8c0212752e8c2d25597b28f394b Mon Sep 17 00:00:00 2001 From: xueqingkun <xueqingkun@126.com> Date: Wed, 27 Nov 2024 14:39:30 +0800 Subject: [PATCH 1/3] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E6=A1=88=E4=BB=B6?= =?UTF-8?q?=E8=AF=81=E6=8D=AE=E6=96=87=E4=BB=B6=E5=88=B0=E7=9F=A5=E8=AF=86?= =?UTF-8?q?=E5=BA=93=E6=96=87=E5=BA=93=202.=20=E6=B7=BB=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../police/mapper/ConversationMapper.java | 4 ++ .../police/service/ChatService.java | 8 +++ .../police/service/ConversationService.java | 5 ++ .../police/service/ModelCaseService.java | 3 + .../police/service/NoteRecordService.java | 4 -- .../police/service/impl/ChatServiceImpl.java | 19 ++++++ .../service/impl/ConversationServiceImpl.java | 7 +++ .../service/impl/ModelCaseServiceImpl.java | 18 +++++- .../police/service/impl/ModelServiceImpl.java | 11 +++- .../service/impl/NoteRecordServiceImpl.java | 58 ----------------- .../com/supervision/police/vo/ChatResVO.java | 26 ++++++++ .../police/vo/ConversationResVo.java | 33 ++++++++++ .../com/supervision/utils/DifyApiUtil.java | 62 +++++++++++++++++-- .../resources/mapper/ConversationMapper.xml | 11 ++++ 14 files changed, 198 insertions(+), 71 deletions(-) create mode 100644 src/main/java/com/supervision/police/vo/ConversationResVo.java diff --git a/src/main/java/com/supervision/police/mapper/ConversationMapper.java b/src/main/java/com/supervision/police/mapper/ConversationMapper.java index d5b751b..074e2d9 100644 --- a/src/main/java/com/supervision/police/mapper/ConversationMapper.java +++ b/src/main/java/com/supervision/police/mapper/ConversationMapper.java @@ -1,7 +1,10 @@ package com.supervision.police.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.police.domain.Conversation; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.supervision.police.vo.ConversationResVo; /** * @author yaxin @@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface ConversationMapper extends BaseMapper<Conversation> { + IPage<ConversationResVo> queryUserConversationList(String userId, Page<ConversationResVo> page); } diff --git a/src/main/java/com/supervision/police/service/ChatService.java b/src/main/java/com/supervision/police/service/ChatService.java index ef3bd1d..a596d0f 100644 --- a/src/main/java/com/supervision/police/service/ChatService.java +++ b/src/main/java/com/supervision/police/service/ChatService.java @@ -1,9 +1,17 @@ package com.supervision.police.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.police.vo.ChatReqVO; import com.supervision.police.vo.ChatResVO; +import com.supervision.police.vo.ConversationResVo; public interface ChatService { ChatResVO chat(ChatReqVO chatReqVO); ChatResVO chatNew(ChatReqVO chatReqVO); + + + IPage<ChatResVO> queryConversationInfoList(String conversationId, int page, int size); + + + IPage<ConversationResVo> queryUserConversationList(String userId, int page, int size); } diff --git a/src/main/java/com/supervision/police/service/ConversationService.java b/src/main/java/com/supervision/police/service/ConversationService.java index 0227ff4..73cdade 100644 --- a/src/main/java/com/supervision/police/service/ConversationService.java +++ b/src/main/java/com/supervision/police/service/ConversationService.java @@ -1,7 +1,10 @@ package com.supervision.police.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.police.domain.Conversation; import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.police.vo.ConversationResVo; /** * @author yaxin @@ -10,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ConversationService extends IService<Conversation> { + IPage<ConversationResVo> queryUserConversationList(String userId, Page<ConversationResVo> objectPage); + } diff --git a/src/main/java/com/supervision/police/service/ModelCaseService.java b/src/main/java/com/supervision/police/service/ModelCaseService.java index 13ff506..1109945 100644 --- a/src/main/java/com/supervision/police/service/ModelCaseService.java +++ b/src/main/java/com/supervision/police/service/ModelCaseService.java @@ -58,5 +58,8 @@ public interface ModelCaseService extends IService<ModelCase> { */ void migrateRecordKnowledgeBase(); + + List<String> listCaseFileIds(String caseId); + } diff --git a/src/main/java/com/supervision/police/service/NoteRecordService.java b/src/main/java/com/supervision/police/service/NoteRecordService.java index 4832899..4580e14 100644 --- a/src/main/java/com/supervision/police/service/NoteRecordService.java +++ b/src/main/java/com/supervision/police/service/NoteRecordService.java @@ -12,9 +12,5 @@ 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/ChatServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java index b5e32e5..1f7cde8 100644 --- a/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.chat.client.LangChainChatService; import com.supervision.chat.client.dto.chat.ChatReqDTO; import com.supervision.chat.client.dto.chat.ChatResDTO; @@ -17,6 +18,7 @@ import com.supervision.police.dto.caseScore.CaseScoreDetailDTO; import com.supervision.police.service.*; import com.supervision.police.vo.ChatReqVO; import com.supervision.police.vo.ChatResVO; +import com.supervision.police.vo.ConversationResVo; import com.supervision.police.vo.dify.DifyChatReqVO; import com.supervision.utils.DifyApiUtil; import lombok.RequiredArgsConstructor; @@ -170,6 +172,23 @@ public class ChatServiceImpl implements ChatService { return chatResVO; } + @Override + public IPage<ChatResVO> queryConversationInfoList(String conversationId, int page, int size) { + Assert.notEmpty(conversationId, "会话id不能为空"); + + IPage<ConversationQa> qaPage = conversationQaService.lambdaQuery().eq(ConversationQa::getConversationId, conversationId) + .orderBy(true, true, ConversationQa::getQuestionTime).page(Page.of(page, size)); + + return qaPage.convert(ChatResVO::new); + } + + @Override + public IPage<ConversationResVo> queryUserConversationList(String userId, int page, int size) { + Assert.notEmpty(userId, "用户id不能为空"); + + return conversationService.queryUserConversationList(userId, new Page<>(page,size)); + } + /** * 处理指标结果问答 * diff --git a/src/main/java/com/supervision/police/service/impl/ConversationServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ConversationServiceImpl.java index 7378482..4e3fbdc 100644 --- a/src/main/java/com/supervision/police/service/impl/ConversationServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ConversationServiceImpl.java @@ -1,9 +1,12 @@ package com.supervision.police.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.police.domain.Conversation; import com.supervision.police.service.ConversationService; import com.supervision.police.mapper.ConversationMapper; +import com.supervision.police.vo.ConversationResVo; import org.springframework.stereotype.Service; /** @@ -15,6 +18,10 @@ import org.springframework.stereotype.Service; public class ConversationServiceImpl extends ServiceImpl<ConversationMapper, Conversation> implements ConversationService{ + @Override + public IPage<ConversationResVo> queryUserConversationList(String userId, Page<ConversationResVo> page) { + return super.getBaseMapper().queryUserConversationList(userId, page); + } } 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 0c2d186..d02c92f 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java @@ -403,7 +403,7 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase return; } log.info("案件:{} 开始上传笔录到支持库...",modelCase.getCaseName()); - noteRecordService.uploadRecordFileToDifyKnowledgeBase(caseId); + difyApiUtil.uploadCaseFileToDifyKnowledgeBase(modelCase,this.listCaseFileIds(caseId)); log.info("案件:{} 上传笔录到支持库成功...",modelCase.getCaseName()); } @@ -433,6 +433,22 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase log.info("===========>>>>>迁移笔录到支持库完成,成功个数:{},失败个数:{},总耗时:{}秒...<<<<<===========",success,allModelCase.size()-success,timer.intervalSecond()); } + @Override + public List<String> listCaseFileIds(String caseId) { + + List<NoteRecord> noteRecordList = noteRecordService.lambdaQuery().eq(NoteRecord::getCaseId, caseId).list(); + List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS = caseEvidenceService.queryEvidenceList(caseId); + + + List<String> recordFileIds = noteRecordList.stream().map(NoteRecord::getFileIds) + .filter(StrUtil::isNotEmpty).flatMap(fileId -> StrUtil.split(fileId, ",").stream()).collect(Collectors.toList()); + List<String> evidenceFileIds = caseEvidenceDetailDTOS.stream().map(CaseEvidenceDetailDTO::getFileList) + .filter(list -> !CollUtil.isEmpty(list)).flatMap(Collection::stream).map(EvidenceFileDTO::getFileId).toList(); + + recordFileIds.addAll(evidenceFileIds); + return recordFileIds.stream().distinct().toList(); + } + /** * 添加 指标结果附属内容 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 07e987c..b25ed30 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -27,7 +27,7 @@ import com.supervision.police.mapper.*; import com.supervision.police.mybatis.RowSqlMapper; import com.supervision.police.service.*; import com.supervision.utils.CalculationUtil; -import com.supervision.utils.IndexRuleUtil; +import com.supervision.utils.DifyApiUtil; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -96,6 +96,11 @@ public class ModelServiceImpl implements ModelService { private final CaseEvidencePropertyService caseEvidencePropertyService; + private final DifyApiUtil difyApiUtil; + + @Autowired + private ModelCaseService modelCaseService; + @Override @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public R<?> analyseCase(AnalyseCaseDTO analyseCaseDTO) { @@ -171,7 +176,7 @@ public class ModelServiceImpl implements ModelService { calculateFinalScore(analyseCaseDTO, modelCase, atomicResultMap); caseStatusManageService.whenAnalyseCaseSuccess(analyseCaseDTO.getCaseId(), modelCase.getTotalScore()); // 计算完成之后,把所有的笔录上传到模型 - noteRecordService.uploadRecordFileToDifyKnowledgeBase(analyseCaseDTO.getCaseId()); + difyApiUtil.uploadCaseFileToDifyKnowledgeBase(modelCase, modelCaseService.listCaseFileIds(analyseCaseDTO.getCaseId())); return R.ok(); } @@ -323,7 +328,7 @@ public class ModelServiceImpl implements ModelService { modelCase.setTotalScore(max); log.info("更新案件得分情况。最终得分:{}分(共性+入罪/共性+出罪 取最大值)。入罪:{}分。出罪:{}分。共性:{}分。", max, rz, cz, gx); caseStatusManageService.whenAnalyseCaseSuccess(analyseCaseDTO.getCaseId(), modelCase.getTotalScore()); - noteRecordService.uploadRecordFileToDifyKnowledgeBase(analyseCaseDTO.getCaseId()); + difyApiUtil.uploadCaseFileToDifyKnowledgeBase(modelCase, modelCaseService.listCaseFileIds(caseId)); 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 40cd137..7e8f610 100644 --- a/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/NoteRecordServiceImpl.java @@ -106,64 +106,6 @@ 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/police/vo/ChatResVO.java b/src/main/java/com/supervision/police/vo/ChatResVO.java index 607a467..ac50f59 100644 --- a/src/main/java/com/supervision/police/vo/ChatResVO.java +++ b/src/main/java/com/supervision/police/vo/ChatResVO.java @@ -1,8 +1,10 @@ package com.supervision.police.vo; import com.supervision.chat.client.dto.chat.ChatResDTO; +import com.supervision.police.domain.ConversationQa; import lombok.Data; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; @@ -10,6 +12,18 @@ import java.util.Objects; @Data public class ChatResVO { + /** + * 问答id + */ + private String id; + + /** + * 问题 + */ + private String question; + + private Date questionTime; + private String answer; private Map<String, Object> answwerMap; private String type; @@ -26,4 +40,16 @@ public class ChatResVO { this.answer = chatResDTO.getAnswer(); this.docs = chatResDTO.getDocs(); } + + public ChatResVO(ConversationQa conversationQa) { + if (null == conversationQa){ + return; + } + this.setId(conversationQa.getId()); + this.setQuestion(conversationQa.getQuestion()); + this.setAnswer(conversationQa.getAnswer()); + this.setType(conversationQa.getType()); + this.setQuestionTime(conversationQa.getQuestionTime()); + this.setIntentType(conversationQa.getIntentType()); + } } diff --git a/src/main/java/com/supervision/police/vo/ConversationResVo.java b/src/main/java/com/supervision/police/vo/ConversationResVo.java new file mode 100644 index 0000000..3fabd31 --- /dev/null +++ b/src/main/java/com/supervision/police/vo/ConversationResVo.java @@ -0,0 +1,33 @@ +package com.supervision.police.vo; + +import lombok.Data; + +@Data +public class ConversationResVo { + + /** + * 会话id + */ + private String conversationId; + + /** + * 案件id + */ + private String caseId; + + /** + * 案件名称 + */ + private String caseName; + + /** + * 案件行为人 + */ + private String caseActor; + + /** + * 案件行为人id + */ + private String caseActorId; + +} diff --git a/src/main/java/com/supervision/utils/DifyApiUtil.java b/src/main/java/com/supervision/utils/DifyApiUtil.java index e6d8640..7fa58e5 100644 --- a/src/main/java/com/supervision/utils/DifyApiUtil.java +++ b/src/main/java/com/supervision/utils/DifyApiUtil.java @@ -10,6 +10,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.supervision.minio.domain.MinioFile; import com.supervision.minio.service.MinioService; +import com.supervision.police.domain.ModelCase; import com.supervision.police.vo.dify.DatasetReqVO; import com.supervision.police.vo.dify.DatasetResVO; import com.supervision.police.vo.dify.DifyChatReqVO; @@ -30,9 +31,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; import static com.supervision.common.constant.DifyConstants.*; @@ -257,6 +257,58 @@ public class DifyApiUtil { return documents; } + public void uploadCaseFileToDifyKnowledgeBase(ModelCase modelCase,List<String> allFileIds) { + + if (StrUtil.isEmpty(modelCase.getKnowledgeBaseId())){ + log.warn("uploadRecordFileToKnowledgeBase:案件:{}案件或者知识库为空,不进行知识库维护!", modelCase.getCaseName()); + return; + } + + List<Document> documents = this.queryDocuments(modelCase.getKnowledgeBaseId()); + Set<String> documentFileIds = documents.stream().map(Document::getFileId).collect(Collectors.toSet()); + + + // 只上传 doc docx、txt、md、pdf 文件,且文件大小不能超过15mb + 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()); + this.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()); + this.deleteDocument(modelCase.getKnowledgeBaseId(),document.getId()); + } + } + } + log.info("案件:{}上传笔录文件到知识库完成!",modelCase.getCaseName()); + } + /** * 生成文档名称 @@ -265,7 +317,7 @@ public class DifyApiUtil { * @param fileId 文件id * @return 一个完整的文档名: 文件名 + "_" + 文件ID +"." + 后缀 */ - public String generateDocumentName(String fileName, String fileId) { + private String generateDocumentName(String fileName, String fileId) { String[] split = fileName.split("\\."); List<String> nameTrunk = new ArrayList<>(Arrays.asList(split).subList(0, split.length - 1)); @@ -283,7 +335,7 @@ public class DifyApiUtil { * @param documentName 文档名 * @return key:文件名,value:文件id */ - public Pair<String, String> decodeDocumentName(String documentName) { + private Pair<String, String> decodeDocumentName(String documentName) { if (StrUtil.isEmpty(documentName)) { return Pair.of(null, null); diff --git a/src/main/resources/mapper/ConversationMapper.xml b/src/main/resources/mapper/ConversationMapper.xml index 0a1fc4d..75d53ec 100644 --- a/src/main/resources/mapper/ConversationMapper.xml +++ b/src/main/resources/mapper/ConversationMapper.xml @@ -19,4 +19,15 @@ case_id,user_id,create_time, update_time </sql> + <select id="queryUserConversationList" resultType="com.supervision.police.vo.ConversationResVo"> + select c.id as conversationId, + mc.case_name as caseName, + mc.id as caseId, + cp.id as caseActorId, + cp.name as caseActor + from conversation c + left join model_case mc on c.case_id = mc.id + left join case_person cp on (c.case_id = cp.case_id and cp.case_actor_flag = 1 and cp.role_code = '1') + where c.user_id = #{userId} order by c.create_time desc + </select> </mapper> From 120129d55df1173d0043d316ebde71fcfa1e03dc Mon Sep 17 00:00:00 2001 From: xueqingkun <xueqingkun@126.com> Date: Wed, 27 Nov 2024 14:41:11 +0800 Subject: [PATCH 2/3] 1. merger --- src/main/java/com/supervision/police/vo/ChatResVO.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/supervision/police/vo/ChatResVO.java b/src/main/java/com/supervision/police/vo/ChatResVO.java index f90d944..d3812b7 100644 --- a/src/main/java/com/supervision/police/vo/ChatResVO.java +++ b/src/main/java/com/supervision/police/vo/ChatResVO.java @@ -1,13 +1,11 @@ package com.supervision.police.vo; import com.supervision.chat.client.dto.chat.ChatResDTO; +import com.supervision.police.domain.ConversationQa; import com.supervision.police.vo.dify.KnowledgeBaseSegmentVO; import lombok.Data; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; @Data public class ChatResVO { From 2389e70ee2acce0f66fc8e54ed8f80a526fa0a1d Mon Sep 17 00:00:00 2001 From: xueqingkun <xueqingkun@126.com> Date: Wed, 27 Nov 2024 17:30:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../police/controller/ChatController.java | 41 +++++++++++++++++-- .../police/service/ChatService.java | 5 +++ .../police/service/impl/ChatServiceImpl.java | 15 +++++++ .../com/supervision/police/vo/ChatResVO.java | 5 +++ 4 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/supervision/police/controller/ChatController.java b/src/main/java/com/supervision/police/controller/ChatController.java index e40b054..4fa95fa 100644 --- a/src/main/java/com/supervision/police/controller/ChatController.java +++ b/src/main/java/com/supervision/police/controller/ChatController.java @@ -1,16 +1,19 @@ package com.supervision.police.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.common.domain.R; import com.supervision.police.service.ChatService; import com.supervision.police.vo.ChatReqVO; import com.supervision.police.vo.ChatResVO; +import com.supervision.police.vo.ConversationResVo; +import com.supervision.utils.UserUtil; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @Slf4j @RestController @@ -27,4 +30,34 @@ public class ChatController { return R.ok(chatResVO); } + /** + * 查询用户会话列表 + * @param pageNum + * @param pageSize + * @return + */ + @GetMapping("/conversation/list") + public R<IPage<ConversationResVo>> queryUserConversationList(@RequestParam(defaultValue = "1") @Parameter(name = "pageNum",description = "页码") Integer pageNum, + @RequestParam(defaultValue = "10") @Parameter(name = "pageSize",description = "每页数量") Integer pageSize){ + + IPage<ConversationResVo> conversationResVoIPage = chatService.queryUserConversationList(UserUtil.getUser().getId(),pageNum, pageSize); + + return R.ok(conversationResVoIPage); + } + + @GetMapping("/conversation/infoList") + public R<IPage<ChatResVO>> queryConversationInfoList(@RequestParam String conversationId, + @RequestParam(defaultValue = "1") @Parameter(name = "pageNum",description = "页码") Integer pageNum, + @RequestParam(defaultValue = "10") @Parameter(name = "pageSize",description = "每页数量") Integer pageSize){ + + IPage<ChatResVO> chatResVOIPage = chatService.queryConversationInfoList(conversationId, pageNum, pageSize); + + return R.ok(chatResVOIPage); + } + + @PostMapping("/conversation/delete") + public R<Boolean> deleteConversation(@RequestBody List<String> conversationIdList) { + chatService.deleteConversation(conversationIdList); + return R.ok(true); + } } diff --git a/src/main/java/com/supervision/police/service/ChatService.java b/src/main/java/com/supervision/police/service/ChatService.java index a596d0f..158dc9c 100644 --- a/src/main/java/com/supervision/police/service/ChatService.java +++ b/src/main/java/com/supervision/police/service/ChatService.java @@ -5,6 +5,8 @@ import com.supervision.police.vo.ChatReqVO; import com.supervision.police.vo.ChatResVO; import com.supervision.police.vo.ConversationResVo; +import java.util.List; + public interface ChatService { ChatResVO chat(ChatReqVO chatReqVO); ChatResVO chatNew(ChatReqVO chatReqVO); @@ -14,4 +16,7 @@ public interface ChatService { IPage<ConversationResVo> queryUserConversationList(String userId, int page, int size); + + + void deleteConversation(List<String> conversationIdList); } diff --git a/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java index 462118a..eaaadad 100644 --- a/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java @@ -1,5 +1,6 @@ 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 com.alibaba.fastjson.JSON; @@ -201,6 +202,20 @@ public class ChatServiceImpl implements ChatService { return conversationService.queryUserConversationList(userId, new Page<>(page,size)); } + @Override + @Transactional(rollbackFor = Exception.class, transactionManager = "dataSourceTransactionManager") + public void deleteConversation(List<String> conversationIdList) { + if (CollUtil.isEmpty(conversationIdList)){ + return; + } + for (String conversationId : conversationIdList) { + boolean success = conversationService.removeById(conversationId); + if (success){ + conversationQaService.lambdaUpdate().eq(ConversationQa::getConversationId, conversationId).remove(); + } + } + } + /** * 处理指标结果问答 * diff --git a/src/main/java/com/supervision/police/vo/ChatResVO.java b/src/main/java/com/supervision/police/vo/ChatResVO.java index d3812b7..f33728f 100644 --- a/src/main/java/com/supervision/police/vo/ChatResVO.java +++ b/src/main/java/com/supervision/police/vo/ChatResVO.java @@ -1,5 +1,7 @@ package com.supervision.police.vo; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.supervision.chat.client.dto.chat.ChatResDTO; import com.supervision.police.domain.ConversationQa; import com.supervision.police.vo.dify.KnowledgeBaseSegmentVO; @@ -47,6 +49,9 @@ public class ChatResVO { this.setId(conversationQa.getId()); this.setQuestion(conversationQa.getQuestion()); this.setAnswer(conversationQa.getAnswer()); + if (StrUtil.isNotEmpty(conversationQa.getAnswer())){ + this.answwerMap = JSONUtil.toBean(conversationQa.getAnswer(), Map.class); + } this.setType(conversationQa.getType()); this.setQuestionTime(conversationQa.getQuestionTime()); this.setIntentType(conversationQa.getIntentType());