skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
@@ -20,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -55,4 +56,21 @@ .body(resource); // 将InputStreamResource对象作为响应体 } @GetMapping("/download/eightFloodInfo") public ResponseEntity eightFloodInfo() throws Exception{ String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String fileName = time+ "全省水库防汛情况.docx"; byte[] data = WordUtil.GetEightFloodInfo(); // 创建响应实体并设置响应头,将输出流作为响应体返回给客户端 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/service/impl/SjztmdServiceImpl.java
@@ -1,14 +1,26 @@ package cn.gistack.sm.sjztmd.word.service.impl; import cn.gistack.common.utils.SpringContextUtil; import cn.gistack.sm.sjztmd.entity.*; import cn.gistack.sm.sjztmd.mapper.SjztMdMapper; import cn.gistack.sm.sjztmd.service.*; import cn.gistack.sm.sjztmd.word.service.ISjztmdService; import cn.gistack.sm.sjztmd.word.vo.TbWordVO; import cn.gistack.sm.sjztods.constant.ZtApiUrlConstant; import cn.gistack.sm.sjztods.constant.ZtConfigConstant; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature; import com.baomidou.dynamic.datasource.annotation.DS; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.List; @@ -18,7 +30,8 @@ @AllArgsConstructor @DS("zt") public class SjztmdServiceImpl implements ISjztmdService { @Autowired private RestTemplate restTemplate; private final SjztMdMapper mapper; private final ITbAttResBaseService attResBaseService; @@ -62,5 +75,42 @@ return tbWordVO; } /** * 调用接口获取中台数据 */ public JSONObject getZtData(String params, String url){ // 获取环境 String activeProfile = SpringContextUtil.getActiveProfile(); if (activeProfile.equals("dev")){ url = ZtApiUrlConstant.url_prefix_dev + url; } if (activeProfile.equals("prod")){ url = ZtApiUrlConstant.url_prefix_prod + url; } if (activeProfile.equals("test")){ url = ZtApiUrlConstant.url_prefix_test + url; } //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.add(ZtConfigConstant.header_key, ZtConfigConstant.header_value); //封装请求头 HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers); try { //有请求头,有参数请求 ResponseEntity<String> responseEntity = restTemplate.exchange(url + params, HttpMethod.GET, formEntity, String.class); // Feature.IgnoreNotMatch 保留null值的属性 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody(), Feature.IgnoreNotMatch); // 返回 return jsonObject; } catch (Exception e) { e.printStackTrace(); } return null; } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
@@ -25,6 +25,23 @@ return outputStream.toByteArray(); } public static byte[] GetEightFloodInfo() throws Exception{ String templatePath = "word/doc/eightFloodInfoTemplate.docx"; HashMap<String,Object> map = new HashMap<>(); byte[] bytes = GenerateWord(templatePath, map); return bytes; } private static byte[] GenerateWord(String templatePath,Object object) throws Exception { InputStream inputStream = WordUtil.class.getClassLoader().getResourceAsStream(templatePath); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); XWPFTemplate template = XWPFTemplate.compile(inputStream).render(object); template.write(outputStream); outputStream.flush(); outputStream.close(); return outputStream.toByteArray(); } /** * 根据水库id获取数据 * @return skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/TbWordVO.java
@@ -212,7 +212,7 @@ } this.subDamInfo = GenerateDamInfo(subDamName, subDam); }else{ }else if (damCount == 1){ TbAttResWaterBlock mainDam = tbAttResWaterBlockList.get(0); //第一个就是主坝 this.mainDamInfo = GenerateDamInfo("主坝", mainDam); @@ -438,13 +438,20 @@ } //工程等别 if (tbAttResBase.getEngGrad() != null){ this.engGrad = tbAttResBase.getEngGrad(); } if (tbAttResBase.getStartTime() != null){ //开工时间 (2022年9月) this.startTime = new SimpleDateFormat("yyyy年MM月").format(tbAttResBase.getStartTime()); } if (tbAttResBase.getWaterStorageTm() != null){ //蓄水时间(2022年9月) this.waterStorageTm = new SimpleDateFormat("yyyy年MM月").format(tbAttResBase.getWaterStorageTm()); } } private void formatTbAttResStagChar(TbAttResStagChar tbAttResStagChar) { @@ -525,8 +532,12 @@ } this.protectCity = tbAttResEngBene.getCity(); double person = tbAttResEngBene.getFlControlPerson() / 1000.0; this.protectPersonLand = StringUtil.format("{}万人口、{}万亩耕地", String.format("%.2f",tbAttResEngBene.getFlControlPerson()/1000) , String.format("%.2f", tbAttResEngBene.getFlControlLand() / 1000)); StringUtil.format("{}万人口、{}万亩耕地", String.format("%.2f",person) , String.format("%.2f", tbAttResEngBene.getFlControlLand() / 1000)); ////铁路、公路、管线、企业几个依次罗列,超过三个列出第二个后为“XX等”,后面不需罗列 String railway = tbAttResEngBene.getRailway(); @@ -588,8 +599,10 @@ if (tbAttResSafetyMonitor ==null){ return; } String time = new SimpleDateFormat("yyyy年MM月").format(tbAttResSafetyMonitor.getSafetyAppraisalTime()); String time = ""; if (tbAttResSafetyMonitor.getSafetyAppraisalTime() != null){ time = new SimpleDateFormat("yyyy年MM月").format(tbAttResSafetyMonitor.getSafetyAppraisalTime()); } String type = SafetyAppraisalTypeEnum.find(tbAttResSafetyMonitor.getSafetyAppraisalResult()).getLabel(); String surveyProblem = tbAttResSafetyMonitor.getSurveyProblem(); //(若一类坝,不介绍问题,二、三类坝介绍) skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/eightFloodInfoTemplate.docBinary files differ