guoshilong
2023-12-04 a8385a2b16593c8c6db45c2f45f88f04b099fddd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package cn.gistack.sm.sjztmd.word.util;
 
import cn.gistack.sm.sjztmd.word.vo.*;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.NumbericRenderData;
 
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/11/23 9:53
 */
public class WordUtil {
 
    public static byte[] compileTemplateAndRenderData(TbWordVO tbWordVO) throws Exception {
        InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/skcgmb.docx");
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createParams(tbWordVO));
        template.write(outputStream);
        outputStream.flush();
        outputStream.close();
        return outputStream.toByteArray();
    }
 
 
    /**
     * 根据水库id获取数据
     *
     * @return
     */
    private static Map<String, Object> createParams(TbWordVO tbWordVO) {
        Map<String, Object> params = new HashMap<>();
        params.put("水库名称", tbWordVO.getResName());
        params.put("市", tbWordVO.getCityName());
        params.put("县", tbWordVO.getCountyName());
        params.put("镇", tbWordVO.getTownName());
        params.put("河流名称", tbWordVO.getLocRvName());
        params.put("水库功能", tbWordVO.getResFuncText());
        params.put("调节性能", tbWordVO.getAdjustPropText());
        params.put("水库坝址以上控制流域面积", tbWordVO.getConArea());
        params.put("流域多年平均降雨量", tbWordVO.getMoyearRainAvg());
        params.put("多年平均年径流量", tbWordVO.getMoyearFlAvg());
        params.put("设计洪水标准", tbWordVO.getDesFlSta());
        params.put("校核洪水标准", tbWordVO.getChecFlSta());
        params.put("总库容", tbWordVO.getTotalCap());
        params.put("水文特征", tbWordVO.getHydrologicalCharacteristics());
        params.put("工程等别", tbWordVO.getEngGrad());
        params.put("挡水建筑物泄洪建筑物正常溢洪道", tbWordVO.getBuildingText());
        params.put("主坝信息", tbWordVO.getMainDamInfo());
        params.put("挡水建筑物泄洪建筑物正常溢洪道等详情", tbWordVO.getBuildingInfo());
        params.put("输水建筑物输水道形式", tbWordVO.getAqueductType());//若有两个以上输水建筑物,则描述设计流量较大的,若只有一个输水建筑物则去掉“主要”
        params.put("断面尺寸", tbWordVO.getSection());
        params.put("进口底槛高程", tbWordVO.getThresholdElevation());
        params.put("设计流量", tbWordVO.getDesignFlow());
        params.put("电站信息", tbWordVO.getPowerStationInfo());
        params.put("保护城市", tbWordVO.getProtectCity());
        params.put("保护人口保护耕地", tbWordVO.getProtectPersonLand());
        params.put("保护铁路", tbWordVO.getProtectThings());//铁路、公路、管线、企业几个依次罗列,超过三个列出第二个后为“XX等”,后面不需罗列
        params.put("经济效益", tbWordVO.getEconomicBenefit());//若既有灌溉又有供水,则有“此外,”,无灌溉有供水直接介绍供水
        params.put("工程始建时间", tbWordVO.getStartTime());
        params.put("下闸蓄水时间", tbWordVO.getWaterStorageTm());
        // 鉴定时间 > 除险加固
        params.put("安全鉴定和除险加固", tbWordVO.getSafetyMonitorText());
        // 鉴定时间 < 除险加固
        //params.put("安全鉴定和除险加固","2012年9月,水库进行安全鉴定,鉴定结果为“三类坝”(加一个双引号),工程主要存在问题为坝顶及心墙顶欠高,大坝渗透系数偏大,溢洪道过流能力不足、边墙高度不足等(加一个“等”)。
        // 针对水库安全鉴定发现的问题,水库除险加固工程于2019年11月动工,2022年6月蓄水验收。");
        params.put("管理单位名称", tbWordVO.getMUnitName());
        params.put("管理单位性质", tbWordVO.getMUnitNature());
        params.put("主管部门", tbWordVO.getCUnitName());// 水库基本信息表,不是填报表
        params.put("管理单位职工人数", tbWordVO.getMUnitPersonNumber());
        params.put("主管部门责任人", tbWordVO.getCompetentDepartmentInfo());  // 责任人信息表,不是填报表
        params.put("行政主管单位", tbWordVO.getAdministrativeUnit());
        params.put("行政责任人职务手机号码", tbWordVO.getAdministrativeInfo()); // 责任人信息表,不是填报表
        return params;
    }
 
 
    public static byte[] GetOverInfo(List<TotalInfo> totalList, List<DzkInfo> dzkList, List<OverDetail> overDetailList,List<SzInfo> szInfoList) throws Exception {
        InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/overFloodTemplate.docx");
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        OverWord overWord = new OverWord(totalList, dzkList, overDetailList, szInfoList);
        XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createOverWordParam(overWord));
        template.write(outputStream);
        outputStream.flush();
        outputStream.close();
        return outputStream.toByteArray();
    }
 
    private static Map<String, Object> createOverWordParam(OverWord overWord) {
        Map<String, Object> params = new HashMap<>();
 
        params.put("时间", overWord.getTm());
        params.put("全省水库超汛限", overWord.getTotalInfo());
        params.put("小型水库详情", overWord.getOverSmallInfo());
        params.put("大型水库详情", overWord.getOverBigInfo());
        params.put("中型水库详情", overWord.getOverMidInfo());
        params.put("省直水库详情", overWord.getProvinceInfo());
 
        return params;
 
    }
 
    private static byte[] GenerateWord(String templatePath, Object object) throws Exception {
        InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream(templatePath);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        XWPFTemplate template = XWPFTemplate.compile(inputStream).render(object);
        template.write(outputStream);
        outputStream.flush();
        outputStream.close();
        return outputStream.toByteArray();
    }
 
}