ke
2024-07-19 08a962d2925baa255207fdf979e6fee794f1773b
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
@@ -1,5 +1,8 @@
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.entity.YwFloodReportInfo;
import cn.gistack.sm.sjztmd.util.MyDateUtils;
import cn.gistack.sm.sjztmd.word.vo.*;
import com.deepoove.poi.XWPFTemplate;
@@ -20,23 +23,43 @@
 */
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();
      return outputStream.toByteArray();
   }
   /**
    * 去除小数位为0的
    * @param num
    * @return
    */
   public static String removeTrailingZero(String num) {
      // 检查是否包含小数点
      if (num.contains(".")) {
         // 分割整数和小数部分
         String[] parts = num.split("\\.");
         if (parts.length == 2) {
            // 去除小数部分末尾的0,并检查是否仅剩下小数点(例如"123.")
            String decimalPart = parts[1].replaceAll("0+$", "").replaceAll("^\\.$", "");
            // 如果小数部分处理后为空,则返回整数部分;否则拼接整数和小数部分
            return decimalPart.isEmpty() ? parts[0] : parts[0] + "." + decimalPart;
         }
      }
      // 如果不包含小数点或处理失败,则返回原字符串
      return num;
   }
   /**
    * 根据水库id获取数据
    *
    * @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());
@@ -45,12 +68,12 @@
      params.put("河流名称", tbWordVO.getLocRvName());
      params.put("水库功能", tbWordVO.getResFuncText());
      params.put("调节性能", tbWordVO.getAdjustPropText());
      params.put("水库坝址以上控制流域面积", tbWordVO.getConArea());
      params.put("流域多年平均降雨量", tbWordVO.getMoyearRainAvg());
      params.put("多年平均年径流量", tbWordVO.getMoyearFlAvg());
      params.put("水库坝址以上控制流域面积", removeTrailingZero(tbWordVO.getConArea()));
      params.put("流域多年平均降雨量", removeTrailingZero(tbWordVO.getMoyearRainAvg()));
      params.put("多年平均年径流量", removeTrailingZero(tbWordVO.getMoyearFlAvg()));
      params.put("设计洪水标准", tbWordVO.getDesFlSta());
      params.put("校核洪水标准", tbWordVO.getChecFlSta());
      params.put("总库容", tbWordVO.getTotalCap());
      params.put("总库容", removeTrailingZero(tbWordVO.getTotalCap()));
      params.put("水文特征", tbWordVO.getHydrologicalCharacteristics());
      params.put("工程等别", tbWordVO.getEngGrad());
      params.put("挡水建筑物泄洪建筑物正常溢洪道", tbWordVO.getBuildingText());
@@ -87,11 +110,11 @@
   }
   public static byte[] GetOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList) throws Exception {
   public static byte[] GetOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList, List<SzInfo> szInfoList, List<SmsResultVO> dxyjList, List<CallTaskResultVO> whtjList, YwFloodReportInfo ywFloodReportInfo) throws Exception {
      InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/overFloodTemplate.docx");
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList);
      XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createOverWordParam(overWord));
      OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList, dxyjList, whtjList, null);
      XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createOverWordParam(overWord, ywFloodReportInfo));
      template.write(outputStream);
      outputStream.flush();
      outputStream.close();
@@ -99,19 +122,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();
@@ -128,16 +150,51 @@
      String dxStr = StringUtil.isNotBlank(overWord.getOverBigInfo()) ? "超汛限的水库的大型水库有:" : "";
      params.put("超汛限的水库的大型水库有", dxStr);
      params.put("大型水库详情", overWord.getOverBigInfo());
      String zxStr = StringUtil.isNotBlank(overWord.getOverMidInfo()) ? "超汛限的水库的中型水库有:" : "";
      params.put("超汛限的水库的中型水库有", zxStr);
      params.put("中型水库详情", overWord.getOverMidInfo());
      params.put("省直水库详情", overWord.getProvinceInfo());
      params.put("短信预警和外呼抽查", overWord.getSmsResultInfo());
      params.put("重点水库详情", overWord.getZdInfo());
      //不在汛期内
      if (!MyDateUtils.isTodayInFloodSeason()){
      if (!MyDateUtils.isTodayInFloodSeason()) {
         params.put("全省水库超正常", overWord.getTotalOverNormalInfo());
         params.put("全省水库超正常十厘米以上", overWord.getTotalOverNormal10Info());
         params.put("超正常小型水库详情", overWord.getOverNormalSmallInfo());
         params.put("超正常大型水库详情", overWord.getOverNormalBigInfo());
         params.put("超正常中型水库详情", overWord.getOverNormalMidInfo());
      }
      return params;
   }
   private static Map<String, Object> createOverWordParam(OverWord overWord, YwFloodReportInfo info) {
      Map<String, Object> params = new HashMap<>();
      params.put("时间", overWord.getTm());
      params.put("全省水库超汛限", overWord.getTotalInfo());
      params.put("小型水库详情", overWord.getOverSmallInfo());
      String dxStr = StringUtil.isNotBlank(overWord.getOverBigInfo()) ? "超汛限的水库的大型水库有:" : "";
      params.put("超汛限的水库的大型水库有", dxStr);
      params.put("大型水库详情", overWord.getOverBigInfo());
      String zxStr = StringUtil.isNotBlank(overWord.getOverMidInfo()) ? "超汛限的水库的中型水库有:" : "";
      params.put("超汛限的水库的中型水库有", zxStr);
      params.put("中型水库详情", overWord.getOverMidInfo());
      params.put("省直水库详情", overWord.getProvinceInfo());
      params.put("短信预警和外呼抽查", overWord.getSmsResultInfo());
      params.put("重点水库详情", overWord.getZdInfo());
      //不在汛期内
      if (!MyDateUtils.isTodayInFloodSeason()) {
         params.put("全省水库超正常", overWord.getTotalOverNormalInfo());
         params.put("全省水库超正常十厘米以上", overWord.getTotalOverNormal10Info());
         params.put("超正常小型水库详情", overWord.getOverNormalSmallInfo());
         params.put("超正常大型水库详情", overWord.getOverNormalBigInfo());
         params.put("超正常中型水库详情", overWord.getOverNormalMidInfo());
      }
      //昨日报汛
      params.put("昨日全省水库超汛限", info.getTotalInfo().replace("今日", "昨日"));
      params.put("昨日超汛限的小型水库有", info.getOversmallInfo());
      return params;
   }
@@ -153,4 +210,9 @@
   }
   public static OverWord GetOverInfo(List<TotalInfo> totalList) {
      OverWord overWord = new OverWord(totalList);
      return overWord;
   }
}