|
|
@@ -1,7 +1,11 @@
|
|
|
package com.nb.web.service.bus.utils;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.io.IoUtil;
|
|
|
import cn.hutool.core.io.resource.ResourceUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import com.deepoove.poi.XWPFTemplate;
|
|
|
import com.deepoove.poi.config.Configure;
|
|
|
import com.deepoove.poi.data.PictureType;
|
|
|
@@ -16,7 +20,8 @@ import org.apache.poi.xwpf.usermodel.BreakType;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.*;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @ClassName : AnalExportUtils
|
|
|
@@ -27,13 +32,13 @@ import java.util.List;
|
|
|
|
|
|
public class AnalExportUtils {
|
|
|
//临床信息模板路径
|
|
|
- private static final String clinic_pattern_path="classpath:"+File.separator+"export"+File.separator+"patientTmp.docx";
|
|
|
+ private static final byte[] clinic_pattern= IoUtil.readBytes(ResourceUtil.getStream("classpath:"+File.separator+"export"+File.separator+"patientTmp.docx"));
|
|
|
//输注信息模板路径
|
|
|
- private static final String infusion_pattern_path="classpath:"+File.separator+"export"+File.separator+"infusionHistoryTmp.docx";
|
|
|
+ private static final byte[] infusion_pattern=IoUtil.readBytes(ResourceUtil.getStream("classpath:"+File.separator+"export"+File.separator+"infusionHistoryTmp.docx"));
|
|
|
//图片模板路径
|
|
|
- private static final String image_pattern_path="classpath:"+File.separator+"export"+File.separator+"imageTmp.docx";
|
|
|
+ private static final byte[] image_pattern=IoUtil.readBytes(ResourceUtil.getStream("classpath:"+File.separator+"export"+File.separator+"imageTmp.docx"));
|
|
|
//评价模板路径
|
|
|
- private static final String eval_pattern_path="classpath:"+File.separator+"export"+File.separator+"evalTmp.docx";
|
|
|
+ private static final byte[] eval_pattern=IoUtil.readBytes(ResourceUtil.getStream("classpath:"+File.separator+"export"+File.separator+"evalTmp.docx"));
|
|
|
|
|
|
public static void export(HttpServletResponse response, ClinicAnalRecordResult record,String base64) throws Exception {
|
|
|
response.addHeader("Content-Disposition","attachment;filename="+record.getClinic().getPatientCode()+".docx");
|
|
|
@@ -44,7 +49,7 @@ public class AnalExportUtils {
|
|
|
|
|
|
private static void export0(OutputStream outputStream,ClinicAnalRecordResult record,String base64) throws Exception {
|
|
|
NiceXWPFDocument document= XWPFTemplate.compile(
|
|
|
- ResourceUtil.getStream(clinic_pattern_path))
|
|
|
+ new ByteArrayInputStream(clinic_pattern))
|
|
|
.render(record.getClinic())
|
|
|
.getXWPFDocument();
|
|
|
document=exportInfusionInfo(document,record.getInfusionRecords());
|
|
|
@@ -52,10 +57,16 @@ public class AnalExportUtils {
|
|
|
document=exportImage(document,base64);
|
|
|
//文件输出流
|
|
|
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
|
|
|
- document.write(bos);
|
|
|
- bos.flush();
|
|
|
- outputStream.flush();
|
|
|
- outputStream.close();
|
|
|
+ try {
|
|
|
+ document.write(bos);
|
|
|
+ bos.flush();
|
|
|
+ outputStream.flush();
|
|
|
+ }catch (Exception e){
|
|
|
+ throw e;
|
|
|
+ }finally {
|
|
|
+ outputStream.close();
|
|
|
+ bos.close();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -63,14 +74,27 @@ public class AnalExportUtils {
|
|
|
* 导出输注记录
|
|
|
*/
|
|
|
private static NiceXWPFDocument exportInfusionInfo(NiceXWPFDocument xwpfDocument,List<ClinicAnalInfusionRecord> infusions) throws Exception {
|
|
|
+ if(CollUtil.isEmpty(infusions)){
|
|
|
+ return xwpfDocument;
|
|
|
+ }
|
|
|
xwpfDocument.createParagraph().createRun().addBreak(BreakType.PAGE);
|
|
|
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
|
|
Configure config = Configure.builder()
|
|
|
.bind("modifies", policy)
|
|
|
.build();
|
|
|
- for (ClinicAnalInfusionRecord o : infusions) {
|
|
|
- xwpfDocument=xwpfDocument.merge(XWPFTemplate.compile(
|
|
|
- ResourceUtil.getStream(infusion_pattern_path), config).render(o).getXWPFDocument());
|
|
|
+ Map<Date, List<NiceXWPFDocument>> document = infusions.stream()
|
|
|
+ .collect(Collectors.groupingBy(ClinicAnalInfusionRecord::getStartTime, Collectors.collectingAndThen(Collectors.toList(), list -> list
|
|
|
+ .parallelStream()
|
|
|
+ .map(infusion -> XWPFTemplate.compile(new ByteArrayInputStream(infusion_pattern), config).render(infusion).getXWPFDocument())
|
|
|
+ .collect(Collectors.toList())
|
|
|
+ )
|
|
|
+ ));
|
|
|
+ List<Date> dates = new ArrayList<>(document.keySet());
|
|
|
+ CollectionUtil.sort(dates,(o1,o2)->o1.compareTo(o2));
|
|
|
+ for (Date date : dates) {
|
|
|
+ for (NiceXWPFDocument d : document.get(date)) {
|
|
|
+ xwpfDocument=xwpfDocument.merge(d);
|
|
|
+ }
|
|
|
}
|
|
|
return xwpfDocument;
|
|
|
}
|
|
|
@@ -79,15 +103,18 @@ public class AnalExportUtils {
|
|
|
/**
|
|
|
* 导出评价信息
|
|
|
*/
|
|
|
- private static NiceXWPFDocument exportEval(NiceXWPFDocument xwpfDocument, List<BusEvaluationEntity> evals) throws Exception {
|
|
|
+ private static NiceXWPFDocument exportEval(NiceXWPFDocument xwpfDocument,List<BusEvaluationEntity> evals) throws Exception {
|
|
|
+ if(CollUtil.isEmpty(evals)){
|
|
|
+ return xwpfDocument;
|
|
|
+ }
|
|
|
xwpfDocument.createParagraph().createRun().addBreak(BreakType.PAGE);
|
|
|
LoopColumnTableRenderPolicy policy = new LoopColumnTableRenderPolicy();
|
|
|
Configure config = Configure.builder()
|
|
|
.bind("evals", policy)
|
|
|
.build();
|
|
|
- xwpfDocument=xwpfDocument.merge(XWPFTemplate.compile(
|
|
|
- ResourceUtil.getStream(eval_pattern_path),config).render(MapUtil.builder()
|
|
|
- .put("evals",evals)
|
|
|
+ xwpfDocument = xwpfDocument.merge(XWPFTemplate.compile(
|
|
|
+ new ByteArrayInputStream(eval_pattern), config).render(MapUtil.builder()
|
|
|
+ .put("evals", evals)
|
|
|
.build())
|
|
|
.getXWPFDocument());
|
|
|
return xwpfDocument;
|
|
|
@@ -97,9 +124,12 @@ public class AnalExportUtils {
|
|
|
* 导出统计图片
|
|
|
*/
|
|
|
private static NiceXWPFDocument exportImage(NiceXWPFDocument document,String base64) throws Exception {
|
|
|
+ if(StrUtil.isEmpty(base64)){
|
|
|
+ return document;
|
|
|
+ }
|
|
|
document.createParagraph().createRun().addBreak(BreakType.PAGE);
|
|
|
document=document.merge(XWPFTemplate.compile(
|
|
|
- ResourceUtil.getStream(image_pattern_path))
|
|
|
+ new ByteArrayInputStream(image_pattern))
|
|
|
.render(MapUtil.builder()
|
|
|
. put("image", Pictures.ofBase64(base64, PictureType.PNG)
|
|
|
.size(687, 500).create())
|