skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/controller/AlarmRecordController.java
@@ -162,4 +162,15 @@ return R.data(alarmRecordService.statisticAlarmRecord(alarmRecord)); } /** * 告警统计按告警分类-等级统计 * @param alarmRecord * @return */ @ApiOperation(value="告警记录-告警统计按告警分类-等级统计", notes="告警记录-告警统计按告警分类-等级统计") @GetMapping(value = "/statisticAlaByTypeAndLev") public R statisticAlaByTypeAndLev(AlarmRecordVO alarmRecord) { return R.data(alarmRecordService.statisticAlaByTypeAndLev(alarmRecord)); } } skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.java
@@ -74,4 +74,11 @@ List<StatisticAlarmRecord> statisticsPie(@Param("alarmRecord") AlarmRecordVO alarmRecordVO); /** * 告警统计按告警分类-等级统计 * @param alarmRecord * @return */ List<StatisticAlarmRecord> statisticAlaByTypeAndLev(@Param("alarmRecord") AlarmRecordVO alarmRecord); } skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -404,4 +404,44 @@ order by field(rule.alarm_level,'蓝色预警','黄色预警','橙色预警','红色预警') </select> <!--告警统计按告警分类-等级统计--> <select id="statisticAlaByTypeAndLev" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord"> SELECT count(*) num,type as ruleName,rule.alarm_level alarmLevel FROM YWXT.sm_alarm_record record LEFT JOIN ywxt.SM_ALARM_RULE rule on rule.id = record.alarm_rule_id LEFT JOIN SJZT_MD."att_res_base" arb on arb."guid" = record.reservoir_number LEFT JOIN SJZT_MD."rel_res_bas_loc" rrbl ON rrbl."res_guid" = record.reservoir_number LEFT JOIN SJZT_MD."att_bas_base" abb ON abb."code" = rrbl."bas_guid" LEFT JOIN SJZT_MD."att_bas_base" pabb ON abb."p_code" = pabb."code" where record.is_deleted = 0 and rule.type in ('渗压监测','渗流监测','变形监测','水情监测','雨情监测') <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''"> and arb."name" like concat('%',#{alarmRecord.reservoirName},'%') </if> <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''"> and rule.alarm_rule_type = #{alarmRecord.alarmRuleType} </if> <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''"> and rule.create_alarm_type = #{alarmRecord.createAlarmType} </if> <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''"> and rule.rule_name = #{alarmRecord.ruleName} </if> <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''"> and record.create_time >= #{alarmRecord.startTime} </if> <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''"> and record.create_time <= #{alarmRecord.endTime} </if> <if test="alarmRecord.resGuids != null and alarmRecord.resGuids !=''"> AND record.reservoir_number in <foreach collection="alarmRecord.resGuids.split(',')" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </if> group by type,rule.alarm_level </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/AlarmRecordService.java
@@ -44,4 +44,11 @@ Boolean updateStatus(AlarmRecord alarmRecord); Object statisticsPie(AlarmRecordVO alarmRecordVO); /** * 告警统计按告警分类-等级统计 * @param alarmRecord * @return */ Object statisticAlaByTypeAndLev(AlarmRecordVO alarmRecord); } skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java
@@ -182,4 +182,96 @@ List<StatisticAlarmRecord> list = baseMapper.statisticsPie(alarmRecordVO); return list; } /** * 告警统计按告警分类-等级统计 * @param alarmRecord * @return */ @Override public Object statisticAlaByTypeAndLev(AlarmRecordVO alarmRecord) { Map<String, Object> map = new HashMap<>(4); List<StatisticAlarmRecord> recordList = baseMapper.statisticAlaByTypeAndLev(alarmRecord); if (recordList.size()>0){ map.put("水情监测",setAlaStatisticListByData(recordList,"水情监测")); map.put("雨情监测",setAlaStatisticListByData(recordList,"雨情监测")); map.put("渗压监测",setAlaStatisticListByData(recordList,"渗压监测")); map.put("渗流监测",setAlaStatisticListByData(recordList,"渗流监测")); map.put("变形监测",setAlaStatisticListByData(recordList,"变形监测")); }else { map.put("水情监测",setAlaStatisticList()); map.put("雨情监测",setAlaStatisticList()); map.put("渗压监测",setAlaStatisticList()); map.put("渗流监测",setAlaStatisticList()); map.put("变形监测",setAlaStatisticList()); } return map; } /** * 设置组装预警统计数据-带参数 * @return */ private List<StatisticAlarmRecord> setAlaStatisticListByData(List<StatisticAlarmRecord> recordList, String typeName) { List<StatisticAlarmRecord> list = new ArrayList<>(); List<String> levelList = new ArrayList<>(){{ add("蓝色预警"); add("黄色预警"); add("橙色预警"); add("红色预警"); }}; List<String> alarmLevelList = recordList.stream() .filter(a -> a.getRuleName().equals(typeName)) .map(StatisticAlarmRecord::getAlarmLevel) .distinct() .collect(Collectors.toList()); // 先取差集 List<String> diffList = levelList.stream().filter(item -> !alarmLevelList.contains(item)).collect(Collectors.toList()); for (StatisticAlarmRecord alarmRecord : recordList) { if (alarmRecord.getRuleName().equals(typeName)){ StatisticAlarmRecord statisticAlarmRecord = new StatisticAlarmRecord(); statisticAlarmRecord.setAlarmLevel(alarmRecord.getAlarmLevel()); statisticAlarmRecord.setNum(alarmRecord.getNum()); list.add(statisticAlarmRecord); } } if (diffList.size()>0){ for (String level : diffList) { StatisticAlarmRecord statisticAlarmRecord = new StatisticAlarmRecord(); statisticAlarmRecord.setAlarmLevel(level); statisticAlarmRecord.setNum(0); list.add(statisticAlarmRecord); } } return list; } /** * 设置组装预警统计数据 * @return */ private List<StatisticAlarmRecord> setAlaStatisticList() { List<StatisticAlarmRecord> list = new ArrayList<>(); StatisticAlarmRecord statisticAlarmRecord1 = new StatisticAlarmRecord(); statisticAlarmRecord1.setAlarmLevel("蓝色预警"); statisticAlarmRecord1.setNum(0); StatisticAlarmRecord statisticAlarmRecord2 = new StatisticAlarmRecord(); statisticAlarmRecord2.setAlarmLevel("黄色预警"); statisticAlarmRecord2.setNum(0); StatisticAlarmRecord statisticAlarmRecord3 = new StatisticAlarmRecord(); statisticAlarmRecord3.setAlarmLevel("橙色预警"); statisticAlarmRecord3.setNum(0); StatisticAlarmRecord statisticAlarmRecord4 = new StatisticAlarmRecord(); statisticAlarmRecord4.setAlarmLevel("红色预警"); statisticAlarmRecord4.setNum(0); list.add(statisticAlarmRecord1); list.add(statisticAlarmRecord2); list.add(statisticAlarmRecord3); list.add(statisticAlarmRecord4); return list; } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java
@@ -4,6 +4,8 @@ import cn.gistack.alerts.sms.vo.SmsResultVO; import cn.gistack.resource.feign.IOssClient; import cn.gistack.resource.vo.MyMultipartFile; import cn.gistack.sm.intelligentCall.service.CallService; import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO; import cn.gistack.sm.sjztmd.entity.AttResBase; import cn.gistack.sm.sjztmd.feign.IAttResBaseClient; import cn.gistack.sm.sjztmd.feign.ISjztMdClient; @@ -47,10 +49,11 @@ private final ISmsRecordClient smsRecordClient; private final CallService callService; @Override @GetMapping(GENERATE_DAY_REPORT_FLOOD) public String generateDayReportFlood(String isShow) throws Exception{ public String generateDayReportFlood(String isShow) throws Exception { //获取总览、大中库、明细数据 @@ -73,37 +76,43 @@ vo.setResCode("0"); List<SmsResultVO> dxyjList = smsRecordClient.smsSuccessList(vo); HashMap<String,String> over10Params = new HashMap<>(); //外呼统计 CallTaskResultVO callTaskResult = new CallTaskResultVO(); callTaskResult.setStartTime(yesterday.format(formatter)); callTaskResult.setEndTime(yesterday.format(formatter)); List<CallTaskResultVO> whtjList = (List<CallTaskResultVO>) callService.getCallResultListTemp(null, callTaskResult); HashMap<String, String> over10Params = new HashMap<>(); //small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2 over10Params.put("small_start_stag", "0.1"); over10Params.put("mid_start_stag", "0.1"); over10Params.put("big_start_stag", "0.1"); HashMap<String,String> normalParams = new HashMap<>(); HashMap<String, String> normalParams = new HashMap<>(); //small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2 normalParams.put("small_start_stag", "0"); normalParams.put("mid_start_stag", "0"); normalParams.put("big_start_stag", "0"); List<TotalInfo> totalOverList = sjztmdService.getTotalOverInfo(isShow,normalParams); List<TotalInfo> totalOver10List = sjztmdService.getTotalOverInfo(isShow,over10Params); byte[] data = null; if (MyDateUtils.isTodayInFloodSeason()){ data = WordUtil.GetOverInfo(totalList,dzkList,overDetailList,szInfoList,dxyjList); }else { data= WordUtil.GetNotInSeasonOverInfo(totalList,dzkList,overDetailList,szInfoList,totalOverList,totalOver10List); List<TotalInfo> totalOverList = sjztmdService.getTotalOverInfo(isShow, normalParams); List<TotalInfo> totalOver10List = sjztmdService.getTotalOverInfo(isShow, over10Params); byte[] data = null; if (MyDateUtils.isTodayInFloodSeason()) { data = WordUtil.GetOverInfo(totalList, dzkList, overDetailList, szInfoList, dxyjList, whtjList); } else { data = WordUtil.GetNotInSeasonOverInfo(totalList, dzkList, overDetailList, szInfoList, totalOverList, totalOver10List); } // 创建响应实体并设置响应头,将输出流作为响应体返回给客户端 // InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(data)); String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String fileName = time + "全省水库防汛情况.docx"; MultipartFile file = new MyMultipartFile("file",fileName, "text/plain", data); MultipartFile file = new MyMultipartFile("file", fileName, "text/plain", data); String path = ossClient.uploadFile(fileName, file); return path; } private void createFile(String filePath,byte[] bytes){ private void createFile(String filePath, byte[] bytes) { // 将byte[]写入文件 try (FileOutputStream fos = new FileOutputStream(filePath)) { fos.write(bytes); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
@@ -4,6 +4,8 @@ import cn.gistack.alerts.sms.feign.ISmsRecordClient; import cn.gistack.alerts.sms.vo.SmsResultVO; import cn.gistack.sm.intelligentCall.service.CallService; import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO; import cn.gistack.sm.sjztmd.util.MyDateUtils; import cn.gistack.sm.sjztmd.word.service.ISjztmdService; import cn.gistack.sm.sjztmd.word.util.BriefReportUtil; @@ -14,6 +16,7 @@ import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Condition; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springframework.core.io.InputStreamResource; @@ -29,6 +32,7 @@ import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; @@ -51,6 +55,8 @@ private final ISjztmdService sjztmdService; private final ISmsRecordClient smsRecordClient; private final CallService callService; @GetMapping(value = "/getBriefReport") public R getBriefReport() { //获取总览、大中库、明细数据 @@ -92,17 +98,24 @@ //短信预警数量 SmsResultVO vo = new SmsResultVO(); // 获取当前日期 LocalDate today = LocalDate.now(); LocalDateTime now = LocalDateTime.now(); // 获取前一天日期 LocalDate yesterday = today.minusDays(1); LocalDateTime oneDayBefore = now.minusDays(1); // 格式化日期并打印 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); vo.setStartTime(yesterday.format(formatter)); vo.setEndTime(yesterday.format(formatter)); // 定义日期时间格式,包含年-月-日 时:分:秒 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); vo.setStartTime(oneDayBefore.format(formatter)); vo.setEndTime(now.format(formatter)); vo.setSmsType("2"); vo.setResCode("0"); vo.setIsExport(1); List<SmsResultVO> dxyjList = smsRecordClient.smsSuccessList(vo); //外呼统计 CallTaskResultVO callTaskResult = new CallTaskResultVO(); callTaskResult.setStartTime(oneDayBefore.format(formatter)); callTaskResult.setEndTime(now.format(formatter)); List<CallTaskResultVO> whtjList = (List<CallTaskResultVO>) callService.getCallResultListTemp(null,callTaskResult); HashMap<String,String> over10Params = new HashMap<>(); //small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2 @@ -121,7 +134,7 @@ List<TotalInfo> totalOver10List = sjztmdService.getTotalOverInfo(isShow,over10Params); byte[] data = null; if (MyDateUtils.isTodayInFloodSeason()){ data = WordUtil.GetOverInfo(totalList,dzkList,overDetailList,szInfoList,dxyjList); data = WordUtil.GetOverInfo(totalList,dzkList,overDetailList,szInfoList,dxyjList,whtjList); }else { data= WordUtil.GetNotInSeasonOverInfo(totalList,dzkList,overDetailList,szInfoList,totalOverList,totalOver10List); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
@@ -1,6 +1,7 @@ package cn.gistack.sm.sjztmd.word.util; import cn.gistack.alerts.sms.vo.SmsResultVO; import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO; import cn.gistack.sm.sjztmd.util.MyDateUtils; import cn.gistack.sm.sjztmd.word.vo.*; import com.deepoove.poi.XWPFTemplate; @@ -21,10 +22,10 @@ */ public class WordUtil { public static byte[] compileTemplateAndRenderData(TbWordVO tbWordVO,Map<String,Object> tableMap) throws Exception { public static byte[] compileTemplateAndRenderData(TbWordVO tbWordVO, Map<String, Object> tableMap) throws Exception { InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/skcgmb.docx"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createParams(tbWordVO,tableMap)); XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createParams(tbWordVO, tableMap)); template.write(outputStream); outputStream.flush(); outputStream.close(); @@ -37,7 +38,7 @@ * * @return */ private static Map<String, Object> createParams(TbWordVO tbWordVO,Map<String,Object> tableMap) { private static Map<String, Object> createParams(TbWordVO tbWordVO, Map<String, Object> tableMap) { Map<String, Object> params = new HashMap<>(); params.put("水库名称", tbWordVO.getResName()); params.put("市", tbWordVO.getCityName()); @@ -88,10 +89,10 @@ } public static byte[] GetOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList,List<SmsResultVO> dxyjList) throws Exception { public static byte[] GetOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList, List<SzInfo> szInfoList, List<SmsResultVO> dxyjList, List<CallTaskResultVO> whtjList) throws Exception { InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/overFloodTemplate.docx"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList, dxyjList); OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList, dxyjList, whtjList,null); XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createOverWordParam(overWord)); template.write(outputStream); outputStream.flush(); @@ -100,19 +101,18 @@ } /** * * @param totalList 全省水库超汛 * @param dzkList 大中库超汛 * @param overDetailList 超汛明细 * @param szInfoList 省直超汛 * @param totalOverList 超正常 * @param totalList 全省水库超汛 * @param dzkList 大中库超汛 * @param overDetailList 超汛明细 * @param szInfoList 省直超汛 * @param totalOverList 超正常 * @param totalOver10List 超正常10cm * @return */ public static byte[] GetNotInSeasonOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList, List<SzInfo> szInfoList, List<TotalInfo> totalOverList, List<TotalInfo> totalOver10List) throws Exception{ public static byte[] GetNotInSeasonOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList, List<SzInfo> szInfoList, List<TotalInfo> totalOverList, List<TotalInfo> totalOver10List) throws Exception { InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/inFloodSeason_overFloodTemplate.docx"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList,totalOverList,totalOver10List); OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList, totalOverList, totalOver10List); XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createOverWordParam(overWord)); template.write(outputStream); outputStream.flush(); @@ -135,7 +135,7 @@ params.put("省直水库详情", overWord.getProvinceInfo()); params.put("短信预警和外呼抽查", overWord.getSmsResultInfo()); //不在汛期内 if (!MyDateUtils.isTodayInFloodSeason()){ if (!MyDateUtils.isTodayInFloodSeason()) { params.put("全省水库超正常", overWord.getTotalOverNormalInfo()); params.put("全省水库超正常十厘米以上", overWord.getTotalOverNormal10Info()); params.put("超正常小型水库详情", overWord.getOverNormalSmallInfo()); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
@@ -1,6 +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; @@ -44,29 +46,55 @@ private String smsResultInfo; public OverWord(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList,List<SmsResultVO> resultVOList){ 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); formatSmsResultInfo(resultVOList, whtjList); } private void formatSmsResultInfo(List<SmsResultVO> resultVOList) { private void formatSmsResultInfo(List<SmsResultVO> resultVOList, List<CallTaskResultVO> whtjList) { // 短信预警处理 int dxyjCount = 0; for (SmsResultVO vo : resultVOList) { int number = null == vo.getNumber()?0:vo.getNumber(); int number = null == vo.getNumber() ? 0 : vo.getNumber(); dxyjCount = dxyjCount + number; } String str = StringUtil.format("过去24小时内,发送水库短信预警{}条,抽查黄冈、襄阳、随州、荆门水库防汛责任人XX人次,应答率XX,责任人履职情况总体较好。", dxyjCount); // 外呼统计处理 int cityNameIndex = 0; //记录增加行政区划次数 String cityNames = ""; //行政区划集合 int jtCount = 0; //接通的数量 for (CallTaskResultVO callTaskResultVO : whtjList) { 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; } } double jtl = Double.valueOf(jtCount) / whtjList.size() * 100; String str = StringUtil.format("过去24小时内,发送水库短信预警{}条,抽查{}等水库防汛责任人{}人次,应答率{},责任人履职情况总体较好。", dxyjCount,cityNames,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){ 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()); @@ -74,11 +102,12 @@ formatDzkInfo(dzkList); formatSzInfo(szInfoList); formatOverNormal(totalOverList,totalOver10List); formatOverNormal(totalOverList, totalOver10List); } /** * 构建超正常信息 * * @param totalOverList * @param totalOver10List */ @@ -104,28 +133,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); }); @@ -134,34 +163,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; @@ -190,13 +219,14 @@ 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) { @@ -209,78 +239,79 @@ } // this.provinceInfo = String.join("\n\r\r\r\r",list); this.provinceInfo = String.join("\n",list); this.provinceInfo = String.join("\n", list); } 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 = ""; switch (resNm){ switch (resNm) { case "高关水库": flse_lim_stag = "118"; control_z="117"; control_z = "117"; wat_shed_area = "303"; break; case "王英水库": flse_lim_stag = "70"; control_z="67"; control_z = "67"; wat_shed_area = "243"; break; case "吴岭水库": flse_lim_stag = "62.20"; control_z=""; control_z = ""; wat_shed_area = "102"; break; case "富水水库": flse_lim_stag = "57"; control_z="55"; control_z = "55"; wat_shed_area = "2450"; break; case "漳河水库": flse_lim_stag = "122.6"; control_z="122"; 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(flse_lim_stag)) { detailList.add(StringUtil.format("汛限水位{}米", flse_lim_stag)); } if (StringUtil.isNotBlank(control_z)){ detailList.add(StringUtil.format("控制运用水位{}米",control_z)); if (StringUtil.isNotBlank(control_z)) { detailList.add(StringUtil.format("控制运用水位{}米", control_z)); } if (StringUtil.isNotBlank(wat_shed_area)){ detailList.add(StringUtil.format("集雨面积{}平方千米",wat_shed_area)); if (StringUtil.isNotBlank(wat_shed_area)) { detailList.add(StringUtil.format("集雨面积{}平方千米", wat_shed_area)); } String detail = StringUtil.join(detailList,","); 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) { @@ -305,45 +336,46 @@ // 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())); } 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 = "超汛限的小型水库有:"; @@ -365,22 +397,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; } }