From be7eb1986fd91532c16ed0c416516adf5ed95d80 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 22 十一月 2024 14:39:09 +0800
Subject: [PATCH] 检验结束试验之后订单就已检验,报告可以后面想生成的时候再生成
---
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java | 332 +++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 275 insertions(+), 57 deletions(-)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
index f1861ce..19fc1ae 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
@@ -19,12 +19,12 @@
import org.apache.commons.io.IOUtils;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component;
-import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.*;
@@ -611,8 +611,7 @@
cells.add(cellRenderData);
}
}
- }
- else {
+ } else {
//鐢佃皟鐗堟湰(澶嶆潅鐗�)
if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= (angles + 1) * portRow) {
cc = (angles + 1) * portRow;
@@ -1488,22 +1487,13 @@
lable.getAndIncrement();
});
});
- String url;
- try {
- ZipSecureFile.setMinInflateRatio(0.0001);
- InputStream inputStream = this.getClass().getResourceAsStream("/static/word1.docx");
- File file = File.createTempFile("temp", ".tmp");
- OutputStream outputStream = new FileOutputStream(file);
- IOUtils.copy(inputStream, outputStream);
- url = file.getAbsolutePath();
- } catch (FileNotFoundException e) {
- throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word1.docx");
+
ConfigureBuilder builder = Configure.builder();
builder.useSpringEL(true);
- XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
new HashMap<String, Object>() {{
put("title", title);
put("tables", tables);
@@ -1521,7 +1511,7 @@
FileInputStream stream = new FileInputStream(path);
XWPFDocument document = new XWPFDocument(stream);
List<XWPFTable> xwpfTables = document.getTables();
- for (int i = 1; i < xwpfTables.size(); i++) {
+ for (int i = 0; i < xwpfTables.size(); i++) {
Set<String> set1 = new HashSet<>();
Map<String, Map<String, Integer>> maps = new HashMap<>();
for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
@@ -1597,6 +1587,7 @@
insOrderFile.setFileName(name);
insOrderFile.setType(2);
insOrderFile.setFileUrl(name);
+ insOrderFile.setSonLaboratory("鐢佃矾璇曢獙");
insOrderFileMapper.insert(insOrderFile);
}
@@ -1648,7 +1639,7 @@
.eq(InsProduct::getInsResult, 1));
productSize3.set(productSize3.get() + Integer.parseInt(productCount3 + ""));
//灏嗛」鐩寜鐓х珯鐐硅繘琛屽垎绫�
- Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getLaboratory));
+ Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getSonLaboratory));
// 鍒涘缓涓�涓� Map 灏嗙珯鐐瑰拰椤圭洰ID鐨勬槧灏勫叧绯�
Map<String, Set<Integer>> labToDeviceMap = new HashMap<>();
// 鑾峰彇鎵�鏈夌珯鐐圭殑椤圭洰ID 鍒楄〃
@@ -1672,10 +1663,12 @@
.in(InsProductResult::getInsProductId, productIds));
for (InsProductResult insProductResult : insProductResults) {
List<JSONObject> jsonObjects = JSON.parseArray(insProductResult.getEquipValue(), JSONObject.class);
- for (JSONObject jsonObject : jsonObjects) {
- String value = jsonObject.getString("v");
- if (value != null && !value.isEmpty()) {
- deviceSet.add(value);
+ if (ObjectUtils.isNotEmpty(jsonObjects)) {
+ for (JSONObject jsonObject : jsonObjects) {
+ String value = jsonObject.getString("v");
+ if (value != null && !value.isEmpty()) {
+ deviceSet.add(value);
+ }
}
}
}
@@ -1704,10 +1697,111 @@
if (strings.contains("杩戝満") || strings.contains("杩滃満")) {
Map<String, String> table = new HashMap<>();
table.put("indexs", indexs + "");
+ indexs += 1;
table.put("term", "杈愬皠鏂瑰悜鍥惧弬鏁�");
table.put("result", "涓嶅垽瀹�");
tables.add(table);
/*杈愬皠鐨勮瘯楠岃〃*/
+ List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
+ .eq(InsOrderFile::getInsOrderId, orderId)
+ .like(InsOrderFile::getFileName, "瑙f瀽鐨勮緪灏勭珯鐐规姤鍛�")
+ .and(wrapper -> wrapper
+ .eq(InsOrderFile::getSonLaboratory, "杩滃満")
+ .or()
+ .eq(InsOrderFile::getSonLaboratory, "杩戝満")
+ ));
+ if (insOrderFiles.size() > 0) {
+ int aa = 0;
+ for (InsOrderFile insOrderFile : insOrderFiles) {
+ try {
+ XWPFDocument circuitParamsDoc = new XWPFDocument(new FileInputStream(wordUrl + "/" + insOrderFile.getFileUrl()));
+ // 閬嶅巻鐢佃矾鍙傛暟鏂囦欢鐨勬墍鏈夊厓绱狅紝娈佃惤鍜岃〃鏍�
+ for (IBodyElement element : circuitParamsDoc.getBodyElements()) {
+ Map<String, Object> table3 = new HashMap<>();
+ TableRenderData tableData = new TableRenderData();
+ List<RowRenderData> rows = new ArrayList<>();
+ if (element instanceof XWPFTable) {
+ aa += 1;
+ XWPFTable tab = (XWPFTable) element;
+ List<XWPFTableRow> row = tab.getRows();
+ for (int i = 0; i < row.size(); i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ List<CellRenderData> cells = new ArrayList<>();
+ List<XWPFTableCell> cell = row.get(i).getTableCells();
+ for (int j = 0; j < cell.size(); j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ CTTcPr tcPr = cell.get(j).getCTTc().getTcPr();
+ if (tcPr != null) {
+ //鍚堝苟鍒�
+ CTHMerge hMerge = tcPr.getHMerge();
+ if (ObjectUtils.isNotEmpty(hMerge)) {
+ if (STMerge.RESTART.equals(hMerge.getVal()) || STMerge.CONTINUE.equals(hMerge.getVal())) {
+ int index = j;
+ String text = null;
+ while (text == null || text.equals("")) {
+ if (index < 0) {
+ text = "/";
+ }
+ text = cell.get(index).getText();
+ index--;
+ }
+ textRenderData.setText(text + "鈭�88" + aa + i);
+ }
+ }
+ //鍚堝苟琛�
+ CTVMerge vMerge = tcPr.getVMerge();
+ if (ObjectUtils.isNotEmpty(vMerge)) {
+ if (STMerge.RESTART.equals(vMerge.getVal()) || STMerge.CONTINUE.equals(vMerge.getVal())) {
+ int index = i;
+ String text = null;
+ while (text == null || text.equals("")) {
+ if (index < 0) {
+ text = "/";
+ break;
+ }
+ text = row.get(index).getCell(j).getText();
+ index--;
+ }
+ if (text.equals("鍚堟牸") || text.equals("涓嶅悎鏍�")) {
+ textRenderData.setText(text + "鈭�25" + aa + j);
+ } else {
+ textRenderData.setText(text + "鈭�22" + aa + j);
+ }
+ }
+ }
+ } else {
+ textRenderData.setText(cell.get(j).getText());
+ }
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ rowRenderData.setCells(cells);
+ rows.add(rowRenderData);
+ }
+ tableData.setRows(rows);
+ table3.put("table3", tableData);
+ tables3.add(table3);
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
if (strings.contains("鐢佃矾璇曢獙")) {
strings.remove("鐢佃矾璇曢獙");
@@ -1850,8 +1944,7 @@
Map<String, Object> table4 = new HashMap<>();
table4.put("table4", tableRenderData);
tables4.add(table4);
- }
- else {
+ } else {
Map<String, String> table = new HashMap<>();
table.put("indexs", indexs + "");
table.put("term", "鐢佃矾鍙傛暟");
@@ -1868,26 +1961,128 @@
for (InsReportDto1 insReportDto1 : insReportDto1s) {
InsOrderUser insOrderUser = insOrderUserMapper.selectById(insReportDto1.getInsOrderUsersId());
InsOrderState orderState = insOrderStateMapper.selectById(insOrderUser.getInsOrderStateId());
- if (orderState.getLaboratory().equals("鐢佃矾璇曢獙")){
+ if (orderState.getLaboratory().equals("鐢佃矾璇曢獙")) {
orderState.setNum(insOrderUser.getNum());
- getWord1(insOrderUser.getTerm(),orderState,insSamples,tables2);
+ getWord1(insOrderUser.getTerm(), orderState, insSamples, tables2);
}
}
- }
+ } else {
+ //濡傛灉鍙湁鐜璇曢獙娌℃湁鐢佃矾璇曢獙
+ strings.remove("杩戝満");
+ strings.remove("杩滃満");
+ if (strings.size() > 0) {
+ Map<String, String> table2 = new HashMap<>();
+ table2.put("indexs", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+ table2.put("term", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+ table2.put("result", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+ tables.add(table2);
- String url;
- try {
- ZipSecureFile.setMinInflateRatio(0.0001);
- InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
- File file = File.createTempFile("temp", ".tmp");
- OutputStream outputStream = new FileOutputStream(file);
- IOUtils.copy(inputStream, outputStream);
- url = file.getAbsolutePath();
- } catch (FileNotFoundException e) {
- throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
- } catch (IOException e) {
- throw new RuntimeException(e);
+ /*鍒涘缓鐜璇曢獙鏉′欢琛�2*(椤圭洰鏁�+1)*/
+ List<InsProduct> products = samples.stream().flatMap(sampleProductDto -> sampleProductDto.getInsProduct().stream()
+ .filter(insProduct -> !insProduct.getInspectionItem().equals("鐢佃矾璇曢獙"))
+ .filter(insProduct -> !insProduct.getInspectionItem().equals("杈愬皠璇曢獙")))
+ .map(insProduct -> {
+ InsProduct product = new InsProduct();
+ product.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
+ product.setTell(insProduct.getTell());
+ return product;
+ }).distinct().collect(Collectors.toList());
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛屾暟
+ for (int i = 0; i < products.size() + 1; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //鍒楁暟
+ for (int j = 0; j < 2; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i == 0) {
+ //绗竴琛�
+ if (j == 0) {
+ //绗竴鍒�
+ textRenderData.setText("椤圭洰");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ //绗簩鍒�
+ textRenderData.setText("璇曢獙瑕佹眰");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ } else {
+ //鍏朵綑琛�
+ if (j == 0) {
+ //绗竴鍒�
+ textRenderData.setText(products.get(i - 1).getInspectionItemSubclass());
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ textRenderData.setText(products.get(i - 1).getTell());
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(4);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+ Map<String, Object> table4 = new HashMap<>();
+ table4.put("table4", tableRenderData);
+ tables4.add(table4);
+ }
}
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
StringBuilder standardMethod2 = new StringBuilder();
for (String s : standardMethod) {
standardMethod2.append("锛沑n").append(s);
@@ -1960,7 +2155,12 @@
environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
String finalEnvironment = environment;
List<SampleProductDto> finalSamples = samples;
- XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ String title3 = "";
+ if (tables3.size() > 0) {
+ title3 = "杈愬皠鏂瑰悜鍥惧弬鏁�";
+ }
+ String finalTitle = title3;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
new HashMap<String, Object>() {{
put("order", insOrder);
put("report", insReport);
@@ -1973,6 +2173,7 @@
put("deviceList", finalDeviceList);
put("tables", tables);
put("tables2", tables2);
+ put("title3", finalTitle);
put("tables3", tables3);
put("tables4", tables4);
put("sampleList", sampleList);
@@ -2011,8 +2212,8 @@
} catch (IOException e) {
throw new RuntimeException(e);
}
- // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
try {
ZipSecureFile.setMinInflateRatio(0.0001);
FileInputStream stream = new FileInputStream(path);
@@ -2048,30 +2249,29 @@
}
}
}
-
// 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
-
// 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
List<String> list = new ArrayList<>();
for (Map.Entry<String, Map<String, Integer>> entry : entries) {
list.add(entry.getKey());
}
-
for (int a = list.size() - 1; a >= 0; a--) {
Map<String, Integer> v = maps.get(list.get(a));
for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
if (v.get("ec") > v.get("sc")) {
try {
- TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+// TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
} catch (Exception e) {
}
}
}
if (v.get("er") > v.get("sr")) {
try {
- TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+// TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
} catch (Exception e) {
}
}
@@ -2121,9 +2321,8 @@
}
-
//鐢佃矾鎶ュ憡鐢ㄤ簬鎬绘姤鍛婄殑鏂规硶
- private void getWord1(String term, InsOrderState insOrderState,List<InsSample> insSamples,List<Map<String, Object>> tables2){
+ private void getWord1(String term, InsOrderState insOrderState, List<InsSample> insSamples, List<Map<String, Object>> tables2) {
AtomicInteger lable = new AtomicInteger(1);
AtomicInteger index = new AtomicInteger();
String title = term + "鐢佃矾鍙傛暟";
@@ -2172,8 +2371,7 @@
if (inspectionItemSubclass.contains("浜掕皟")) {
aa += (angles + 1) * portRow * often;
}
- }
- else {
+ } else {
if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�")) {
aa += (angles + 1) * portRow;
}
@@ -2261,8 +2459,7 @@
paragraphRenderDataList.add(paragraphRenderData);
cellRenderData.setParagraphs(paragraphRenderDataList);
cells.add(cellRenderData);
- }
- else {
+ } else {
if (insOrderState.getVersion() == 1) {
//闈炵數璋冪増鏈�(绠�鍗曠増)
if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= 2 * portRow) {
@@ -2641,8 +2838,7 @@
cells.add(cellRenderData);
}
}
- }
- else {
+ } else {
//鐢佃皟鐗堟湰(澶嶆潅鐗�)
if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= (angles + 1) * portRow) {
cc = (angles + 1) * portRow;
@@ -3520,4 +3716,26 @@
});
});
}
-}
+
+ // 姘村钩鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+ for (int i = fromCol; i <= toCol; i++) {
+ if (i == fromCol) {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+
+ // 鍨傜洿鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+ for (int i = fromRow; i <= toRow; i++) {
+ if (i == fromRow) {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3