chenrui
2025-03-24 c5410b2cb68fbff85530b00385ecf82c6607937c
inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java
@@ -22,6 +22,7 @@
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -536,44 +537,46 @@
                    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);
                // 单位
                XWPFParagraph paragraph2 = table.getRow(0).getCell(2).getParagraphArray(0);
                XWPFParagraph paragraph2 = table1.getRow(rowNum).getCell(2).getParagraphArray(0);
                XWPFRun run2 = paragraph2.createRun();
                if (s2.contains("增益")) {
                    run2.setText("dBi");
@@ -586,77 +589,186 @@
                } else {
                    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();
                String checkItemStandardStr = "";
                if (bz.get(s2) != null) {
                    run3.setText(bz.get(s2).toString());
                } else run3.setText("");
                XWPFParagraph paragraph4 = table.getRow(0).getCell(4).getParagraphArray(0);
                    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(2).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);
//                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("");
                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));
                rowNum += checkItemRowNum;
                size++;
            }
        }
@@ -705,26 +817,32 @@
            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("检验结果");
@@ -766,10 +884,16 @@
                    continue;
                }
                List<Map<String, Object>> mapList = aggregatedMap.get(s2);
                // 创建一个表格
                int checkItemRowNum = row;
                for (int i = 0; i < checkItemRowNum; i++) {
                    table1.createRow(); // 创建新行
                    // 创建新行 并设置居中
                    XWPFTableRow tableRow = table1.createRow();
                    for (XWPFTableCell tableCell : tableRow.getTableCells()) {
                        // 设置单元格内容居中对齐
                        for (XWPFParagraph paragraph : tableCell.getParagraphs()) {
                            paragraph.setAlignment(ParagraphAlignment.CENTER);
                        }
                    }
                }
//            XWPFTable table = document.createTable(row, cell);
                //垂直
@@ -777,7 +901,7 @@
                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, 1);
                mergeCellsVertically(table1, 4, rowNum, rowNum+1);
                mergeCellsVertically(table1, cell - 1, rowNum, rowNum+1);
                mergeCellsVertically(table1, cell - 1, rowNum+2, rowNum +  checkItemRowNum - 1);
                //水平
@@ -813,7 +937,6 @@
                // 定义改检查项标准值
                String checkItemStandardStr = "";
                XWPFParagraph paragraph3 = table1.getRow(rowNum).getCell(3).getParagraphArray(0);
                paragraph3.setAlignment(ParagraphAlignment.CENTER);
                XWPFRun run3 = paragraph3.createRun();
                if (bz.get(s2) != null) {
                    run3.setText(bz.get(s2).toString());
@@ -822,11 +945,11 @@
                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("端口");
@@ -856,10 +979,16 @@
                    }
                }
                Map<Integer, List<Map<String, Object>>> group = mapList.stream()
                Map<BigDecimal, List<Map<String, Object>>> group = mapList.stream()
                        .collect(Collectors.groupingBy(item -> {
                            Double aDouble = (Double) item.get("测试频率(MHZ)");
                            return aDouble.intValue();
                            BigDecimal value = new BigDecimal(String.valueOf(item.get("测试频率(MHZ)")));
                            if (value.scale() <= 0 || value.stripTrailingZeros().scale() <= 0) {
                                // 没有小数部分,返回整数字符串
                                return new BigDecimal(value.intValue());
                            } else {
                                // 有小数部分,返回原始值的字符串形式
                                return value;
                            }
                        }));
@@ -879,7 +1008,7 @@
                        firstParam = Double.valueOf(params[0]);
                        secondParam = Double.valueOf(params[1]);
                    }
                } else if(checkItemStandardStr.contains("-") && !(checkItemStandardStr.contains("≤") || checkItemStandardStr.contains("≥"))){
                } else if(checkItemStandardStr.contains("-") && !(checkItemStandardStr.contains("≤") || checkItemStandardStr.contains("≥") || checkItemStandardStr.contains(">") || checkItemStandardStr.contains("<"))){
                    checkType = 1;
                    String[] params = checkItemStandardStr.split("-");
                    if(null != params && params.length == 2){
@@ -906,9 +1035,29 @@
                            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 (Integer aDouble : group.keySet()) {
                for (BigDecimal aDouble : group.keySet()) {
                    List<Map<String, Object>> mapList1 = group.get(aDouble);
                    for (Map<String, Object> stringObjectMap : mapList1) {
                        String port = stringObjectMap.get("端口").toString();
@@ -932,9 +1081,16 @@
                                    if(value <= firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 4){
                                    if(value < firstParam ){
                                        passFlag = false;
                                    }
                                }else if(checkType == 5){
                                    if(value > firstParam ){
                                        passFlag = false;
                                    }
                                }
                                String project = stringObjectMap.get(s2).toString();
                                run10.setText(project);
                                run10.setText(String.format("%.2f",value));
                            }
                        }
                    }
@@ -948,9 +1104,9 @@
                    XWPFParagraph paragraph10 = table1.getRow(rowNum+2).getCell(cell - 1).getParagraphArray(0);
                    XWPFRun run10 = paragraph10.createRun();
                    if(passFlag){
                        run10.setText(String.valueOf("合格"));
                        run10.setText("合格");
                    }else {
                        run10.setText(String.valueOf("不合格"));
                        run10.setText("不合格");
                    }
                }