From 8e90e43a4a88e16b59d5abeed9c638801a9269ff Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期四, 21 十一月 2024 08:46:18 +0800 Subject: [PATCH] 加分支 --- inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java | 223 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 162 insertions(+), 61 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 e28d68e..1832479 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.*; @@ -144,8 +144,7 @@ if (inspectionItemSubclass.contains("浜掕皟")) { aa += (angles + 1) * portRow * often; } - } - else { + } else { if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�")) { aa += (angles + 1) * portRow; } @@ -233,8 +232,7 @@ paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); - } - else { + } else { if (insOrderState.getVersion() == 1) { //闈炵數璋冪増鏈�(绠�鍗曠増) if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= 2 * portRow) { @@ -613,8 +611,7 @@ cells.add(cellRenderData); } } - } - else { + } else { //鐢佃皟鐗堟湰(澶嶆潅鐗�) if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= (angles + 1) * portRow) { cc = (angles + 1) * portRow; @@ -1490,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); @@ -1523,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++) { @@ -1675,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); + } } } } @@ -1707,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("鐢佃矾璇曢獙"); @@ -1853,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", "鐢佃矾鍙傛暟"); @@ -1871,9 +1961,9 @@ 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); } } } @@ -1992,20 +2082,8 @@ tables4.add(table4); } } - - 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); - } + 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); @@ -2078,7 +2156,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); @@ -2091,6 +2174,7 @@ put("deviceList", finalDeviceList); put("tables", tables); put("tables2", tables2); + put("title3", finalTitle); put("tables3", tables3); put("tables4", tables4); put("sampleList", sampleList); @@ -2129,8 +2213,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); @@ -2166,30 +2250,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) { } } @@ -2239,9 +2322,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 + "鐢佃矾鍙傛暟"; @@ -2290,8 +2372,7 @@ if (inspectionItemSubclass.contains("浜掕皟")) { aa += (angles + 1) * portRow * often; } - } - else { + } else { if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�")) { aa += (angles + 1) * portRow; } @@ -2379,8 +2460,7 @@ paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); - } - else { + } else { if (insOrderState.getVersion() == 1) { //闈炵數璋冪増鏈�(绠�鍗曠増) if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= 2 * portRow) { @@ -2759,8 +2839,7 @@ cells.add(cellRenderData); } } - } - else { + } else { //鐢佃皟鐗堟湰(澶嶆潅鐗�) if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= (angles + 1) * portRow) { cc = (angles + 1) * portRow; @@ -3638,4 +3717,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