yuan
3 天以前 7fc5bc0c6f92d65099397690128cbf218935972d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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("采集器接口返回异常: " + raw);
        }
        Object data = root.get("data");
        if (data instanceof JSONArray) {
            return (JSONArray) data;
        }
        return new JSONArray();
    }
}