diff --git a/srs-admin/src/main/java/com/srs/web/controller/aitutor/AiChatController.java b/srs-admin/src/main/java/com/srs/web/controller/aitutor/AiChatController.java index ad10d6c..a8b10a6 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/aitutor/AiChatController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/aitutor/AiChatController.java @@ -352,11 +352,11 @@ public class AiChatController extends BaseController { /** * 获取APP的消息点赞和反馈列表 *

- * 该接口用于获取应用的终端用户反馈、点赞列表 + * 该接口用于获取整个Dify应用的终端用户反馈、点赞列表,类似Dify的日志界面 *

* * @param page 页码,默认值:1 - * @param limit 每页数量,默认值:20 + * @param limit 每页数量,默认值:20,最大100 * @return 包含点赞、反馈列表的统一响应结果 */ @GetMapping("/app/feedbacks") @@ -365,9 +365,12 @@ public class AiChatController extends BaseController { @RequestParam(value = "limit", defaultValue = "20") String limit) { try { + // 参数校验和限制 + int limitValue = Math.min(Math.max(Integer.parseInt(limit), 1), 100); + // 构建请求URL - String url = "http://47.112.118.149:8100/v1/app/feedbacks?page=" + page + "&limit=" + limit; - //String url = "http://localhost:8080/v1/app/feedbacks?page=" + page + "&limit=" + limit; + String url = "http://47.112.118.149:8100/v1/app/feedbacks?page=" + page + "&limit=" + limitValue; + // 构建请求 Request request = new Request.Builder() .url(url) @@ -408,26 +411,43 @@ public class AiChatController extends BaseController { userMap.put("email", userNode.has("email") ? userNode.get("email").asText() : null); feedbackItem.put("from_end_user", userMap); } + + // 提取消息内容 + if (feedbackNode.has("message")) { + JsonNode messageNode = feedbackNode.get("message"); + Map messageMap = new HashMap<>(); + messageMap.put("id", messageNode.has("id") ? messageNode.get("id").asText() : null); + messageMap.put("query", messageNode.has("query") ? messageNode.get("query").asText() : null); + messageMap.put("answer", messageNode.has("answer") ? messageNode.get("answer").asText() : null); + messageMap.put("created_at", messageNode.has("created_at") ? messageNode.get("created_at").asLong() : null); + feedbackItem.put("message", messageMap); + } + 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); + // 直接返回数组形式的数据 + return AjaxResult.success(feedbackList); } else { - String errorMsg = "获取反馈列表失败: " + response.code(); + String errorMsg = "获取反馈列表失败: " + response.code() + " " + response.message(); try (ResponseBody errorBody = response.body()) { if (errorBody != null) { - errorMsg += " - " + errorBody.string(); + String errorBodyString = errorBody.string(); + errorMsg += " - 响应体: " + errorBodyString; + + // 尝试解析响应体中的错误信息 + try { + JsonNode errorNode = mapper.readTree(errorBodyString); + if (errorNode.has("message")) { + errorMsg += " - 错误详情: " + errorNode.get("message").asText(); + } + } catch (Exception e) { + // 如果无法解析为JSON,就保持原始响应体 + } } } catch (IOException e) { - errorMsg += " (无法读取错误详情)"; + errorMsg += " (无法读取错误详情): " + e.getMessage(); } return AjaxResult.error(errorMsg); }