From 411ff551ae7641dfc5c9331e99bf8b6e5770e2fa Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 30 十二月 2025 18:05:14 +0800
Subject: [PATCH] #mcp
---
src/main/java/com/zy/ai/service/WcsQueryService.java | 129 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 129 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/zy/ai/service/WcsQueryService.java b/src/main/java/com/zy/ai/service/WcsQueryService.java
new file mode 100644
index 0000000..b531aab
--- /dev/null
+++ b/src/main/java/com/zy/ai/service/WcsQueryService.java
@@ -0,0 +1,129 @@
+package com.zy.ai.service;
+
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+public class WcsQueryService {
+
+ // 杩欓噷娉ㄥ叆浣犵幇鏈夌殑鍚勭被 Service/Mapper锛歞eviceService/taskService/logService/configService...
+
+ public Map<String, Object> buildDiagnosisSnapshot(Map<String, Object> args) {
+ Map<String, Object> focus = (Map<String, Object>) args.get("focus");
+ List<String> deviceIds = focus == null ? Collections.emptyList() : (List<String>) focus.get("deviceIds");
+ List<String> taskIds = focus == null ? Collections.emptyList() : (List<String>) focus.get("taskIds");
+
+ int timeWindowSec = getInt(args, "timeWindowSec", 600);
+ int logLimit = getInt(args, "logLimit", 400);
+ boolean includeConfigs = getBool(args, "includeConfigs", true);
+ boolean includeDerived = getBool(args, "includeDerivedSignals", true);
+
+ Date now = new Date();
+ Date from = new Date(now.getTime() - timeWindowSec * 1000L);
+
+ // 1) devices
+ List<Object> devices = new ArrayList<>();
+ for (String deviceId : safeList(deviceIds)) {
+ Map<String, Object> a = new HashMap<>();
+ a.put("deviceId", deviceId);
+ devices.add(getDeviceState(a));
+ }
+
+ // 2) tasks
+ Map<String, Object> taskArgs = new HashMap<>();
+ if (!safeList(taskIds).isEmpty()) {
+ // 浣犲彲浠ヨ listTasks 鏀寔 taskIds 绮剧‘杩囨护
+ taskArgs.put("taskIds", taskIds);
+ } else if (!safeList(deviceIds).isEmpty()) {
+ taskArgs.put("deviceId", deviceIds.get(0)); // 鎴栨敼鎴愭敮鎸� deviceIds 鏁扮粍
+ taskArgs.put("statuses", Arrays.asList("WAITING","RUNNING","SUSPENDED"));
+ taskArgs.put("limit", 200);
+ }
+ Map<String, Object> taskResult = (Map<String, Object>) listTasks(taskArgs);
+ List<Object> tasks = taskResult == null ? new ArrayList<>() : (List<Object>) taskResult.get("tasks");
+
+ // 3) logs
+ Map<String, Object> logArgs = new HashMap<>();
+ logArgs.put("timeFrom", iso(from));
+ logArgs.put("timeTo", iso(now));
+ logArgs.put("limit", logLimit);
+ if (!safeList(deviceIds).isEmpty()) logArgs.put("deviceId", deviceIds.get(0));
+ if (!safeList(taskIds).isEmpty()) logArgs.put("taskId", taskIds.get(0));
+ Map<String, Object> logResult = (Map<String, Object>) queryLogs(logArgs);
+ List<Object> logs = logResult == null ? new ArrayList<>() : (List<Object>) logResult.get("logs");
+
+ // 4) configs
+ Object configs = null;
+ if (includeConfigs) {
+ configs = getSystemConfig(new HashMap<String, Object>());
+ }
+
+ // 5) derived
+ Object derived = null;
+ if (includeDerived) {
+ derived = deriveSignals(devices, tasks, logs);
+ }
+
+ // output
+ Map<String, Object> out = new LinkedHashMap<>();
+ Map<String, Object> meta = new LinkedHashMap<>();
+ meta.put("snapshotId", UUID.randomUUID().toString());
+ meta.put("generatedAt", iso(now));
+ meta.put("timeFrom", iso(from));
+ meta.put("timeTo", iso(now));
+
+ out.put("meta", meta);
+ out.put("devices", devices);
+ out.put("tasks", tasks);
+ out.put("logs", logs);
+ out.put("configs", configs);
+ out.put("derivedSignals", derived);
+ return out;
+ }
+
+ private Map<String, Object> deriveSignals(List<Object> devices, List<Object> tasks, List<Object> logs) {
+ Map<String, Object> d = new LinkedHashMap<>();
+ List<String> flags = new ArrayList<>();
+ List<String> causes = new ArrayList<>();
+ List<String> bottlenecks = new ArrayList<>();
+
+ // TODO锛氭妸浣� WCS 棰嗗煙瑙勫垯濉炶繖閲岋紙蹇冭烦瓒呮椂銆佺瓑寰呯‘璁ゃ�佸懡浠ゆ棤ACK銆佺珯鍙版弧銆佷笅娓搁樆濉炵瓑锛�
+ // 鍏堢粰涓ず渚嬶細
+ if (tasks != null && !tasks.isEmpty() && (devices == null || devices.isEmpty())) {
+ flags.add("HAS_TASKS_BUT_NO_DEVICE_SNAPSHOT");
+ }
+
+ d.put("anomalyFlags", flags);
+ d.put("suspectedRootCauses", causes);
+ d.put("suspectedBottlenecks", bottlenecks);
+ return d;
+ }
+
+ // ======= 涓嬮潰杩欎簺鍑芥暟锛屼綘鐢ㄧ幇鏈� service 瀹炵幇鍗冲彲 =======
+ public Map<String, Object> getDeviceState(Map<String, Object> args) { /* ... */ return new HashMap<>(); }
+ public Map<String, Object> listTasks(Map<String, Object> args) { /* ... */ return new HashMap<>(); }
+ public Map<String, Object> queryLogs(Map<String, Object> args) { /* ... */ return new HashMap<>(); }
+ public Object getSystemConfig(Map<String, Object> args) { /* ... */ return new HashMap<>(); }
+
+ // helpers
+ private int getInt(Map<String, Object> m, String k, int def) {
+ Object v = m.get(k);
+ if (v == null) return def;
+ if (v instanceof Number) return ((Number) v).intValue();
+ return Integer.parseInt(String.valueOf(v));
+ }
+ private boolean getBool(Map<String, Object> m, String k, boolean def) {
+ Object v = m.get(k);
+ if (v == null) return def;
+ if (v instanceof Boolean) return (Boolean) v;
+ return Boolean.parseBoolean(String.valueOf(v));
+ }
+ private List<String> safeList(List<String> l) { return l == null ? Collections.emptyList() : l; }
+ private String iso(Date d) {
+ SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+ f.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+ return f.format(d);
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.1