xieb
2024-06-19 064310d4a4566c020606338adb9c74ec3479a9af
每日报汛增加外呼统计
4 files modified
270 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java 35 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java 25 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java 28 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java 182 ●●●●● patch | view | raw | blame | history
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;
    }
}