From 0644a19b927f4cd40ce45552b01064bb9b6521ad Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 31 十月 2024 13:53:22 +0800
Subject: [PATCH] 培训后优化

---
 inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java |  296 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 267 insertions(+), 29 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..e2323bb 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,13 +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.*;
 import java.nio.file.Files;
@@ -611,8 +610,7 @@
                                         cells.add(cellRenderData);
                                     }
                                 }
-                            }
-                            else {
+                            } else {
                                 //鐢佃皟鐗堟湰(澶嶆潅鐗�)
                                 if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= (angles + 1) * portRow) {
                                     cc = (angles + 1) * portRow;
@@ -1597,6 +1595,7 @@
         insOrderFile.setFileName(name);
         insOrderFile.setType(2);
         insOrderFile.setFileUrl(name);
+        insOrderFile.setSonLaboratory("鐢佃矾璇曢獙");
         insOrderFileMapper.insert(insOrderFile);
     }
 
@@ -1648,7 +1647,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 +1671,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 +1705,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 +1952,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,10 +1969,124 @@
             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);
+
+                /*鍒涘缓鐜璇曢獙鏉′欢琛�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);
             }
         }
 
@@ -1960,6 +2175,11 @@
         environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
         String finalEnvironment = environment;
         List<SampleProductDto> finalSamples = samples;
+        String title3 = "";
+        if (tables3.size() > 0) {
+            title3 = "杈愬皠鏂瑰悜鍥惧弬鏁�";
+        }
+        String finalTitle = title3;
         XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
                 new HashMap<String, Object>() {{
                     put("order", insOrder);
@@ -1973,6 +2193,7 @@
                     put("deviceList", finalDeviceList);
                     put("tables", tables);
                     put("tables2", tables2);
+                    put("title3", finalTitle);
                     put("tables3", tables3);
                     put("tables4", tables4);
                     put("sampleList", sampleList);
@@ -2011,8 +2232,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 +2269,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 +2341,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 +2391,7 @@
                     if (inspectionItemSubclass.contains("浜掕皟")) {
                         aa += (angles + 1) * portRow * often;
                     }
-                }
-                else {
+                } else {
                     if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�")) {
                         aa += (angles + 1) * portRow;
                     }
@@ -2261,8 +2479,7 @@
                             paragraphRenderDataList.add(paragraphRenderData);
                             cellRenderData.setParagraphs(paragraphRenderDataList);
                             cells.add(cellRenderData);
-                        }
-                        else {
+                        } else {
                             if (insOrderState.getVersion() == 1) {
                                 //闈炵數璋冪増鏈�(绠�鍗曠増)
                                 if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= 2 * portRow) {
@@ -2641,8 +2858,7 @@
                                         cells.add(cellRenderData);
                                     }
                                 }
-                            }
-                            else {
+                            } else {
                                 //鐢佃皟鐗堟湰(澶嶆潅鐗�)
                                 if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= (angles + 1) * portRow) {
                                     cc = (angles + 1) * portRow;
@@ -3520,4 +3736,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