zss
2025-05-12 99cf848f87e2e06954d1ca101c9ff1879cf801c7
inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java
@@ -1,20 +1,16 @@
package com.yuanchu.mom.utils;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.deepoove.poi.util.TableTools;
import com.yuanchu.mom.dto.Exceldata;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.InsOrderFileMapper;
import com.yuanchu.mom.mapper.InsOrderMapper;
import com.yuanchu.mom.pojo.InsOrder;
import com.yuanchu.mom.mapper.InsSampleMapper;
import com.yuanchu.mom.pojo.InsOrderFile;
import org.apache.commons.io.IOUtils;
import com.yuanchu.mom.pojo.InsSample;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
@@ -27,13 +23,11 @@
import javax.annotation.Resource;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.math.BigDecimal;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Slf4j
@Component
public class FuSheUtils {
    @Value("${wordUrl}")
@@ -43,9 +37,10 @@
    InsOrderFileMapper insOrderFileMapper;
    @Resource
    InsOrderMapper insOrderMapper;
    InsSampleMapper insSampleMapper;
    public void getFuSheWord(String sonLaboratory, InsOrderFile insOrderFile) {
    //近场
    public void getFuSheWord1(String sonLaboratory, InsOrderFile insOrderFile) {
        //读取excel文件内容
        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径
        FileInputStream fileInputStream = null;
@@ -57,6 +52,8 @@
            Exceldata exceldata = new Exceldata();
            Map<Integer, Object> project = new HashMap<>();
            HashMap<String, Object> datas1 = new HashMap<>();
            HashMap<String, Object> biaozhun = new HashMap<>();
            Boolean exitLoop = false;
            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                String s = "";
                Sheet sheet = workbook.getSheetAt(i);
@@ -86,22 +83,55 @@
                                    default:
                                        System.out.print("NULL\t");
                                }
                            } else {
                            }
                            else {
                                switch (cell.getCellType()) {
                                    case STRING:
                                        if (StringUtils.isNotEmpty(s)) {
                                            datas.put(s, list);
                                        if (cell.getColumnIndex() == 1) {
                                            if (cell.getStringCellValue().equals("指标")) {
                                                for (Cell cell1 : row) {
                                                    switch (cell1.getCellType()) {
                                                        case STRING:
                                                            biaozhun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getStringCellValue());
                                                            break;
                                                        case NUMERIC:
                                                            System.out.print(cell1.getNumericCellValue() + "\t");
                                                            break;
                                                        case BOOLEAN:
                                                            System.out.print(cell1.getBooleanCellValue() + "\t");
                                                            break;
                                                        case FORMULA:
                                                            System.out.print(cell1.getCellFormula() + "\t");
                                                            break;
                                                        default:
                                                            System.out.print("NULL\t");
                                                    }
                                                }
                                            }
                                            exitLoop = true;
                                            break;
                                        }
                                        list = new ArrayList<>();
                                        s = cell.getStringCellValue();
                                        datas.put(s, cell.getStringCellValue());
                                        System.out.print(cell.getStringCellValue() + "\t");
                                        String value = "zss";
                                        switch (row.getCell(1).getCellType()){
                                            case STRING:
                                                value = cell.getStringCellValue();
                                                break;
                                        }
                                        if (value.equals("zss")){
                                            if (StringUtils.isNotEmpty(s)) {
                                                datas.put(s, list);
                                            }
                                            list = new ArrayList<>();
                                            s = cell.getStringCellValue();
                                            datas.put(s, cell.getStringCellValue());
                                            System.out.print(cell.getStringCellValue() + "\t");
                                        }
                                        break;
                                    case NUMERIC:
                                        int columnIndex = cell.getColumnIndex();
                                        Object o = project.get(columnIndex);
                                        map.put(o.toString(), cell.getNumericCellValue());
                                        System.out.print(cell.getNumericCellValue() + "\t");
                                            int columnIndex = cell.getColumnIndex();
                                            Object o = project.get(columnIndex);
                                            map.put(o.toString(), cell.getNumericCellValue());
                                            System.out.print(cell.getNumericCellValue() + "\t");
                                        break;
                                    case BOOLEAN:
                                        System.out.print(cell.getBooleanCellValue() + "\t");
@@ -113,12 +143,17 @@
                                        System.out.print("NULL\t");
                                }
                            }
                            if (exitLoop) {
                                exitLoop = false;
                                break;
                            }
                            if (map.isEmpty()) {
                                list.add(map);
                            }
                        }
                    }
                }
                list=list.stream().filter(map -> !map.isEmpty()).collect(Collectors.toList());
                datas.put(s, list);
                map1.put(sheetName, datas);
                datas1.putAll(map1);
@@ -126,7 +161,6 @@
            exceldata.setProject(project);
            exceldata.setDataRow(datas1);
            System.out.println(exceldata);
            HashMap<String, Object> map = new HashMap<>();
            for (String s : datas1.keySet()) {
                Map<String, List<HashMap<String, Object>>> numbers = (Map<String, List<HashMap<String, Object>>>) datas1.get(s);
@@ -136,20 +170,21 @@
                    for (Map<String, Object> number : hashMaps) {
                        number.put("端口", s1);
                        Double o = (Double) number.get("频率");
                        floatList.add(o);
                        if (o != null) {
                            floatList.add(o);
                        }
                    }
                    Double maxValue = Collections.max(floatList);
                    Double minValue = Collections.min(floatList);
                    if (map.get(minValue + "-" + maxValue + "-" + s) == null) {
                        map.put(minValue + "-" + maxValue + "-" + s, s1);
                    if (map.get(minValue + "," + maxValue + "," + s) == null) {
                        map.put(minValue + "," + maxValue + "," + s, s1);
                    } else {
                        Object o = map.get(minValue + "-" + maxValue + "-" + s);
                        map.put(minValue + "-" + maxValue + "-" + s, s1 + "," + o);
                        Object o = map.get(minValue + "," + maxValue + "," + s);
                        map.put(minValue + "," + maxValue + "," + s, s1 + "," + o);
                    }
                }
            }
            System.out.println(map);
            int size = map.size();
            for (String s1 : map.keySet()) {
                String o = map.get(s1).toString();
                List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList());
