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.Arrays;
|
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;
|
|
//全省水库超正常
|
private String totalOverNormalInfo;
|
//超正常小型水库
|
private String overNormalSmallInfo;
|
//全省水库超正常10cm以上
|
private String totalOverNormal10Info;
|
//超正常大型水库
|
private String overNormalBigInfo;
|
//超正常中型水库
|
private String overNormalMidInfo;
|
|
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);
|
}
|
|
public OverWord(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList,List<TotalInfo> totalOverList, List<TotalInfo> totalOver10List){
|
this.tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
|
this.hour = new SimpleDateFormat("H时").format(new Date());
|
|
formatTotalInfo(totalList);
|
formatDzkInfo(dzkList);
|
formatSzInfo(szInfoList);
|
|
formatOverNormal(totalOverList,totalOver10List);
|
}
|
|
/**
|
* 构建超正常信息
|
* @param totalOverList
|
* @param totalOver10List
|
*/
|
private void formatOverNormal(List<TotalInfo> totalOverList, List<TotalInfo> totalOver10List) {
|
|
int total = 0;
|
int big = 0;
|
int mid = 0;
|
int small = 0;
|
int dangerCountTotal = 0;
|
int overDangerCountTotal = 0;
|
List<String> smallList = new ArrayList<>();
|
List<String> midList = new ArrayList<>();
|
List<String> bigList = new ArrayList<>();
|
|
|
for (int i = 0; i < totalOverList.size(); i++) {
|
TotalInfo totalInfo = totalOverList.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){
|
String smallRegionCout = StringUtil.format("{}{}座",totalInfo.getP_ad_name(),totalInfo.getSmall_all());
|
smallList.add(smallRegionCout);
|
}
|
// "mid_over_detail": "许家冲水库-5.59,游河水库-1.42,马鞍山水库-0.2,桃园河水库-3.19,白果河水库-1.56,两河口水库-4.97",
|
if (totalInfo.getBig_over_detail() != null){
|
String bigOverDetail = totalInfo.getBig_over_detail();
|
//许家冲水库-5.59 游河水库-1.42 马鞍山水库-0.2
|
List<String> list = Arrays.asList(bigOverDetail.split(","));
|
|
list.forEach(item->{
|
String reservoirName = item.split("~")[0];
|
bigList.add(reservoirName);
|
});
|
}
|
|
if (totalInfo.getMid_over_detail() != null){
|
String midOverDetail = totalInfo.getMid_over_detail();
|
//许家冲水库-5.59 游河水库-1.42 马鞍山水库-0.2
|
List<String> list = Arrays.asList(midOverDetail.split(","));
|
|
list.forEach(item->{
|
String reservoirName = item.split("~")[0];
|
midList.add(reservoirName);
|
});
|
}
|
}
|
|
String totalValue =
|
StringUtil.format("今日{},全省共有{}座水库超正常水位,其中大型水库{}座、中型水库{}座、小型水库{}座。全省水库持续安全运行。全省病险水库中,有{}座超正常水位,有{}座没有超正常但超了控制运用水位",
|
this.hour,total,big,mid,small,dangerCountTotal,overDangerCountTotal);
|
|
String totalOverNormal10Value = getOverNormal10(totalOver10List);
|
String smallValue = "";
|
if (smallList.size()>0){
|
smallValue = String.join("、",smallList);
|
}else {
|
smallValue = "没有超正常的小型水库";
|
}
|
|
String bigValue="";
|
if (bigList.size()>0){
|
bigValue=
|
StringUtil.format(" 其中,超正常的大型水库有{}。",String.join("、",bigList));
|
}else{
|
bigValue= " 其中,没有超正常的大型水库。";
|
}
|
|
String midValue = "";
|
if (midList.size()>0){
|
midValue=
|
StringUtil.format(" 其中,超正常的中型水库有{}。",String.join("、",midList));
|
}else{
|
midValue= " 其中,没有超正常的中型水库。";
|
}
|
|
this.totalOverNormalInfo = totalValue;
|
this.overNormalSmallInfo =smallValue;
|
this.overNormalBigInfo = bigValue;
|
this.overNormalMidInfo = midValue;
|
this.totalOverNormal10Info = totalOverNormal10Value;
|
|
}
|
|
//获取超正常10cm的水库
|
private String getOverNormal10(List<TotalInfo> totalOver10List) {
|
|
int total = 0;
|
int big = 0;
|
int mid = 0;
|
int small = 0;
|
int dangerCountTotal = 0;
|
int overDangerCountTotal = 0;
|
|
for (int i = 0; i < totalOver10List.size(); i++) {
|
TotalInfo totalInfo = totalOver10List.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();
|
}
|
|
String totalValue =
|
StringUtil.format("今日{},全省共有{}座水库超正常水位,其中大型水库{}座、中型水库{}座、小型水库{}座。全省水库持续安全运行。全省病险水库中,有{}座超正常水位,有{}座没有超正常但超了控制运用水位",
|
this.hour,total,big,mid,small,dangerCountTotal,overDangerCountTotal);
|
|
return totalValue;
|
}
|
|
/**
|
* 构建省直信息
|
* @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);
|
this.provinceInfo = String.join("\n",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);
|
|
this.overBigInfo = String.join("\n",bigListInfo);
|
this.overMidInfo = String.join("\n",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 = totalValue;
|
this.overSmallInfo =smallValue;
|
}
|
|
}
|