From e039f5e9a3063eeec2c6c51f83e08beda0d1b5ca Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Sat, 09 Dec 2023 17:42:22 +0800
Subject: [PATCH] 填报word表格

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/BasCodeEnum.java                 |   41 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/StationExcelController.java      |  107 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/WaterLevel.java                          |   16 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationExport.java                       |   18 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/ResScalEnum.java                 |   55 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java                       |   22 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate2.xlsx                            |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/InfoBuildingEnum.java            |   44 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/RsbWorkingGateEnum.java          |   45 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate1.xlsx                            |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/BaseStationExcel.java                    |   57 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/OcTypeEnum.java                  |   53 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java                     |   10 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationParams.java                       |   41 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java |    7 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/ExcelUtil.java                    |   16 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ZtResultInfo.java                        |   24 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/VerSpillwayTypeEnum.java         |   51 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java    | 1023 +++++++++++++++++++++++++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java            |   18 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx                                        |    0 
 21 files changed, 1,614 insertions(+), 34 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/StationExcelController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/StationExcelController.java
new file mode 100644
index 0000000..a1b936d
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/StationExcelController.java
@@ -0,0 +1,107 @@
+package cn.gistack.sm.sjztmd.controller;
+
+import cn.gistack.sm.sjztmd.vo.StationExport;
+import cn.gistack.sm.sjztmd.vo.StationParams;
+import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
+import cn.gistack.sm.sjztmd.word.util.ExcelUtil;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+@Slf4j
+@Api(tags = "站点管理导出")
+@RestController
+@RequestMapping("/station/excel")
+@AllArgsConstructor
+public class StationExcelController {
+
+	private final ISjztmdService sjztmdService;
+
+	/**
+	 * 水位站导出
+	 * @param response
+	 * @throws Exception
+	 */
+	@GetMapping("/export/waterLevel")
+	public void exportWaterLevel(HttpServletResponse response, StationParams params,String exportFunc) throws Exception {
+		List< StationExport> list = sjztmdService.getWaterLevelInfo(response, params,exportFunc);
+
+		String title = StringUtil.format("水位站数据({}~{})",params.getStart_tm(),params.getEnd_tm());
+		String fileName ="水位站数据导出.xlsx";
+		String templatePath = "excel/xlsx/stationTemplate1.xlsx";
+
+		ExcelUtil.createStationExcel(response,title,fileName,list,templatePath);
+	}
+
+	/**
+	 * 雨量站导出
+	 * @param response
+	 * @throws Exception
+	 */
+	@GetMapping("/export/rainfall")
+	public void exportRainfall(HttpServletResponse response, StationParams params,String exportFunc) throws Exception {
+		List< StationExport> list = sjztmdService.getRainfallInfo(response, params,exportFunc);
+
+		String title = StringUtil.format("雨量站数据({}~{})",params.getStart_dt(),params.getEnd_dt());
+		String fileName ="雨量站数据导出.xlsx";
+		String templatePath = "excel/xlsx/stationTemplate1.xlsx";
+
+		ExcelUtil.createStationExcel(response,title,fileName,list,templatePath);
+	}
+
+	/**
+	 * 视频站导出
+	 * @param response
+	 * @throws Exception
+	 */
+	@GetMapping("/export/videoStation")
+	public void exportVideoStation(HttpServletResponse response, StationParams params,String exportFunc) throws Exception {
+		List< StationExport> list = sjztmdService.getVideoStationInfo(response, params,exportFunc);
+
+		String title = StringUtil.format("视频站数据");
+		String fileName ="视频站数据导出.xlsx";
+		String templatePath = "excel/xlsx/stationTemplate2.xlsx";
+
+		ExcelUtil.createStationExcel(response,title,fileName,list,templatePath);
+	}
+
+	/**
+	 * 图像站导出
+	 * @param response
+	 * @throws Exception
+	 */
+	@GetMapping("/export/imageStation")
+	public void exportImageStation(HttpServletResponse response, StationParams params,String exportFunc) throws Exception {
+		List< StationExport> list = sjztmdService.getImageStation(response, params,exportFunc);
+
+		String title = StringUtil.format("图像站数据({}~{})",params.getStart_dt(),params.getEnd_dt());
+		String fileName ="图像站数据导出.xlsx";
+		String templatePath = "excel/xlsx/stationTemplate1.xlsx";
+
+		ExcelUtil.createStationExcel(response,title,fileName,list,templatePath);
+	}
+
+	/**
+	 * 渗压站导出
+	 * @param response
+	 * @throws Exception
+	 */
+	@GetMapping("/export/osmotic")
+	public void exportOsmotic(HttpServletResponse response, StationParams params,String exportFunc) throws Exception {
+		List< StationExport> list = sjztmdService.getOsmotic(response, params,exportFunc);
+
+		String title = StringUtil.format("渗压站数据({}~{})",params.getStart_dt(),params.getEnd_dt());
+		String fileName ="渗压站数据导出.xlsx";
+		String templatePath = "excel/xlsx/stationTemplate1.xlsx";
+
+		ExcelUtil.createStationExcel(response,title,fileName,list,templatePath);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/BaseStationExcel.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/BaseStationExcel.java
new file mode 100644
index 0000000..fb2cf7c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/BaseStationExcel.java
@@ -0,0 +1,57 @@
+package cn.gistack.sm.sjztmd.vo;
+
+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 java.io.Serializable;
+
+/**
+ * 设备站基础数据
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class BaseStationExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String index;
+
+	private String res_nm;
+
+	private String res_cd;
+
+	private String st_cd;
+
+	private String st_nm;
+
+	private String res_reg_code;
+	private String res_reg_cd;
+
+	private String eng_scal;
+
+	private String province_cd;
+
+	private String province_nm;
+
+	private String city_nm;
+
+	private String city_cd;
+
+	private String county_nm;
+
+	private String county_cd;
+
+	private String town_nm;
+
+	private String town_cd;
+
+	private Integer station_status;
+
+	private String station_status_text;
+
+	private String manufacturer;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationExport.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationExport.java
new file mode 100644
index 0000000..9a8c51e
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationExport.java
@@ -0,0 +1,18 @@
+package cn.gistack.sm.sjztmd.vo;
+
+import lombok.Data;
+
+@Data
+public class StationExport extends BaseStationExcel{
+
+	private String st_nm;
+
+	private String flag;
+
+	//应报/已报
+	private String shouldReportAndReport;
+
+	private String rate;
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationParams.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationParams.java
new file mode 100644
index 0000000..b16b983
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationParams.java
@@ -0,0 +1,41 @@
+package cn.gistack.sm.sjztmd.vo;
+
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+/**
+ * 站点接口请求参数
+ */
+@Data
+public class StationParams {
+	private Integer pageNo;
+
+	private Integer pageSize;
+
+	//新站 老站
+	private String flag;
+
+	private String station_status;
+
+
+	private String label;
+
+	private String res_nm;
+
+	//=======水情参数=======
+
+	//1已覆盖 0未覆盖
+	private String is_rsvr;
+	private String start_tm;
+	private String end_tm;
+
+	//========雨量站参数
+	private String start_dt;
+	private String end_dt;
+	private String is_cover;
+
+	//========视频站参数
+	private String online;
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/WaterLevel.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/WaterLevel.java
new file mode 100644
index 0000000..a36dc71
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/WaterLevel.java
@@ -0,0 +1,16 @@
+package cn.gistack.sm.sjztmd.vo;
+
+import lombok.Data;
+
+@Data
+public class WaterLevel extends BaseStationExcel{
+	private String is_main_rsvr;
+
+	private String flag;
+
+	private Integer should_cnt;
+
+	private Integer actual_cnt;
+
+	private Double report_rate;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ZtResultInfo.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ZtResultInfo.java
new file mode 100644
index 0000000..6d9db19
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ZtResultInfo.java
@@ -0,0 +1,24 @@
+package cn.gistack.sm.sjztmd.vo;
+
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Data
+public class ZtResultInfo extends BaseStationExcel{
+
+	private String res_nm;
+	private String name;
+	private String res_name;
+
+	private String is_rsvr;
+
+	private String label;
+
+	private String res_cd;
+	private String res_guid;
+	private String res_code;
+
+	private List<HashMap<String,Object>> children;
+}
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 bfb0ea7..77c8dc4 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
@@ -44,10 +44,13 @@
 
 	@GetMapping("/download/{resGuid}")
 	public ResponseEntity genera(HttpServletResponse response, @PathVariable String resGuid) throws Exception {
-		TbWordVO tbWordVO = sjztmdService.getTbWordVO(resGuid);
+		HashMap<String,Object> obj = sjztmdService.getTbWordVO(resGuid);
+
+		TbWordVO tbWordVO = (TbWordVO) obj.get("tbWordVO");
+		Map<String,Object> tableMap= (Map<String, Object>) obj.get("tableMap");
 
 		String fileName = resGuid + ".docx";
-		byte[] data = WordUtil.compileTemplateAndRenderData(tbWordVO);
+		byte[] data = WordUtil.compileTemplateAndRenderData(tbWordVO,tableMap);
 
 		// 创建响应实体并设置响应头,将输出流作为响应体返回给客户端
 		InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(data));
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/BasCodeEnum.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/BasCodeEnum.java
new file mode 100644
index 0000000..fd92cb1
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/BasCodeEnum.java
@@ -0,0 +1,41 @@
+package cn.gistack.sm.sjztmd.word.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 信息化建设枚举
+ */
+@Getter
+public enum BasCodeEnum {
+
+    /**
+	 * [{
+	 *     value: '003500',
+	 *     label: '长江流域片'
+	 * }, {
+	 *     value: '003200',
+	 *     label: '淮河流域片'
+	 * }]
+	 */
+
+	CJLYP("003500","长江流域片"),
+
+	HHLYP("003200","淮河流域片"),
+
+	NULL_ABLE("","");
+
+	String key;
+
+	String label;
+	BasCodeEnum(String key, String label) {
+		this.key = key;
+		this.label = label;
+	}
+
+	public static BasCodeEnum find(String key) {
+		return Arrays.stream(values()).filter(resFucEnum -> resFucEnum.key.equals(key)).findAny().orElse(NULL_ABLE);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/InfoBuildingEnum.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/InfoBuildingEnum.java
new file mode 100644
index 0000000..9e51551
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/InfoBuildingEnum.java
@@ -0,0 +1,44 @@
+package cn.gistack.sm.sjztmd.word.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 所在流域枚举
+ */
+@Getter
+public enum InfoBuildingEnum {
+
+	/**
+	 * [{
+	 *     value: '003500',
+	 *     label: '长江流域片'
+	 * }, {
+	 *     value: '003200',
+	 *     label: '淮河流域片'
+	 * }]
+	 */
+
+
+	ERROR("0","故障"),
+
+	NORMAL("1","正常使用"),
+
+	UN_BUILD("-1","未建设"),
+
+	NULL_ABLE("","");
+
+	String key;
+
+	String label;
+	InfoBuildingEnum(String key, String label) {
+		this.key = key;
+		this.label = label;
+	}
+
+	public static InfoBuildingEnum find(String key) {
+		return Arrays.stream(values()).filter(resFucEnum -> resFucEnum.key.equals(key)).findAny().orElse(NULL_ABLE);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/OcTypeEnum.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/OcTypeEnum.java
new file mode 100644
index 0000000..6505278
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/OcTypeEnum.java
@@ -0,0 +1,53 @@
+package cn.gistack.sm.sjztmd.word.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 启闭方式枚举
+ */
+@Getter
+public enum OcTypeEnum {
+
+	/**
+	 *  [
+	 *     {
+	 *         value: '1',
+	 *         label: '卷扬式'
+	 *     }, {
+	 *         value: '2',
+	 *         label: '液压式'
+	 *     }, {
+	 *         value: '3',
+	 *         label: '杆式'
+	 *     }, {
+	 *         value: '9',
+	 *         label: '其他'
+	 *     }
+	 * ]
+	 */
+
+	MLS("1","卷扬式"),
+
+	ZKS("2","液压式"),
+
+	BKYKS("3","杆式"),
+
+	QI_TA("9","其他"),
+
+	NULL_ABLE("","");
+
+	String key;
+
+	String label;
+	OcTypeEnum(String key, String label) {
+		this.key = key;
+		this.label = label;
+	}
+
+	public static OcTypeEnum find(String key) {
+		return Arrays.stream(values()).filter(resFucEnum -> resFucEnum.key.equals(key)).findAny().orElse(NULL_ABLE);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/ResScalEnum.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/ResScalEnum.java
new file mode 100644
index 0000000..c952c3e
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/ResScalEnum.java
@@ -0,0 +1,55 @@
+package cn.gistack.sm.sjztmd.word.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 工程规模枚举
+ */
+@Getter
+public enum ResScalEnum {
+
+	/**
+	 *  [{
+	 *     value: 1,
+	 *     label: '大(1)型'
+	 * }, {
+	 *     value: 2,
+	 *     label: '大(2)型'
+	 * }, {
+	 *     value: 3,
+	 *     label: '中型'
+	 * }, {
+	 *     value: 4,
+	 *     label: '小(1)型'
+	 * }, {
+	 *     value: 5,
+	 *     label: '小(2)型'
+	 * }]
+	 */
+
+	B1(1,"大(1)型"),
+
+	B2(2,"大(2)型"),
+
+	M(3,"中型"),
+
+	S1(4,"小(1)型"),
+	S2(5,"小(2)型"),
+
+	NULL_ABLE(-1,"");
+
+	Integer key;
+
+	String label;
+	ResScalEnum(Integer key, String label) {
+		this.key = key;
+		this.label = label;
+	}
+
+	public static ResScalEnum find(Integer key) {
+		return Arrays.stream(values()).filter(resFucEnum -> resFucEnum.key==key).findAny().orElse(NULL_ABLE);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/RsbWorkingGateEnum.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/RsbWorkingGateEnum.java
new file mode 100644
index 0000000..5697028
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/RsbWorkingGateEnum.java
@@ -0,0 +1,45 @@
+package cn.gistack.sm.sjztmd.word.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 泄洪洞闸门型式枚举
+ */
+@Getter
+public enum RsbWorkingGateEnum {
+
+	/**
+	 * [{
+	 *     value: '1',
+	 *     label: '平板闸门'
+	 * }, {
+	 *     value: '2',
+	 *     label: '弧形闸门'
+	 * }, {
+	 *     value: '9',
+	 *     label: '其他'
+	 * }]
+	 */
+
+	PBZM("1","平板闸门"),
+
+	HXZM("2","弧形闸门"),
+	QI_TA("9","其他"),
+
+	NULL_ABLE("","");
+
+	String key;
+
+	String label;
+	RsbWorkingGateEnum(String key, String label) {
+		this.key = key;
+		this.label = label;
+	}
+
+	public static RsbWorkingGateEnum find(String key) {
+		return Arrays.stream(values()).filter(resFucEnum -> resFucEnum.key.equals(key)).findAny().orElse(NULL_ABLE);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/VerSpillwayTypeEnum.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/VerSpillwayTypeEnum.java
new file mode 100644
index 0000000..047ba29
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/VerSpillwayTypeEnum.java
@@ -0,0 +1,51 @@
+package cn.gistack.sm.sjztmd.word.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 非常溢洪道形式枚举
+ */
+@Getter
+public enum VerSpillwayTypeEnum {
+
+	/**
+	 * [{
+	 *     value: 1,
+	 *     label: '漫流式'
+	 * }, {
+	 *     value: 2,
+	 *     label: '自溃式'
+	 * }, {
+	 *     value: 3,
+	 *     label: '爆破引溃式'
+	 * }, {
+	 *     value: 9,
+	 *     label: '其他'
+	 * }]
+	 */
+
+	MLS(1,"漫流式"),
+
+	ZKS(2,"自溃式"),
+
+	BKYKS(3,"爆破引溃式"),
+
+	QI_TA(9,"其他"),
+
+	NULL_ABLE(-1,"");
+
+	Integer key;
+
+	String label;
+	VerSpillwayTypeEnum(Integer key, String label) {
+		this.key = key;
+		this.label = label;
+	}
+
+	public static VerSpillwayTypeEnum find(Integer key) {
+		return Arrays.stream(values()).filter(resFucEnum -> resFucEnum.key==key).findAny().orElse(NULL_ABLE);
+	}
+
+}
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 585e34c..3fcf7f7 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,7 +1,13 @@
 package cn.gistack.sm.sjztmd.word.service;
 
+import cn.gistack.sm.sjztmd.vo.StationExport;
+import cn.gistack.sm.sjztmd.vo.ZtResultInfo;
+import cn.gistack.sm.sjztmd.vo.StationParams;
 import cn.gistack.sm.sjztmd.word.vo.*;
+import com.fasterxml.jackson.core.JsonProcessingException;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
 
 public interface ISjztmdService {
@@ -11,7 +17,7 @@
 	 * @param resCd
 	 * @return
 	 */
-	TbWordVO getTbWordVO(String resCd);
+	HashMap<String,Object> getTbWordVO(String resCd);
 
 
 	List<TotalInfo> getTotalInfo();
@@ -21,4 +27,14 @@
 	List<OverDetail> getOverDetailInfo();
 
     List<SzInfo> getSzInfo();
+
+	List<StationExport> getWaterLevelInfo(HttpServletResponse response, StationParams params,String exportFunc);
+
+	List<StationExport> getRainfallInfo(HttpServletResponse response, StationParams params, String exportFunc);
+
+	List<StationExport> getVideoStationInfo(HttpServletResponse response, StationParams params, String exportFunc);
+
+	List<StationExport> getImageStation(HttpServletResponse response, StationParams params, String exportFunc);
+
+	List<StationExport> getOsmotic(HttpServletResponse response, StationParams params, String exportFunc);
 }
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 d0f5a55..6b7fa8e 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
@@ -2,8 +2,12 @@
 
 import cn.gistack.common.utils.SpringContextUtil;
 import cn.gistack.sm.sjztmd.entity.*;
+import cn.gistack.sm.sjztmd.vo.StationExport;
+import cn.gistack.sm.sjztmd.vo.ZtResultInfo;
+import cn.gistack.sm.sjztmd.vo.StationParams;
 import cn.gistack.sm.sjztmd.mapper.SjztMdMapper;
 import cn.gistack.sm.sjztmd.service.*;
+import cn.gistack.sm.sjztmd.word.enums.*;
 import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
 import cn.gistack.sm.sjztmd.word.vo.*;
 import cn.gistack.sm.sjztods.constant.ZtApiUrlConstant;
@@ -14,6 +18,8 @@
 import com.alibaba.fastjson.parser.Feature;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import lombok.AllArgsConstructor;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -23,9 +29,10 @@
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -40,6 +47,16 @@
 	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";
+
+	private final String WATER_LEVEL_API = "/services/1234567890ABCDEFGHIJKLMN/water/device/detail/new?";
+	private final String RAIN_FALL_API = "/services/1234567890ABCDEFGHIJKLMN/rain/device/21/api?";
+	private final String VIDEO_STATION_API = "/services/1234567890ABCDEFGHIJKLMN/device_monitor_wmst_list/api?";
+	private final String IMAGE_STATION_API = "/services/1234567890ABCDEFGHIJKLMN/device_monitor_image_list/api?";
+	private final String OSMOTIC_API = "/services/1234567890ABCDEFGHIJKLMN/press/device/is_child/api?";
+	private final String SEEPAGE_API = "/services/1234567890ABCDEFGHIJKLMN/sl/device/is_child/api?";
+	private final String DISPLACEMENT_API = "/services/1234567890ABCDEFGHIJKLMN/wy/device/is_child/api?";
+	private final String TERMITE_API = "/services/1234567890ABCDEFGHIJKLMN/termite/device/is_child/api?";
+
 
 	@Autowired
 	private RestTemplate restTemplate;
@@ -56,21 +73,30 @@
 	private final ITbAttResRsbNorspiService attResRsbNorspiService;
 	private final ITbAttResPowerStationService attResPowerStationService;
 
+	private final ITbAttResProjectUtilizeService attResProjectUtilizeService;
+	private final ITbAttResInformationProjectService attResInformationProjectService;
+
 	@Override
-	public TbWordVO getTbWordVO(String resCd) {
+	public HashMap<String, Object> getTbWordVO(String resCd) {
 
 
 		TbAttResBase tbAttResBase = attResBaseService.getDetailByGuid(resCd);
 		TbAttResStagChar tbAttResStagChar = attResStagCharService.getDetailByGuid(resCd);
 		List<TbAttResWaterDelivery> tbAttResWaterDeliveryList = attResWaterDeliveryService.getDetailByGuid(resCd);
 		//挡水建筑物
-		List<TbAttResWaterBlock> tbAttResWaterBlockList  = attResWaterBlockService.getDetailByGuid(resCd);
+		List<TbAttResWaterBlock> tbAttResWaterBlockList = attResWaterBlockService.getDetailByGuid(resCd);
 
 		//正常溢洪道、泄洪洞、非常溢洪道
-		Map<String, Object> resRsbNorsipiVerspiMionitorDetailByGuid  = attResRsbNorspiService.getResRsbNorsipiVerspiMionitorDetailByGuid(resCd);
+		Map<String, Object> resRsbNorsipiVerspiMionitorDetailByGuid = attResRsbNorspiService.getResRsbNorsipiVerspiMionitorDetailByGuid(resCd);
 
 		//电站
 		List<TbAttResPowerStation> tbAttResPowerStationList = attResPowerStationService.getDetailByGuid(resCd);
+
+		//工程运用
+		TbAttResProjectUtilize tbAttResProjectUtilize = attResProjectUtilizeService.getDetailByGuid(resCd);
+
+		//信息化建设
+		TbAttResInformationProject tbAttResInformationProject = attResInformationProjectService.getDetailByGuid(resCd);
 
 		TbAttResEngBene tbAttResEngBene = attResEngBeneService.getDetailByGuid(resCd);
 		TbAttResSafetyMonitor tbAttResSafetyMonitor = attResSafetyMonitorService.getDetailByGuid(resCd);
@@ -79,19 +105,466 @@
 
 		String depart = attResManagePersonService.getCompetentDepart(resCd);
 
-		TbWordVO tbWordVO = new TbWordVO(tbAttResBase, tbAttResStagChar, tbAttResWaterBlockList,resRsbNorsipiVerspiMionitorDetailByGuid,tbAttResPowerStationList,
-			tbAttResWaterDeliveryList, tbAttResEngBene,tbAttResSafetyMonitor,tbAttResMgrSysB,attResManagePeople);
+		TbWordVO tbWordVO = new TbWordVO(tbAttResBase, tbAttResStagChar, tbAttResWaterBlockList, resRsbNorsipiVerspiMionitorDetailByGuid, tbAttResPowerStationList,
+			tbAttResWaterDeliveryList, tbAttResEngBene, tbAttResSafetyMonitor, tbAttResMgrSysB, attResManagePeople);
 		tbWordVO.setCUnitName(depart);
 
-		return tbWordVO;
+		Map<String, Object> tableMap = buildTableMap(tbAttResBase, tbAttResStagChar, tbAttResWaterBlockList, resRsbNorsipiVerspiMionitorDetailByGuid, tbAttResPowerStationList,
+			tbAttResWaterDeliveryList, tbAttResEngBene, tbAttResSafetyMonitor, tbAttResMgrSysB, tbAttResProjectUtilize, tbAttResInformationProject);
+
+
+		HashMap<String, Object> obj = new HashMap<>();
+		obj.put("tbWordVO", tbWordVO);
+		obj.put("tableMap", tableMap);
+
+		return obj;
+	}
+
+	/**
+	 * 创建表格参数
+	 *
+	 * @param tbAttResBase                            水库基础信息
+	 * @param tbAttResStagChar                        水文特征
+	 * @param tbAttResWaterBlockList                  挡水建筑物
+	 * @param resRsbNorsipiVerspiMionitorDetailByGuid 正常溢洪道、泄洪洞、非常溢洪道
+	 * @param tbAttResPowerStationList                电站
+	 * @param tbAttResWaterDeliveryList               输水建筑物
+	 * @param tbAttResEngBene                         水库效益
+	 * @param tbAttResSafetyMonitor                   安全鉴定
+	 * @param tbAttResMgrSysB                         管理体制
+	 * @param tbAttResProjectUtilize                  工程运用
+	 * @param tbAttResInformationProject              信息化建设
+	 * @return
+	 */
+	private Map<String, Object> buildTableMap(TbAttResBase tbAttResBase, TbAttResStagChar tbAttResStagChar,
+											  List<TbAttResWaterBlock> tbAttResWaterBlockList, Map<String, Object> resRsbNorsipiVerspiMionitorDetailByGuid,
+											  List<TbAttResPowerStation> tbAttResPowerStationList, List<TbAttResWaterDelivery> tbAttResWaterDeliveryList,
+											  TbAttResEngBene tbAttResEngBene, TbAttResSafetyMonitor tbAttResSafetyMonitor, TbAttResMgrSysB tbAttResMgrSysB,
+											  TbAttResProjectUtilize tbAttResProjectUtilize, TbAttResInformationProject tbAttResInformationProject) {
+
+		Map<String, Object> tableMap = new HashMap<>();
+
+		tableMap.put("resName", tbAttResBase.getName());
+		tableMap.put("resRegCode", tbAttResBase.getResRegCode());
+		tableMap.put("engScal", ResScalEnum.find(tbAttResBase.getResScal()).getLabel());
+		tableMap.put("engGrad", tbAttResBase.getEngGrad());
+		tableMap.put("longitude", tbAttResBase.getLgtd());
+		tableMap.put("latitude", tbAttResBase.getLttd());
+		tableMap.put("elevationSystem", tbAttResBase.getElevationSystem());
+		tableMap.put("region", tbAttResBase.getBuildAddress());
+		tableMap.put("basName", BasCodeEnum.find(tbAttResBase.getBasCode()).getLabel());
+		tableMap.put("locRvName", tbAttResBase.getLocRvName());
+
+		String st = tbAttResBase.getStartTime() != null ? new SimpleDateFormat("M月dd日").format(tbAttResBase.getStartTime()) : "";
+		String wst = tbAttResBase.getWaterStorageTm() != null ? new SimpleDateFormat("M月dd日").format(tbAttResBase.getWaterStorageTm()) : "";
+		tableMap.put("startTime", st);
+		tableMap.put("waterStorageTm", wst);
+
+
+		tableMap.put("reinforceTm", tbAttResSafetyMonitor.getReinforceTm());
+		tableMap.put("completionTime", tbAttResSafetyMonitor.getCompletionTime());
+
+		String resFunc = tbAttResBase.getResFunc();
+		if (StringUtil.isNotBlank(resFunc)) {
+			List<String> resFucList = Arrays.asList(tbAttResBase.getResFunc().split(","));
+			List<String> resFucTextList = new ArrayList<>();
+			for (int i = 0; i < resFucList.size(); i++) {
+				String key = resFucList.get(i);
+				ResFucEnum resFucEnum = ResFucEnum.find(key);
+				resFucTextList.add(resFucEnum.getLabel());
+			}
+			resFunc = String.join(",", resFucTextList);
+		}
+		tableMap.put("resFunc", resFunc);
+		//水文特征
+		tableMap.put("conArea", tbAttResStagChar.getConArea());
+		tableMap.put("moyearRainAvg", tbAttResStagChar.getMoyearRainAvg());
+		tableMap.put("moyearFlAvg", tbAttResStagChar.getMoyearFlAvg());
+		tableMap.put("downWacoSafeDisc", tbAttResStagChar.getDownWacoSafeDisc());
+		tableMap.put("desFlSta", tbAttResStagChar.getDesFlSta());
+		tableMap.put("desFlFlow", tbAttResStagChar.getDesFlFlow());
+		tableMap.put("desFl1dayCap", tbAttResStagChar.getDesFl1dayCap());
+		tableMap.put("desFl3dayCap", tbAttResStagChar.getDesFl3dayCap());
+		tableMap.put("checFlSta", tbAttResStagChar.getChecFlSta());
+		tableMap.put("checFlFlow", tbAttResStagChar.getChecFlFlow());
+		tableMap.put("checFl1dayCap", tbAttResStagChar.getChecFl1dayCap());
+		tableMap.put("checFl3dayCap", tbAttResStagChar.getChecFl3dayCap());
+
+		//水库特征
+		tableMap.put("adjustProp", AdjustPropEnum.find(tbAttResStagChar.getAdjustProp()).getLabel());
+		tableMap.put("checFlStag", tbAttResStagChar.getChecFlStag());
+		tableMap.put("totalCap", tbAttResStagChar.getTotalCap());
+		tableMap.put("desFlStag", tbAttResStagChar.getDesFlStag());
+		tableMap.put("flprCap", tbAttResStagChar.getFlprCap());
+		tableMap.put("flConTopStag", tbAttResStagChar.getFlConTopStag());
+		tableMap.put("flSortCap", tbAttResStagChar.getFlStorCap());
+		tableMap.put("corNormStag", tbAttResStagChar.getCorNormStag());
+		tableMap.put("adjustStorCap", tbAttResStagChar.getAdjustStorCap());
+		tableMap.put("deadStag", tbAttResStagChar.getDeadStag());
+		tableMap.put("deadCap", tbAttResStagChar.getDeadCap());
+		tableMap.put("beforeFloodStag", tbAttResStagChar.getBeforeFloodStag());
+		tableMap.put("midFloodStag", tbAttResStagChar.getMidFloodStag());
+		tableMap.put("afterFloodStag", tbAttResStagChar.getAfterFloodStag());
+
+		//new SimpleDateFormat("yyyy年MM月").format(tbAttResBase.getStartTime());
+
+		String bfs = tbAttResStagChar.getBeforeFloodStart() != null ? new SimpleDateFormat("M月dd日").format(tbAttResStagChar.getBeforeFloodStart()) : "";
+		String bfe = tbAttResStagChar.getBeforeFloodEnd() != null ? new SimpleDateFormat("M月dd日").format(tbAttResStagChar.getBeforeFloodEnd()) : "";
+		String mfs = tbAttResStagChar.getMidFloodStart() != null ? new SimpleDateFormat("M月dd日").format(tbAttResStagChar.getMidFloodStart()) : "";
+		String mfe = tbAttResStagChar.getMidFloodEnd() != null ? new SimpleDateFormat("M月dd日").format(tbAttResStagChar.getMidFloodEnd()) : "";
+		String afs = tbAttResStagChar.getAfterFloodStart() != null ? new SimpleDateFormat("M月dd日").format(tbAttResStagChar.getAfterFloodStart()) : "";
+		String afe = tbAttResStagChar.getAfterFloodEnd() != null ? new SimpleDateFormat("M月dd日").format(tbAttResStagChar.getAfterFloodEnd()) : "";
+		tableMap.put("beforeFloodStart", bfs);
+		tableMap.put("beforeFloodEnd", bfe);
+		tableMap.put("midFloodStart", mfs);
+		tableMap.put("midFloodEnd", mfe);
+		tableMap.put("afterFloodStart", afs);
+		tableMap.put("afterFloodEnd", afe);
+		tableMap.put("desFloodFlow", tbAttResStagChar.getDesFloodFlowMax());
+		tableMap.put("checFloodFlowMax", tbAttResStagChar.getChecFloodFlowMax());
+
+		String mainDamType = "";
+		String mainDamMainFoundation = "";
+		String mainDamTopElevation = "";
+		String mainDamHeight = "";
+		String mainDamTopLength = "";
+		String mainDamWidth = "";
+		String mainIsTraffic = "";
+		String mainWaveWallTopElevation = "";
+		String mainUpDamProtectType = "";
+		String mainDownDamProtectType = "";
+		String damMainBodyType = "";
+		String damMainBodyTopElevation = "";
+		String damMainDrainType = "";
+		String mainDamBodyType = "";
+		String subDamNum = "";
+		String subDamTotLength = "";
+		String subDamMaxHeight = "";
+		String subDamTopWidth = "";
+
+
+		if (tbAttResWaterBlockList != null && tbAttResWaterBlockList.size() > 0 && tbAttResWaterBlockList.get(0).getNum() > 0) {
+			//主坝
+			TbAttResWaterBlock tbAttResWaterBlock = tbAttResWaterBlockList.get(0);
+
+			mainDamType = DamTypeEnum.find(tbAttResWaterBlock.getDamType()).getLabel();
+			mainDamMainFoundation = tbAttResWaterBlock.getDamMainFoundation();
+			mainDamTopElevation = isNullObject(tbAttResWaterBlock.getDamTopElevation());
+			mainDamHeight = isNullObject(tbAttResWaterBlock.getDamHeight());
+			mainDamTopLength = isNullObject(tbAttResWaterBlock.getDamTopLength());
+			mainDamWidth = isNullObject(tbAttResWaterBlock.getDamWidth());
+			mainIsTraffic = tbAttResWaterBlock.getIsTraffic();
+			mainWaveWallTopElevation = isNullObject(tbAttResWaterBlock.getWaveWallTopElevation());
+			mainUpDamProtectType = convertType(tbAttResWaterBlock.getUpDamProtectType(), "Explain");
+			mainDownDamProtectType = convertType(tbAttResWaterBlock.getDownDamProtectType(), "Explain");
+			damMainBodyType = convertType(tbAttResWaterBlock.getDamMainBodyType(), "Explain");
+			damMainBodyTopElevation = isNullObject(tbAttResWaterBlock.getDamTopElevation());
+			damMainDrainType = convertType(tbAttResWaterBlock.getDamMainDrainType(), "Explain");
+			mainDamBodyType = convertType(isNullObject(tbAttResWaterBlock.getDamBodyType()), "Explain");
+
+			//副坝
+			subDamNum = isNullObject(tbAttResWaterBlock.getSubDamNum());
+			subDamTotLength = isNullObject(tbAttResWaterBlock.getSubDamTotLength());
+			subDamMaxHeight = isNullObject(tbAttResWaterBlock.getSubDamMaxHeight());
+			subDamTopWidth = isNullObject(tbAttResWaterBlock.getSubDamTopWidth());
+
+
+		}
+
+		tableMap.put("mainDamType", mainDamType);
+		tableMap.put("mainDamMainFoundation", mainDamMainFoundation);
+		tableMap.put("mainDamTopElevation", mainDamTopElevation);
+		tableMap.put("mainDamHeight", mainDamHeight);
+		tableMap.put("mainDamTopLength", mainDamTopLength);
+		tableMap.put("mainDamWidth", mainDamWidth);
+		tableMap.put("mainIsTraffic", mainIsTraffic);
+		tableMap.put("mainWaveWallTopElevation", mainWaveWallTopElevation);
+		tableMap.put("mainUpDamProtectType", mainUpDamProtectType);
+		tableMap.put("mainDownDamProtectType", mainDownDamProtectType);
+		tableMap.put("damMainBodyType", damMainBodyType);
+		tableMap.put("damMainBodyTopElevation", damMainBodyTopElevation);
+		tableMap.put("damMainDrainType", damMainDrainType);
+		tableMap.put("mainDamBodyType", mainDamBodyType);
+		tableMap.put("subDamNum", subDamNum);
+		tableMap.put("subDamTotLength", subDamTotLength);
+		tableMap.put("subDamMaxHeight", subDamMaxHeight);
+		tableMap.put("subDamTopWidth", subDamTopWidth);
+
+		//正常溢洪道
+		List<TbAttResRsbNorspi> tbAttResRsbNorspiList = (List<TbAttResRsbNorspi>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbNorspiList");
+
+		String norSpillwayType = "";
+		String isLocDamBody = "";
+		String norWeirTopElevation = "";
+		String norWeirTopWidth = "";
+		String norWorkingGateType = "";
+		String norCheckingFloodDischarge = "";
+		String disEnergyType = "";
+		String norOc = "";
+
+		if (tbAttResRsbNorspiList != null && tbAttResRsbNorspiList.size() > 0 && tbAttResRsbNorspiList.get(0).getNum() > 0) {
+			TbAttResRsbNorspi tbAttResRsbNorspi = tbAttResRsbNorspiList.get(0);
+
+			norSpillwayType = SpillwayTypeEnum.find(tbAttResRsbNorspi.getSpillwayType()).getLabel();
+
+			isLocDamBody = tbAttResRsbNorspi.getIsLocDamBody();
+			norWeirTopElevation = isNullObject(tbAttResRsbNorspi.getWeirTopElevation());
+			norWeirTopWidth = isNullObject(tbAttResRsbNorspi.getWeirTopWidth());
+
+			if (tbAttResRsbNorspi.getIsGate() == "否") {
+				norWorkingGateType = "无闸控制";
+			} else if (tbAttResRsbNorspi.getIsGate() == "是") {
+				// 平板闸门,3X3
+				String typeName = RsbWorkingGateEnum.find(tbAttResRsbNorspi.getWorkingGateType().toString()).getLabel();
+				norWorkingGateType = StringUtil.format("{},{}X{}", typeName, tbAttResRsbNorspi.getGateWide(), tbAttResRsbNorspi.getGateLength());
+			}
+
+			norCheckingFloodDischarge = isNullObject(tbAttResRsbNorspi.getCheckingFloodDischarge());
+			disEnergyType = isNullObject(tbAttResRsbNorspi.getDisEnergyType());
+			List<String> list = new ArrayList<>();
+
+
+			String ocType = OcTypeEnum.find(isNullObject(tbAttResRsbNorspi.getOcType())).getLabel();
+			list.add(ocType);
+			list.add(tbAttResRsbNorspi.getOcPower());
+			norOc = String.join(",", list);
+		}
+
+		tableMap.put("norSpillwayType", norSpillwayType);
+		tableMap.put("isLocDamBody", isLocDamBody);
+		tableMap.put("norWeirTopElevation", norWeirTopElevation);
+		tableMap.put("norWeirTopWidth", norWeirTopWidth);
+		tableMap.put("norWorkingGateType", norWorkingGateType);
+		tableMap.put("norCheckingFloodDischarge", norCheckingFloodDischarge);
+		tableMap.put("disEnergyType", disEnergyType);
+		tableMap.put("norOc", norOc);
+
+
+		//非常溢洪道
+		List<TbAttResRsbVerspi> tbAttResRsbVerspiList = (List<TbAttResRsbVerspi>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbVerspiList");
+
+		String verSpillwayType = "";
+		String weirTopWidth = "";
+		String enableStandar = "";
+		String checkingFloodDischarge = "";
+
+		if (tbAttResRsbVerspiList != null && tbAttResRsbVerspiList.size() > 0 && tbAttResRsbVerspiList.get(0).getNum() > 0) {
+			TbAttResRsbVerspi tbAttResRsbVerspi = tbAttResRsbVerspiList.get(0);
+
+			verSpillwayType = VerSpillwayTypeEnum.find(tbAttResRsbVerspi.getSpillwayType()).getLabel();
+			weirTopWidth = isNullObject(tbAttResRsbVerspi.getWeirTopWidth());
+			enableStandar = tbAttResRsbVerspi.getEnableStandards();
+			checkingFloodDischarge = isNullObject(tbAttResRsbVerspi.getCheckingFloodDischarge());
+		}
+		tableMap.put("verSpillwayType", verSpillwayType);
+		tableMap.put("weirTopWidth", weirTopWidth);
+		tableMap.put("enableStandar", enableStandar);
+		tableMap.put("checkingFloodDischarge", checkingFloodDischarge);
+
+		//泄洪洞
+		List<TbAttResRsbSpillway> tbAttResRsbSpillwayList = (List<TbAttResRsbSpillway>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbSpillwayList");
+
+		String rsbSpillwayType = "";
+		String coveLength = "";
+		String rsbThresholdElevation = "";
+		String rsbExportElevation = "";
+		String rsbSection = "";
+		String checkFlDisCharge = "";
+		String rsbWorkingGateType = "";
+		String rsbOc = "";
+
+		if (tbAttResRsbSpillwayList != null && tbAttResRsbSpillwayList.size() > 0 && tbAttResRsbSpillwayList.get(0).getNum() > 0) {
+			TbAttResRsbSpillway tbAttResRsbSpillway = tbAttResRsbSpillwayList.get(0);
+
+			//类型为其他,有补充说明
+			rsbSpillwayType = convertType(tbAttResRsbSpillway.getSpillwayType(), "SpillwayHoleType");
+			rsbWorkingGateType = convertType(tbAttResRsbSpillway.getWorkingGateType(), "RsbWorkingGateEnum");
+
+			coveLength = isNullObject(tbAttResRsbSpillway.getCoveLength());
+			rsbThresholdElevation = isNullObject(tbAttResRsbSpillway.getThresholdElevation());
+			rsbExportElevation = isNullObject(tbAttResRsbSpillway.getExportElevation());
+			rsbSection = StringUtil.format("{}X{}", tbAttResRsbSpillway.getSectionWide(), tbAttResRsbSpillway.getSectionLength());
+			;
+			checkFlDisCharge = isNullObject(tbAttResRsbSpillway.getCheckFlDisCharge());
+
+
+			List<String> list = new ArrayList<>();
+			list.add(convertType(tbAttResRsbSpillway.getOcType(), "OcTypeEnum"));
+			list.add(tbAttResRsbSpillway.getOcPower());
+			rsbOc = String.join(",", list);
+		}
+
+
+		tableMap.put("rsbSpillwayType", rsbSpillwayType);
+		tableMap.put("coveLength", coveLength);
+		tableMap.put("rsbThresholdElevation", rsbThresholdElevation);
+		tableMap.put("rsbExportElevation", rsbExportElevation);
+		tableMap.put("rsbSection", rsbSection);
+		tableMap.put("checkFlDisCharge", checkFlDisCharge);
+		tableMap.put("rsbWorkingGateType", rsbWorkingGateType);
+		tableMap.put("rsbOc", rsbOc);
+
+		//输水
+		String aqueductType = "";
+		String aqueductLength = "";
+		String thresholdElevation = "";
+		String exportElevation = "";
+		String deliverSection = "";
+		String designFlow = "";
+		String workingGateType = "";
+		String deliverOc = "";
+
+		if (tbAttResWaterDeliveryList != null && tbAttResWaterDeliveryList.size() > 0 && tbAttResWaterDeliveryList.get(0).getNum() > 0) {
+			//取设计流量大的进行描述
+			List<TbAttResWaterDelivery> sortList = tbAttResWaterDeliveryList.stream().sorted((a, b) -> b.getDesignFlow().compareTo(a.getDesignFlow())).collect(Collectors.toList());
+			TbAttResWaterDelivery tbAttResWaterDelivery = sortList.get(0);
+
+			aqueductType = convertType(tbAttResWaterDelivery.getAqueductType(), "AqueductTypeEnum");
+			aqueductLength = isNullObject(tbAttResWaterDelivery.getAqueductLength());
+			thresholdElevation = isNullObject(tbAttResWaterDelivery.getThresholdElevation());
+			exportElevation = isNullObject(tbAttResWaterDelivery.getExportElevation());
+			deliverSection = StringUtil.format("{}X{}", tbAttResWaterDelivery.getSectionWide(), tbAttResWaterDelivery.getSectionHigh());
+			designFlow = isNullObject(tbAttResWaterDelivery.getDesignFlow());
+			workingGateType = tbAttResWaterDelivery.getWorkingGateType();
+			List<String> list = new ArrayList<>();
+			list.add(tbAttResWaterDelivery.getOcType());
+			list.add(tbAttResWaterDelivery.getOcPower());
+			deliverOc = String.join(",", list);
+		}
+		tableMap.put("aqueductType", aqueductType);
+		tableMap.put("aqueductLength", aqueductLength);
+		tableMap.put("thresholdElevation", thresholdElevation);
+		tableMap.put("exportElevation", exportElevation);
+		tableMap.put("deliverSection", deliverSection);
+		tableMap.put("designFlow", designFlow);
+		tableMap.put("workingGateType", workingGateType);
+		tableMap.put("deliverOc", deliverOc);
+
+
+		//水电站
+		String plantLayoutType = "";
+		String installedCapacity = "";
+		String yearAvgHour = "";
+		//当电站列表不为空 且 电站列表数量大于0 且num大于0
+		if (tbAttResPowerStationList != null && tbAttResPowerStationList.size() > 0 && tbAttResPowerStationList.get(0).getNum() > 0) {
+			TbAttResPowerStation tbAttResPowerStation = tbAttResPowerStationList.get(0);
+
+			//取第一个电站
+			plantLayoutType = PlantLayoutTypeEnum.find(tbAttResPowerStation.getPlantLayoutType()).getLabel();
+			installedCapacity = isNullObject(tbAttResPowerStation.getInstalledCapacity());
+			yearAvgHour = isNullObject(tbAttResPowerStation.getYearAvgHour());
+		}
+		tableMap.put("plantLayoutType", plantLayoutType);
+		tableMap.put("installedCapacity", installedCapacity);
+		tableMap.put("yearAvgHour", yearAvgHour);
+
+		//水库效益
+		List<String> protectList = new ArrayList<>();
+
+		if (!tbAttResEngBene.getCity().equals("无") ) {
+			protectList.add(tbAttResEngBene.getCity());
+
+		}
+		if (!tbAttResEngBene.getTown().equals("无")) {
+			protectList.add(tbAttResEngBene.getTown());
+		}
+		if (!tbAttResEngBene.getRailway().equals("无")) {
+			protectList.add(tbAttResEngBene.getRailway());
+		}
+
+		if (!tbAttResEngBene.getHighway().equals("无")) {
+			protectList.add(tbAttResEngBene.getHighway());
+		}
+
+		if (!tbAttResEngBene.getImportCommunication().equals("无")) {
+			protectList.add(tbAttResEngBene.getImportCommunication());
+		}
+
+		if (!tbAttResEngBene.getImportFactory().equals("无")) {
+			protectList.add(tbAttResEngBene.getImportFactory());
+		}
+
+		if (!tbAttResEngBene.getImportOtherFac().equals("无")) {
+			protectList.add(tbAttResEngBene.getImportOtherFac());
+		}
+		//只留前四个
+		if (protectList.size()>=4){
+			List<String> subList = protectList.subList(0, 4);
+			tableMap.put("protect", String.join("、", subList));
+
+		}else {
+			tableMap.put("protect", String.join("、", protectList));
+		}
+		double person = 0;
+		if (tbAttResEngBene.getFlControlPerson() != null) {
+			person = tbAttResEngBene.getFlControlPerson() / 10000.0;
+		}
+
+		tableMap.put("flControlPerson", String.format("%.2f", person));
+		tableMap.put("flControlLand", tbAttResEngBene.getFlControlLand());
+		tableMap.put("irrObject", tbAttResEngBene.getIrrObject());
+		tableMap.put("moyearIrrAvg", tbAttResEngBene.getMoyearIrrAvg());
+		tableMap.put("desIrrArea", tbAttResEngBene.getDesIrrArea());
+		tableMap.put("checIrrArea", tbAttResEngBene.getChecIrrArea());
+		tableMap.put("supplyObject", tbAttResEngBene.getSupplyObject());
+
+		Double sup = 0.0;
+		String supS = "";
+		if (StringUtil.isNotBlank(tbAttResEngBene.getSupplyPopulation())) {
+			sup = Double.parseDouble(tbAttResEngBene.getSupplyPopulation()) / 10000;
+			supS = String.format("%.2f", sup);
+		}
+
+
+		tableMap.put("supplyPopulation", supS);
+		tableMap.put("moyearSupplyAvg", tbAttResEngBene.getMoyearSupplyAvg());
+		tableMap.put("moyearPowerAvg", tbAttResEngBene.getMoyearPowerAvg());
+		tableMap.put("ecologicalFlow", tbAttResEngBene.getEcologicalFlow());
+
+		//工程管理
+		tableMap.put("munitName", tbAttResMgrSysB.getMUnitName());
+		tableMap.put("cunitName", tbAttResMgrSysB.getCUnitName());
+		tableMap.put("mUnitNature", tbAttResMgrSysB.getMUnitNature());
+		tableMap.put("mUnitPersonNumber", tbAttResMgrSysB.getMUnitPersonNumber());
+		tableMap.put("personEconomicSource", tbAttResMgrSysB.getPersonEconomicSource());
+		tableMap.put("maintenanceEconomicSource", tbAttResMgrSysB.getMaintenanceEconomicSource());
+
+		//工程运用
+		tableMap.put("resMaxStag", tbAttResProjectUtilize.getResMaxStag());
+		tableMap.put("resMinStag", tbAttResProjectUtilize.getResMinStag());
+		tableMap.put("resMaxInFlow", tbAttResProjectUtilize.getResMaxInFlow());
+		tableMap.put("resMaxOutFlow", tbAttResProjectUtilize.getResMaxOutFlow());
+		//new SimpleDateFormat("yyyy-MM-dd").format(tbAttResProjectUtilize.getResMaxStagDate())
+
+		String resMaxStagDate = tbAttResProjectUtilize.getResMaxStagDate() != null ? new SimpleDateFormat("yyyy-MM-dd").format(tbAttResProjectUtilize.getResMaxStagDate()) : "";
+		String resMinStagDate = tbAttResProjectUtilize.getResMinStagDate() != null ? new SimpleDateFormat("yyyy-MM-dd").format(tbAttResProjectUtilize.getResMinStagDate()) : "";
+		String resMaxInFlowDate = tbAttResProjectUtilize.getResMaxInFlowDate() != null ? new SimpleDateFormat("yyyy-MM-dd").format(tbAttResProjectUtilize.getResMaxInFlowDate()) : "";
+		String resMaxOutFlowDate = tbAttResProjectUtilize.getResMaxOutFlowDate() != null ? new SimpleDateFormat("yyyy-MM-dd").format(tbAttResProjectUtilize.getResMaxOutFlowDate()) : "";
+		tableMap.put("resMaxStagDate", resMaxStagDate);
+		tableMap.put("resMinStagDate", resMinStagDate);
+		tableMap.put("resMaxInFlowDate", resMaxInFlowDate);
+		tableMap.put("resMaxOutFlowDate", resMaxOutFlowDate);
+
+		//信息化建设
+		tableMap.put("isRain", InfoBuildingEnum.find(tbAttResInformationProject.getIsRain()).getLabel());
+		tableMap.put("isRsvr", InfoBuildingEnum.find(tbAttResInformationProject.getIsRsvr()).getLabel());
+		tableMap.put("isGnssHorizontal", InfoBuildingEnum.find(tbAttResInformationProject.getIsGnssHorizontal()).getLabel());
+		tableMap.put("isSppr", InfoBuildingEnum.find(tbAttResInformationProject.getIsSppr()).getLabel());
+		tableMap.put("isSpqnmp", InfoBuildingEnum.find(tbAttResInformationProject.getIsSpqnmp()).getLabel());
+		tableMap.put("isWmst", InfoBuildingEnum.find(tbAttResInformationProject.getIsWmst()).getLabel());
+		tableMap.put("isTermites", InfoBuildingEnum.find(tbAttResInformationProject.getIsTermites()).getLabel());
+		//
+		String tm = tbAttResSafetyMonitor.getSafetyAppraisalTime() != null ? new SimpleDateFormat("yyyy-MM-dd").format(tbAttResSafetyMonitor.getSafetyAppraisalTime()) : "";
+		tableMap.put("safetyAppraisalTime", tm);
+		tableMap.put("safetyAppraisalResult", tbAttResSafetyMonitor.getSafetyAppraisalResult());
+
+
+		return tableMap;
 	}
 
 
-
-
-
 	@Override
-	public  List<TotalInfo> getTotalInfo(){
+	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);
@@ -122,19 +595,511 @@
 		return list;
 	}
 
+	@Override
+	public List<StationExport> getWaterLevelInfo(HttpServletResponse response, StationParams params, String exportFunc) {
+		String urlParam = buildParams(params);
+		String url = WATER_LEVEL_API + urlParam;
+		JSONObject ztData = getZtData(null, url);
+		JSONObject result = ztData.getJSONObject("data");
+		JSONArray data = result.getJSONArray("data");
+		List<ZtResultInfo> list = data.toJavaList(ZtResultInfo.class);
+
+		List<StationExport> exportList = new ArrayList<>();
+		//按水库主站导出
+		if (exportFunc.equals("reservoir")) {
+			exportList = exportByReservoir(list);
+		} else if (exportFunc.equals("station")) {
+			//按测站导出
+			exportList = exportByStation(list);
+		}
+		return exportList;
+	}
+
+	/**
+	 * 站点导出
+	 *
+	 * @param list
+	 * @return
+	 */
+	private List<StationExport> exportByStation(List<ZtResultInfo> list) {
+		List<StationExport> exportList = new ArrayList<>();
+
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				return;
+
+			} else {
+				//获取子集中所有站点的数据
+				ztResultInfo.getChildren().forEach(e -> {
+					StationExport stationExport1 = buildStationExportWater(e);
+					exportList.add(stationExport1);
+				});
+			}
+		});
+
+		return exportList;
+
+	}
+
+	/**
+	 * 水库导出
+	 *
+	 * @param list
+	 * @return
+	 */
+	private List<StationExport> exportByReservoir(List<ZtResultInfo> list) {
+
+		List<StationExport> exportList = new ArrayList<>();
+
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				stationExport.setRes_cd(ztResultInfo.getRes_cd());
+				stationExport.setRes_nm(ztResultInfo.getRes_nm());
+
+			} else {
+				//获取主站的站点
+				List<HashMap<String, Object>> mainList = ztResultInfo.getChildren().stream().filter(e -> isNullValue("is_main_rsvr", e).equals(1)).collect(Collectors.toList());
+				if (mainList != null && mainList.size() > 0) {
+					//获取主站数据
+					stationExport = buildStationExportWater(mainList.get(0));
+				} else {
+					//获取子集中第一个站点的数据
+					stationExport = buildStationExportWater(ztResultInfo.getChildren().get(0));
+				}
+			}
+
+			exportList.add(stationExport);
+		});
+
+		return exportList;
+	}
+
+	private StationExport buildStationExportWater(HashMap<String, Object> map) {
+		StationExport stationExport = new StationExport();
+
+		stationExport.setRes_nm(isNullValue("res_nm", map));
+		stationExport.setRes_reg_code(isNullValue("res_reg_code", map));
+		stationExport.setRes_cd(isNullValue("res_cd", map));
+		stationExport.setEng_scal(isNullValue("eng_scal", map));
+		stationExport.setCity_nm(isNullValue("city_nm", map));
+		stationExport.setCounty_nm(isNullValue("county_nm", map));
+		stationExport.setTown_nm(isNullValue("town_nm", map));
+		stationExport.setSt_nm(isNullValue("st_nm", map));
+		stationExport.setFlag(isNullValue("flag", map));
+
+		String stationStatus = isNullValue("station_status", map);
+
+		String stationStatusText = "";
+		if (stationStatus.equals("1")) {
+			stationStatusText = "在线";
+		} else if (stationStatus.equals("0")) {
+			stationStatusText = "离线";
+		}
+		stationExport.setStation_status_text(stationStatusText);
+
+		stationExport.setManufacturer(isNullValue("manufacturer", map));
+
+		//应报
+		String shouldCnt = isNullValue("should_cnt", map);
+		//已报
+		String actualCnt = isNullValue("actual_cnt", map);
+
+		String shouldReportAndReport = StringUtil.format("{}/{}", shouldCnt, actualCnt);
+		stationExport.setShouldReportAndReport(shouldReportAndReport);
+		//到报率
+		double reportRate = Double.parseDouble(isNullValue("report_rate", map));
+		String rate = "0";
+		if (reportRate * 100 == 100) {
+			rate = "100%";
+		} else if (reportRate > 0) {
+			rate = String.format("%.2f", reportRate * 100) + "%";
+		}
+		stationExport.setRate(rate);
+		return stationExport;
+	}
+
+
+	@Override
+	public List<StationExport> getRainfallInfo(HttpServletResponse response, StationParams params, String exportFunc) {
+		String urlParam = buildParams(params);
+		String url = RAIN_FALL_API + urlParam;
+		JSONObject ztData = getZtData(null, url);
+		JSONObject result = ztData.getJSONObject("data");
+		JSONArray data = result.getJSONArray("data");
+		List<ZtResultInfo> list = data.toJavaList(ZtResultInfo.class);
+
+		List<StationExport> exportList = new ArrayList<>();
+
+		//按水库主站导出
+		if (exportFunc.equals("reservoir")) {
+			exportList = exportByReservoirRain(list);
+		} else if (exportFunc.equals("station")) {
+			//按测站导出
+			exportList = exportByStationRain(list);
+		}
+
+		return exportList;
+	}
+
+	private List<StationExport> exportByStationRain(List<ZtResultInfo> list) {
+		List<StationExport> exportList = new ArrayList<>();
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				return;
+			} else {
+				//获取子集中所有站点的数据
+				ztResultInfo.getChildren().forEach(e -> {
+					StationExport stationExport1 = buildStationExportRain(e, ztResultInfo);
+					exportList.add(stationExport1);
+				});
+			}
+		});
+
+		return exportList;
+	}
+
+	private List<StationExport> exportByReservoirRain(List<ZtResultInfo> list) {
+		List<StationExport> exportList = new ArrayList<>();
+
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				stationExport.setRes_cd(ztResultInfo.getRes_cd());
+				stationExport.setRes_nm(ztResultInfo.getRes_nm());
+				stationExport.setRes_reg_code(ztResultInfo.getRes_reg_cd());
+				stationExport.setEng_scal(ztResultInfo.getEng_scal());
+				stationExport.setCity_nm(ztResultInfo.getCity_nm());
+				stationExport.setCounty_nm(ztResultInfo.getCounty_nm());
+				stationExport.setTown_nm(ztResultInfo.getTown_nm());
+
+			} else {
+				//获取主站的站点
+				List<HashMap<String, Object>> mainList = ztResultInfo.getChildren().stream().filter(e -> isNullValue("is_main_rsvr", e).equals(1)).collect(Collectors.toList());
+				if (mainList != null && mainList.size() > 0) {
+					//获取主站数据
+					stationExport = buildStationExportRain(mainList.get(0), ztResultInfo);
+				} else {
+					//获取子集中第一个站点的数据
+					stationExport = buildStationExportRain(ztResultInfo.getChildren().get(0), ztResultInfo);
+				}
+			}
+
+			exportList.add(stationExport);
+		});
+
+		return exportList;
+	}
+
+	private StationExport buildStationExportRain(HashMap<String, Object> map, ZtResultInfo ztResultInfo) {
+
+		StationExport stationExport = new StationExport();
+
+		stationExport.setRes_nm(ztResultInfo.getRes_nm());
+		stationExport.setRes_reg_code(ztResultInfo.getRes_reg_cd());
+		stationExport.setRes_cd(ztResultInfo.getRes_cd());
+		stationExport.setEng_scal(ztResultInfo.getEng_scal());
+		stationExport.setCity_nm(ztResultInfo.getCity_nm());
+		stationExport.setCounty_nm(ztResultInfo.getCounty_nm());
+		stationExport.setTown_nm(ztResultInfo.getTown_nm());
+		stationExport.setSt_nm(isNullValue("st_nm", map));
+		stationExport.setFlag(isNullValue("flag", map));
+
+		String stationStatus = isNullValue("station_status", map);
+
+		String stationStatusText = "";
+		if (stationStatus.equals("1")) {
+			stationStatusText = "在线";
+		} else if (stationStatus.equals("0")) {
+			stationStatusText = "离线";
+		}
+		stationExport.setStation_status_text(stationStatusText);
+
+		stationExport.setManufacturer(isNullValue("manufacturer", map));
+
+		//应报
+		String shouldCnt = isNullValue("should_cnt", map);
+		//已报
+		String actualCnt = isNullValue("actual_cnt", map);
+
+		String shouldReportAndReport = StringUtil.format("{}/{}", shouldCnt, actualCnt);
+		stationExport.setShouldReportAndReport(shouldReportAndReport);
+		//到报率
+		double reportRate = Double.parseDouble(isNullValue("report_rate", map));
+		String rate = "0";
+		if (reportRate * 100 == 100) {
+			rate = "100%";
+		} else if (reportRate > 0) {
+			rate = String.format("%.2f", reportRate * 100) + "%";
+		}
+		stationExport.setRate(rate);
+		return stationExport;
+
+
+	}
+
+
+	@Override
+	public List<StationExport> getVideoStationInfo(HttpServletResponse response, StationParams params, String exportFunc) {
+
+		String urlParam = buildParams(params);
+		String url = VIDEO_STATION_API + urlParam;
+		JSONObject ztData = getZtData(null, url);
+		JSONObject result = ztData.getJSONObject("data");
+		JSONArray data = result.getJSONArray("data");
+		List<ZtResultInfo> list = data.toJavaList(ZtResultInfo.class);
+
+		List<StationExport> exportList = new ArrayList<>();
+
+		//按水库主站导出
+		if (exportFunc.equals("reservoir")) {
+			exportList = exportByReservoirVideo(list);
+		} else if (exportFunc.equals("station")) {
+			//按测站导出
+			exportList = exportByStationVideo(list);
+		}
+
+		return exportList;
+	}
+
+	private List<StationExport> exportByStationVideo(List<ZtResultInfo> list) {
+		List<StationExport> exportList = new ArrayList<>();
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				return;
+			} else {
+				//获取子集中所有站点的数据
+				ztResultInfo.getChildren().forEach(e -> {
+					StationExport stationExport1 = buildStationExportVideo(e, ztResultInfo);
+					exportList.add(stationExport1);
+				});
+			}
+		});
+
+		return exportList;
+	}
+
+	private List<StationExport> exportByReservoirVideo(List<ZtResultInfo> list) {
+		return null;
+	}
+
+	private StationExport buildStationExportVideo(HashMap<String, Object> map, ZtResultInfo ztResultInfo) {
+
+		StationExport stationExport = new StationExport();
+
+		stationExport.setRes_nm(ztResultInfo.getName());
+		stationExport.setRes_reg_code(isNullValue("res_reg_code", map));
+		stationExport.setRes_cd(ztResultInfo.getRes_guid());
+		stationExport.setEng_scal(isNullValue("eng_scal", map));
+		stationExport.setCity_nm(ztResultInfo.getCity_nm());
+		stationExport.setCounty_nm(ztResultInfo.getCounty_nm());
+		stationExport.setTown_nm(ztResultInfo.getTown_nm());
+		stationExport.setSt_nm(isNullValue("st_nm", map));
+		stationExport.setFlag(isNullValue("flag", map));
+
+
+		stationExport.setStation_status_text(isNullValue("online", map));
+		stationExport.setManufacturer(isNullValue("manufacturer", map));
+
+		return stationExport;
+	}
+
+
+	@Override
+	public List<StationExport> getImageStation(HttpServletResponse response, StationParams params, String exportFunc) {
+
+		String urlParam = buildParams(params);
+		String url = IMAGE_STATION_API + urlParam;
+		JSONObject ztData = getZtData(null, url);
+		JSONObject result = ztData.getJSONObject("data");
+		JSONArray data = result.getJSONArray("data");
+		List<ZtResultInfo> list = data.toJavaList(ZtResultInfo.class);
+
+		List<StationExport> exportList = new ArrayList<>();
+
+		//按水库主站导出
+		if (exportFunc.equals("reservoir")) {
+			exportList = exportByReservoirImage(list);
+		} else if (exportFunc.equals("station")) {
+			//按测站导出
+			exportList = exportByStationImage(list);
+		}
+
+		return exportList;
+	}
+
+
+	private List<StationExport> exportByStationImage(List<ZtResultInfo> list) {
+		List<StationExport> exportList = new ArrayList<>();
+
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				return;
+
+			} else {
+				//获取子集中所有站点的数据
+				ztResultInfo.getChildren().forEach(e -> {
+					StationExport stationExport1 = buildStationExportImage(e, ztResultInfo);
+					exportList.add(stationExport1);
+				});
+			}
+		});
+
+		return exportList;
+	}
+
+	private List<StationExport> exportByReservoirImage(List<ZtResultInfo> list) {
+		List<StationExport> exportList = new ArrayList<>();
+
+		list.forEach(ztResultInfo -> {
+			StationExport stationExport = new StationExport();
+
+			if (ztResultInfo.getChildren() == null || ztResultInfo.getChildren().size() == 0) {
+				stationExport.setRes_cd(ztResultInfo.getRes_code());
+				stationExport.setRes_nm(ztResultInfo.getRes_nm());
+				stationExport.setCity_nm(ztResultInfo.getCity_nm());
+				stationExport.setCounty_nm(ztResultInfo.getCounty_nm());
+				stationExport.setTown_nm(ztResultInfo.getTown_nm());
+			} else {
+				//获取子集第一个
+				stationExport = buildStationExportImage(ztResultInfo.getChildren().get(0), ztResultInfo);
+			}
+
+			exportList.add(stationExport);
+		});
+
+		return exportList;
+	}
+
+	private StationExport buildStationExportImage(HashMap<String, Object> map, ZtResultInfo ztResultInfo) {
+
+		StationExport stationExport = new StationExport();
+
+		stationExport.setRes_nm(ztResultInfo.getRes_name());
+		stationExport.setRes_reg_code(isNullValue("res_reg_code", map));
+		stationExport.setRes_cd(ztResultInfo.getRes_code());
+		stationExport.setEng_scal(isNullValue("eng_scal", map));
+		stationExport.setCity_nm(ztResultInfo.getCity_nm());
+		stationExport.setCounty_nm(ztResultInfo.getCounty_nm());
+		stationExport.setTown_nm(ztResultInfo.getTown_nm());
+		stationExport.setSt_nm(isNullValue("st_nm", map));
+		stationExport.setFlag(isNullValue("flag", map));
+
+		String stationStatus = isNullValue("station_status", map);
+
+		String stationStatusText = "";
+		if (stationStatus.equals("1")) {
+			stationStatusText = "在线";
+		} else if (stationStatus.equals("0")) {
+			stationStatusText = "离线";
+		}
+		stationExport.setStation_status_text(stationStatusText);
+
+		stationExport.setManufacturer(isNullValue("manufacturer", map));
+
+		//应报
+		String shouldCnt = isNullValue("should_cnt", map);
+		//已报
+		String actualCnt = isNullValue("actual_cnt", map);
+
+		String shouldReportAndReport = StringUtil.format("{}/{}", shouldCnt, actualCnt);
+		stationExport.setShouldReportAndReport(shouldReportAndReport);
+		//到报率
+		double reportRate = Double.parseDouble(isNullValue("report_rate", map));
+		String rate = "0";
+		if (reportRate * 100 == 100) {
+			rate = "100%";
+		} else if (reportRate > 0) {
+			rate = String.format("%.2f", reportRate * 100) + "%";
+		}
+		stationExport.setRate(rate);
+		return stationExport;
+	}
+
+
+	@Override
+	public List<StationExport> getOsmotic(HttpServletResponse response, StationParams params, String exportFunc) {
+		return null;
+	}
+
+
+	private String isNullValue(String key, HashMap<String, Object> map) {
+		if (map.get(key) == null) {
+			return "";
+		} else {
+			return map.get(key).toString();
+		}
+	}
+
+	private String isNullObject(Object value) {
+		if (value != null) {
+			return value.toString();
+		} else {
+			return "";
+		}
+	}
+
+
+	private String convertType(String type, String enumName) {
+		String text = "";
+
+		List<String> typeList = Arrays.asList(type.split(","));
+		String typeKey = typeList.get(0);
+		String explain = "";
+		if (typeList.size() > 1) {
+			explain = typeList.get(1);
+		}
+
+		//key值表示其他
+		if (typeKey.equals("9") || typeKey.equals("其他")) {
+			text = explain;
+		} else {
+			switch (enumName) {
+				case "AqueductTypeEnum":
+					text = AqueductTypeEnum.find(typeKey).getLabel();
+					break;
+				case "RsbWorkingGateEnum":
+					text = RsbWorkingGateEnum.find(typeKey).getLabel();
+					break;
+				case "OcTypeEnum":
+					text = OcTypeEnum.find(typeKey).getLabel();
+					break;
+				case "SpillwayHoleType":
+					text = typeKey;
+					break;
+				case "Explain":
+					text = typeKey;
+					break;
+			}
+		}
+
+		return text;
+	}
+
+
 	/**
 	 * 调用接口获取中台数据
 	 */
