package cn.gistack.sm.sjztmd.word.vo;
|
|
import lombok.Data;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springblade.core.tool.utils.ObjectUtil;
|
import org.springblade.core.tool.utils.StringUtil;
|
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Data
|
public class OverWord {
|
|
private String tm;
|
private String hour;
|
|
//超汛限
|
private String totalInfo;
|
private String overSmallInfo;
|
private String overBigInfo;
|
private String overMidInfo;
|
|
//省直水库
|
private String provinceInfo;
|
|
public OverWord(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList){
|
this.tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
|
this.hour = new SimpleDateFormat("H时").format(new Date());
|
|
formatTotalInfo(totalList);
|
formatDzkInfo(dzkList);
|
formatSzInfo(szInfoList);
|
}
|
|
/**
|
* 构建省直信息
|
* @param szInfoList
|
*/
|
private void formatSzInfo(List<SzInfo> szInfoList) {
|
List<String> list = new ArrayList<>();
|
|
for (int i = 0; i < szInfoList.size(); i++) {
|
SzInfo szInfo = szInfoList.get(i);
|
String text = generateSzInfo(szInfo);
|
list.add(text);
|
}
|
|
this.provinceInfo = String.join("\n\r\r\r\r",list);
|
}
|
|
private String generateSzInfo(SzInfo szInfo){
|
String text = "";
|
|
String oldTm = new SimpleDateFormat("MM月dd日H时").format(DateUtil.parse(szInfo.getOld_tm(),"yyyy-MM-dd HH:mm:ss"));
|
Double oldRz = szInfo.getOld_rz();
|
|
String newTm = new SimpleDateFormat("MM月dd日H时").format(DateUtil.parse(szInfo.getNew_tm(),"yyyy-MM-dd HH:mm:ss"));
|
Double newRz = szInfo.getNew_rz();
|
|
Double diffRz = Math.abs(szInfo.getDiff_rz());
|
String resNm = szInfo.getStcd();
|
String upOrDown = "";
|
if (diffRz>=0){
|
upOrDown = "上涨";
|
}else {
|
upOrDown = "下降";
|
}
|
String flse_lim_stag="";
|
String control_z = "";
|
String wat_shed_area = "";
|
|
switch (resNm){
|
case "高关水库":
|
flse_lim_stag = "118";
|
control_z="117";
|
wat_shed_area = "303";
|
break;
|
case "王英水库":
|
flse_lim_stag = "70";
|
control_z="67";
|
wat_shed_area = "243";
|
break;
|
case "吴岭水库":
|
flse_lim_stag = "62.20";
|
control_z="";
|
wat_shed_area = "102";
|
break;
|
case "富水水库":
|
flse_lim_stag = "57";
|
control_z="55";
|
wat_shed_area = "2450";
|
break;
|
case "漳河水库":
|
flse_lim_stag = "122.6";
|
control_z="122";
|
wat_shed_area = "2212";
|
break;
|
}
|
|
List<String> detailList = new ArrayList<>();
|
if (StringUtil.isNotBlank(flse_lim_stag)){
|
detailList.add(StringUtil.format("汛限水位{}米",flse_lim_stag));
|
}
|
if (StringUtil.isNotBlank(control_z)){
|
detailList.add(StringUtil.format("控制运用水位{}米",control_z));
|
}
|
if (StringUtil.isNotBlank(wat_shed_area)){
|
detailList.add(StringUtil.format("集雨面积{}平方千米",wat_shed_area));
|
}
|
String detail = StringUtil.join(detailList,",");
|
|
text = StringUtil.format("{}{}水位{}米,{}库水位{}米,({}{}米,{})。",
|
resNm,oldTm,oldRz,newTm,newRz,upOrDown,diffRz,detail);
|
|
return text;
|
}
|
|
/**
|
* 构建大中库信息
|
* @param dzkList
|
*/
|
private void formatDzkInfo(List<DzkInfo> dzkList) {
|
|
//大型
|
List<DzkInfo> bigList = dzkList.stream().filter(dzkInfo -> dzkInfo.getEng_scal().indexOf("大") > -1).collect(Collectors.toList());
|
//中型
|
List<DzkInfo> midList = dzkList.stream().filter(dzkInfo -> dzkInfo.getEng_scal().indexOf("中") > -1).collect(Collectors.toList());
|
|
List<String> bigListInfo = new ArrayList<>();
|
List<String> midListInfo = new ArrayList<>();
|
for (int i = 0; i < bigList.size(); i++) {
|
DzkInfo dzkInfo = bigList.get(i);
|
bigListInfo.add(generateDzkInfo(dzkInfo));
|
}
|
|
for (int i = 0; i < midList.size(); i++) {
|
DzkInfo dzkInfo = midList.get(i);
|
midListInfo.add(generateDzkInfo(dzkInfo));
|
}
|
|
this.overBigInfo = String.join("\n\r\r\r\r",bigListInfo);
|
this.overMidInfo = String.join("\n\r\r\r\r",midListInfo);
|
}
|
|
private String generateDzkInfo(DzkInfo dzkInfo){
|
String text = "";
|
|
List<String> detailList = new ArrayList<>();
|
if (StringUtil.isNotBlank(dzkInfo.getIs_gate())){
|
detailList.add(StringUtil.format("溢洪道{}",dzkInfo.getIs_gate()));
|
}
|
if (ObjectUtil.isNotEmpty(dzkInfo.getOver_stag())){
|
detailList.add(StringUtil.format("超汛限水位{}米",dzkInfo.getOver_stag()));
|
}
|
if (ObjectUtil.isNotEmpty(dzkInfo.getTot_cap())){
|
detailList.add(StringUtil.format("总库容{}万立方米",dzkInfo.getTot_cap()));
|
}
|
if (ObjectUtil.isNotEmpty(dzkInfo.getWat_shed_area())){
|
detailList.add(StringUtil.format("集雨面积{}平方千米",dzkInfo.getWat_shed_area()));
|
}
|
if (ObjectUtil.isNotEmpty(dzkInfo.getTb_norm_pool_stag())){
|
detailList.add(StringUtil.format("正常蓄水位{}米",dzkInfo.getTb_norm_pool_stag()));
|
}
|
if (ObjectUtil.isNotEmpty(dzkInfo.getTb_flse_lim_stag())){
|
detailList.add(StringUtil.format("汛限水位{}米",dzkInfo.getTb_flse_lim_stag()));
|
}
|
|
String detail = String.join(",",detailList);
|
text = StringUtil.format("{}{}{}({})",dzkInfo.getP_ad_name(),dzkInfo.getAd_name(),dzkInfo.getRes_name(),detail);
|
|
return text;
|
}
|
|
/**
|
* 构建全省水库超汛限信息
|
* @param totalList
|
* @return
|
*/
|
private void formatTotalInfo(List<TotalInfo> totalList){
|
String totalLabel = "全省水库超汛限:";
|
String smallLable = "超汛限的小型水库有:";
|
|
int total = 0;
|
int big = 0;
|
int mid = 0;
|
int small = 0;
|
int dangerCountTotal = 0;
|
int overDangerCountTotal = 0;
|
List<String> smallList = new ArrayList<>();
|
|
|
for (int i = 0; i < totalList.size(); i++) {
|
TotalInfo totalInfo = totalList.get(i);
|
total += totalInfo.getCount_all();
|
big += totalInfo.getBig_all();
|
mid += totalInfo.getMid_all();
|
small += totalInfo.getSmall_all();
|
dangerCountTotal += totalInfo.getDanger_count_all();
|
overDangerCountTotal += totalInfo.getOver_danger_count_all();
|
|
if (totalInfo.getSmall_all() == 0){
|
continue;
|
}
|
|
String smallRegionCout = StringUtil.format("{}{}座",totalInfo.getP_ad_name(),totalInfo.getSmall_all());
|
smallList.add(smallRegionCout);
|
}
|
|
String totalValue =
|
StringUtil.format("今日{},全省共有{}座水库超汛限水位,其中大型水库{}座、中型水库{}座、小型水库{}座。全省水库持续安全运行。全省病险水库中,有{}座超汛限水位,有{}座没有超汛限但超了控制运用水位。",
|
this.hour,total,big,mid,small,dangerCountTotal,overDangerCountTotal);
|
|
String smallValue = String.join("、",smallList);
|
|
this.totalInfo = totalLabel+totalValue;
|
this.overSmallInfo = smallLable+smallValue;
|
}
|
|
}
|