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.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("采集器接口返回异常: " + raw); } Object data = root.get("data"); if (data instanceof JSONArray) { return (JSONArray) data; } return new JSONArray(); } }