From 3c69aa939684d614ce080b90bd30144a761a5ddf Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Wed, 21 May 2025 14:17:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B1=E4=BA=8E=E5=89=8D=E7=AB=AF=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E8=B6=85=E6=97=B6=EF=BC=8C=E5=8E=86=E5=8F=B2=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E7=94=A8=E6=95=B0=E6=8D=AE=E5=BA=93=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../peanut/common/utils/RagFlowApiUtil.java | 67 +++++++++---------- .../controller/RagFlowApiController.java | 28 +++++++- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java b/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java index e9e34943..d6ce206c 100644 --- a/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java +++ b/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java @@ -16,6 +16,7 @@ import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Flux; import java.util.ArrayList; @@ -64,44 +65,35 @@ public class RagFlowApiUtil { //聊天助手下对话列表 public List> getChats(Map params) throws Exception{ CloseableHttpClient httpClient = HttpClients.createDefault(); - String id = params.get("chatId").toString(); - List chatIds = new ArrayList<>(); - if (StringUtils.isEmpty(id)){ - List> assistants = getChatAssistants(""); - for (Map map:assistants) { - chatIds.add(map.get("id").toString()); - } - }else { - chatIds.add(id); - } + String chatId = params.get("chatId").toString(); List> list = new ArrayList(); - for (String chatId : chatIds){ - String page = params.get("page").toString(); - String pageSize = params.get("pageSize").toString(); - String sessionId = params.get("sessionId").toString(); - HttpGet get = new HttpGet(url+"/api/v1/chats/"+chatId+"/sessions?" + - "page="+page+"&page_size="+pageSize+"&id="+sessionId+"&user_id="+ShiroUtils.getUId()); - get.setHeader("Authorization", authorization); - get.setHeader("Content-Type", "application/json;chartset=utf-8"); - CloseableHttpResponse response = httpClient.execute(get); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode >= 400) { - throw new RuntimeException("API调用失败,状态码:" + statusCode); - } - HttpEntity responseEntity = response.getEntity(); - String responseString = EntityUtils.toString(responseEntity, Consts.UTF_8); - JSONObject jsonObject = JSONObject.parseObject(responseString); - if ("0".equals(jsonObject.get("code").toString())){ - List l = jsonObject.getJSONArray("data"); - for (Object o : l) { - Map map = new HashMap<>(); - Map m = (Map)o; - map.put("id",m.get("id")); - map.put("name",m.get("name")); - map.put("messages",m.get("messages")); - list.add(map); - } - } + String page = params.get("page").toString(); + String pageSize = params.get("pageSize").toString(); + String sessionId = params.get("sessionId").toString(); + HttpGet get = new HttpGet(url+"/api/v1/chats/"+chatId+"/sessions?" + + "page="+page+"&page_size="+pageSize+"&id="+sessionId+"&user_id="+ShiroUtils.getUId()); + get.setHeader("Authorization", authorization); + get.setHeader("Content-Type", "application/json;chartset=utf-8"); + CloseableHttpResponse response = httpClient.execute(get); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode >= 400) { + throw new RuntimeException("API调用失败,状态码:" + statusCode); + } + HttpEntity responseEntity = response.getEntity(); + String responseString = EntityUtils.toString(responseEntity, Consts.UTF_8); + JSONObject jsonObject = JSONObject.parseObject(responseString); + if ("0".equals(jsonObject.get("code").toString())){ + List l = jsonObject.getJSONArray("data"); + list.addAll(l); +// for (Object o : l) { +// Map map = new HashMap<>(); +// Map m = (Map)o; +// map.put("chatId",chatId); +// map.put("id",m.get("id")); +// map.put("name",m.get("name")); +// map.put("messages",m.get("messages")); +// list.add(map); +// } } return list; } @@ -202,6 +194,7 @@ public class RagFlowApiUtil { }); }catch (Exception e){ e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return null; } diff --git a/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java b/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java index 37ec7734..dfd5eb4a 100644 --- a/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java +++ b/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java @@ -1,16 +1,25 @@ package com.peanut.modules.common.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.peanut.common.utils.R; import com.peanut.common.utils.RagFlowApiUtil; +import com.peanut.common.utils.ShiroUtils; +import com.peanut.modules.common.entity.AiChatContent; +import com.peanut.modules.common.service.AiChatContentService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; @Slf4j @RestController("commonRagFlowApi") @@ -19,6 +28,8 @@ public class RagFlowApiController { @Autowired private RagFlowApiUtil ragFlowApiUtil; + @Autowired + private AiChatContentService aiChatContentService; //聊天助手列表 @RequestMapping("/getChatAssistants") @@ -47,7 +58,21 @@ public class RagFlowApiController { //聊天助手下对话列表 @RequestMapping("/getChats") public R getChats(@RequestBody Map params) throws Exception{ - return R.ok().put("list",ragFlowApiUtil.getChats(params)); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AiChatContent::getUserId, ShiroUtils.getUId()); + if (StringUtils.isNotEmpty(params.get("chatId").toString())|| + StringUtils.isNotEmpty(params.get("sessionId").toString())){ + wrapper.eq(StringUtils.isNotEmpty(params.get("chatId").toString()), + AiChatContent::getChatAssistantId,params.get("chatId")); + wrapper.eq(StringUtils.isNotEmpty(params.get("sessionId").toString()), + AiChatContent::getChatId,params.get("sessionId")); + wrapper.orderByAsc(AiChatContent::getCreateTime); + }else { + wrapper.groupBy(AiChatContent::getChatId); + wrapper.orderByDesc(AiChatContent::getCreateTime); + } + List contents = aiChatContentService.list(wrapper); + return R.ok().put("list",contents); } //创建会话 @@ -58,6 +83,7 @@ public class RagFlowApiController { //与助手聊天流式 @RequestMapping(value = "/chatToAssistantStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + @Transactional public Flux chatToAssistantStream(String chatId,String chatName,String sessionId,String sessionName,String question,String patientName){ return ragFlowApiUtil.chatToAssistantStream(chatId,chatName,sessionId,sessionName,question,patientName); }