反正你们也看不到,所以我说不说也不重要吧,嘿嘿。
public class WarnUtils {
//风力判断阈值
public List<GaleWarn> GaleWarning(List<Station> list){
//按照风速排序
Collections.sort(list, new Comparator<Station>() {
@Override
public int compare(Station o1, Station o2) {
return o2.getWinMax().compareTo(o1.getWinMax());
}
});
if (list.get(0).getWinMax() < 10.8){
return null;
}else {
Double win;
List<GaleWarn> galeWarns = new ArrayList<>();
for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
win = list.get(i).getWinMax();
if (win < 10.8){
continue;
}else if (win >= 10.8 && win <= 17.1){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL8).build());
}else if (win >= 17.2 && win <= 24.4){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL9).build());
}else if (win >= 24.5 && win <= 32.6){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL10).build());
}else if (win >= 32.7 && win <= 36.9){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL11).build());
}else if (win >= 37.0 && win <= 41.4){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL12).build());
}else if (win >= 41.5 && win <= 46.1){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL13).build());
}else if (win >= 46.2 && win <= 50.9){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL14).build());
}else if (win >= 51.0 && win <= 56.0){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL15).build());
}else if (win >= 56.1 && win <= 61.2){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL16).build());
}else if (win >= 61.3 && win <= 69.3){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL17).build());
}else if (win >69.3){
galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL17).build());
}
}
return galeWarns;
}
}
//高温判断阈值
public List<TempWarn> TempHotWarning(List<Station> list){
Collections.sort(list, new Comparator<Station>() {
@Override
public int compare(Station o1, Station o2) {
return o2.getTemMaxDay().compareTo(o1.getTemMaxDay());
}
});
if (list.get(0).getTemMaxDay() < 37){
return null;
}else {
List<TempWarn> tempHotWarns = new ArrayList<>();
Double temp;
for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
temp = list.get(i).getTemMaxDay();
if (temp >= 37){
tempHotWarns.add(TempWarn.builder().localDate(list.get(i).getLocalDate().substring(0,10)).temp(list.get(i).getTemMaxDay()).remark("高温").build());
}else {
break;
}
}
return tempHotWarns;
}
}
//低寒判断阈值
public List<TempWarn> TempColdWarning(List<Station> list){
Collections.sort(list, new Comparator<Station>() {
@Override
public int compare(Station o1, Station o2) {
return o1.getTemMinDay().compareTo(o2.getTemMinDay());
}
});
if (list.get(0).getTemMinDay() > -10){
return null;
}else {
List<TempWarn> tempColdWarns = new ArrayList<>();
Double temp;
for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
if (list.get(i).getTemMinDay() <= -10){
tempColdWarns.add(TempWarn.builder().localDate(list.get(i).getLocalDate().substring(0,10)).temp(list.get(i).getTemMinDay()).remark("低寒").build());
}else {
break;
}
}
return tempColdWarns;
}
}
//暴雨判定阈值in
public List<RainWarn> RainWarning(List<Station> list){
Collections.sort(list, new Comparator<Station>() {
@Override
public int compare(Station o1, Station o2) {
return o2.getTotalPrecip().compareTo(o1.getTotalPrecip());
}
});
if (list.get(0).getTotalPrecip() < 50){
return null;
}else {
List<RainWarn> rainWarns = new ArrayList<>();
Integer rain;
for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
rain = list.get(i).getTotalPrecip();
if (list.get(i).getTotalPrecip() >= 50){
rainWarns.add(RainWarn.builder().localDate(list.get(i).getLocalDate().substring(0,10)).rainfall(rain).remark("暴雨").build());
}else {
break;
}
}
return rainWarns;
}
}
//统计处理
public String warnNotice(List<Station> list,String searchAddress){
List<GaleWarn> galeWarns = GaleWarning(list);
List<TempWarn> coldWarns = TempColdWarning(list);
List<TempWarn> hotWarns = TempHotWarning(list);
List<RainWarn> rainWarns = RainWarning(list);
List<String> dateList = new ArrayList<>();
boolean flogGale = false,flogCold = false,flogHot = false,flogRain = false;
StringBuilder buffer = new StringBuilder();
if (galeWarns != null && galeWarns.size() != 0){
flogGale = true;
for (int i = 0; i < galeWarns.size(); i++) {
dateList.add(galeWarns.get(i).getLocalDate().substring(0,10));
}
}
if (coldWarns != null && coldWarns.size() != 0){
flogCold = true;
for (int i = 0; i < coldWarns.size(); i++) {
dateList.add(coldWarns.get(i).getLocalDate().substring(0,10));
}
}
if (hotWarns != null && hotWarns.size() != 0){
flogHot = true;
for (int i = 0; i < hotWarns.size(); i++) {
dateList.add(hotWarns.get(i).getLocalDate().substring(0,10));
}
}
if (rainWarns != null && rainWarns.size() != 0){
flogRain = true;
for (int i = 0; i < rainWarns.size(); i++) {
dateList.add(rainWarns.get(i).getLocalDate().substring(0,10));
}
}
//时间去重
List<String> distinctList = dateList.stream().distinct().collect(Collectors.toList());
Collections.sort(distinctList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
log.info("排序后的时间=============="+distinctList);
AtomicInteger index = new AtomicInteger(0);
for (int i = 0; i < distinctList.size(); i++) {
buffer.append(distinctList.get(i)).append(",").append(searchAddress).append("出现");
if (flogGale){
int dateIndex = i;
//查看是否存在当天记录
boolean flog = galeWarns.stream().anyMatch(data -> {
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
});
if (flog){
galeWarns.stream().filter(data->{
index.getAndIncrement();
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
}).findFirst();
buffer.append("大风").append(",日极大风速为").append(galeWarns.get(index.decrementAndGet()).getWin()).append("m/s,").append(galeWarns.get(index.get()).getLevel().getRemark()).append("级别;");
index.set(0);
}
}
if (flogCold){
int dateIndex = i;
//查看是否存在当天记录
boolean flog = coldWarns.stream().anyMatch(data -> {
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
});
if (flog){
coldWarns.stream().filter(data->{
index.getAndIncrement();
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
}).findFirst();
buffer.append(coldWarns.get(index.decrementAndGet()).getRemark()).append(",最低气温为").append(coldWarns.get(index.get()).getTemp()).append("℃;");
index.set(0);
}
}
if (flogHot){
int dateIndex = i;
//查看是否存在当天记录
boolean flog = hotWarns.stream().anyMatch(data -> {
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
});
if (flog){
hotWarns.stream().filter(data->{
index.getAndIncrement();
log.info("当前时间:"+distinctList.get(dateIndex));
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
}).findFirst();
buffer.append(hotWarns.get(index.decrementAndGet()).getRemark()).append(",最高气温为").append(hotWarns.get(index.get()).getTemp()).append("℃;");
index.set(0);
}
}
if (flogRain){
int dateIndex = i;
//查看是否存在当天记录
boolean flog = rainWarns.stream().anyMatch(data -> {
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
});
if (flog){
rainWarns.stream().filter(data->{
index.getAndIncrement();
return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
}).findFirst();
buffer.append(rainWarns.get(index.decrementAndGet()).getRemark()).append(",最大降雨量为").append(rainWarns.get(index.get()).getRainfall()).append("mm");
index.set(0);
}
}
String s = String.valueOf((buffer.charAt(buffer.length()-1)));
if (s.equals(";")){
buffer.deleteCharAt(buffer.length()-1);
}
buffer.append("。");
}
return (buffer.length() == 0)?"无":buffer.toString();
}
}