xieb
2023-11-24 1e50309e10fbac82992f28932ffe34138af17de7
水库填报导出word
1 files modified
3 files added
154 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java 52 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java 78 ●●●●● 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/pom.xml
@@ -74,6 +74,30 @@
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-excel</artifactId>
        </dependency>
        <!--    数据编辑操作日志  修改前->修改后    -->
        <dependency>
            <groupId>io.geekidea.spring.boot</groupId>
            <artifactId>update-record-mybatis-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--    word填充导出    -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <!-- word模板动态生成word poi-tl -->
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.8.2</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
New file
@@ -0,0 +1,52 @@
package cn.gistack.sm.sjztmd.word.controller;
import cn.gistack.sm.sjztmd.word.util.WordUtil;
import com.deepoove.poi.XWPFTemplate;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/11/23 10:08
 */
@Slf4j
@Api(tags = "填报导出")
@RestController
@RequestMapping("/sjztmd/word")
@AllArgsConstructor
public class DownTemplateController {
    @GetMapping("/download/{resGuid}")
    public ResponseEntity genera(HttpServletResponse response, @PathVariable String resGuid) throws Exception {
        String fileName = resGuid + ".docx";
        byte[] data = WordUtil.compileTemplateAndRenderData();
        // 创建响应实体并设置响应头,将输出流作为响应体返回给客户端
        InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(data));
        // 将临时文件添加到响应中,以便用户下载
        return ResponseEntity.ok()
            .contentType(MediaType.APPLICATION_OCTET_STREAM) // 设置响应的内容类型为二进制流(octet stream)
            .header("Content-Disposition", "attachment; filename=\"" + fileName) // 设置响应的Content-Disposition头,以便浏览器提示用户下载文件
            .body(resource); // 将InputStreamResource对象作为响应体
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
New file
@@ -0,0 +1,78 @@
package cn.gistack.sm.sjztmd.word.util;
import com.deepoove.poi.XWPFTemplate;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
 * @PROJECT_NAME: skjcmanager
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2023/11/23 9:53
 */
public class WordUtil {
    public static byte[] compileTemplateAndRenderData() throws Exception {
        InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream("word/doc/skcgmb.docx");
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        XWPFTemplate template = XWPFTemplate.compile(inputStream).render(createParams());
        template.write(outputStream);
        outputStream.flush();
        outputStream.close();
        return outputStream.toByteArray();
    }
    /**
     * 根据水库id获取数据
     * @return
     */
    private static Map<String, Object> createParams() {
        Map<String, Object> params = new HashMap<>();
        params.put("水库名称", "杨树堰水库");
        params.put("市", "黄冈市");
        params.put("县", "蕲春县");
        params.put("镇", "土匪镇");
        params.put("河流名称", "滠水支流泊沫河");
        params.put("水库功能", "防洪、灌溉、供水等综合");
        params.put("调节性能", "多年调节");
        params.put("水库坝址以上控制流域面积", "21");
        params.put("流域多年平均降雨量", "1171");
        params.put("多年平均年径流量", "1260");
        params.put("设计洪水标准", "五十年一遇");
        params.put("校核洪水标准", "千年一遇");
        params.put("总库容", "2823");
        params.put("水文特征", "兴利库容1741万m³,调洪库容568万m³,死库容514万m³;校核洪水位54.18m,设计洪水位53.45m,正常蓄水位51.92m,死水位41.42 m");
        params.put("工程等别","Ⅲ");
        params.put("挡水建筑物泄洪建筑物正常溢洪道","副坝、输水混凝土箱涵");
        params.put("主坝信息","主坝为粘土心墙坝,坝顶高程55.00m,最大坝高22m,坝长230m,坝顶宽5.5m。");
        params.put("挡水建筑物泄洪建筑物正常溢洪道等详情","副坝为均质土坝,坝顶高程55.00m,最大坝高14.4m,坝长65m,坝顶宽5.5m。" +
            "溢洪道为正槽式溢洪道,无闸控制(溢洪道根据是否有闸控制确定,填有闸控制、无闸控制),堰顶高程51.92m,堰顶净宽36m,最大泄洪量262m³/s。");
        params.put("输水建筑物输水道形式","主要采用地面渠道输水");//若有两个以上输水建筑物,则描述设计流量较大的,若只有一个输水建筑物则去掉“主要”
        params.put("断面尺寸","3X4");
        params.put("进口底槛高程","46.12");
        params.put("设计流量","20");
        params.put("保护城市","黄陂城区");
        params.put("保护人口保护耕地","3万人口、2万亩耕地");
        params.put("保护铁路","京广铁路、京九铁路等");//铁路、公路、管线、企业几个依次罗列,超过三个列出第二个后为“XX等”,后面不需罗列
        params.put("经济效益","水库为梅院泥灌区(与梅店、院基寺联合运用)提供灌溉用水,设计灌溉面积32.76万亩,有效灌溉面积24万亩,多年平均灌溉水量560万m³。" +
            "此外,水库为罗汉寺街、李家集街12万人提供生活用水,年均供水量511万m³。");//若既有灌溉又有供水,则有“此外,”,无灌溉有供水直接介绍供水
        params.put("工程始建时间","1958年1月");
        params.put("下闸蓄水时间","1958年7月");
        // 鉴定时间 > 除险加固
        params.put("安全鉴定和除险加固","2022年3月,水库进行安全鉴定,鉴定结果为\"三类坝\",工程主要存在问题为2022年安全鉴定武汉市水务局批复为三类坝,大坝中心未出复核意见。心墙渗透系数偏大。");
        // 鉴定时间 < 除险加固
        //params.put("安全鉴定和除险加固","2012年9月,水库进行安全鉴定,鉴定结果为“三类坝”(加一个双引号),工程主要存在问题为坝顶及心墙顶欠高,大坝渗透系数偏大,溢洪道过流能力不足、边墙高度不足等(加一个“等”)。
        // 针对水库安全鉴定发现的问题,水库除险加固工程于2019年11月动工,2022年6月蓄水验收。");
        params.put("管理单位名称","武汉市黄陂区梅院泥水库管理处");
        params.put("管理单位性质","公益类");
        params.put("主管部门","黄陂区水务和湖泊局管理");// 水库基本信息表,不是填报表
        params.put("管理单位职工人数","106");
        params.put("主管部门责任人","敖志雄(领导,13871305098)");  // 责任人信息表,不是填报表
        params.put("行政主管单位","黄陂区人民政府");
        params.put("行政责任人职务手机号码","邱昌春(副区长,13995616668)"); // 责任人信息表,不是填报表
        return params;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/skcgmb.docx
Binary files differ