From d2ab6f7153e604bac7bc4ad58f27f368b65d8a1e Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 16 六月 2026 13:54:58 +0800
Subject: [PATCH] feat: 添加能耗数据综合分析功能,支持按天和周维度的趋势分析

---
 src/main/java/com/ruoyi/http/service/impl/TqdianbiaoCollectorSyncServiceImpl.java |   90 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/http/service/impl/TqdianbiaoCollectorSyncServiceImpl.java b/src/main/java/com/ruoyi/http/service/impl/TqdianbiaoCollectorSyncServiceImpl.java
new file mode 100644
index 0000000..b54638e
--- /dev/null
+++ b/src/main/java/com/ruoyi/http/service/impl/TqdianbiaoCollectorSyncServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.http.service.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.http.config.TqdianbiaoConfig;
+import com.ruoyi.http.mapper.TqdianbiaoCollectorMapper;
+import com.ruoyi.http.pojo.TqdianbiaoCollector;
+import com.ruoyi.http.service.TqdianbiaoCollectorSyncService;
+import com.ruoyi.http.service.TqdianbiaoSyncLogService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class TqdianbiaoCollectorSyncServiceImpl implements TqdianbiaoCollectorSyncService {
+
+    private final TqdianbiaoConfig config;
+    private final TqdianbiaoCollectorMapper collectorMapper;
+    private final TqdianbiaoSyncLogService syncLogService;
+
+    @Override
+    public int syncCollectors() {
+        String syncType = "collector";
+        try {
+            String url = config.getBaseUrl() + "/Api/Collector";
+            String param = "auth=" + config.getAuth();
+            String raw = HttpUtils.sendGet(url, param);
+            JSONArray list = parseList(raw);
+            LocalDateTime now = LocalDateTime.now();
+            int count = 0;
+            for (int i = 0; i < list.size(); i++) {
+                JSONObject item = list.getJSONObject(i);
+                String collectorId = item.getString("id");
+                if (collectorId == null) {
+                    continue;
+                }
+                TqdianbiaoCollector entity = collectorMapper.selectOne(
+                        Wrappers.<TqdianbiaoCollector>lambdaQuery()
+                                .eq(TqdianbiaoCollector::getCollectorId, collectorId)
+                                .last("LIMIT 1"));
+                if (entity == null) {
+                    entity = new TqdianbiaoCollector();
+                    entity.setCollectorId(collectorId);
+                }
+                entity.setCollectorNo(item.getString("collectorid"));
+                entity.setOnline(item.getBoolean("online"));
+                entity.setCsq(item.getInteger("csq"));
+                entity.setConnectTime(item.getString("connect_time"));
+                entity.setDisconnectTime(item.getString("disconnect_time"));
+                entity.setDescription(item.getString("description"));
+                entity.setSyncTime(now);
+                if (entity.getId() == null) {
+                    collectorMapper.insert(entity);
+                } else {
+                    collectorMapper.updateById(entity);
+                }
+                count++;
+            }
+            syncLogService.logSuccess(syncType, null, null, count);
+            return count;
+        } catch (Exception e) {
+            log.error("閲囬泦鍣ㄥ悓姝ュけ璐�", e);
+            syncLogService.logFailure(syncType, null, null, e.getMessage());
+            throw e;
+        }
+    }
+
+    private JSONArray parseList(String raw) {
+        Object parsed = JSON.parse(raw);
+        if (parsed instanceof JSONArray) {
+            return (JSONArray) parsed;
+        }
+        JSONObject root = (JSONObject) parsed;
+        if (root.getIntValue("status") != 1) {
+            throw new IllegalStateException("閲囬泦鍣ㄦ帴鍙h繑鍥炲紓甯�: " + raw);
+        }
+        Object data = root.get("data");
+        if (data instanceof JSONArray) {
+            return (JSONArray) data;
+        }
+        return new JSONArray();
+    }
+}

--
Gitblit v1.9.3