Junjie
22 小时以前 42ce1f4b6f9df984d14e29f9d9ff188de7f3c6d7
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);