root 2 роки тому
батько
коміт
b910be94c5

+ 281 - 229
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -2606,281 +2606,333 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     @Override
     @SneakyThrows
     public void exportProjectReport(SimulationManualProjectParam param) {
-
-        OutputStream os;
-        HttpServletResponse response = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();
-        //获取要生成的数据
-        ResponseBodyVO<ProjectReportVo> bodyVO = selectProjectReportById(param);
-        ProjectReportVo vo = bodyVO.getInfo();
-        //下载 or 保存本地
-        if (param.getIsCreateLocalPdfFile() != null && param.getIsCreateLocalPdfFile()) {
-            File file = new File(param.getLocalPdfFilePath());
-            os = new BufferedOutputStream(Files.newOutputStream(file.toPath()));
-        } else {
-            String fileName = vo.getProjectId() + "_" + vo.getProjectName();
-            response.setContentType("application/x-download");
-            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");
-            os = new BufferedOutputStream(response.getOutputStream());
-        }
-        // 监听生成pdf数据
         Document document = new Document(PageSize.A4);
-        document.open();
-        PdfWriter.getInstance(document, os);
-        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
-        //* -------------------------------- 第一页 --------------------------------
-        Paragraph paragraph1 = new Paragraph("评价报告", new Font(baseFont, 20));
-        paragraph1.setAlignment(Element.ALIGN_CENTER); //居中
-        document.add(paragraph1);
-
-//        // 新的一页,横向显示
-//        document.setPageSize(PageSize.A4.rotate());
-//        document.newPage();
-
-        //算法名称、算法得分、测试等级
-        Paragraph algorithmNanmeElements = new Paragraph(
-                50,
-                "          算法名称:" + vo.getAlgorithmName()
-                        + "         算法得分:" + vo.getAlgorithmScore()
-                        + "         测试等级:" + vo.getEvaluationLevel(),
-                defaultFont(baseFont));
-        algorithmNanmeElements.setAlignment(Element.ALIGN_LEFT); //靠左
-        document.add(algorithmNanmeElements);
-        //算法描述
-        Paragraph algorithmDescribeFontElements = new Paragraph(
-                30,
-                "          算法描述:" + vo.getAlgorithmDescribe(),
-                defaultFont(baseFont));
-        algorithmDescribeFontElements.setAlignment(Element.ALIGN_LEFT); //居中
-        document.add(algorithmDescribeFontElements);
-        //算法简评
-        Font algorithmEvaluateFont = new Font(baseFont, 14); //字体
-        Paragraph algorithmEvaluateElements = new Paragraph(
-                30,
-                "          算法简评:" + vo.getAlgorithmEvaluation(),
-                algorithmEvaluateFont);
-        algorithmEvaluateElements.setAlignment(Element.ALIGN_LEFT); //居中
-        document.add(algorithmEvaluateElements);
+        OutputStream os = null;
+        try {
+            HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+
+            //获取要生成的数据
+            ResponseBodyVO bodyVO = selectProjectReportById(param);
+            ProjectReportVo vo = (ProjectReportVo) bodyVO.getInfo();
+
+            //下载 or 保存本地
+            if (param.getIsCreateLocalPdfFile() != null && param.getIsCreateLocalPdfFile()) {
+                File file = new File(param.getLocalPdfFilePath());
+                os = new BufferedOutputStream(Files.newOutputStream(file.toPath()));
+            } else {
+                String fileName = vo.getProjectId() + "_" + vo.getProjectName();
+                response.setContentType("application/x-download");
+                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");
+                os = new BufferedOutputStream(response.getOutputStream());
+            }
+
+
+            // 监听生成pdf数据
+            PdfWriter.getInstance(document, os);
+
+            // 以下生成PDF
+            BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+
+            //标题
+            document.open();
+            Font titleFont = new Font(font, 20); //字体
+            Paragraph titleElements = new Paragraph("评价报告", titleFont);
+            titleElements.setAlignment(Element.ALIGN_CENTER); //居中
+            document.add(titleElements);
+
+
+            //算法名称、算法得分、测试等级
+            Paragraph algorithmNanmeElements = new Paragraph(
+                    50,
+                    "          算法名称:" + vo.getAlgorithmName()
+                            + "         算法得分:" + vo.getAlgorithmScore()
+                            + "         测试等级:" + vo.getEvaluationLevel(),
+                    defaultFont(font));
+            algorithmNanmeElements.setAlignment(Element.ALIGN_LEFT); //靠左
+            document.add(algorithmNanmeElements);
+
+
+            //算法描述
+            Paragraph algorithmDescribeFontElements = new Paragraph(
+                    30,
+                    "          算法描述:" + vo.getAlgorithmDescribe(),
+                    defaultFont(font));
+            algorithmDescribeFontElements.setAlignment(Element.ALIGN_LEFT); //居中
+            document.add(algorithmDescribeFontElements);
+
+            //算法简评
+            Font algorithmEvaluateFont = new Font(font, 14); //字体
+            Paragraph algorithmEvaluateElements = new Paragraph(
+                    30,
+                    "          算法简评:" + vo.getAlgorithmEvaluation(),
+                    algorithmEvaluateFont);
+            algorithmEvaluateElements.setAlignment(Element.ALIGN_LEFT); //居中
+            document.add(algorithmEvaluateElements);
+
             /*
             测试得分表
              */
-        Paragraph scoreTableElements = new Paragraph(
-                50,
-                "测试得分表",
-                defaultFont(baseFont));
-        scoreTableElements.setAlignment(Element.ALIGN_CENTER); //居中
-        document.add(scoreTableElements);
-        setBlankLineSpacing(20, baseFont, document);
-        // 表头
-        PdfPTable pdfPTable = new PdfPTable(5);
-        pdfPTable.setHeaderRows(1);//换页每页显示表头
-        addTitleList(pdfPTable, baseFont, new String[]{"测试项目", "场景数量", "测试权重(%)", "测试得分", "得分率(%)"});
-
-        // 数据
-        List<AlgorithmScoreVo> algorithmScoreList = vo.getAlgorithmScoreList();
-        for (AlgorithmScoreVo asv : algorithmScoreList) {
-            String[] data = new String[]{
-                    asv.getProjectName(), String.valueOf(asv.getSceneNum()), asv.getWeight(), String.valueOf(asv.getScore()), String.valueOf(asv.getScoreRatio())
-            };
-            addDataList(pdfPTable, baseFont, data);
-        }
-        document.add(pdfPTable);
-
-        // 新的一页,横向显示
-        document.setPageSize(PageSize.A4.rotate());
-        document.newPage();
-
-        // 算法测试评分细则(指标得分列表)
-        Paragraph subListScoreElements = new Paragraph(
-                50,
-                "算法测试评分细则",
-                defaultFont(baseFont));
-        subListScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
-        document.add(subListScoreElements);
-        setBlankLineSpacing(20, baseFont, document);
-        List<Map> subListScoreLiTitle = vo.getSubListScoreLiTitle();
-        int size = subListScoreLiTitle.size();
-        PdfPTable pdfPTable2 = new PdfPTable(size);
-        pdfPTable2.setHeaderRows(1);
-        String[] slt = new String[size];
-        for (int i = 0; i < size; i++) {
-            slt[i] = subListScoreLiTitle.get(i).get("label").toString();
-        }
-        addTitleList(pdfPTable2, baseFont, slt);
-        List<SubScListVo> subListScoreLi = vo.getSubListScoreLi();
-        List<String[]> list = new ArrayList<>();
-        int fieldNumber = 7;
-        for (SubScListVo slv : subListScoreLi) {
-            String[] slsi = new String[size];
+            Paragraph scoreTableElements = new Paragraph(
+                    50,
+                    "测试得分表",
+                    defaultFont(font));
+            scoreTableElements.setAlignment(Element.ALIGN_CENTER); //居中
+            document.add(scoreTableElements);
+
+            setBlankLineSpacing(20, font, document);
+
+            // 表头
+            PdfPTable pdfPTable = new PdfPTable(5);
+            pdfPTable.setHeaderRows(1);//换页每页显示表头
+            addTitleList(pdfPTable, font, new String[]{"测试项目", "场景数量", "测试权重(%)", "测试得分", "得分率(%)"});
+
+            // 数据
+            List<AlgorithmScoreVo> algorithmScoreList = vo.getAlgorithmScoreList();
+            for (AlgorithmScoreVo asv : algorithmScoreList) {
+                String[] data = new String[]{
+                        asv.getProjectName(), String.valueOf(asv.getSceneNum()), asv.getWeight(), String.valueOf(asv.getScore()), String.valueOf(asv.getScoreRatio())
+                };
+
+                addDataList(pdfPTable, font, data);
+            }
+            document.add(pdfPTable);
+
+            // 评价等级(已去掉)
+//            Paragraph levelTableElements = new Paragraph(
+//                    50,
+//                    "评价等级",
+//                    defaultFont(font));
+//            levelTableElements.setAlignment(Element.ALIGN_CENTER); //居中
+//            document.add(levelTableElements);
+//
+//            setBlankLineSpacing(20, font, document);
+//
+//            PdfPTable pdfPTable1 = new PdfPTable(5);
+//            addTitleList(pdfPTable1, font, new String[]{"测试项目", "90<总分<100", "80<总分<90", "70<总分<80", "0<总分<70"});
+//            addDataList(pdfPTable1, font, new String[]{"评价等级", "优秀(G)", "良好(A)", "一般(M)", "较差(P)",
+//                    "评价等级", "++++++", "+++++", "++++", "+++",});
+//            document.add(pdfPTable1);
+
+
+            // 新的一页,横向显示
+            document.setPageSize(PageSize.A4.rotate());
+            document.newPage();
+
+            // 算法测试评分细则(指标得分列表)
+            Paragraph subListScoreElements = new Paragraph(
+                    50,
+                    "算法测试评分细则",
+                    defaultFont(font));
+            subListScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
+            document.add(subListScoreElements);
+            setBlankLineSpacing(20, font, document);
+            List<Map> subListScoreLiTitle = vo.getSubListScoreLiTitle();
+            int size = subListScoreLiTitle.size();
+            PdfPTable pdfPTable2 = new PdfPTable(size);
+            pdfPTable2.setHeaderRows(1);
+            String[] slt = new String[size];
             for (int i = 0; i < size; i++) {
-                slsi[i] = "";
+                slt[i] = subListScoreLiTitle.get(i).get("label").toString();
             }
-            //目前最多支持到6级指标
-            for (int i = 0; i < size - fieldNumber; i++) {
-                if (i == 0) {
-                    if (slv.getSublistName1() != null) {
-                        slsi[i] = slv.getSublistName1();
-                    }
-                } else if (i == 1) {
-                    if (slv.getSublistName2() != null) {
-                        slsi[i] = slv.getSublistName2();
-                    }
-                } else if (i == 2) {
-                    if (slv.getSublistName3() != null) {
-                        slsi[i] = slv.getSublistName3();
-                    }
-                } else if (i == 3) {
-                    if (slv.getSublistName4() != null) {
-                        slsi[i] = slv.getSublistName4();
-                    }
-                } else if (i == 4) {
-                    if (slv.getSublistName5() != null) {
-                        slsi[i] = slv.getSublistName5();
-                    }
-                } else if (i == 5) {
-                    if (slv.getSublistName6() != null) {
-                        slsi[i] = slv.getSublistName6();
+            addTitleList(pdfPTable2, font, slt);
+            List<SubScListVo> subListScoreLi = vo.getSubListScoreLi();
+            List<String[]> list = new ArrayList<>();
+            int fieldNumber = 7;
+            for (SubScListVo slv : subListScoreLi) {
+                String[] slsi = new String[size];
+                for (int i = 0; i < size; i++) {
+                    slsi[i] = "";
+                }
+                //目前最多支持到6级指标
+                for (int i = 0; i < size - fieldNumber; i++) {
+                    if (i == 0) {
+                        if (slv.getSublistName1() != null) {
+                            slsi[i] = slv.getSublistName1();
+                        }
+                    } else if (i == 1) {
+                        if (slv.getSublistName2() != null) {
+                            slsi[i] = slv.getSublistName2();
+                        }
+                    } else if (i == 2) {
+                        if (slv.getSublistName3() != null) {
+                            slsi[i] = slv.getSublistName3();
+                        }
+                    } else if (i == 3) {
+                        if (slv.getSublistName4() != null) {
+                            slsi[i] = slv.getSublistName4();
+                        }
+                    } else if (i == 4) {
+                        if (slv.getSublistName5() != null) {
+                            slsi[i] = slv.getSublistName5();
+                        }
+                    } else if (i == 5) {
+                        if (slv.getSublistName6() != null) {
+                            slsi[i] = slv.getSublistName6();
+                        }
                     }
                 }
+                slsi[size - 7] = slv.getSceneNum();
+                slsi[size - 6] = slv.getErrorSceneNum();
+                slsi[size - 5] = slv.getNotScoredSceneNum();
+                slsi[size - 4] = slv.getNotStandardSceneNum();
+                slsi[size - 3] = slv.getStandardSceneNum();
+                slsi[size - 2] = slv.getLastScore();
+                slsi[size - 1] = slv.getFirstScore();
+
+                list.add(slsi);
+
+//                addDataList(pdfPTable2, font, slsi);
             }
-            slsi[size - 7] = slv.getSceneNum();
-            slsi[size - 6] = slv.getErrorSceneNum();
-            slsi[size - 5] = slv.getNotScoredSceneNum();
-            slsi[size - 4] = slv.getNotStandardSceneNum();
-            slsi[size - 3] = slv.getStandardSceneNum();
-            slsi[size - 2] = slv.getLastScore();
-            slsi[size - 1] = slv.getFirstScore();
 
-            list.add(slsi);
-        }
 
+            Map map = getSubScListCombineCoord(subListScoreLi, size);
 
-        Map map = getSubScListCombineCoord(subListScoreLi, size);
+            Map<String, Integer> combineCoordList = (Map<String, Integer>) map.get("combineCoordList");
+            List<String> skipCoordList = (List<String>) map.get("skipCoordList");
 
-        Map<String, Integer> combineCoordList = (Map<String, Integer>) map.get("combineCoordList");
-        List<String> skipCoordList = (List<String>) map.get("skipCoordList");
+            for (int i = 0; i < list.size(); i++) {
+                String[] strings = list.get(i);
+                for (int j = 0; j < strings.length; j++) {
+                    String coord = i + "," + j;
+
+                    //是否要跳过
+                    boolean contains = skipCoordList.contains(coord);
+                    if (contains) {
+                        continue;
+                    }
+                    PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(font)));
+
+                    //是否要合并
+                    Integer n = combineCoordList.get(coord);
+                    if (n != null) {
+                        pdfPCell.setRowspan(n);
+                    }
+
+                    pdfPTable2.addCell(pdfPCell);
 
-        for (int i = 0; i < list.size(); i++) {
-            String[] strings = list.get(i);
-            for (int j = 0; j < strings.length; j++) {
-                String coord = i + "," + j;
 
-                //是否要跳过
-                boolean contains = skipCoordList.contains(coord);
-                if (contains) {
-                    continue;
-                }
-                PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(baseFont)));
-                //是否要合并
-                Integer n = combineCoordList.get(coord);
-                if (n != null) {
-                    pdfPCell.setRowspan(n);
                 }
-                pdfPTable2.addCell(pdfPCell);
             }
-        }
 
-        document.add(pdfPTable2);
+            document.add(pdfPTable2);
 
             /*
             场景得分列表
              */
-        Paragraph sceneScoreElements = new Paragraph(50, "详细得分情况", defaultFont(baseFont));
-        sceneScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
-        document.add(sceneScoreElements);
-
-        setBlankLineSpacing(20, baseFont, document);
+            Paragraph sceneScoreElements = new Paragraph(50, "详细得分情况", defaultFont(font));
+            sceneScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
+            document.add(sceneScoreElements);
 
-        List<Map> scoreLiTitle = vo.getSceneScoreLiTitle();
-        int size2 = scoreLiTitle.size();
-        PdfPTable pdfPTable3 = new PdfPTable(size2);
-        pdfPTable3.setHeaderRows(1);
-        String[] slt2 = new String[size2];
-        for (int i = 0; i < size2; i++) {
-            slt2[i] = scoreLiTitle.get(i).get("label").toString();
-        }
-        addTitleList(pdfPTable3, baseFont, slt2);
-        List<SceneScListVo> sceneScoreLi = vo.getSceneScoreLi();
+            setBlankLineSpacing(20, font, document);
 
-        List<String[]> list2 = new ArrayList<>();
-
-        for (SceneScListVo sslv : sceneScoreLi) {
-            String[] ssli = new String[size2];
+            List<Map> scoreLiTitle = vo.getSceneScoreLiTitle();
+            int size2 = scoreLiTitle.size();
+            PdfPTable pdfPTable3 = new PdfPTable(size2);
+            pdfPTable3.setHeaderRows(1);
+            String[] slt2 = new String[size2];
             for (int i = 0; i < size2; i++) {
-                ssli[i] = "";
+                slt2[i] = scoreLiTitle.get(i).get("label").toString();
             }
-            //目前最多支持到6级指标
-            for (int i = 0; i < size2 - 5; i++) {
-                if (i == 0) {
-                    if (sslv.getSublistName1() != null) {
-                        ssli[i] = sslv.getSublistName1();
-                    }
+            addTitleList(pdfPTable3, font, slt2);
+            List<SceneScListVo> sceneScoreLi = vo.getSceneScoreLi();
 
-                } else if (i == 1) {
-                    if (sslv.getSublistName2() != null) {
-                        ssli[i] = sslv.getSublistName2();
-                    }
+            List<String[]> list2 = new ArrayList<>();
 
-                } else if (i == 2) {
-                    if (sslv.getSublistName3() != null) {
-                        ssli[i] = sslv.getSublistName3();
-                    }
+            for (SceneScListVo sslv : sceneScoreLi) {
+                String[] ssli = new String[size2];
+                for (int i = 0; i < size2; i++) {
+                    ssli[i] = "";
+                }
+                //目前最多支持到6级指标
+                for (int i = 0; i < size2 - 5; i++) {
+                    if (i == 0) {
+                        if (sslv.getSublistName1() != null) {
+                            ssli[i] = sslv.getSublistName1();
+                        }
 
-                } else if (i == 3) {
-                    if (sslv.getSublistName4() != null) {
-                        ssli[i] = sslv.getSublistName4();
-                    }
+                    } else if (i == 1) {
+                        if (sslv.getSublistName2() != null) {
+                            ssli[i] = sslv.getSublistName2();
+                        }
 
-                } else if (i == 4) {
-                    if (sslv.getSublistName5() != null) {
-                        ssli[i] = sslv.getSublistName5();
-                    }
+                    } else if (i == 2) {
+                        if (sslv.getSublistName3() != null) {
+                            ssli[i] = sslv.getSublistName3();
+                        }
 
-                } else if (i == 5) {
-                    if (sslv.getSublistName6() != null) {
-                        ssli[i] = sslv.getSublistName6();
-                    }
+                    } else if (i == 3) {
+                        if (sslv.getSublistName4() != null) {
+                            ssli[i] = sslv.getSublistName4();
+                        }
+
+                    } else if (i == 4) {
+                        if (sslv.getSublistName5() != null) {
+                            ssli[i] = sslv.getSublistName5();
+                        }
+
+                    } else if (i == 5) {
+                        if (sslv.getSublistName6() != null) {
+                            ssli[i] = sslv.getSublistName6();
+                        }
 
+                    }
                 }
+                ssli[size2 - 5] = sslv.getSceneId();
+                ssli[size2 - 4] = sslv.getSceneIdType();
+                ssli[size2 - 3] = sslv.getSceneScore();
+                ssli[size2 - 2] = sslv.getTargetEvaluate();
+                ssli[size2 - 1] = sslv.getScoreExplain();
+
+                list2.add(ssli);
+
+//                addDataList(pdfPTable3, font, ssli);
             }
-            ssli[size2 - 5] = sslv.getSceneId();
-            ssli[size2 - 4] = sslv.getSceneIdType();
-            ssli[size2 - 3] = sslv.getSceneScore();
-            ssli[size2 - 2] = sslv.getTargetEvaluate();
-            ssli[size2 - 1] = sslv.getScoreExplain();
 
-            list2.add(ssli);
+            Map map2 = getSceneScListCombineCoord(sceneScoreLi, size2);
 
-        }
+            Map<String, Integer> combineCoordList2 = (Map<String, Integer>) map2.get("combineCoordList");
+            List<String> skipCoordList2 = (List<String>) map2.get("skipCoordList");
 
-        Map map2 = getSceneScListCombineCoord(sceneScoreLi, size2);
+            boolean b2 = false;
+            int num2 = 0;
+            for (int i = 0; i < list2.size(); i++) {
+                String[] strings = list2.get(i);
+                for (int j = 0; j < strings.length; j++) {
+                    String coord = i + "," + j;
 
-        Map<String, Integer> combineCoordList2 = (Map<String, Integer>) map2.get("combineCoordList");
-        List<String> skipCoordList2 = (List<String>) map2.get("skipCoordList");
+                    //是否要跳过
+                    boolean contains = skipCoordList2.contains(coord);
+                    if (contains) {
+                        continue;
+                    }
+                    PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(font)));
+                    //是否要合并
+                    Integer n = combineCoordList2.get(coord);
+                    if (n != null) {
+                        pdfPCell.setRowspan(n);
+                    }
+
+                    pdfPTable3.addCell(pdfPCell);
 
-        for (int i = 0; i < list2.size(); i++) {
-            String[] strings = list2.get(i);
-            for (int j = 0; j < strings.length; j++) {
-                String coord = i + "," + j;
 
-                //是否要跳过
-                boolean contains = skipCoordList2.contains(coord);
-                if (contains) {
-                    continue;
-                }
-                PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(baseFont)));
-                //是否要合并
-                Integer n = combineCoordList2.get(coord);
-                if (n != null) {
-                    pdfPCell.setRowspan(n);
                 }
+            }
 
-                pdfPTable3.addCell(pdfPCell);
+            document.add(pdfPTable3);
 
 
+        } catch (Exception e) {
+            e.printStackTrace();
+
+        } finally {
+            document.close();
+            try {
+                os.close();
+            } catch (IOException e) {
+                e.printStackTrace();
             }
         }
-        document.add(pdfPTable3);
-        document.close();
+
     }