From ce3a085b657d8be275e8dacc42ec78f64414e653 Mon Sep 17 00:00:00 2001
From: 李林 <z1292839451@163.com>
Date: 星期三, 10 四月 2024 18:02:04 +0800
Subject: [PATCH] 报告生成功能:仅支持excel模板插入了
---
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 123 +++++++++++++++++++++++++++++++---------
inspect-server/src/main/resources/static/template-table.docx | 0
2 files changed, 95 insertions(+), 28 deletions(-)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
index b04240e..b1c4eeb 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -14,8 +14,10 @@
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.data.style.TableStyle;
import com.deepoove.poi.render.Render;
+import com.deepoove.poi.xwpf.XWPFHighlightColor;
import com.spire.doc.Table;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
@@ -31,6 +33,11 @@
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.vo.InsOrderPlanVO;
import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.poi.xwpf.usermodel.TableRowAlign;
+import org.apache.poi.xwpf.usermodel.TextAlignment;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -156,7 +163,7 @@
map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"));
if ((insValue.get("u") == null || insValue.get("u").equals("")) && StrUtil.isNotEmpty(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) {
map.put("u", userId);
- }else {
+ } else {
map.put("u", insValue.get("u"));
}
iv.add(map);
@@ -176,7 +183,7 @@
JSONObject equipValue = JSON.parseObject(JSON.toJSONString(jo.get("equipValue")));
try {
result.setEquipValue(JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v") + "");
- }catch (Exception ignored){
+ } catch (Exception ignored) {
result.setEquipValue(null);
}
JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult")));
@@ -192,7 +199,7 @@
}
insProduct.setUpdateUser(userId);
insProductMapper.updateById(insProduct);
- if(count.get() == 0){
+ if (count.get() == 0) {
InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
insSample.setInsState(1);
count.addAndGet(1);
@@ -228,31 +235,85 @@
List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
Set<Integer> set = new HashSet<>();
Map<Integer, String> map2 = new HashMap<>();
- samples.forEach(a->{
+ List<TableRenderData> tables = new ArrayList<>();
+ samples.forEach(a -> {
getTemplateThing(set, map2, a);
- TableRenderData tableRenderData = new TableRenderData();
- TableStyle tableStyle = new TableStyle();
- tableStyle.setWidth("14.63");
- tableRenderData.setTableStyle(tableStyle);
- a.getInsProduct().forEach(b->{
- System.out.println(b.getTemplate());
- System.out.println(b.getStyle());
- RowRenderData rowRenderData = new RowRenderData();
- CellRenderData cellRenderData = new CellRenderData();
- for (JSONObject jo1 : b.getTemplate()) {
- ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
- List<RenderData> contents = new ArrayList<>();
- /*if(Integer.parseInt(jo1.get("r")+"") == r){
- if(Integer.parseInt(jo1.get("r")+"") == c){
- JSONObject jo2 = JSONObject.parseObject(JSONObject.toJSONString(jo1.get("v")));
- TextRenderData textRenderData = new TextRenderData();
- textRenderData.setText(jo2.get("v")+"");
- contents.add(textRenderData);
- paragraphRenderData.setContents(contents);
- }
- }else if (Integer.parseInt(jo1.get("r")+"") > r){
- }*/
+ a.getInsProduct().forEach(b -> {
+ if(b.getTemplate().size()==0){
+ return;
}
+// System.out.println(b.getTemplate());
+// System.out.println(b.getStyle());
+ Set<Integer> set2 = new HashSet<>();
+ List<RowRenderData> rows = new ArrayList<>();
+ List<TextRenderData> text = new ArrayList<>();
+ RowRenderData rowRenderData;
+ Set<String> delSet = new HashSet<>();
+ for (JSONObject jo1 : b.getTemplate()) {
+ JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
+ if(v.get("ps")!=null){
+// System.out.println(v);
+ if("妫�楠屽��".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value")+"")){
+ delSet.add(jo1.get("c")+"");
+ }
+ }
+ }
+ for (int i = 0;i<b.getTemplate().size();i++) {
+ JSONObject jo1 = b.getTemplate().get(i);
+ if (delSet.stream().anyMatch(e->e.equals(jo1.get("c")+""))){
+ continue;
+ }
+ TextRenderData textRenderData = new TextRenderData();
+ if (set2.add(Integer.parseInt(jo1.get("r") + "")) || i == b.getTemplate().size()-1) {
+ if(text.size() > 0){
+ TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text2).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+ }
+ }
+ JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
+ textRenderData.setText(v.get("v")==null?"":v.get("v")+"");
+ Style style = new Style();
+ style.setFontFamily(v.get("ff")==null?"寰蒋闆呴粦":v.get("ff")+"");
+// style.setFontSize(v.get("fs")==null?14:Integer.parseInt(v.get("fs")+""));
+ style.setColor(v.get("fc")==null?"000000":(v.get("fc")+"").replace("#",""));
+ /*String align;
+ switch (v.get("ht")+""){
+ case "0":
+ align = "center";
+ break;
+ case "2":
+ align = "right";
+ break;
+ default:
+ align = "left";
+ break;
+ }*/
+ textRenderData.setStyle(style);
+ text.add(textRenderData);
+ }
+ rows.forEach(System.out::println);
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ TableStyle tableStyle = new TableStyle();
+ JSONObject styleJo = JSON.parseObject(JSON.toJSONString(b.getStyle().get("columnlen")));
+ List<Integer> colLen = new ArrayList<>();
+ int colSize = rows.get(0).getCells().size();
+ int colOne = Integer.parseInt(b.getTemplate().get(0).get("r")+"");
+ for (int i = colOne; i < colSize + colOne; i++) {
+ if(styleJo.get(i + "") == null){
+ colLen.add(pxToCm(100));
+ }else{
+ int i1 = Integer.parseInt(styleJo.get(i + "") + "");
+ colLen.add(pxToCm(i1));
+ }
+ }
+// tableStyle.setColWidths(ArrayUtils.toPrimitive(colLen.toArray(new Integer[0])));
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableRenderData.setTableStyle(tableStyle);
+ tables.add(tableRenderData);
});
});
InsReport insReport = new InsReport();
@@ -260,10 +321,11 @@
insReport.setInsOrderId(orderId);
String url;
try {
- url = ResourceUtils.getURL("classpath:static/report-template.docx").getPath();
+ url = ResourceUtils.getURL("classpath:static/template-table.docx").getPath();
} catch (FileNotFoundException e) {
throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
}
+
XWPFTemplate template = XWPFTemplate.compile(url).render(
new HashMap<String, Object>() {{
put("order", insOrder);
@@ -271,11 +333,12 @@
put("user", user);
put("samples", samples);
put("sampleSize", samples.size() + samples.get(0).getUnit());
+ put("tables", tables.get(0));
}});
try {
String name = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd_HH_mm_ss")) + ".docx";
template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
- insReport.setUrl("/word/"+ name);
+ insReport.setUrl("/word/" + name);
insReportMapper.insert(insReport);
} catch (IOException e) {
throw new RuntimeException(e);
@@ -341,4 +404,8 @@
insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3));
return 1;
}
+
+ public int pxToCm(int px){
+ return px / 9;
+ }
}
diff --git a/inspect-server/src/main/resources/static/template-table.docx b/inspect-server/src/main/resources/static/template-table.docx
index 397c507..b9d7cb4 100644
--- a/inspect-server/src/main/resources/static/template-table.docx
+++ b/inspect-server/src/main/resources/static/template-table.docx
Binary files differ
--
Gitblit v1.9.3