From 63b01db83d9aad8a15276b4236a9a22e4aeef065 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 05 五月 2026 12:30:59 +0800
Subject: [PATCH] # Agent数据分析V3.0.1.7

---
 src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 119 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java b/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java
index d7fb5e7..63a30d8 100644
--- a/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java
+++ b/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java
@@ -11,9 +11,18 @@
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.BasRgv;
 import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.WrkAnalysisMapper;
+import com.zy.asrs.service.BasCrnpErrLogService;
 import com.zy.asrs.service.BasCrnpService;
 import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.service.BasDualCrnpErrLogService;
+import com.zy.asrs.service.BasRgvErrLogService;
 import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.BasStationErrLogService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.SlaveType;
@@ -48,6 +57,16 @@
     private ConfigService configService;
     @Autowired
     private MainProcessPseudocodeService mainProcessPseudocodeService;
+    @Autowired
+    private WrkAnalysisMapper wrkAnalysisMapper;
+    @Autowired
+    private BasCrnpErrLogService basCrnpErrLogService;
+    @Autowired
+    private BasDualCrnpErrLogService basDualCrnpErrLogService;
+    @Autowired
+    private BasRgvErrLogService basRgvErrLogService;
+    @Autowired
+    private BasStationErrLogService basStationErrLogService;
 
     @Override
     public Object getCrnDeviceStatus(JSONObject args) {
@@ -284,6 +303,101 @@
         return mainProcessPseudocodeService.queryMainProcessPseudocode(refresh);
     }
 
+    @Override
+    public Object getTaskThroughput(JSONObject args) {
+        Date startTime = optDate(args, "startTime");
+        Date endTime = optDate(args, "endTime");
+        if (startTime == null || endTime == null) {
+            JSONObject err = new JSONObject();
+            err.put("error", "startTime and endTime are required");
+            return err;
+        }
+        Map<String, Object> result = wrkAnalysisMapper.aggregateThroughput(startTime, endTime);
+        JSONObject data = new JSONObject();
+        data.put("throughput", result);
+        data.put("startTime", startTime);
+        data.put("endTime", endTime);
+        return data;
+    }
+
+    @Override
+    public Object getDeviceFaultSummary(JSONObject args) {
+        Date startTime = optDate(args, "startTime");
+        Date endTime = optDate(args, "endTime");
+        if (startTime == null || endTime == null) {
+            JSONObject err = new JSONObject();
+            err.put("error", "startTime and endTime are required");
+            return err;
+        }
+        Map<String, Object> throughput = wrkAnalysisMapper.aggregateThroughput(startTime, endTime);
+        JSONObject data = new JSONObject();
+        data.put("totalTaskCount", throughput.get("taskCount"));
+        data.put("faultTaskCount", throughput.get("faultTaskCount"));
+        data.put("totalFaultCount", throughput.get("totalFaultCount"));
+        data.put("totalFaultDurationMs", throughput.get("totalFaultDurationMs"));
+        data.put("crnFaultCount", throughput.get("crnFaultCount"));
+        data.put("crnFaultDurationMs", throughput.get("crnFaultDurationMs"));
+        data.put("dualCrnFaultCount", throughput.get("dualCrnFaultCount"));
+        data.put("dualCrnFaultDurationMs", throughput.get("dualCrnFaultDurationMs"));
+        data.put("rgvFaultCount", throughput.get("rgvFaultCount"));
+        data.put("rgvFaultDurationMs", throughput.get("rgvFaultDurationMs"));
+        data.put("stationFaultCount", throughput.get("stationFaultCount"));
+        data.put("stationFaultDurationMs", throughput.get("stationFaultDurationMs"));
+        long taskCount = throughput.get("taskCount") != null ? ((Number) throughput.get("taskCount")).longValue() : 0;
+        long faultTask = throughput.get("faultTaskCount") != null ? ((Number) throughput.get("faultTaskCount")).longValue() : 0;
+        data.put("faultRate", taskCount > 0 ? Math.round(faultTask * 10000.0 / taskCount) / 100.0 : 0);
+        data.put("startTime", startTime);
+        data.put("endTime", endTime);
+        return data;
+    }
+
+    @Override
+    public Object getDeviceUtilization(JSONObject args) {
+        Date startTime = optDate(args, "startTime");
+        Date endTime = optDate(args, "endTime");
+        if (startTime == null || endTime == null) {
+            JSONObject err = new JSONObject();
+            err.put("error", "startTime and endTime are required");
+            return err;
+        }
+        List<Map<String, Object>> devices = wrkAnalysisMapper.groupByDevice(startTime, endTime);
+        JSONObject data = new JSONObject();
+        data.put("devices", devices);
+        data.put("startTime", startTime);
+        data.put("endTime", endTime);
+        return data;
+    }
+
+    @Override
+    public Object getErrorLogSummary(JSONObject args) {
+        Date startTime = optDate(args, "startTime");
+        Date endTime = optDate(args, "endTime");
+        if (startTime == null || endTime == null) {
+            JSONObject err = new JSONObject();
+            err.put("error", "startTime and endTime are required");
+            return err;
+        }
+        JSONObject data = new JSONObject();
+
+        long crnErrCount = basCrnpErrLogService.count(new QueryWrapper<com.zy.asrs.entity.BasCrnpErrLog>()
+                .ge("start_time", startTime).lt("start_time", endTime));
+        long dualCrnErrCount = basDualCrnpErrLogService.count(new QueryWrapper<com.zy.asrs.entity.BasDualCrnpErrLog>()
+                .ge("start_time", startTime).lt("start_time", endTime));
+        long rgvErrCount = basRgvErrLogService.count(new QueryWrapper<com.zy.asrs.entity.BasRgvErrLog>()
+                .ge("start_time", startTime).lt("start_time", endTime));
+        long stationErrCount = basStationErrLogService.count(new QueryWrapper<com.zy.asrs.entity.BasStationErrLog>()
+                .ge("start_time", startTime).lt("start_time", endTime));
+
+        data.put("crnErrorCount", crnErrCount);
+        data.put("dualCrnErrorCount", dualCrnErrCount);
+        data.put("rgvErrorCount", rgvErrCount);
+        data.put("stationErrorCount", stationErrCount);
+        data.put("totalErrorCount", crnErrCount + dualCrnErrCount + rgvErrCount + stationErrCount);
+        data.put("startTime", startTime);
+        data.put("endTime", endTime);
+        return data;
+    }
+
     // --------- helpers ---------
 
     private int optInt(JSONObject o, String key, int def) {
@@ -315,6 +429,11 @@
         return value.trim();
     }
 
+    private Date optDate(JSONObject o, String key) {
+        if (o == null || !o.containsKey(key)) return null;
+        return o.getDate(key);
+    }
+
     private List<Long> optLongList(JSONObject o, String key) {
         if (o == null || !o.containsKey(key)) return Collections.emptyList();
         JSONArray arr = o.getJSONArray(key);

--
Gitblit v1.9.1