cjl
7 hours ago 256aa4c5431733e5d166f583f03724cf69ddfaa4
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
91
92
package com.moral.api.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.moral.api.entity.HistorySecondRadar;
import com.moral.api.mapper.HistorySecondRadarMapper;
import com.moral.api.service.HistorySecondRadarService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
 
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;
 
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author moral
 * @since 2026-05-14
 */
@Service
public class HistorySecondRadarServiceImpl extends ServiceImpl<HistorySecondRadarMapper, HistorySecondRadar> implements HistorySecondRadarService {
 
    private final DateTimeFormatter INPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    private final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    @Override
    public void insertHistorySecond(Map<String, Object> data) {
        Map<String, Object> dataResult = new HashMap<>();
        HistorySecondRadar historySecondRadar = new HistorySecondRadar();
        String time = data.get("time").toString();
        String radarTime = data.get("DataTime").toString();
        Map<String,Double> a34004 = highMap(data.get("a34004-Avg").toString());
        historySecondRadar.setPm25(String.valueOf(a34004.get("value")));
        historySecondRadar.setHighPm25(String.valueOf(a34004.get("high")));
 
        Map<String,Double> a34002 = highMap(data.get("a34002-Avg").toString());
        historySecondRadar.setPm10(String.valueOf(a34002.get("value")));
        historySecondRadar.setHighPm10(String.valueOf(a34002.get("high")));
 
        Map<String,Double> a01561 = highMap(data.get("a01561-Avg").toString());
        historySecondRadar.setBoundaryLayer(String.valueOf(a01561.get("value")));
        LocalDateTime dateTime = LocalDateTime.parse(time, INPUT_FORMATTER);
        historySecondRadar.setTime(dateTime);
        dataResult.put("a34004-Avg",data.get("a34004-Avg"));
        dataResult.put("a34002-Avg",data.get("a34002-Avg"));
        dataResult.put("a01561-Avg",data.get("a01561-Avg"));
        dataResult.put("QN",data.get("QN"));
        dataResult.put("CN",data.get("CN"));
        dataResult.put("MN",data.get("MN"));
        dataResult.put("DataTime",data.get("DataTime"));
        dataResult.put("time",data.get("time"));
        historySecondRadar.setRadarData(JSON.toJSONString(dataResult));
        historySecondRadar.setRadarTime(LocalDateTime.parse(radarTime, INPUT_FORMATTER));
        this.save(historySecondRadar);
    }
    private Map<String,Double> highMap(String data){
        data = data.replace(",", "");
        Map<String,Double> map = new HashMap<>();
        double[] values = Arrays.stream(data.split("\\*"))
                .mapToDouble(Double::parseDouble)
                .toArray();
        int maxIndex = IntStream.range(0, values.length)
                .boxed()
                .max((i, j) -> Double.compare(values[i], values[j]))
                .orElse(-1);
        if (maxIndex != -1) {
            double maxValue = values[maxIndex];
            map.put("value",maxValue);
            // 3. 计算距离 (假设第1个值对应7.5米,即 (index+1)*7.5)
            double distance = (maxIndex + 1) * 7.5;
            map.put("high",distance);
        }else {
            map.put("value",0d);
            map.put("high",0d);
        }
        return map;
    }
 
    public static void main(String[] args) {
        String inputStr = "20260513110500";
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        LocalDateTime dateTime = LocalDateTime.parse(inputStr, inputFormatter);
        System.out.println(dateTime);
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
 
    }
}