From 63b01db83d9aad8a15276b4236a9a22e4aeef065 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 05 五月 2026 12:30:59 +0800
Subject: [PATCH] # Agent数据分析V3.0.1.7

---
 src/main/java/com/zy/system/controller/DashboardController.java |   30 ++++++++++++++++++++++++++----
 1 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/zy/system/controller/DashboardController.java b/src/main/java/com/zy/system/controller/DashboardController.java
index de5cdc9..974bfce 100644
--- a/src/main/java/com/zy/system/controller/DashboardController.java
+++ b/src/main/java/com/zy/system/controller/DashboardController.java
@@ -3,10 +3,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.core.annotations.ManagerAuth;
 import com.core.common.R;
+import com.zy.ai.entity.AiAutoTuneJob;
 import com.zy.ai.entity.AiChatSession;
+import com.zy.ai.entity.AiTokenUsage;
 import com.zy.ai.entity.LlmCallLog;
 import com.zy.ai.entity.LlmRouteConfig;
+import com.zy.ai.enums.AiPromptScene;
 import com.zy.ai.mapper.AiChatSessionMapper;
+import com.zy.ai.mapper.AiTokenUsageMapper;
+import com.zy.ai.service.AiAutoTuneJobService;
 import com.zy.ai.service.LlmCallLogService;
 import com.zy.ai.service.LlmRouteConfigService;
 import com.zy.asrs.entity.*;
@@ -59,7 +64,11 @@
     @Autowired
     private LlmCallLogService llmCallLogService;
     @Autowired
+    private AiAutoTuneJobService aiAutoTuneJobService;
+    @Autowired
     private AiChatSessionMapper aiChatSessionMapper;
+    @Autowired
+    private AiTokenUsageMapper aiTokenUsageMapper;
     @Autowired
     private DevicePingFileStorageService devicePingFileStorageService;
 
@@ -322,20 +331,32 @@
     private Map<String, Object> buildAiStats() {
         Map<String, Object> result = new LinkedHashMap<>();
 
+        // 浠庣嫭绔嬬疮璁¤〃璇诲彇 token 缁熻
         long tokenTotal = 0L;
         long promptTokenTotal = 0L;
         long completionTokenTotal = 0L;
+        long llmCallCountTotal = 0L;
+        try {
+            AiTokenUsage tokenUsage = aiTokenUsageMapper.selectById(1);
+            if (tokenUsage != null) {
+                promptTokenTotal = safeCount(tokenUsage.getPromptTokens());
+                completionTokenTotal = safeCount(tokenUsage.getCompletionTokens());
+                tokenTotal = safeCount(tokenUsage.getTotalTokens());
+                llmCallCountTotal = safeCount(tokenUsage.getLlmCallCount());
+            }
+        } catch (Exception e) {
+            log.warn("dashboard ai token usage load failed: {}", safeMessage(e));
+        }
+
+        // 浼氳瘽缁熻锛堜繚鐣欑敤浜庢樉绀轰細璇濇暟鍜屾彁闂疆娆★級
         long askCount = 0L;
         long sessionCount = 0L;
         try {
             List<AiChatSession> sessions = aiChatSessionMapper.selectList(new QueryWrapper<AiChatSession>()
-                    .select("id", "sum_prompt_tokens", "sum_completion_tokens", "sum_total_tokens", "ask_count"));
+                    .select("id", "ask_count"));
             sessionCount = sessions == null ? 0L : sessions.size();
             if (sessions != null) {
                 for (AiChatSession session : sessions) {
-                    promptTokenTotal += safeCount(session == null ? null : session.getSumPromptTokens());
-                    completionTokenTotal += safeCount(session == null ? null : session.getSumCompletionTokens());
-                    tokenTotal += safeCount(session == null ? null : session.getSumTotalTokens());
                     askCount += safeCount(session == null ? null : session.getAskCount());
                 }
             }
@@ -415,6 +436,7 @@
         overview.put("tokenTotal", tokenTotal);
         overview.put("promptTokenTotal", promptTokenTotal);
         overview.put("completionTokenTotal", completionTokenTotal);
+        overview.put("llmCallCountTotal", llmCallCountTotal);
         overview.put("askCount", askCount);
         overview.put("sessionCount", sessionCount);
         overview.put("routeTotal", routeTotal);

--
Gitblit v1.9.1