From 7a9de16c90c1d936c35d426c95c3f4a9bba8a1f8 Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期五, 22 十一月 2024 09:25:54 +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