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