| File was renamed from rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiTaskSummaryService.java |
| | |
| | | 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; |
| | |
| | | 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)); |
| | |
| | | return summary.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 格式化任务状态统计。 |
| | | */ |
| | | private String formatStatuses(Map<Integer, Long> rows) { |
| | | List<String> parts = new ArrayList<>(); |
| | | for (Map.Entry<Integer, Long> row : rows.entrySet()) { |
| | |
| | | return String.join(",", parts); |
| | | } |
| | | |
| | | /** |
| | | * 格式化任务类型统计。 |
| | | */ |
| | | private String formatTypes(Map<Integer, Long> rows) { |
| | | List<String> parts = new ArrayList<>(); |
| | | for (Map.Entry<Integer, Long> row : rows.entrySet()) { |
| | |
| | | return String.join(",", parts); |
| | | } |
| | | |
| | | /** |
| | | * 格式化最近更新任务列表。 |
| | | */ |
| | | private String formatLatestTasks(List<Task> tasks) { |
| | | List<String> parts = new ArrayList<>(); |
| | | for (Task task : tasks) { |
| | |
| | | return String.join(";", parts); |
| | | } |
| | | |
| | | /** |
| | | * 将任务状态编码转换为可读文案。 |
| | | */ |
| | | private String resolveTaskStatus(Integer taskStatus) { |
| | | if (taskStatus == null) { |
| | | return "未知状态"; |
| | |
| | | return "状态" + taskStatus; |
| | | } |
| | | |
| | | /** |
| | | * 将任务类型编码转换为可读文案。 |
| | | */ |
| | | private String resolveTaskType(Integer taskType) { |
| | | if (taskType == null) { |
| | | return "未知类型"; |
| | |
| | | return "类型" + taskType; |
| | | } |
| | | |
| | | /** |
| | | * 统一处理空字符串显示。 |
| | | */ |
| | | private String emptyToDash(String value) { |
| | | return value == null || value.trim().isEmpty() ? "-" : value; |
| | | } |
| | | } |
| | | |
| | | |
| | | |