ke
2024-07-19 08a962d2925baa255207fdf979e6fee794f1773b
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
@@ -1,5 +1,8 @@
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;
@@ -41,16 +44,74 @@
   //超正常中型水库
   private String overNormalMidInfo;
   public OverWord(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList){
   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, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList,List<TotalInfo> totalOverList, List<TotalInfo> totalOver10List){
   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());
@@ -58,11 +119,12 @@
      formatDzkInfo(dzkList);
      formatSzInfo(szInfoList);
      formatOverNormal(totalOverList,totalOver10List);
      formatOverNormal(totalOverList, totalOver10List);
   }
   /**
    * 构建超正常信息
    *
    * @param totalOverList
    * @param totalOver10List
    */
@@ -88,28 +150,28 @@
         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());
         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){
         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->{
            list.forEach(item -> {
               String reservoirName = item.split("~")[0];
               bigList.add(reservoirName);
            });
         }
         if (totalInfo.getMid_over_detail() != null){
         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->{
            list.forEach(item -> {
               String reservoirName = item.split("~")[0];
               midList.add(reservoirName);
            });
@@ -118,34 +180,34 @@
      String totalValue =
         StringUtil.format("今日{},全省共有{}座水库超正常水位,其中大型水库{}座、中型水库{}座、小型水库{}座。全省水库持续安全运行。全省病险水库中,有{}座超正常水位,有{}座没有超正常但超了控制运用水位",
            this.hour,total,big,mid,small,dangerCountTotal,overDangerCountTotal);
            this.hour, total, big, mid, small, dangerCountTotal, overDangerCountTotal);
      String totalOverNormal10Value = getOverNormal10(totalOver10List);
      String smallValue = "";
      if (smallList.size()>0){
         smallValue = String.join("、",smallList);
      }else {
      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 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= "    其中,没有超正常的中型水库。";
      if (midList.size() > 0) {
         midValue =
            StringUtil.format("    其中,超正常的中型水库有{}。", String.join("、", midList));
      } else {
         midValue = "    其中,没有超正常的中型水库。";
      }
      this.totalOverNormalInfo = totalValue;
      this.overNormalSmallInfo =smallValue;
      this.overNormalSmallInfo = smallValue;
      this.overNormalBigInfo = bigValue;
      this.overNormalMidInfo = midValue;
      this.totalOverNormal10Info = totalOverNormal10Value;
@@ -174,97 +236,124 @@
      String totalValue =
         StringUtil.format("今日{},全省共有{}座水库超正常水位,其中大型水库{}座、中型水库{}座、小型水库{}座。全省水库持续安全运行。全省病险水库中,有{}座超正常水位,有{}座没有超正常但超了控制运用水位",
            this.hour,total,big,mid,small,dangerCountTotal,overDangerCountTotal);
            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);
         String text = generateSzInfo(szInfo);
         list.add(text);
         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.provinceInfo = String.join("\n", list);
      this.zdInfo = String.join("\n", listZd);
   }
   private String generateSzInfo(SzInfo szInfo){
   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"));
      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"));
      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){
      if (szInfo.getDiff_rz() >= 0) {
         upOrDown = "上涨";
      }else {
      } else {
         upOrDown = "下降";
      }
      String flse_lim_stag="";
      String flse_lim_stag = "";
      String control_z = "";
      String wat_shed_area = "";
      String weir_top_elevation = "";
      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;
      }
      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(flse_lim_stag)){
         detailList.add(StringUtil.format("汛限水位{}米",flse_lim_stag));
      if (StringUtil.isNotBlank(weir_top_elevation)) {
         detailList.add(StringUtil.format("堰顶高程{}米", weir_top_elevation));
      }
      if (StringUtil.isNotBlank(control_z)){
         detailList.add(StringUtil.format("控制运用水位{}米",control_z));
      if (StringUtil.isNotBlank(flse_lim_stag)) {
         detailList.add(StringUtil.format("汛限水位{}米", flse_lim_stag));
      }
      if (StringUtil.isNotBlank(wat_shed_area)){
         detailList.add(StringUtil.format("集雨面积{}平方千米",wat_shed_area));
      if (StringUtil.isNotBlank(flse_lim_stag)) {
         detailList.add(StringUtil.format("汛限水位{}米", flse_lim_stag));
      }
      String detail = StringUtil.join(detailList,",");
      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);
         resNm, oldTm, oldRz, newTm, newRz, upOrDown, diffRz, detail);
      return text;
   }
   /**
    * 构建大中库信息
    *
    * @param dzkList
    */
   private void formatDzkInfo(List<DzkInfo> dzkList) {
@@ -289,45 +378,49 @@
//      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);
      this.overBigInfo = String.join("\n", bigListInfo);
      this.overMidInfo = String.join("\n", midListInfo);
   }
   private String generateDzkInfo(DzkInfo dzkInfo){
   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 (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.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.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.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_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_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);
      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){
   private void formatTotalInfo(List<TotalInfo> totalList) {
      String totalLabel = "全省水库超汛限:";
      String smallLable = "超汛限的小型水库有:";
@@ -349,22 +442,22 @@
         dangerCountTotal += totalInfo.getDanger_count_all();
         overDangerCountTotal += totalInfo.getOver_danger_count_all();
         if (totalInfo.getSmall_all() == 0){
         if (totalInfo.getSmall_all() == 0) {
            continue;
         }
         String smallRegionCout = StringUtil.format("{}{}座",totalInfo.getP_ad_name(),totalInfo.getSmall_all());
         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);
            this.hour, total, big, mid, small, dangerCountTotal, overDangerCountTotal);
      String smallValue = String.join("、",smallList);
      String smallValue = String.join("、", smallList);
      this.totalInfo = totalValue;
      this.overSmallInfo =smallValue;
      this.overSmallInfo = smallValue;
   }
}