From 51877df13075ad10ef51107f15bcd21f1661febe Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 17 三月 2026 09:48:01 +0800
Subject: [PATCH] #AI

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiTaskSummaryService.java |   85 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 71 insertions(+), 14 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiTaskSummaryService.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiTaskSummaryService.java
similarity index 72%
rename from rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiTaskSummaryService.java
rename to rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiTaskSummaryService.java
index 73029a5..4c2f2ca 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiTaskSummaryService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiTaskSummaryService.java
@@ -1,6 +1,7 @@
-package com.vincent.rsf.server.ai.service;
+package com.vincent.rsf.server.ai.service.provider;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.server.ai.model.AiDiagnosticToolResult;
 import com.vincent.rsf.server.ai.model.AiPromptContext;
 import com.vincent.rsf.server.manager.entity.Task;
 import com.vincent.rsf.server.manager.enums.TaskStsType;
@@ -12,27 +13,62 @@
 import java.util.*;
 
 @Service
-public class AiTaskSummaryService implements AiPromptContextProvider {
+public class AiTaskSummaryService implements AiDiagnosticDataProvider {
+
+    private static final String TOOL_CODE = "task_summary";
+    private static final String TOOL_NAME = "浠诲姟鎽樿";
 
     @Resource
     private TaskMapper taskMapper;
 
+    /**
+     * 杩斿洖浠诲姟宸ュ叿榛樿椤哄簭銆�
+     */
     @Override
-    public boolean supports(AiPromptContext context) {
-        if (context == null || context.getQuestion() == null) {
-            return false;
-        }
-        String normalized = context.getQuestion().toLowerCase(Locale.ROOT);
-        return normalized.contains("task")
-                || normalized.contains("浠诲姟")
-                || normalized.contains("鍑哄簱浠诲姟")
-                || normalized.contains("鍏ュ簱浠诲姟")
-                || normalized.contains("绉诲簱浠诲姟")
-                || normalized.contains("澶囪揣浠诲姟");
+    public int getOrder() {
+        return 20;
     }
 
+    /**
+     * 杩斿洖浠诲姟宸ュ叿缂栫爜銆�
+     */
     @Override
-    public String buildContext(AiPromptContext context) {
+    public String getToolCode() {
+        return TOOL_CODE;
+    }
+
+    /**
+     * 杩斿洖浠诲姟宸ュ叿灞曠ず鍚嶃��
+     */
+    @Override
+    public String getToolName() {
+        return TOOL_NAME;
+    }
+
+    /**
+     * 杩斿洖浠诲姟宸ュ叿榛樿璇存槑銆�
+     */
+    @Override
+    public String getDefaultToolPrompt() {
+        return "缁撳悎浠诲姟鎽樿璇嗗埆绉帇銆佸紓甯哥姸鎬佸拰鏈�杩戝彉鏇翠换鍔°��";
+    }
+
+    /**
+     * 姹囨�讳换鍔$姸鎬佸拰鏈�杩戝彉鏇翠换鍔★紝鐢熸垚浠诲姟鎽樿宸ュ叿缁撴灉銆�
+     */
+    @Override
+    public AiDiagnosticToolResult buildDiagnosticData(AiPromptContext context) {
+        return new AiDiagnosticToolResult()
+                .setToolCode(getToolCode())
+                .setToolName(getToolName())
+                .setSeverity("INFO")
+                .setSummaryText(buildTaskSummary());
+    }
+
+    /**
+     * 鍩轰簬 man_task 鐢熸垚浠诲姟鎬昏銆佺姸鎬佸垎甯冦�佺被鍨嬪垎甯冨拰鏈�杩戜换鍔℃憳瑕併��
+     */
+    private String buildTaskSummary() {
         List<Task> activeTasks = taskMapper.selectList(new LambdaQueryWrapper<Task>()
                 .select(Task::getTaskCode, Task::getTaskStatus, Task::getTaskType, Task::getOrgLoc, Task::getTargLoc, Task::getUpdateTime)
                 .eq(Task::getStatus, 1));
@@ -75,6 +111,9 @@
         return summary.toString();
     }
 
+    /**
+     * 鏍煎紡鍖栦换鍔$姸鎬佺粺璁°��
+     */
     private String formatStatuses(Map<Integer, Long> rows) {
         List<String> parts = new ArrayList<>();
         for (Map.Entry<Integer, Long> row : rows.entrySet()) {
@@ -83,6 +122,9 @@
         return String.join("锛�", parts);
     }
 
+    /**
+     * 鏍煎紡鍖栦换鍔$被鍨嬬粺璁°��
+     */
     private String formatTypes(Map<Integer, Long> rows) {
         List<String> parts = new ArrayList<>();
         for (Map.Entry<Integer, Long> row : rows.entrySet()) {
@@ -91,6 +133,9 @@
         return String.join("锛�", parts);
     }
 
+    /**
+     * 鏍煎紡鍖栨渶杩戞洿鏂颁换鍔″垪琛ㄣ��
+     */
     private String formatLatestTasks(List<Task> tasks) {
         List<String> parts = new ArrayList<>();
         for (Task task : tasks) {
@@ -106,6 +151,9 @@
         return String.join("锛�", parts);
     }
 
+    /**
+     * 灏嗕换鍔$姸鎬佺紪鐮佽浆鎹负鍙鏂囨銆�
+     */
     private String resolveTaskStatus(Integer taskStatus) {
         if (taskStatus == null) {
             return "鏈煡鐘舵��";
@@ -118,6 +166,9 @@
         return "鐘舵��" + taskStatus;
     }
 
+    /**
+     * 灏嗕换鍔$被鍨嬬紪鐮佽浆鎹负鍙鏂囨銆�
+     */
     private String resolveTaskType(Integer taskType) {
         if (taskType == null) {
             return "鏈煡绫诲瀷";
@@ -130,7 +181,13 @@
         return "绫诲瀷" + taskType;
     }
 
+    /**
+     * 缁熶竴澶勭悊绌哄瓧绗︿覆鏄剧ず銆�
+     */
     private String emptyToDash(String value) {
         return value == null || value.trim().isEmpty() ? "-" : value;
     }
 }
+
+
+

--
Gitblit v1.9.1