From a8385a2b16593c8c6db45c2f45f88f04b099fddd Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 04 Dec 2023 11:20:49 +0800
Subject: [PATCH] 超汛日报excel、word导出

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplateNoFormula.xlsx                      |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/SzInfo.java                         |   26 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java                       |  222 ++++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplate.xlsx                               |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/DzkInfo.java                        |   79 +++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx                             |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.doc                              |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TotalInfo.java                      |   58 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverDetail.java                     |   71 ++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java                     |  106 ++++--
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java |   32 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/ExcelUtil.java                    |  204 +++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java    |   51 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java            |   12 
 14 files changed, 811 insertions(+), 50 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
index 784ff99..3d67b66 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
@@ -3,8 +3,9 @@
 
 
 import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
+import cn.gistack.sm.sjztmd.word.util.ExcelUtil;
 import cn.gistack.sm.sjztmd.word.util.WordUtil;
-import cn.gistack.sm.sjztmd.word.vo.TbWordVO;
+import cn.gistack.sm.sjztmd.word.vo.*;
 import com.deepoove.poi.XWPFTemplate;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
@@ -19,9 +20,11 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -56,12 +59,18 @@
 			.body(resource); // 将InputStreamResource对象作为响应体
 	}
 
-	@GetMapping("/download/eightFloodInfo")
-	public ResponseEntity eightFloodInfo() throws Exception{
+	@GetMapping("/download/overFloodInfo")
+	public ResponseEntity overFloodInfo() throws Exception{
 		String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
-
 		String fileName =  time+ "全省水库防汛情况.docx";
-		byte[] data = WordUtil.GetEightFloodInfo();
+		String fileNameURL = URLEncoder.encode(fileName, "UTF-8");
+		//获取总览、大中库、明细数据
+		List<TotalInfo> totalList = sjztmdService.getTotalInfo();
+		List<DzkInfo> dzkList = sjztmdService.getDzkInfo();
+		List<OverDetail> overDetailList = sjztmdService.getOverDetailInfo();
+		List<SzInfo> szInfoList = sjztmdService.getSzInfo();
+
+		byte[] data = WordUtil.GetOverInfo(totalList,dzkList,overDetailList,szInfoList);
 
 		// 创建响应实体并设置响应头,将输出流作为响应体返回给客户端
 		InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(data));
@@ -69,8 +78,19 @@
 		// 将临时文件添加到响应中,以便用户下载
 		return ResponseEntity.ok()
 			.contentType(MediaType.APPLICATION_OCTET_STREAM) // 设置响应的内容类型为二进制流(octet stream)
-			.header("Content-Disposition", "attachment; filename=\"" + fileName) // 设置响应的Content-Disposition头,以便浏览器提示用户下载文件
+			.header("Content-Disposition", "attachment; filename=\"" + fileNameURL) // 设置响应的Content-Disposition头,以便浏览器提示用户下载文件
 			.body(resource); // 将InputStreamResource对象作为响应体
 	}
 
