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");
|
|
|
}
|
}
|