@@ -170,9 +205,9 @@
                }
            }
            System.out.println(map);
            createWord(sonLaboratory, document, exceldata, map, insOrderFile);
        } catch (IOException e) {
            e.printStackTrace();
            createWord(sonLaboratory, document, exceldata, map, biaozhun, insOrderFile);
        } catch (Exception e) {
//            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
@@ -188,8 +223,252 @@
        }
    }
    //远场
    public void getFuSheWord2(String sonLaboratory, InsOrderFile insOrderFile) {
        //读取excel文件内容
        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径
        FileInputStream fileInputStream = null;
        Workbook workbook = null;
    public void createWord(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, InsOrderFile insOrderFile) throws IOException {
        try {
            fileInputStream = new FileInputStream(new File(excelFilePath));
            workbook = new XSSFWorkbook(fileInputStream); // 对于 .xlsx 文件
            XWPFDocument document = new XWPFDocument();
            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                Exceldata exceldata = new Exceldata();
                HashMap<Integer, Object> project = new HashMap<>();
                HashMap<String, Object> biaozhun = new HashMap<>();
                HashMap<String, Object> pingjunzhi = new HashMap<>();
                HashMap<String, Object> datas1 = new HashMap<>();
                HashMap<String, Object> map2 = new HashMap<>();
                List<Map<String, Object>> list = new ArrayList<>();
                String jiaodu = "";
                String port = "";
                Integer count = 0;
                Sheet sheet = workbook.getSheetAt(i);
                Boolean biaoji = false;
                int lastRowNum = sheet.getLastRowNum();
                for (Row row : sheet) {
                    count++;
                    HashMap<String, Object> map1 = new HashMap<>();
                    HashMap<String, Object> pingjun = new HashMap<>();
                    for (Cell cell : row) {
                        if (row.getRowNum() == 0) {
                            switch (cell.getCellType()) {
                                case STRING:
                                    project.put(cell.getColumnIndex(), cell.getStringCellValue());
                                    System.out.print(cell.getStringCellValue() + "\t");
                                    break;
                                case NUMERIC:
                                    System.out.print(cell.getNumericCellValue() + "\t");
                                    break;
                                case BOOLEAN:
                                    System.out.print(cell.getBooleanCellValue() + "\t");
                                    break;
                                case FORMULA:
                                    System.out.print(cell.getCellFormula() + "\t");
                                    break;
                                default:
                                    System.out.print("NULL\t");
                            }
                        } else if (row.getRowNum() > 2) {
                            if (cell.getColumnIndex() == 0 && StringUtils.isNotEmpty(cell.getStringCellValue())) {
                                if (map2.size() != 0) {
                                    map2.put(port, list);
                                    datas1.put(jiaodu, map2);
                                    map2 = new HashMap<>();
                                }
                                datas1.put(cell.getStringCellValue(), "");
                                jiaodu = cell.getStringCellValue();
                            } else if (cell.getColumnIndex() == 1 && StringUtils.isNotEmpty(cell.getStringCellValue())) {
                                if (list.size() != 0) {
                                    map2.put(port, list);
                                    list = new ArrayList<>();
                                }
                                map2.put(cell.getStringCellValue(), "");
                                port = cell.getStringCellValue();
                            } else {
                                switch (cell.getCellType()) {
                                    case STRING:
                                        String value = cell.getStringCellValue();
                                        if (value.equals("avg")) {
                                            for (Cell cell1 : row) {
                                                switch (cell1.getCellType()) {
                                                    case STRING:
                                                        break;
                                                    case NUMERIC:
                                                        pingjun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getNumericCellValue());
                                                        System.out.print(cell1.getNumericCellValue() + "\t");
                                                        break;
                                                    case BOOLEAN:
                                                        System.out.print(cell1.getBooleanCellValue() + "\t");
                                                        break;
                                                    case FORMULA:
                                                        String cellFormula = cell1.getCellFormula();
                                                        Double numericCellValue = cell1.getNumericCellValue();
                                                        pingjun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getNumericCellValue());
                                                        System.out.print(cellFormula);
                                                        break;
                                                    default:
                                                        System.out.print("NULL\t");
                                                }
                                            }
                                        } else if (value.equals("指标")) {
                                            for (Cell cell1 : row) {
                                                switch (cell1.getCellType()) {
                                                    case STRING:
                                                        biaozhun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getStringCellValue());
                                                        break;
                                                    case NUMERIC:
                                                        System.out.print(cell1.getNumericCellValue() + "\t");
                                                        break;
                                                    case BOOLEAN:
                                                        System.out.print(cell1.getBooleanCellValue() + "\t");
                                                        break;
                                                    case FORMULA:
                                                        System.out.print(cell1.getCellFormula() + "\t");
                                                        break;
                                                    default:
                                                        System.out.print("NULL\t");
                                                }
                                            }
                                        } else {
                                            biaoji = true;
                                        }
                                        break;
                                    case NUMERIC:
                                        map1.put(project.get(cell.getColumnIndex()).toString(), cell.getNumericCellValue());
                                        System.out.print(cell.getNumericCellValue() + "\t");
                                        break;
                                    case BOOLEAN:
                                        System.out.print(cell.getBooleanCellValue() + "\t");
                                        break;
                                    case FORMULA:
                                        System.out.print(cell.getCellFormula() + "\t");
                                        break;
                                    default:
                                        System.out.print("NULL\t");
                                }
                            }
                        }
                        if (biaoji) {
                            biaoji = false;
                            break;
                        }
                    }
                    if (map1.size() != 0) {
                        list.add(map1);
                    }
                    if (pingjun.size() != 0) {
                        pingjunzhi.put(jiaodu, pingjun);
                    }
                    if (count == lastRowNum + 1) {
                        map2.put(port, list);
                        datas1.put(jiaodu, map2);
                    }
                    System.out.println();
                }
                exceldata.setProject(project);
                exceldata.setDataRow(datas1);
                System.out.println(exceldata);
                HashMap<String, Object> map = new HashMap<>();
                for (String s : datas1.keySet()) {
                    Map<String, List<HashMap<String, Object>>> numbers = (Map<String, List<HashMap<String, Object>>>) datas1.get(s);
                    for (String s1 : numbers.keySet()) {
                        List<HashMap<String, Object>> hashMaps = numbers.get(s1);
                        List<Integer> floatList = new ArrayList<>();
                        for (Map<String, Object> number : hashMaps) {
                            number.put("端口", s1);
                            Double o = (Double) number.get("测试频率(MHZ)");
                            if (ObjectUtils.isNull(o)){
                                 o = (Double) number.get("测量频率(MHz)");
                            }
                            floatList.add(o.intValue());
                        }
                        Integer maxValue = Collections.max(floatList);
                        Integer minValue = Collections.min(floatList);
                        if (map.get(minValue + "-" + maxValue + "-" + s) == null) {
                            map.put(minValue + "-" + maxValue + "-" + s, s1);
                        } else {
                            Object o = map.get(minValue + "-" + maxValue + "-" + s);
                            map.put(minValue + "-" + maxValue + "-" + s, s1 + "," + o);
                        }
                    }
                }
                System.out.println(map);
                for (String s1 : map.keySet()) {
                    String o = map.get(s1).toString();
                    List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList());
                    int size1 = -1;
                    for (String s : datas1.keySet()) {
                        Map<String, List<HashMap<String, Object>>> o1 = (Map<String, List<HashMap<String, Object>>>) datas1.get(s);
                        for (String s3 : o1.keySet()) {
                            List<HashMap<String, Object>> numbers = o1.get(s3);
                            for (String s2 : collect) {
                                if (s3.equals(s2)) {
                                    if (numbers.size() > size1) {
                                        size1 = numbers.size();
                                    }
                                }
                            }
                            map.put(s1, o + "," + size1);
                        }
                    }
                }
                System.out.println(map);
                createWord2(sonLaboratory, document, exceldata, map, pingjunzhi, biaozhun, insOrderFile);
            }
            // 输出到文件
            InsSample insSample = insSampleMapper.selectById(insOrderFile.getInsSampleId());
            String[] split = insOrderFile.getFileName().split("\\.");
            String name = insOrderFile.getFileName().replace("#", "&").substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length()));
            String url = UUID.randomUUID() + "_" + insSample.getSampleCode() + "_" + sonLaboratory + name + "解析的辐射站点报告.docx";
            url = url.replace("#", "&");
            FileOutputStream out = new FileOutputStream(wordUrl + "/" + url);
            document.write(out);
            out.close();
            document.close();
            InsOrderFile orderFile = new InsOrderFile();
            orderFile.setInsOrderId(insOrderFile.getInsOrderId());
            orderFile.setInsSampleId(insOrderFile.getInsSampleId());
            orderFile.setFileUrl(url);
            orderFile.setType(2);
            orderFile.setFileName(insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            orderFile.setSonLaboratory(sonLaboratory);
            insOrderFileMapper.insert(orderFile);
        } catch (Exception e) {
//            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (workbook != null) {
                    workbook.close();
                }
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //近场
    public void createWord(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, HashMap<String, Object> bz, InsOrderFile insOrderFile) throws IOException {
        int size = 1;
        XWPFParagraph paragraphs = document.createParagraph();
        XWPFRun runs = paragraphs.createRun();
@@ -197,8 +476,8 @@
        runs.setText("辐射方向图参数");
        for (String s : map.keySet()) {
            Map<String, Object> dataRow = exceldata.getDataRow();
            String result = s.substring(s.lastIndexOf("-") + 1);
            String result1 = s.substring(0, s.lastIndexOf("-"));
            String result = s.substring(s.lastIndexOf(",") + 1);
            String result1 = s.substring(0, s.lastIndexOf(","));
            String o = map.get(s).toString();
            String[] split = o.split(",");
            Integer s1 = Integer.parseInt(split[split.length - 1]);
@@ -241,7 +520,7 @@
            XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0);
            paragraph18.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run18 = paragraph18.createRun();
            run18.setText("频段: " + result1 + "MHz " + "下倾角" + result);
            run18.setText("下倾角" + result);
            List<String> collect = Arrays.stream(split).collect(Collectors.toList());
            List<Map<String, Object>> list = new ArrayList<>();
            // 对所有的键聚合
@@ -262,142 +541,602 @@
                    aggregatedMap.get(key).add(item);
                }
            }
            int rowNum = 2;
            for (String s2 : aggregatedMap.keySet()) {
                if (s2.equals("端口") || s2.equals("频率")) {
                    continue;
                }
                List<Map<String, Object>> mapList = aggregatedMap.get(s2);
                // 创建一个表格
                XWPFTable table = document.createTable(row, cell);
                table.setWidth("100%");
                int checkItemRowNum = row;
                for (int i = 0; i < checkItemRowNum; i++) {
                    XWPFTableRow tableRow = table1.createRow();
                    for (XWPFTableCell tableCell : tableRow.getTableCells()) {
                        // 设置单元格内容居中对齐
                        for (XWPFParagraph paragraph : tableCell.getParagraphs()) {
                            paragraph.setAlignment(ParagraphAlignment.CENTER);
                        }
                    }
                }
                //垂直
                mergeCellsVertically(table, 0, 0, row - 1);
                mergeCellsVertically(table, 1, 0, row - 1);
                mergeCellsVertically(table, 2, 0, row - 1);
                mergeCellsVertically(table, 3, 0, row - 1);
                mergeCellsVertically(table, 4, 0, 1);
                mergeCellsVertically(table, cell - 1, 0, 1);
                mergeCellsVertically(table, cell - 1, 2, row - 2);
                mergeCellsVertically(table1, 0, rowNum, rowNum + checkItemRowNum - 1);
                mergeCellsVertically(table1, 1, rowNum, rowNum + checkItemRowNum - 1);
                mergeCellsVertically(table1, 2, rowNum, rowNum + checkItemRowNum - 1);
                mergeCellsVertically(table1, 3, rowNum, rowNum + checkItemRowNum - 1);
                mergeCellsVertically(table1, 4, rowNum, rowNum + 1);
                mergeCellsVertically(table1, cell - 1, rowNum, rowNum + 1);
                mergeCellsVertically(table1, cell - 1, rowNum + 2, rowNum + checkItemRowNum - 2);
                //水平
                mergeCellsHorizontally(table, 0, 5, cell - 2);
                mergeCellsHorizontally(table, row - 1, 5, cell - 2);
                table.setInsideHBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 内部水平边框
                table.setInsideVBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 内部垂直边框
                table.setBottomBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");  // 下边框
                table.setTopBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");     // 上边框
                table.setLeftBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");    // 左边框
                table.setRightBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");   // 右边框
                mergeCellsHorizontally(table1, rowNum, 5, cell - 2);
                mergeCellsHorizontally(table1, rowNum + checkItemRowNum - 1, 5, cell - 2);
                // 设置单元格文本并居中
                XWPFParagraph paragraph = table.getRow(0).getCell(0).getParagraphArray(0);
                XWPFParagraph paragraph = table1.getRow(rowNum).getCell(0).getParagraphArray(0);
                paragraph.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run = paragraph.createRun();
                run.setText(String.valueOf(size));
                XWPFParagraph paragraph1 = table.getRow(0).getCell(1).getParagraphArray(0);
                XWPFParagraph paragraph1 = table1.getRow(rowNum).getCell(1).getParagraphArray(0);
                paragraph1.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run1 = paragraph1.createRun();
                run1.setText(s2);
                // 调用方法提取第一个括号内的内容
                String firstContent = extractFirstContentFromBrackets(s2);
                if (firstContent != null) {
                    XWPFParagraph paragraph2 = table.getRow(0).getCell(2).getParagraphArray(0);
                    paragraph2.setAlignment(ParagraphAlignment.CENTER);
                    XWPFRun run2 = paragraph2.createRun();
                    run2.setText(firstContent);
                // 单位
                XWPFParagraph paragraph2 = table1.getRow(rowNum).getCell(2).getParagraphArray(0);
                XWPFRun run2 = paragraph2.createRun();
                if (s2.contains("增益")) {
                    run2.setText("dBi");
                } else if (s2.contains("波瓣宽度") || s2.contains("波束宽度") || s2.contains("下倾角")) {
                    run2.setText("°");
                } else if (s2.contains("前后比") || s2.contains("交叉极化") || s2.contains("旁瓣抑制") || s2.contains("下降") || s2.contains("零点填充") || s2.contains("副瓣电平")) {
                    run2.setText("dB");
                } else if (s2.contains("效率") || s2.contains("扇区占比")) {
                    run2.setText("%");
                } else {
                    System.out.println("没有找到括号内的内容。");
                    run2.setText("");
                }
                XWPFParagraph paragraph3 = table.getRow(0).getCell(3).getParagraphArray(0);
                XWPFParagraph paragraph3 = table1.getRow(rowNum).getCell(3).getParagraphArray(0);
                paragraph3.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run3 = paragraph3.createRun();
                run3.setText("/");
                XWPFParagraph paragraph4 = table.getRow(0).getCell(4).getParagraphArray(0);
                String checkItemStandardStr = "";
                if (bz.get(s2) != null) {
                    run3.setText(bz.get(s2).toString());
                    checkItemStandardStr = bz.get(s2).toString();
                } else {
                    run3.setText("");
                }
                XWPFParagraph paragraph4 = table1.getRow(rowNum).getCell(4).getParagraphArray(0);
                paragraph4.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run4 = paragraph4.createRun();
                run4.setText("频率(MHz)");
                XWPFParagraph paragraph5 = table.getRow(0).getCell(5).getParagraphArray(0);
                XWPFParagraph paragraph5 = table1.getRow(rowNum).getCell(5).getParagraphArray(0);
                paragraph5.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run5 = paragraph5.createRun();
                run5.setText("端口");
                XWPFParagraph paragraph6 = table.getRow(0).getCell(cell - 1).getParagraphArray(0);
                XWPFParagraph paragraph6 = table1.getRow(rowNum).getCell(cell - 1).getParagraphArray(0);
                paragraph6.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run6 = paragraph6.createRun();
                run6.setText("/");
                XWPFParagraph paragraph7 = table.getRow(1).getCell(cell - 1).getParagraphArray(0);
                paragraph7.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run7 = paragraph7.createRun();
                run7.setText("合格");
                XWPFParagraph paragraph8 = table.getRow(row - 1).getCell(4).getParagraphArray(0);
                run6.setText("判定");
//                XWPFParagraph paragraph7 = table1.getRow(rowNum + 2 ).getCell(cell - 1).getParagraphArray(0);
//                paragraph7.setAlignment(ParagraphAlignment.CENTER);
//                XWPFRun run7 = paragraph7.createRun();
//                run7.setText("合格");
                XWPFParagraph paragraph8 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(4).getParagraphArray(0);
                paragraph8.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run8 = paragraph8.createRun();
                run8.setText("平均值");
                XWPFParagraph paragraph9 = table.getRow(row - 1).getCell(cell - 1).getParagraphArray(0);
                XWPFParagraph paragraph9 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(cell - 1).getParagraphArray(0);
                paragraph9.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run9 = paragraph9.createRun();
                run9.setText("/");
                run9.setText("");
                for (int i = 0; i < collect.size(); i++) {
                    String s3 = collect.get(i);
                    if (s3.contains("端口")) {
                        XWPFParagraph paragraph10 = table.getRow(1).getCell(5 + i).getParagraphArray(0);
                        XWPFParagraph paragraph10 = table1.getRow(rowNum + 1).getCell(5 + i).getParagraphArray(0);
                        paragraph10.setAlignment(ParagraphAlignment.CENTER);
                        XWPFRun run10 = paragraph10.createRun();
                        run10.setText(s3);
                    }
                }
                Map<Double, List<Map<String, Object>>> group = mapList.stream()
                        .collect(Collectors.groupingBy(item -> (Double) item.get("频率")));
                Map<BigDecimal, List<Map<String, Object>>> group = mapList.stream()
                        .collect(Collectors.groupingBy(item -> {
                            BigDecimal value = new BigDecimal(String.valueOf(item.get("频率")));
                            if (value.scale() <= 0 || value.stripTrailingZeros().scale() <= 0) {
                                // 没有小数部分,返回整数字符串
                                return new BigDecimal(value.intValue());
                            } else {
                                // 有小数部分,返回原始值的字符串形式
                                return value;
                            }
                        }));
                group = new TreeMap<>(group);
                int hang = 2;
                Double count = 0.0;
                for (Double aDouble : group.keySet()) {
                // 定义 是否合格标记
                boolean passFlag = true;
                // 解析判定条件并解析比较标准值 0 无需判定 1 区间判定 2 小于等于 3 大于等于 4 大于 5 小于
                int checkType = 0;
                double firstParam = 0.0;
                double secondParam = 0.0 ;
                checkItemStandardStr = checkItemStandardStr.trim();
                if(checkItemStandardStr.contains("~") ){
                    checkType = 1;
                    String[] params = checkItemStandardStr.split("~");
                    if(null != params && params.length == 2){
                        firstParam = Double.valueOf(params[0]);
                        secondParam = Double.valueOf(params[1]);
                    }
                } else if(checkItemStandardStr.contains("-") && !(checkItemStandardStr.contains("≤") || checkItemStandardStr.contains("≥") || checkItemStandardStr.contains(">") || checkItemStandardStr.contains("<"))){
                    checkType = 1;
                    String[] params = checkItemStandardStr.split("-");
                    if(null != params && params.length == 2){
                        firstParam = Double.valueOf(params[0]);
                        secondParam = Double.valueOf(params[1]);
                    }
                } else if (checkItemStandardStr.contains("≤")) {
                    checkType = 2;
                    String[] params = checkItemStandardStr.split("≤");
                    if(null != params && params.length == 1){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }else if(checkItemStandardStr.contains("≥")){
                    checkType = 3;
                    String[] params = checkItemStandardStr.split("≥");
                    if(null != params && params.length == 2){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }else if(checkItemStandardStr.contains(">")){
                    checkType = 4;
                    String[] params = checkItemStandardStr.split(">");
                    if(null != params && params.length == 2){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }else if(checkItemStandardStr.contains("<")){
                    checkType = 5;
                    String[] params = checkItemStandardStr.split("<");
                    if(null != params && params.length == 2){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }
                for (BigDecimal aDouble : group.keySet()) {
                    List<Map<String, Object>> mapList1 = group.get(aDouble);
                    for (Map<String, Object> stringObjectMap : mapList1) {
                        String port = stringObjectMap.get("端口").toString();
                        for (int i = 5; i < cell - 1; i++) {
                            String text = table.getRow(1).getCell(i).getText();
                            String text = table1.getRow(rowNum + 1).getCell(i).getText();
                            if (text.equals(port)) {
                                XWPFParagraph paragraph10 = table.getRow(hang).getCell(i).getParagraphArray(0);
                                XWPFParagraph paragraph10 = table1.getRow(hang + rowNum).getCell(i).getParagraphArray(0);
                                paragraph10.setAlignment(ParagraphAlignment.CENTER);
                                XWPFRun run10 = paragraph10.createRun();
                                count = (Double) stringObjectMap.get(s2) + count;
                                String project = stringObjectMap.get(s2).toString();
                                run10.setText(project);
                                double value = Double.parseDouble(stringObjectMap.get(s2).toString());
                                count = value + count;
                                // 数据判断
                                if(checkType == 1){
                                    if(!(value >= firstParam && value <= secondParam)){
                                        passFlag = false;
                                    }
                                }else if(checkType == 2){
                                    if(value >= firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 3){
                                    if(value <= firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 4){
                                    if(value < firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 5){
                                    if(value > firstParam ){
                                        passFlag = false;
                                    }
                                }
                                run10.setText(String.format("%.2f", value));
                            }
                        }
                    }
                    XWPFParagraph paragraph10 = table.getRow(hang).getCell(4).getParagraphArray(0);
                    XWPFParagraph paragraph10 = table1.getRow(hang+rowNum).getCell(4).getParagraphArray(0);
                    paragraph10.setAlignment(ParagraphAlignment.CENTER);
                    XWPFRun run10 = paragraph10.createRun();
                    run10.setText(String.valueOf(aDouble));
                    hang++;
                }
                XWPFParagraph paragraph11 = table.getRow(row - 1).getCell(5).getParagraphArray(0);
                // 汇总结果
                if(checkType != 0){
                    XWPFParagraph paragraph10 = table1.getRow(rowNum+2).getCell(cell - 1).getParagraphArray(0);
                    XWPFRun run10 = paragraph10.createRun();
                    if(passFlag){
                        run10.setText("合格");
                    }else {
                        run10.setText("不合格");
                    }
                }
                XWPFParagraph paragraph11 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(5).getParagraphArray(0);
                paragraph11.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run11 = paragraph11.createRun();
                double v = count / (Double.parseDouble(s1.toString()) * Double.parseDouble(i1.toString()));
                run11.setText(String.format("%.2f",v));
                run11.setText(String.format("%.2f", v));
                rowNum += checkItemRowNum;
                size++;
            }
        }
        // 输出到文件
        try {
            InsOrder insOrder = insOrderMapper.selectById(insOrderFile.getInsOrderId());
            InsSample insSample = insSampleMapper.selectById(insOrderFile.getInsSampleId());
            String[] split = insOrderFile.getFileName().split("\\.");
            String name = insOrderFile.getFileName().substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length()));
            FileOutputStream out = new FileOutputStream(wordUrl + "/" + insOrder.getEntrustCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            String name = insOrderFile.getFileName().replace('#', '&').substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length()));
            String url = UUID.randomUUID() + "_" + insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx";
            url.replace("#", "&");
            FileOutputStream out = new FileOutputStream(wordUrl + "/" + url);
            document.write(out);
            out.close();
            document.close();
            InsOrderFile orderFile = new InsOrderFile();
            orderFile.setInsOrderId(insOrderFile.getInsOrderId());
            orderFile.setFileUrl(insOrder.getEntrustCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            orderFile.setInsSampleId(insOrderFile.getInsSampleId());
            orderFile.setFileUrl(url);
            orderFile.setType(2);
            orderFile.setFileName(insOrder.getEntrustCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            orderFile.setFileName(insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            orderFile.setSonLaboratory(sonLaboratory);
            insOrderFileMapper.insert(orderFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //远场
    public void createWord2(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, HashMap<String, Object> pj, HashMap<String, Object> bz, InsOrderFile insOrderFile) throws IOException {
        int size = 1;
        for (String s : map.keySet()) {
            Map<String, Object> dataRow = exceldata.getDataRow();
            String result = s.substring(s.lastIndexOf("-") + 1);
            String o = map.get(s).toString();
            String[] split = o.split(",");
            Integer s1 = Integer.parseInt(split[split.length - 1]);
            Integer i1 = split.length - 1;
            int row = 3 + s1;
            int cell = 6 + i1;
            HashMap<String, Object> o2 = (HashMap<String, Object>) pj.get(result);
            XWPFTable table1 = document.createTable(2, cell);
            table1.setWidth("100%");
            mergeCellsHorizontally(table1, 1, 0, cell - 1);
            mergeCellsHorizontally(table1, 0, 4, cell - 2);
            XWPFParagraph paragraph12 = table1.getRow(0).getCell(0).getParagraphArray(0);
            paragraph12.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run12 = paragraph12.createRun();
            run12.setText("序号");
            XWPFParagraph paragraph13 = table1.getRow(0).getCell(1).getParagraphArray(0);
            paragraph13.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run13 = paragraph13.createRun();
            run13.setText("检验项目");
            XWPFParagraph paragraph14 = table1.getRow(0).getCell(2).getParagraphArray(0);
            paragraph14.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run14 = paragraph14.createRun();
            run14.setText("单位");
            XWPFParagraph paragraph15 = table1.getRow(0).getCell(3).getParagraphArray(0);
            paragraph15.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run15 = paragraph15.createRun();
            run15.setText("标准要求");
            XWPFParagraph paragraph16 = table1.getRow(0).getCell(cell - 1).getParagraphArray(0);
            paragraph16.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run16 = paragraph16.createRun();
            run16.setText("检验结论");
            XWPFParagraph paragraph17 = table1.getRow(0).getCell(4).getParagraphArray(0);
            paragraph17.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run17 = paragraph17.createRun();
            run17.setText("检验结果");
            XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0);
            XWPFRun run18 = paragraph18.createRun();
            run18.setText("下倾角" + result);
            List<String> collect = Arrays.stream(split).collect(Collectors.toList());
            collect.remove(collect.size() - 1);
            collect.sort((o1, o21) -> Integer.parseInt(o1.substring((o1.length() - 1))) - Integer.parseInt(o21.substring(o21.length() - 1)));
            List<Map<String, Object>> list = new ArrayList<>();
            // 对所有的键聚合
            Map<String, List<Map<String, Object>>> aggregatedMap = new HashMap<>();
            Map<String, List<Map<String, Object>>> o1 = (Map<String, List<Map<String, Object>>>) dataRow.get(result);
            for (String s2 : collect) {
                if (s2.contains("端口") || s2.contains("P") || s2.contains("广播") || s2.contains("业务")) {
                    List<Map<String, Object>> mapList = o1.get(s2);
                    list.addAll(mapList);
                }
            }
            // 遍历每一个项目
            for (Map<String, Object> item : list) {
                for (String key : item.keySet()) {
                    // 如果该键在 aggregatedMap 中不存在,则创建一个新的 List
                    aggregatedMap.putIfAbsent(key, new ArrayList<>());
                    // 将当前项目添加到对应键的 List 中
                    aggregatedMap.get(key).add(item);
                }
            }
            // 初始化行数
            int rowNum = 2;
            for (String s2 : aggregatedMap.keySet()) {
                if (s2.equals("端口") || s2.equals("测试频率(MHZ)") || s2.equals("测量频率(MHz)")) {
                    continue;
                }
                List<Map<String, Object>> mapList = aggregatedMap.get(s2);
                int checkItemRowNum = row;
                for (int i = 0; i < checkItemRowNum; i++) {
                    // 创建新行 并设置居中
                    XWPFTableRow tableRow = table1.createRow();
                    for (XWPFTableCell tableCell : tableRow.getTableCells()) {
                        // 设置单元格内容居中对齐
                        for (XWPFParagraph paragraph : tableCell.getParagraphs()) {
                            paragraph.setAlignment(ParagraphAlignment.CENTER);
                        }
                    }
                }
//            XWPFTable table = document.createTable(row, cell);
                //垂直
                mergeCellsVertically(table1, 0, rowNum, rowNum +  checkItemRowNum - 1);
                mergeCellsVertically(table1, 1, rowNum, rowNum +  checkItemRowNum - 1);
                mergeCellsVertically(table1, 2, rowNum, rowNum +  checkItemRowNum - 1);
                mergeCellsVertically(table1, 3, rowNum, rowNum +  checkItemRowNum - 1);
                mergeCellsVertically(table1, 4, rowNum, rowNum+1);
                mergeCellsVertically(table1, cell - 1, rowNum, rowNum+1);
                mergeCellsVertically(table1, cell - 1, rowNum+2, rowNum +  checkItemRowNum - 1);
                //水平
                mergeCellsHorizontally(table1, rowNum, 5, cell - 2);
                mergeCellsHorizontally(table1, rowNum + checkItemRowNum - 1, 5, cell - 2);
                // 设置单元格文本并居中
                XWPFParagraph paragraph = table1.getRow(rowNum).getCell(0).getParagraphArray(0);
                XWPFRun run = paragraph.createRun();
                run.setText(String.valueOf(size));
                XWPFParagraph paragraph1 = table1.getRow(rowNum).getCell(1).getParagraphArray(0);
                XWPFRun run1 = paragraph1.createRun();
                run1.setText(s2);
                // 单位
                XWPFParagraph paragraph2 = table1.getRow(rowNum).getCell(2).getParagraphArray(0);
                XWPFRun run2 = paragraph2.createRun();
                if (s2.contains("增益")) {
                    run2.setText("dBi");
                } else if (s2.contains("波瓣宽度") || s2.contains("波束宽度") || s2.contains("下倾角")) {
                    run2.setText("°");
                } else if (s2.contains("前后比") || s2.contains("交叉极化") || s2.contains("旁瓣抑制") || s2.contains("下降") || s2.contains("零点填充") || s2.contains("副瓣电平")) {
                    run2.setText("dB");
                } else if (s2.contains("效率") || s2.contains("扇区占比")) {
                    run2.setText("%");
                } else {
                    run2.setText("");
                }
                // 定义改检查项标准值
                String checkItemStandardStr = "";
                XWPFParagraph paragraph3 = table1.getRow(rowNum).getCell(3).getParagraphArray(0);
                XWPFRun run3 = paragraph3.createRun();
                if (bz.get(s2) != null) {
                    run3.setText(bz.get(s2).toString());
                    checkItemStandardStr = bz.get(s2).toString();
                } else run3.setText("");
                XWPFParagraph paragraph4 = table1.getRow(rowNum).getCell(4).getParagraphArray(0);
                paragraph4.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run4 = paragraph4.createRun();
                run4.setText("频率(MHz)");
                XWPFParagraph paragraph5 = table1.getRow(rowNum).getCell(5).getParagraphArray(0);
                paragraph5.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run5 = paragraph5.createRun();
                run5.setText("端口");
                XWPFParagraph paragraph6 = table1.getRow(rowNum).getCell(cell - 1).getParagraphArray(0);
                paragraph6.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run6 = paragraph6.createRun();
                run6.setText("判定");
                XWPFParagraph paragraph7 = table1.getRow(rowNum+1).getCell(cell - 1).getParagraphArray(0);
                paragraph7.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run7 = paragraph7.createRun();
                run7.setText("合格");
                XWPFParagraph paragraph8 = table1.getRow(rowNum+checkItemRowNum - 1).getCell(4).getParagraphArray(0);
                paragraph8.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run8 = paragraph8.createRun();
                run8.setText("平均值");
                XWPFParagraph paragraph9 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(cell - 1).getParagraphArray(0);
                paragraph9.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run9 = paragraph9.createRun();
                run9.setText("");
                for (int i = 0; i < collect.size(); i++) {
                    String s3 = collect.get(i);
                    if (s3.contains("端口") || s3.contains("P") || s3.contains("广播") || s3.contains("业务")) {
                        XWPFParagraph paragraph10 = table1.getRow(rowNum+1).getCell(5 + i).getParagraphArray(0);
                        paragraph10.setAlignment(ParagraphAlignment.CENTER);
                        XWPFRun run10 = paragraph10.createRun();
                        run10.setText(s3);
                    }
                }
                Map<BigDecimal, List<Map<String, Object>>> group = mapList.stream()
                        .collect(Collectors.groupingBy(item -> {
                            BigDecimal value=BigDecimal.ZERO;
                            if (item.containsKey("测试频率(MHZ)")) {
                                 value = new BigDecimal(String.valueOf(item.get("测试频率(MHZ)")));
                            }
                            else if (item.containsKey("测量频率(MHz)")){
                                 value = new BigDecimal(String.valueOf(item.get("测量频率(MHz)")));
                            }
                            if (value.scale() <= 0 || value.stripTrailingZeros().scale() <= 0) {
                                // 没有小数部分,返回整数字符串
                                return new BigDecimal(value.intValue());
                            } else {
                                // 有小数部分,返回原始值的字符串形式
                                return value;
                            }
                        }));
                int hang = 2;
                Double count = 0.0;
                // 定义 是否合格标记
                boolean passFlag = true;
                // 解析判定条件并解析比较标准值 0 无需判定 1 区间判定 2 小于等于 3 大于等于
                int checkType = 0;
                double firstParam = 0.0;
                double secondParam = 0.0 ;
                checkItemStandardStr = checkItemStandardStr.trim();
                if(checkItemStandardStr.contains("~") || checkItemStandardStr.contains("~") ){
                    checkType = 1;
                    String[] params = checkItemStandardStr.split("~");
                    if (checkItemStandardStr.contains("~")) {
                        params = checkItemStandardStr.split("~");
                    }
                    if(null != params && params.length == 2){
                        firstParam = Double.valueOf(params[0]);
                        secondParam = Double.valueOf(params[1]);
                    }
                } else if(checkItemStandardStr.contains("-") && !(checkItemStandardStr.contains("≤") || checkItemStandardStr.contains("≥") || checkItemStandardStr.contains(">") || checkItemStandardStr.contains("<"))){
                    checkType = 1;
                    String[] params = checkItemStandardStr.split("-");
                    if(null != params && params.length == 2){
                        firstParam = Double.valueOf(params[0]);
                        secondParam = Double.valueOf(params[1]);
                    }
                } else if (checkItemStandardStr.contains("≤")) {
                    checkType = 2;
                    String[] params = checkItemStandardStr.split("≤");
                    if(null != params && params.length == 1){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }else if(checkItemStandardStr.contains("≥")){
                    checkType = 3;
                    String[] params = checkItemStandardStr.split("≥");
                    if(null != params && params.length == 2){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }else if(checkItemStandardStr.contains(">")){
                    checkType = 4;
                    String[] params = checkItemStandardStr.split(">");
                    if(null != params && params.length == 2){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }else if(checkItemStandardStr.contains("<")){
                    checkType = 5;
                    String[] params = checkItemStandardStr.split("<");
                    if(null != params && params.length == 2){
                        if(params[1].contains("%")){
                            firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100;
                        }else{
                            firstParam = Double.valueOf(params[1]);
                        }
                    }
                }
                for (BigDecimal aDouble : group.keySet()) {
                    List<Map<String, Object>> mapList1 = group.get(aDouble);
                    for (Map<String, Object> stringObjectMap : mapList1) {
                        String port = stringObjectMap.get("端口").toString();
                        for (int i = 5; i < cell - 1; i++) {
                            String text = table1.getRow(rowNum+1).getCell(i).getText();
                            if (text.equals(port)) {
                                XWPFParagraph paragraph10 = table1.getRow(hang+rowNum).getCell(i).getParagraphArray(0);
                                XWPFRun run10 = paragraph10.createRun();
                                double value = Double.parseDouble(stringObjectMap.get(s2).toString());
                                count = value + count;
                                // 数据判断
                                if(checkType == 1){
                                    if(!(value >= firstParam && value <= secondParam)){
                                        passFlag = false;
                                    }
                                }else if(checkType == 2){
                                    if(value >= firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 3){
                                    if(value <= firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 4){
                                    if(value < firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 5){
                                    if(value > firstParam ){
                                        passFlag = false;
                                    }
                                }
                                run10.setText(String.format("%.2f",value));
                            }
                        }
                    }
                    XWPFParagraph paragraph10 = table1.getRow(hang+rowNum).getCell(4).getParagraphArray(0);
                    XWPFRun run10 = paragraph10.createRun();
                    run10.setText(String.valueOf(aDouble));
                    hang++;
                }
                // 汇总结果
                if(checkType != 0){
                    XWPFParagraph paragraph10 = table1.getRow(rowNum+2).getCell(cell - 1).getParagraphArray(0);
                    XWPFRun run10 = paragraph10.createRun();
                    if(passFlag){
                        run10.setText("合格");
                    }else {
                        run10.setText("不合格");
                    }
                }
                XWPFParagraph paragraph11 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(5).getParagraphArray(0);
                XWPFRun run11 = paragraph11.createRun();
                double v = count / (Double.parseDouble(s1.toString()) * Double.parseDouble(i1.toString()));
                run11.setText(String.format("%.2f",(double)o2.get(s2)));
                rowNum += checkItemRowNum;
                size++;
            }
        }
    }
@@ -424,20 +1163,6 @@
                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
            }
        }
    }
    // 提取第一个括号内的内容
    public static String extractFirstContentFromBrackets(String str) {
        // 定义正则表达式,匹配括号内的内容,同时支持中文和英文括号
        Pattern pattern = Pattern.compile("\\((.*?)\\)|\\((.*?)\\)");
        Matcher matcher = pattern.matcher(str);
        // 查找第一个匹配的内容
        if (matcher.find()) {
            // 获取括号内的内容,判断是中文括号还是英文括号
            return matcher.group(1) != null ? matcher.group(1) : matcher.group(2);
        }
        return null; // 如果没有找到匹配项,则返回null
    }
}