-	public JSONObject getZtData(String params, String url){
+	public JSONObject getZtData(String params, String url) {
 		// 获取环境
 		String activeProfile = SpringContextUtil.getActiveProfile();
-		if (activeProfile.equals("dev")){
+		if (activeProfile.equals("dev")) {
 			url = ZtApiUrlConstant.url_prefix_dev + url;
 		}
-		if (activeProfile.equals("prod")){
+		if (activeProfile.equals("prod")) {
 			url = ZtApiUrlConstant.url_prefix_prod + url;
 		}
-		if (activeProfile.equals("test")){
+		if (activeProfile.equals("test")) {
 			url = ZtApiUrlConstant.url_prefix_test + url;
 		}
 		//设置请求头
@@ -159,5 +1124,29 @@
 		return null;
 	}
 
+	//根据参数对象构建url后的参数
+	private String buildParams(StationParams params) {
+		List<String> list = new ArrayList<>();
+		String text = "";
+		Class<? extends StationParams> clazz = params.getClass();
+		Arrays.stream(clazz.getDeclaredFields())
+			.peek(field -> field.setAccessible(true))
+			.forEach(field -> {
+				try {
+					Object value = field.get(params);
+					if (ObjectUtil.isNotEmpty(value)) {
+						list.add(StringUtil.format("{}={}", field.getName(), value.toString()));
+					}
+
+				} catch (IllegalAccessException e) {
+					e.printStackTrace();
+				}
+			});
+
+
+		text = String.join("&", list);
+		return text;
+	}
+
 
 }
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
index 6f3d73b..cd0670f 100644
--- 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
@@ -1,6 +1,7 @@
 package cn.gistack.sm.sjztmd.word.util;
 
 import ch.qos.logback.core.pattern.FormatInfo;
+import cn.gistack.sm.sjztmd.vo.StationExport;
 import cn.gistack.sm.sjztmd.word.vo.DzkInfo;
 import cn.gistack.sm.sjztmd.word.vo.OverDetail;
 import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
@@ -201,4 +202,19 @@
 		}
 	}
 
+    public static void createStationExcel(HttpServletResponse response,String title, String fileName, List<StationExport> list ,String templatePath) throws Exception {
+
+		HashMap<String,String> map = new HashMap<>();
+		map.put("title",title);
+
+		InputStream inputStream = ExcelUtil.class.getClassLoader().getResourceAsStream(templatePath);
+		ExcelWriter excelWriter = EasyExcel.write(getOutputStream(fileName, response)).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).build();
+		WriteSheet writeSheet1 = EasyExcel.writerSheet().build();
+
+		// 这个传进去的 map 就是非表格数据,
+		excelWriter.fill(map, writeSheet1);
+		excelWriter.fill(new FillWrapper("data", list), writeSheet1);
+
+		excelWriter.finish();
+    }
 }
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 b180882..dbbe6ff 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
@@ -18,10 +18,10 @@
  */
 public class WordUtil {
 
-	public static byte[] compileTemplateAndRenderData(TbWordVO tbWordVO) 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));
+		XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createParams(tbWordVO,tableMap));
 		template.write(outputStream);
 		outputStream.flush();
 		outputStream.close();
