From 64505fed045981daec9eecd1af05a4e411917617 Mon Sep 17 00:00:00 2001 From: firefly <1633489380@qq.com> Date: Tue, 5 Aug 2025 09:05:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96APP=E7=9A=84=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=82=B9=E8=B5=9E=E5=92=8C=E5=8F=8D=E9=A6=88=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/web/api/DifyChatController.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/api/DifyChatController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/api/DifyChatController.java index 6254717..8af5e36 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/api/DifyChatController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/api/DifyChatController.java @@ -13,6 +13,7 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.io.BufferedReader; import java.io.IOException; import java.time.Duration; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -60,6 +61,7 @@ public class DifyChatController extends BaseController { * 配置了5分钟的读取超时时间,用于与Dify API进行通信 */ private final OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(Duration.ofSeconds(30)) // 添加连接超时时间 .readTimeout(Duration.ofMinutes(5)) .build(); @@ -340,6 +342,96 @@ public class DifyChatController extends BaseController { } } + /** + * 获取APP的消息点赞和反馈列表 + *

+ * 该接口用于获取应用的终端用户反馈、点赞列表 + *

+ * + * @param page 页码,默认值:1 + * @param limit 每页数量,默认值:20 + * @return 包含点赞、反馈列表的统一响应结果 + */ + @GetMapping("/app/feedbacks") + public AjaxResult getAppFeedbacks( + @RequestParam(value = "page", defaultValue = "1") String page, + @RequestParam(value = "limit", defaultValue = "20") String limit) { + + try { + // 构建请求URL + String url = "https://api.dify.ai/v1/app/feedbacks?page=" + page + "&limit=" + limit; + + // 构建请求 + Request request = new Request.Builder() + .url(url) + .addHeader("Authorization", "Bearer " + DIFY_API_KEY) + .addHeader("Content-Type", "application/json") + .get() + .build(); + + // 发送请求 + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful()) { + String responseBody = response.body().string(); + JsonNode rootNode = mapper.readTree(responseBody); + + // 解析数据 + JsonNode dataNode = rootNode.get("data"); + List> feedbackList = new ArrayList<>(); + + if (dataNode != null && dataNode.isArray()) { + for (JsonNode feedbackNode : dataNode) { + Map feedbackItem = new HashMap<>(); + + // 提取反馈信息 + feedbackItem.put("id", feedbackNode.has("id") ? feedbackNode.get("id").asText() : null); + feedbackItem.put("message_id", feedbackNode.has("message_id") ? feedbackNode.get("message_id").asText() : null); + feedbackItem.put("rating", feedbackNode.has("rating") ? feedbackNode.get("rating").asText() : null); + feedbackItem.put("content", feedbackNode.has("content") ? feedbackNode.get("content").asText() : null); + feedbackItem.put("created_at", feedbackNode.has("created_at") ? feedbackNode.get("created_at").asLong() : null); + feedbackItem.put("app_id", feedbackNode.has("app_id") ? feedbackNode.get("app_id").asText() : null); + feedbackItem.put("conversation_id", feedbackNode.has("conversation_id") ? feedbackNode.get("conversation_id").asText() : null); + + // 提取用户信息 + if (feedbackNode.has("from_end_user")) { + JsonNode userNode = feedbackNode.get("from_end_user"); + Map userMap = new HashMap<>(); + userMap.put("id", userNode.has("id") ? userNode.get("id").asText() : null); + userMap.put("name", userNode.has("name") ? userNode.get("name").asText() : null); + userMap.put("email", userNode.has("email") ? userNode.get("email").asText() : null); + feedbackItem.put("from_end_user", userMap); + } + + feedbackList.add(feedbackItem); + } + } + + // 构建返回结果 + Map result = new HashMap<>(); + result.put("data", feedbackList); + result.put("page", rootNode.has("page") ? rootNode.get("page").asInt() : Integer.parseInt(page)); + result.put("limit", rootNode.has("limit") ? rootNode.get("limit").asInt() : Integer.parseInt(limit)); + result.put("has_more", rootNode.has("has_more") ? rootNode.get("has_more").asBoolean() : false); + + return AjaxResult.success(result); + } else { + String errorMsg = "获取反馈列表失败: " + response.code(); + try (ResponseBody errorBody = response.body()) { + if (errorBody != null) { + errorMsg += " - " + errorBody.string(); + } + } catch (IOException e) { + errorMsg += " (无法读取错误详情)"; + } + return AjaxResult.error(errorMsg); + } + } + } catch (Exception e) { + return AjaxResult.error("获取反馈列表时发生异常: " + e.getMessage()); + } + } + + /** * 获取会话历史消息的端点 *