guoshilong
2023-12-09 e039f5e9a3063eeec2c6c51f83e08beda0d1b5ca
填报word表格
7 files modified
14 files added
1648 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/StationExcelController.java 107 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/BaseStationExcel.java 57 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationExport.java 18 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationParams.java 41 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/WaterLevel.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ZtResultInfo.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java 7 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/BasCodeEnum.java 41 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/InfoBuildingEnum.java 44 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/OcTypeEnum.java 53 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/ResScalEnum.java 55 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/RsbWorkingGateEnum.java 45 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/VerSpillwayTypeEnum.java 51 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/ISjztmdService.java 18 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/service/impl/SjztmdServiceImpl.java 1023 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/ExcelUtil.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java 10 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java 22 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate1.xlsx patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate2.xlsx patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/StationExcelController.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/BaseStationExcel.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationExport.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/StationParams.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/WaterLevel.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ZtResultInfo.java
New file
@@ -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;
}
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));
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/BasCodeEnum.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/InfoBuildingEnum.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/OcTypeEnum.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/ResScalEnum.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/RsbWorkingGateEnum.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/enums/VerSpillwayTypeEnum.java
New file
@@ -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);
    }
}
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);
}
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;
    }
}
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();
    }
}
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;
    }
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) {
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate1.xlsx
Binary files differ
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/excel/xlsx/stationTemplate2.xlsx
Binary files differ
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx
Binary files differ