+	@GetMapping("/download/getOverFloodInfoExcel")
+	public void getOverFloodInfoExcel(HttpServletResponse response) throws Exception {
+
+		//获取总览、大中库、明细数据
+		List<TotalInfo> totalList = sjztmdService.getTotalInfo();
+		List<DzkInfo> dzkList = sjztmdService.getDzkInfo();
+		List<OverDetail> overDetailList = sjztmdService.getOverDetailInfo();
+
+		ExcelUtil.generateExcel(response,totalList,dzkList,overDetailList);
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java
index 5316433..585e34c 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java
@@ -1,6 +1,8 @@
 package cn.gistack.sm.sjztmd.word.service;
 
-import cn.gistack.sm.sjztmd.word.vo.TbWordVO;
+import cn.gistack.sm.sjztmd.word.vo.*;
+
+import java.util.List;
 
 public interface ISjztmdService {
 
@@ -11,4 +13,12 @@
 	 */
 	TbWordVO getTbWordVO(String resCd);
 
+
+	List<TotalInfo> getTotalInfo();
+
+	List<DzkInfo> getDzkInfo();
+
+	List<OverDetail> getOverDetailInfo();
+
+    List<SzInfo> getSzInfo();
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java
index 0be851b..d0f5a55 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java
@@ -5,10 +5,11 @@
 import cn.gistack.sm.sjztmd.mapper.SjztMdMapper;
 import cn.gistack.sm.sjztmd.service.*;
 import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
-import cn.gistack.sm.sjztmd.word.vo.TbWordVO;
+import cn.gistack.sm.sjztmd.word.vo.*;
 import cn.gistack.sm.sjztods.constant.ZtApiUrlConstant;
 import cn.gistack.sm.sjztods.constant.ZtConfigConstant;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.parser.Feature;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -30,6 +31,16 @@
 @AllArgsConstructor
 @DS("zt")
 public class SjztmdServiceImpl implements ISjztmdService {
+
+	//总计
+	private final String RIBAO_SHEET1_TOTAL_URL = "/services/1234567890ABCDEFGHIJKLMN/ribao_sheet1/api?small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2";
+	//中大型水库
+	private final String RIBAO_SHEET2_ZDX_URL = "/services/1234567890ABCDEFGHIJKLMN/ribao/sheet2_zdx/api?mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2";
+	//超汛明细
+	private final String RIBAO_SHEET3_OVER_STAG_LIST_URL = "/services/1234567890ABCDEFGHIJKLMN/ribao/sheet3_over_stag_list/api?small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2";
+	//省直管
+	private final String SZ_INFO = "/services/1234567890ABCDEFGHIJKLMN/ribao/shengzh_new_rz/api";
+
 	@Autowired
 	private RestTemplate restTemplate;
 	private final SjztMdMapper mapper;
@@ -75,6 +86,42 @@
 		return tbWordVO;
 	}
 
+
+
+
+
+	@Override
+	public  List<TotalInfo> getTotalInfo(){
+		JSONObject ztData = this.getZtData(null, RIBAO_SHEET1_TOTAL_URL);
+		JSONArray data = ztData.getJSONArray("data");
+		List<TotalInfo> list = data.toJavaList(TotalInfo.class);
+		return list;
+	}
+
+	@Override
+	public List<DzkInfo> getDzkInfo() {
+		JSONObject ztData = this.getZtData(null, RIBAO_SHEET2_ZDX_URL);
+		JSONArray data = ztData.getJSONArray("data");
+		List<DzkInfo> list = data.toJavaList(DzkInfo.class);
+		return list;
+	}
+
+	@Override
+	public List<OverDetail> getOverDetailInfo() {
+		JSONObject ztData = this.getZtData(null, RIBAO_SHEET3_OVER_STAG_LIST_URL);
+		JSONArray data = ztData.getJSONArray("data");
+		List<OverDetail> list = data.toJavaList(OverDetail.class);
+		return list;
+	}
+
+	@Override
+	public List<SzInfo> getSzInfo() {
+		JSONObject ztData = this.getZtData(null, SZ_INFO);
+		JSONArray data = ztData.getJSONArray("data");
+		List<SzInfo> list = data.toJavaList(SzInfo.class);
+		return list;
+	}
+
 	/**
 	 * 调用接口获取中台数据
 	 */
@@ -98,7 +145,7 @@
 		try {
 			//有请求头,有参数请求
 			ResponseEntity<String> responseEntity =
-				restTemplate.exchange(url + params,
+				restTemplate.exchange(url,
 					HttpMethod.GET,
 					formEntity,
 					String.class);
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/ExcelUtil.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/ExcelUtil.java
new file mode 100644
index 0000000..6f3d73b
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/ExcelUtil.java
@@ -0,0 +1,204 @@
+package cn.gistack.sm.sjztmd.word.util;
+
+import ch.qos.logback.core.pattern.FormatInfo;
+import cn.gistack.sm.sjztmd.word.vo.DzkInfo;
+import cn.gistack.sm.sjztmd.word.vo.OverDetail;
+import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.util.FileUtils;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillWrapper;
+import org.springblade.core.tool.utils.StringUtil;
+
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+/**
+ * excel工具类
+ */
+public class ExcelUtil {
+
+
+	public static void generateExcel(HttpServletResponse response, List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList) throws Exception {
+
+		String tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
+		HashMap<String,String> map = new HashMap<>();
+		map.put("time",tm);
+
+		HashMap<String, Object> info = formatInfo(totalList, dzkList, overDetailList);
+		info.put("time",tm);
+
+		//获取模板(带公式的模板需要文件编辑之后才会显示正常数据)
+		InputStream inputStream = ExcelUtil.class.getClassLoader().getResourceAsStream("excel/xlsx/totalTemplateNoFormula.xlsx");
+		String fileName = StringUtil.format("水库超汛限水位情况计表({}).xlsx",tm);
+		ExcelWriter excelWriter = EasyExcel.write(getOutputStream(fileName, response)).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).build();
+		//设置公式生效
+//		excelWriter.writeContext().writeWorkbookHolder().getWorkbook().setForceFormulaRecalculation(true);
+		WriteSheet writeSheet1 = EasyExcel.writerSheet(0,"总表").build();
+		WriteSheet writeSheet2 = EasyExcel.writerSheet(1,"大中库").build();
+		WriteSheet writeSheet3 = EasyExcel.writerSheet(2,"明细").build();
+
+
+
+		// 这个传进去的 map 就是非表格数据,详见我定义的模板中图片位置上方那部分
+		excelWriter.fill(info, writeSheet1);
+		excelWriter.fill(new FillWrapper("data", totalList), writeSheet1);
+
+		excelWriter.fill(map, writeSheet2);
+		excelWriter.fill(new FillWrapper("data", dzkList), writeSheet2);
+
+		excelWriter.fill(map, writeSheet3);
+		excelWriter.fill(new FillWrapper("data", overDetailList), writeSheet3);
+		excelWriter.finish();
+	}
+
+	private static HashMap<String,Object> formatInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList) {
+		HashMap<String,Object> info = new HashMap<>();
+
+		int overTotal = 0;
+		int overBig = 0;
+		int overMid = 0;
+		int overSmall = 0;
+
+		int wzTotal = 0;
+		int wzBig = 0;
+		int wzMid = 0;
+		int wzSmall = 0;
+
+		int yzTotal=0;
+		int yzBig = 0;
+		int yzMid = 0;
+		int  yzSmall = 0;
+
+		int dangerTotal = 0;
+		int dangerBig = 0;
+		int dangerMid = 0;
+		int dangerSmall = 0;
+
+		int overDangerTotal = 0;
+		int overDangerBig = 0;
+		int overDangerMid = 0;
+		int overDangerSmall = 0;
+
+		//给总览加序号
+		for (int i = 0; i < totalList.size(); i++) {
+
+			TotalInfo totalInfo = totalList.get(i);
+
+			totalInfo.setIndex(String.valueOf(i+1));
+
+			overTotal+=isNull(totalInfo.getCount_all());
+			overBig +=isNull(totalInfo.getBig_all());
+			overMid +=isNull(totalInfo.getMid_all());
+			overSmall +=isNull(totalInfo.getSmall_all());
+
+			wzTotal +=isNull(totalInfo.getWz_count_all());
+			wzBig+=isNull(totalInfo.getWz_big());
+			wzMid+=isNull(totalInfo.getWz_mid());
+			wzSmall+=isNull(totalInfo.getWz_small());
+
+			yzTotal+=isNull(totalInfo.getYz_count_all());
+			yzBig+=isNull(totalInfo.getYz_big());
+			yzMid +=isNull(totalInfo.getYz_mid());
+			yzSmall += isNull(totalInfo.getYz_small());
+
+			dangerTotal +=isNull(totalInfo.getDanger_count_all());
+			dangerBig +=isNull(totalInfo.getDanger_big_all());
+			dangerMid += isNull(totalInfo.getDanger_mid_all());
+			dangerSmall += isNull(totalInfo.getDanger_small_all());
+
+			overDangerTotal +=isNull(totalInfo.getOver_danger_count_all());
+			overDangerBig += isNull(totalInfo.getOver_danger_big_all());
+			overDangerMid += isNull(totalInfo.getOver_danger_mid_all());
+			overDangerSmall += isNull(totalInfo.getOver_danger_small_all());
+		}
+		info.put("overTotal", overTotal);
+		info.put("overBig", overBig);
+		info.put("overMid", overMid);
+		info.put("overSmall", overSmall);
+
+		info.put("wzTotal", wzTotal);
+		info.put("wzBig", wzBig);
+		info.put("wzMid", wzMid);
+		info.put("wzSmall", wzSmall);
+
+		info.put("yzTotal", yzTotal);
+		info.put("yzBig", yzBig);
+		info.put("yzMid", yzMid);
+		info.put("yzSmall", yzSmall);
+
+		info.put("dangerTotal", dangerTotal);
+		info.put("dangerBig", dangerBig);
+		info.put("dangerMid", dangerMid);
+		info.put("dangerSmall", dangerSmall);
+
+		info.put("overDangerTotal", overDangerTotal);
+		info.put("overDangerBig", overDangerBig);
+		info.put("overDangerMid", overDangerMid);
+		info.put("overDangerSmall", overDangerSmall);
+
+		//给大中库加序号、是否病险转换
+		for (int i = 0; i < dzkList.size(); i++) {
+			dzkList.get(i).setIndex(String.valueOf(i+1));
+			if (dzkList.get(i).getIs_danger() != null){
+				if (dzkList.get(i).getIs_danger()){
+					dzkList.get(i).setIs_dangerText("1");
+				}else if (!dzkList.get(i).getIs_danger()){
+					dzkList.get(i).setIs_dangerText("0");
+				}
+			}
+		}
+
+		//给明细是否病险转换
+		for (int i = 0; i < overDetailList.size(); i++) {
+			if (overDetailList.get(i).getIs_danger() != null){
+				if (overDetailList.get(i).getIs_danger()){
+					overDetailList.get(i).setIs_dangerText("1");
+				}else if (!overDetailList.get(i).getIs_danger()){
+					overDetailList.get(i).setIs_dangerText("0");
+				}
+			}
+		}
+
+		return info;
+	}
+
+	/**
+	 * 导出文件时为Writer生成OutputStream.
+	 *
+	 * @param fileName 文件名
+	 * @param response response
+	 * @return ""
+	 */
+	public static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {
+		try {
+			fileName = URLEncoder.encode(fileName, "UTF-8");
+			response.setContentType("application/vnd.ms-excel");
+			response.setCharacterEncoding("utf8");
+			response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
+			return response.getOutputStream();
+		} catch (IOException e) {
+			throw new Exception("导出excel表格失败!", e);
+		}
+	}
+
+	public static Integer isNull(Integer num){
+		if (num == null){
+			return 0;
+		}else {
+			return num;
+		}
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
index 2f9a089..b180882 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
@@ -1,10 +1,13 @@
 package cn.gistack.sm.sjztmd.word.util;
 
-import cn.gistack.sm.sjztmd.word.vo.TbWordVO;
+import cn.gistack.sm.sjztmd.word.vo.*;
 import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.data.NumbericRenderData;
 
 import java.io.*;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -25,25 +28,10 @@
 		return outputStream.toByteArray();
 	}
 
-	public static byte[] GetEightFloodInfo() throws Exception{
-		String templatePath = "word/doc/eightFloodInfoTemplate.docx";
-		HashMap<String,Object> map = new HashMap<>();
-		byte[] bytes = GenerateWord(templatePath, map);
-		return bytes;
-	}
-
-	private static byte[] GenerateWord(String templatePath,Object object) throws Exception {
-		InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream(templatePath);
-		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-		XWPFTemplate template = XWPFTemplate.compile(inputStream).render(object);
-		template.write(outputStream);
-		outputStream.flush();
-		outputStream.close();
-		return outputStream.toByteArray();
-	}
 
 	/**
 	 * 根据水库id获取数据
+	 *
 	 * @return
 	 */
 	private static Map<String, Object> createParams(TbWordVO tbWordVO) {
@@ -53,7 +41,7 @@
 		params.put("县", tbWordVO.getCountyName());
 		params.put("镇", tbWordVO.getTownName());
 		params.put("河流名称", tbWordVO.getLocRvName());
-		params.put("水库功能",tbWordVO.getResFuncText());
+		params.put("水库功能", tbWordVO.getResFuncText());
 		params.put("调节性能", tbWordVO.getAdjustPropText());
 		params.put("水库坝址以上控制流域面积", tbWordVO.getConArea());
 		params.put("流域多年平均降雨量", tbWordVO.getMoyearRainAvg());
@@ -62,34 +50,70 @@
 		params.put("校核洪水标准", tbWordVO.getChecFlSta());
 		params.put("总库容", tbWordVO.getTotalCap());
 		params.put("水文特征", tbWordVO.getHydrologicalCharacteristics());
-		params.put("工程等别",tbWordVO.getEngGrad());
-		params.put("挡水建筑物泄洪建筑物正常溢洪道",tbWordVO.getBuildingText());
-		params.put("主坝信息",tbWordVO.getMainDamInfo());
-		params.put("挡水建筑物泄洪建筑物正常溢洪道等详情",tbWordVO.getBuildingInfo());
-		params.put("输水建筑物输水道形式",tbWordVO.getAqueductType());//若有两个以上输水建筑物,则描述设计流量较大的,若只有一个输水建筑物则去掉“主要”
-		params.put("断面尺寸",tbWordVO.getSection());
-		params.put("进口底槛高程",tbWordVO.getThresholdElevation());
-		params.put("设计流量",tbWordVO.getDesignFlow());
-		params.put("电站信息",tbWordVO.getPowerStationInfo());
-		params.put("保护城市",tbWordVO.getProtectCity());
-		params.put("保护人口保护耕地",tbWordVO.getProtectPersonLand());
-		params.put("保护铁路",tbWordVO.getProtectThings());//铁路、公路、管线、企业几个依次罗列,超过三个列出第二个后为“XX等”,后面不需罗列
-		params.put("经济效益",tbWordVO.getEconomicBenefit());//若既有灌溉又有供水,则有“此外,”,无灌溉有供水直接介绍供水
-		params.put("工程始建时间",tbWordVO.getStartTime());
-		params.put("下闸蓄水时间",tbWordVO.getWaterStorageTm());
+		params.put("工程等别", tbWordVO.getEngGrad());
+		params.put("挡水建筑物泄洪建筑物正常溢洪道", tbWordVO.getBuildingText());
+		params.put("主坝信息", tbWordVO.getMainDamInfo());
+		params.put("挡水建筑物泄洪建筑物正常溢洪道等详情", tbWordVO.getBuildingInfo());
+		params.put("输水建筑物输水道形式", tbWordVO.getAqueductType());//若有两个以上输水建筑物,则描述设计流量较大的,若只有一个输水建筑物则去掉“主要”
+		params.put("断面尺寸", tbWordVO.getSection());
+		params.put("进口底槛高程", tbWordVO.getThresholdElevation());
+		params.put("设计流量", tbWordVO.getDesignFlow());
+		params.put("电站信息", tbWordVO.getPowerStationInfo());
+		params.put("保护城市", tbWordVO.getProtectCity());
+		params.put("保护人口保护耕地", tbWordVO.getProtectPersonLand());
+		params.put("保护铁路", tbWordVO.getProtectThings());//铁路、公路、管线、企业几个依次罗列,超过三个列出第二个后为“XX等”,后面不需罗列
+		params.put("经济效益", tbWordVO.getEconomicBenefit());//若既有灌溉又有供水,则有“此外,”,无灌溉有供水直接介绍供水
+		params.put("工程始建时间", tbWordVO.getStartTime());
+		params.put("下闸蓄水时间", tbWordVO.getWaterStorageTm());
 		// 鉴定时间 > 除险加固
-		params.put("安全鉴定和除险加固",tbWordVO.getSafetyMonitorText());
+		params.put("安全鉴定和除险加固", tbWordVO.getSafetyMonitorText());
 		// 鉴定时间 < 除险加固
 		//params.put("安全鉴定和除险加固","2012年9月,水库进行安全鉴定,鉴定结果为“三类坝”(加一个双引号),工程主要存在问题为坝顶及心墙顶欠高,大坝渗透系数偏大,溢洪道过流能力不足、边墙高度不足等(加一个“等”)。
 		// 针对水库安全鉴定发现的问题,水库除险加固工程于2019年11月动工,2022年6月蓄水验收。");
-		params.put("管理单位名称",tbWordVO.getMUnitName());
-		params.put("管理单位性质",tbWordVO.getMUnitNature());
-		params.put("主管部门",tbWordVO.getCUnitName());// 水库基本信息表,不是填报表
-		params.put("管理单位职工人数",tbWordVO.getMUnitPersonNumber());
-		params.put("主管部门责任人",tbWordVO.getCompetentDepartmentInfo());  // 责任人信息表,不是填报表
-		params.put("行政主管单位",tbWordVO.getAdministrativeUnit());
-		params.put("行政责任人职务手机号码",tbWordVO.getAdministrativeInfo()); // 责任人信息表,不是填报表
+		params.put("管理单位名称", tbWordVO.getMUnitName());
+		params.put("管理单位性质", tbWordVO.getMUnitNature());
+		params.put("主管部门", tbWordVO.getCUnitName());// 水库基本信息表,不是填报表
+		params.put("管理单位职工人数", tbWordVO.getMUnitPersonNumber());
+		params.put("主管部门责任人", tbWordVO.getCompetentDepartmentInfo());  // 责任人信息表,不是填报表
+		params.put("行政主管单位", tbWordVO.getAdministrativeUnit());
+		params.put("行政责任人职务手机号码", tbWordVO.getAdministrativeInfo()); // 责任人信息表,不是填报表
 		return params;
 	}
 
+
+	public static byte[] GetOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList) 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));
+		template.write(outputStream);
+		outputStream.flush();
+		outputStream.close();
+		return outputStream.toByteArray();
+	}
+
+	private static Map<String, Object> createOverWordParam(OverWord overWord) {
+		Map<String, Object> params = new HashMap<>();
+
+		params.put("时间", overWord.getTm());
+		params.put("全省水库超汛限", overWord.getTotalInfo());
+		params.put("小型水库详情", overWord.getOverSmallInfo());
+		params.put("大型水库详情", overWord.getOverBigInfo());
+		params.put("中型水库详情", overWord.getOverMidInfo());
+		params.put("省直水库详情", overWord.getProvinceInfo());
+
+		return params;
+
+	}
+
+	private static byte[] GenerateWord(String templatePath, Object object) throws Exception {
+		InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream(templatePath);
+		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+		XWPFTemplate template = XWPFTemplate.compile(inputStream).render(object);
+		template.write(outputStream);
+		outputStream.flush();
+		outputStream.close();
+		return outputStream.toByteArray();
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/DzkInfo.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/DzkInfo.java
new file mode 100644
index 0000000..50c0a44
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/DzkInfo.java
@@ -0,0 +1,79 @@
+package cn.gistack.sm.sjztmd.word.vo;
+
+import lombok.Data;
+
+@Data
+public class DzkInfo {
+	private String index;
+
+	//父行政区划名
+	private String p_ad_name;
+
+	//行政区划
+	private String ad_name;
+
+	//水库名称
+	private String res_name;
+
+	//工程类型
+	private String eng_scal;
+
+	//24h降雨
+	private Double drp;
+
+	//水位
+	private Double rz;
+
+	//汛限水位
+	private Double tb_flse_lim_stag;
+
+	//比汛限
+	private Double over_stag;
+
+	//是否病险
+	private Boolean is_danger;
+	private String is_dangerText;
+
+	//控制运用水位
+	private Double tb_control_z;
+
+	//比控制水位
+	private Double over_control_z;
+
+	//堰顶高程
+	private Double tb_weir_top_elevation;
+
+	//总库容
+	private Double tot_cap;
+
+	//集雨面积
+	private Double wat_shed_area;
+
+	//是否有闸
+	private String is_gate;
+
+	//溢洪道型式
+	private String spillway_type;
+
+	//出库流量
+	private Double otq;
+
+	//溢洪道最大泄洪量
+	private Double sum_all;
+
+	//除险加固时间
+	private String reinforce_tm;
+
+	//坝型
+	private String dam_type;
+
+	//备注
+	private String note;
+
+	//时间
+	private String tm;
+
+	//正常蓄水位
+	private Double tb_norm_pool_stag;
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverDetail.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverDetail.java
new file mode 100644
index 0000000..98d670b
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverDetail.java
@@ -0,0 +1,71 @@
+package cn.gistack.sm.sjztmd.word.vo;
+
+import lombok.Data;
+
+/**
+ * 超汛明细
+ */
+@Data
+public class OverDetail {
+		//市
+		private String p_ad_name;
+		//县
+		private String ad_name;
+		//水库地点
+		private String res_loc;
+
+		//水库名称
+		private String res_name;
+		//工程规模
+		private String eng_scal;
+		//是否有闸
+		private String is_gate;
+		//当日水位
+		private String rz;
+
+		//堰顶
+		private String tb_weir_top_elevation;
+
+		//汛限
+		private String tb_flse_lim_stag;
+
+		//正常
+		private String tb_norm_pool_stag;
+
+		//设计
+		private String tb_des_fl_stag;
+
+		//校核
+		private String tb_chec_fl_stag;
+
+		//比堰顶
+		private String over_weir_top_elevation;
+
+		//比汛限
+		private String over_flse_lim_stag;
+
+		//比正常
+		private String over_norm_pool_stag;
+
+		//出库流量
+		private String otq;
+
+		//注册登记号
+		private String res_reg_code;
+
+		//是否病险
+		private Boolean is_danger;
+		private String is_dangerText;
+
+		//控制运用水位
+		private String tb_control_z;
+
+		//比控制水位
+		private String over_control_z;
+
+		//连续超汛天数
+		private String consecutive_cnt;
+
+		//时间
+		private String tm;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
new file mode 100644
index 0000000..d7e9ff5
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
@@ -0,0 +1,222 @@
+package cn.gistack.sm.sjztmd.word.vo;
+
+import lombok.Data;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Data
+public class OverWord {
+
+	private String tm;
+	private String hour;
+
+	//超汛限
+	private String totalInfo;
+	private String overSmallInfo;
+	private String overBigInfo;
+	private String overMidInfo;
+
+	//省直水库
+	private String provinceInfo;
+
+	public OverWord(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList){
+		this.tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
+		this.hour = new SimpleDateFormat("H时").format(new Date());
+
+		formatTotalInfo(totalList);
+		formatDzkInfo(dzkList);
+		formatSzInfo(szInfoList);
+	}
+
+	/**
+	 * 构建省直信息
+	 * @param szInfoList
+	 */
+	private void formatSzInfo(List<SzInfo> szInfoList) {
+		List<String> list = new ArrayList<>();
+
+		for (int i = 0; i < szInfoList.size(); i++) {
+			SzInfo szInfo = szInfoList.get(i);
+			String text = generateSzInfo(szInfo);
+			list.add(text);
+		}
+
+		this.provinceInfo = String.join("\n\r\r\r\r",list);
+	}
+
+	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"));
+		Double oldRz = szInfo.getOld_rz();
+
+		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 (diffRz>=0){
+			upOrDown = "上涨";
+		}else {
+			upOrDown = "下降";
+		}
+		String flse_lim_stag="";
+		String control_z = "";
+		String wat_shed_area = "";
+
+		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;
+		}
+
+		List<String> detailList = new ArrayList<>();
+		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(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);
+
+		return text;
+	}
+
+	/**
+	 * 构建大中库信息
+	 * @param dzkList
+	 */
+	private void formatDzkInfo(List<DzkInfo> dzkList) {
+
+		//大型
+		List<DzkInfo> bigList = dzkList.stream().filter(dzkInfo -> dzkInfo.getEng_scal().indexOf("大") > -1).collect(Collectors.toList());
+		//中型
+		List<DzkInfo> midList = dzkList.stream().filter(dzkInfo -> dzkInfo.getEng_scal().indexOf("中") > -1).collect(Collectors.toList());
+
+		List<String> bigListInfo = new ArrayList<>();
+		List<String> midListInfo = new ArrayList<>();
+		for (int i = 0; i < bigList.size(); i++) {
+			DzkInfo dzkInfo = bigList.get(i);
+			bigListInfo.add(generateDzkInfo(dzkInfo));
+		}
+
+		for (int i = 0; i < midList.size(); i++) {
+			DzkInfo dzkInfo = midList.get(i);
+			midListInfo.add(generateDzkInfo(dzkInfo));
+		}
+
+		this.overBigInfo = String.join("\n\r\r\r\r",bigListInfo);
+		this.overMidInfo = String.join("\n\r\r\r\r",midListInfo);
+	}
+
+	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 (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.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_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);
+
+		return text;
+	}
+
+	/**
+	 * 构建全省水库超汛限信息
+	 * @param totalList
+	 * @return
+	 */
+	private void formatTotalInfo(List<TotalInfo> totalList){
+		String totalLabel = "全省水库超汛限:";
+		String smallLable = "超汛限的小型水库有:";
+
+		int total = 0;
+		int big = 0;
+		int mid = 0;
+		int small = 0;
+		int dangerCountTotal = 0;
+		int overDangerCountTotal = 0;
+		List<String> smallList = new ArrayList<>();
+
+
+		for (int i = 0; i < totalList.size(); i++) {
+			TotalInfo totalInfo = totalList.get(i);
+			total += totalInfo.getCount_all();
+			big += totalInfo.getBig_all();
+			mid += totalInfo.getMid_all();
+			small += totalInfo.getSmall_all();
+			dangerCountTotal += totalInfo.getDanger_count_all();
+			overDangerCountTotal += totalInfo.getOver_danger_count_all();
+
+			if (totalInfo.getSmall_all() == 0){
+				continue;
+			}
+
+			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);
+
+		String smallValue = String.join("、",smallList);
+
+		this.totalInfo = totalLabel+totalValue;
+		this.overSmallInfo = smallLable+smallValue;
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/SzInfo.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/SzInfo.java
new file mode 100644
index 0000000..a291104
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/SzInfo.java
@@ -0,0 +1,26 @@
+package cn.gistack.sm.sjztmd.word.vo;
+
+import lombok.Data;
+
+/**
+ * 省直管水库详情
+ */
+@Data
+public class SzInfo {
+	//水库名称
+	private String stcd;
+
+	//当日8时水位
+	private Double new_rz;
+
+	//当日时间
+	private String new_tm;
+
+	//昨日8时水位
+	private Double old_rz;
+
+	private String old_tm;
+
+	//水位差值
+	private Double diff_rz;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TotalInfo.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TotalInfo.java
new file mode 100644
index 0000000..86af283
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TotalInfo.java
@@ -0,0 +1,58 @@
+package cn.gistack.sm.sjztmd.word.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+import org.springframework.boot.actuate.integration.IntegrationGraphEndpoint;
+
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class TotalInfo {
+
+	private String index;
+
+	//行政区名
+	private String p_ad_name;
+
+	//总数
+	private Integer count_all;
+	//大型总数
+	private Integer big_all;
+	//中型总数
+	private Integer mid_all;
+	//小型总数
+	private Integer small_all;
+
+	//无闸
+	private Integer wz_count_all;
+	private Integer wz_big;
+	private Integer wz_mid;
+	private Integer wz_small;
+
+	//有闸
+	private Integer yz_count_all;
+	private Integer yz_big;
+	private Integer yz_mid;
+	private Integer yz_small;
+
+	//超汛限病险
+	private Integer danger_count_all;
+	private Integer danger_big_all;
+	private Integer danger_mid_all;
+	private Integer danger_small_all;
+
+	//超控制病险
+	private Integer over_danger_count_all;
+	private Integer  over_danger_big_all;
+	private Integer  over_danger_mid_all;
+	private Integer over_danger_small_all;
+
+	//详情
+	private String big_over_detail;
+	private String mid_over_detail;
+	private String small_over_detail;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplate.xlsx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplate.xlsx
new file mode 100644
index 0000000..1b9a508
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplate.xlsx
Binary files differ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplateNoFormula.xlsx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplateNoFormula.xlsx
new file mode 100644
index 0000000..02f7e26
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/totalTemplateNoFormula.xlsx
Binary files differ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/eightFloodInfoTemplate.doc b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.doc
similarity index 66%
rename from skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/eightFloodInfoTemplate.doc
rename to skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.doc
index d1b9856..7fffa10 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/eightFloodInfoTemplate.doc
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.doc
Binary files differ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx
new file mode 100644
index 0000000..fdf340a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx
Binary files differ

--
Gitblit v1.9.3