| | |
| | | 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; |
| | |
| | | */ |
| | | 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()); |
| | |
| | | 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()); |
| | |
| | | } |
| | | |
| | | |
| | | 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(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @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(); |
| | |
| | | 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; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | public static OverWord GetOverInfo(List<TotalInfo> totalList) { |
| | | |
| | | OverWord overWord = new OverWord(totalList); |
| | | return overWord; |
| | | } |
| | | } |