package cn.gistack.sm.sjztmd.word.vo;
|
|
import cn.gistack.alerts.sms.vo.SmsResultVO;
|
import cn.gistack.sm.intelligentCall.entity.CallTask;
|
import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO;
|
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;
|
|
private String smsResultInfo;
|
private String zdInfo;
|
|
public OverWord(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList, List<SzInfo> szInfoList, List<SmsResultVO> resultVOList, List<CallTaskResultVO> whtjList, String isNew) {
|
this.tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
|
this.hour = new SimpleDateFormat("H时").format(new Date());
|
|
formatTotalInfo(totalList);
|
formatDzkInfo(dzkList);
|
formatSzInfo(szInfoList);
|
formatSmsResultInfo(resultVOList, whtjList);
|
}
|
|
public OverWord(List<TotalInfo> totalList) {
|
this.tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
|
this.hour = new SimpleDateFormat("H时").format(new Date());
|
formatTotalInfo(totalList);
|
}
|
|
private void formatSmsResultInfo(List<SmsResultVO> resultVOList, List<CallTaskResultVO> whtjList) {
|
// 短信预警处理
|
int dxyjCount = 0;
|
for (SmsResultVO vo : resultVOList) {
|
int number = null == vo.getNumber() ? 0 : vo.getNumber();
|
dxyjCount = dxyjCount + number;
|
}
|
|
// 外呼统计处理
|
int cityNameIndex = 0; //记录增加行政区划次数
|
String cityNames = ""; //行政区划集合
|
int jtCount = 0; //接通的数量
|
for (CallTaskResultVO callTaskResultVO : whtjList) {
|
|
if(null == callTaskResultVO.getId()) {
|
continue;
|
}
|
|
if (StringUtil.isNotBlank(callTaskResultVO.getCityName())) {
|
if (StringUtil.isBlank(cityNames)) {
|
cityNames = cityNames + callTaskResultVO.getCityName();
|
} else {
|
//如果存在不添加
|
if (cityNames.indexOf(callTaskResultVO.getCityName()) < 0 && cityNameIndex < 4) {
|
cityNames = cityNames + "、" + callTaskResultVO.getCityName();
|
cityNameIndex = cityNameIndex + 1;
|
}
|
|
}
|
}
|
|
if (callTaskResultVO.getCallResult().equals("200000")) {
|
jtCount = jtCount + 1;
|
}
|
|
if (callTaskResultVO.getIsSmsFill().equals("已反馈")) {
|
jtCount = jtCount + 1;
|
}
|
|
}
|
|
double whtjCount = whtjList.size() > 0 ? whtjList.size() : 1;
|
double jtl = Double.valueOf(jtCount) / whtjCount * 100;
|
String str = StringUtil.format("过去24小时内,发送水库短信预警{}条,抽查{}等水库防汛责任人{}人次,应答率{},责任人履职情况总体较好。",
|
dxyjCount, cityNames.replace("恩施土家族苗族自治州","恩施州"), whtjList.size(), String.format("%.2f", jtl) + "%");
|
this.smsResultInfo = str;
|
}
|
|
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<>();
|
|
List<String> listZd = new ArrayList<>();
|
|
for (int i = 0; i < szInfoList.size(); i++) {
|
SzInfo szInfo = szInfoList.get(i);
|
if (szInfo.getType().equals("省直水库")) {
|
String text = generateSzInfo(szInfo);
|
list.add(text);
|
} else {
|
listZd.add(generateSzInfo(szInfo));
|
}
|
|
}
|
|
// this.provinceInfo = String.join("\n\r\r\r\r",list);
|
this.provinceInfo = String.join("\n", list);
|
this.zdInfo = String.join("\n", listZd);
|
}
|
|
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 (szInfo.getDiff_rz() >= 0) {
|
upOrDown = "上涨";
|
} else {
|
upOrDown = "下降";
|
}
|
String flse_lim_stag = "";
|
String control_z = "";
|
String wat_shed_area = "";
|
String weir_top_elevation = "";
|
|
if (null != szInfo.getFlse_lim_stag())
|
flse_lim_stag = String.valueOf(szInfo.getFlse_lim_stag());
|
if (null != szInfo.getControl_z())
|
control_z = String.valueOf(szInfo.getControl_z());
|
if (null != szInfo.getWat_shed_area())
|
wat_shed_area = String.valueOf(szInfo.getWat_shed_area());
|
if (null != szInfo.getWeir_top_elevation())
|
weir_top_elevation = String.valueOf(szInfo.getWeir_top_elevation());
|
|
// 之前临时处理逻辑 --2024-06-20去除--
|
// switch (resNm) {
|
// case "高关水库":
|
// flse_lim_stag = "118";
|
// control_z = "117";
|
// wat_shed_area = "";
|
// break;
|
// case "王英水库":
|
// flse_lim_stag = "70";
|
// control_z = "67";
|
// wat_shed_area = "";
|
// break;
|
// case "吴岭水库":
|
// flse_lim_stag = "62.20";
|
// control_z = "";
|
// wat_shed_area = "102";
|
// break;
|
// case "富水水库":
|
// flse_lim_stag = "55";
|
// control_z = "54";
|
// wat_shed_area = "";
|
// break;
|
// case "漳河水库":
|
// flse_lim_stag = "122.6";
|
// control_z = "121.8";
|
// wat_shed_area = "";
|
// break;
|
// }
|
|
List<String> detailList = new ArrayList<>();
|
if (StringUtil.isNotBlank(weir_top_elevation)) {
|
detailList.add(StringUtil.format("堰顶高程{}米", weir_top_elevation));
|
}
|
if (StringUtil.isNotBlank(flse_lim_stag)) {
|
detailList.add(StringUtil.format("汛限水位{}米", flse_lim_stag));
|
}
|
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()));
|
}
|
if (ObjectUtil.isNotEmpty(dzkInfo.getTb_weir_top_elevation())) {
|
detailList.add(StringUtil.format("堰顶高程{}米", dzkInfo.getTb_weir_top_elevation()));
|
}
|
|
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;
|
}
|
|
}
|