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);
}