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;
/**
*
* 服务实现类
*
*
* @author moral
* @since 2026-05-14
*/
@Service
public class HistorySecondRadarServiceImpl extends ServiceImpl 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 data) {
Map dataResult = new HashMap<>();
HistorySecondRadar historySecondRadar = new HistorySecondRadar();
String time = data.get("time").toString();
String radarTime = data.get("DataTime").toString();
Map a34004 = highMap(data.get("a34004-Avg").toString());
historySecondRadar.setPm25(String.valueOf(a34004.get("value")));
historySecondRadar.setHighPm25(String.valueOf(a34004.get("high")));
Map a34002 = highMap(data.get("a34002-Avg").toString());
historySecondRadar.setPm10(String.valueOf(a34002.get("value")));
historySecondRadar.setHighPm10(String.valueOf(a34002.get("high")));
Map 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 highMap(String data){
data = data.replace(",", "");
Map 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");
}
}