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/AiWarehouseSummaryService.java | 91 ++++++++++++++++++++++++++++++++++-----------
1 files changed, 68 insertions(+), 23 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiWarehouseSummaryService.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiWarehouseSummaryService.java
similarity index 81%
rename from rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiWarehouseSummaryService.java
rename to rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiWarehouseSummaryService.java
index 202fed3..7bad7c1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/AiWarehouseSummaryService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/provider/AiWarehouseSummaryService.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.Loc;
import com.vincent.rsf.server.manager.entity.LocItem;
@@ -13,7 +14,10 @@
import java.util.*;
@Service
-public class AiWarehouseSummaryService implements AiPromptContextProvider {
+public class AiWarehouseSummaryService implements AiDiagnosticDataProvider {
+
+ private static final String TOOL_CODE = "warehouse_summary";
+ private static final String TOOL_NAME = "搴撳瓨鎽樿";
private static final Map<String, String> LOC_STATUS_LABELS = new LinkedHashMap<>();
@@ -31,16 +35,54 @@
@Resource
private LocItemMapper locItemMapper;
+ /**
+ * 杩斿洖搴撳瓨绫诲唴閮ㄥ伐鍏风殑榛樿椤哄簭銆�
+ */
@Override
- public boolean supports(AiPromptContext context) {
- return context != null && shouldSummarize(context.getQuestion());
+ public int getOrder() {
+ return 10;
}
+ /**
+ * 杩斿洖搴撳瓨宸ュ叿缂栫爜銆�
+ */
@Override
- public String buildContext(AiPromptContext context) {
- if (!supports(context)) {
- return "";
- }
+ 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(buildWarehouseSummary(context));
+ }
+
+ /**
+ * 鍩轰簬 man_loc 鍜� man_loc_item 鐢熸垚搴撳瓨姒傝銆佸簱浣嶇姸鎬佸垎甯冨拰 TOP 缁熻銆�
+ */
+ private String buildWarehouseSummary(AiPromptContext context) {
List<Loc> activeLocs = locMapper.selectList(new LambdaQueryWrapper<Loc>()
.select(Loc::getUseStatus)
@@ -134,21 +176,9 @@
return summary.toString();
}
- private boolean shouldSummarize(String question) {
- if (question == null || question.trim().isEmpty()) {
- return false;
- }
- String normalized = question.toLowerCase(Locale.ROOT);
- return normalized.contains("loc")
- || normalized.contains("搴撲綅")
- || normalized.contains("璐т綅")
- || normalized.contains("搴撳尯")
- || normalized.contains("搴撳瓨")
- || normalized.contains("鐗╂枡")
- || normalized.contains("宸烽亾")
- || normalized.contains("鍌ㄤ綅");
- }
-
+ /**
+ * 灏嗗簱浣嶇姸鎬佽鏁版牸寮忓寲涓哄彲璇绘枃鏈��
+ */
private String formatLocStatuses(Map<String, Long> counters) {
if (counters == null || counters.isEmpty()) {
return "鏆傛棤鏁版嵁";
@@ -160,6 +190,9 @@
return String.join("锛�", parts);
}
+ /**
+ * 鏍煎紡鍖栧簱瀛樻渶澶氱殑搴撲綅鍒楄〃銆�
+ */
private String formatTopLocs(List<Map.Entry<String, LocAggregate>> rows) {
List<String> parts = new ArrayList<>();
for (Map.Entry<String, LocAggregate> row : rows) {
@@ -170,6 +203,9 @@
return String.join("锛�", parts);
}
+ /**
+ * 鏍煎紡鍖栧簱瀛樻渶澶氱殑鐗╂枡鍒楄〃銆�
+ */
private String formatTopMaterials(List<MaterialAggregate> rows) {
List<String> parts = new ArrayList<>();
for (MaterialAggregate row : rows) {
@@ -183,11 +219,17 @@
return String.join("锛�", parts);
}
+ /**
+ * 缁熶竴鏍煎紡鍖栨暟閲忓�笺��
+ */
private String formatDecimal(Object value) {
BigDecimal decimal = toDecimal(value);
return decimal.stripTrailingZeros().toPlainString();
}
+ /**
+ * 灏嗕笉鍚岀被鍨嬬殑鏁伴噺瀛楁缁熶竴杞崲涓� BigDecimal銆�
+ */
private BigDecimal toDecimal(Object value) {
if (value == null) {
return BigDecimal.ZERO;
@@ -213,3 +255,6 @@
private final Set<String> locCodes = new HashSet<>();
}
}
+
+
+
--
Gitblit v1.9.1