@@ -34,7 +34,7 @@
 	 *
 	 * @return
 	 */
-	private static Map<String, Object> createParams(TbWordVO tbWordVO) {
+	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());
@@ -77,6 +77,10 @@
 		params.put("主管部门责任人", tbWordVO.getCompetentDepartmentInfo());  // 责任人信息表,不是填报表
 		params.put("行政主管单位", tbWordVO.getAdministrativeUnit());
 		params.put("行政责任人职务手机号码", tbWordVO.getAdministrativeInfo()); // 责任人信息表,不是填报表
+
+
+		params.putAll(tableMap);
+
 		return params;
 	}
 
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java
index c5253db..c7b9315 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java
@@ -182,9 +182,9 @@
 
 		//正常溢洪道
 		List<TbAttResRsbNorspi> tbAttResRsbNorspiList = (List<TbAttResRsbNorspi>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbNorspiList");
-		//泄洪洞
-		List<TbAttResRsbVerspi> tbAttResRsbVerspiList = (List<TbAttResRsbVerspi>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbVerspiList");
 		//非常溢洪道
+		List<TbAttResRsbVerspi> tbAttResRsbVerspiList = (List<TbAttResRsbVerspi>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbVerspiList");
+		//泄洪洞
 		List<TbAttResRsbSpillway> tbAttResRsbSpillwayList = (List<TbAttResRsbSpillway>) resRsbNorsipiVerspiMionitorDetailByGuid.get("tbAttResRsbSpillwayList");
 
 
@@ -533,7 +533,7 @@
 
 		this.protectCity = tbAttResEngBene.getCity();
 
-		double person = tbAttResEngBene.getFlControlPerson() / 1000.0;
+		double person = tbAttResEngBene.getFlControlPerson() / 10000.0;
 
 
 		this.protectPersonLand =
@@ -547,19 +547,19 @@
 
 		List<String> protectList = new ArrayList<>();
 
-		if (StringUtil.isNotBlank(railway)) {
+		if (StringUtil.isNotBlank(railway) && !railway.equals("无")) {
 			protectList.add(railway);
 		}
 
-		if (StringUtil.isNotBlank(highway)) {
+		if (StringUtil.isNotBlank(highway)&& !highway.equals("无")) {
 			protectList.add(highway);
 		}
 
-		if (StringUtil.isNotBlank(importCommunication)) {
+		if (StringUtil.isNotBlank(importCommunication)&& !importCommunication.equals("无")) {
 			protectList.add(importCommunication);
 		}
 
-		if (StringUtil.isNotBlank(importFactory)) {
+		if (StringUtil.isNotBlank(importFactory)&& !importFactory.equals("无")) {
 			protectList.add(importFactory);
 		}
 		this.protectThings = "";
@@ -576,19 +576,19 @@
 		if (StringUtils.isNotBlank(tbAttResEngBene.getIrrObject())) {
 			this.economicBenefit =
 				StringUtil.format("水库为{}提供灌溉用水,设计灌溉面积{}万亩,有效灌溉面积{}万亩,多年平均灌溉水量{}万m³。",
-					tbAttResEngBene.getIrrObject(), String.format("%.2f", tbAttResEngBene.getDesIrrArea() / 1000), String.format("%.2f", tbAttResEngBene.getChecIrrArea() / 1000), tbAttResEngBene.getMoyearIrrAvg());
+					tbAttResEngBene.getIrrObject(), String.format("%.2f", tbAttResEngBene.getDesIrrArea() / 10000), String.format("%.2f", tbAttResEngBene.getChecIrrArea() / 10000), tbAttResEngBene.getMoyearIrrAvg());
 		}
 
 		if (StringUtil.isNotBlank(tbAttResEngBene.getSupplyObject())) {
 			if (StringUtils.isNotBlank(this.economicBenefit)) {
 				this.economicBenefit = this.economicBenefit +
 					StringUtil.format("此外,水库为{}{}万人提供生活用水,年均供水量{}万m³。",
-						tbAttResEngBene.getSupplyObject(),String.format("%.2f", Double.parseDouble(tbAttResEngBene.getSupplyPopulation())/ 1000), tbAttResEngBene.getMoyearSupplyAvg());
+						tbAttResEngBene.getSupplyObject(),String.format("%.2f", Double.parseDouble(tbAttResEngBene.getSupplyPopulation())/ 10000), tbAttResEngBene.getMoyearSupplyAvg());
 			} else {
 				//无灌溉有供水直接介绍供水
 				this.economicBenefit =
 					StringUtil.format("水库为{}{}万人提供生活用水,年均供水量{}万m³。",
-						tbAttResEngBene.getSupplyObject(),String.format("%.2f", Double.parseDouble(tbAttResEngBene.getSupplyPopulation())/ 1000), tbAttResEngBene.getMoyearSupplyAvg());
+						tbAttResEngBene.getSupplyObject(),String.format("%.2f", Double.parseDouble(tbAttResEngBene.getSupplyPopulation())/ 10000), tbAttResEngBene.getMoyearSupplyAvg());
 			}
 		}
 
@@ -638,7 +638,7 @@
 		}
 
 		//key值表示其他
-		if (typeKey.equals("9") || Integer.parseInt(typeKey) == 9 || typeKey.equals("其他")) {
+		if (typeKey.equals("9") || typeKey.equals("其他") || Integer.parseInt(typeKey) == 9 ) {
 			text = explain;
 		}else{
 			switch (enumName) {
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate1.xlsx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate1.xlsx
new file mode 100644
index 0000000..f62b962
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate1.xlsx
Binary files differ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate2.xlsx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate2.xlsx
new file mode 100644
index 0000000..ed3ef01
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate2.xlsx
Binary files differ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx
index 8098f22..95809b8 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx
Binary files differ

--
Gitblit v1.9.3