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