From f891000086af5ac150fc120e1f3c781266f1d063 Mon Sep 17 00:00:00 2001 From: wzp <2040239371@qq.com> Date: 星期三, 21 八月 2024 17:13:57 +0800 Subject: [PATCH] 优化LAQ全景图图表,使用python生成 --- src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java | 193 ++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 179 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java b/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java index 46fdc78..a9206b4 100644 --- a/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java +++ b/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java @@ -1,21 +1,25 @@ package com.ots.project.tool.report.APIFan.chart; +import com.ots.framework.config.EssConfig; import com.ots.project.tool.report.MAQ.base.RowData; import com.ots.project.tool.report.MAQ.base.SeriesData; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ooxml.POIXMLDocument; import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.util.Units; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.apache.poi.xwpf.usermodel.XWPFChart; -import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.drawingml.x2006.chart.*; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.math.BigInteger; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -40,7 +44,7 @@ //鑷垜璁ょ煡鍑嗙‘搴� private static String p_sdecepT1; - private static String p_sdecept10; + private static String p_sdecep10; //鑷垜闃愯堪鐨勭湡瀹炲害 private static String p_impmgT1; private static String p_impmg11; @@ -66,11 +70,12 @@ textMap.put("P_Emotct07","60"); textMap.put("P_Stress08","61"); textMap.put("P_SdecepT1","62"); - textMap.put("P_Sdecept10","63"); + textMap.put("P_Sdecep10","63"); textMap.put("P_ImpmgT1","64"); textMap.put("P_Impmg11","65"); textMap.put("BST1","66"); textMap.put("BST2","67"); + textMap.put("Box","1"); changeChart(document,textMap); document.write(os); }catch (Exception e){ @@ -91,7 +96,161 @@ return false; } //鍥捐〃鏁版嵁 - changePAQChart(document,seriesDatas); + changeAPIFanChart(document,seriesDatas); + + + //鏇挎崲鍥剧墖 + try{ + // 鑾峰彇鎵�鏈夋钀� + List<XWPFParagraph> paragraphs = document.getParagraphs(); + + //鑾峰彇鍥剧墖璺緞 + String selectedPic = EssConfig.getReportTemplates()+"apifanSelected.png"; + String defaultPic =EssConfig.getReportTemplates()+"apifanDefalut.png"; + + //娴嬭瘯鐢ㄧ殑 +// String selectedPic = "C:\\娴嬭瘎绯荤粺\\home\\reportTemplates\\apifanSelected.png"; +// String defaultPic ="C:\\娴嬭瘎绯荤粺\\home\\reportTemplates\\apifanDefalut.png"; + + + // 閬嶅巻娈佃惤杩涜鏇挎崲鎿嶄綔 + synchronized (paragraphs) { + for (XWPFParagraph paragraph : paragraphs) { + String text = paragraph.getText(); + + //鐢�%%鍙峰湪鍓嶉潰琚浛鎹簡 + if (text.contains("{{box0}}")) { // 妫�鏌ユ槸鍚﹀寘鍚鏇挎崲鐨勬枃瀛楀彉閲� + String picturePath = ""; // 鍥剧墖璺緞 + + String Box = (String) textMap.get("Box"); + int box = Integer.parseInt(Box); + if(box== 0) + { + picturePath =selectedPic; + } + else + { + picturePath = defaultPic; + } + + // 鍒涘缓鏂扮殑鍥剧墖娈佃惤 +// XWPFParagraph paragraph = document.createParagraph(); + // 鑾峰彇鎵�鏈夎繍琛岀殑鍒楄〃 + List<XWPFRun> runs = paragraph.getRuns(); + // 绉婚櫎鎵�鏈夎繍琛� + for (int i = runs.size() - 1; i >= 0 ; i--) { + paragraph.removeRun(i); + } + // 鍒涘缓鍥剧墖瀵硅薄 + XWPFRun run = paragraph.createRun(); + int pictureType = Document.PICTURE_TYPE_PNG; // 鍥剧墖绫诲瀷 + + // 灏嗗浘鐗囨彃鍏ュ埌娈佃惤涓� + int width = Units.toEMU(20); // 鍥剧墖瀹藉害 + int height = Units.toEMU(20); // 鍥剧墖楂樺害 + run.addPicture(new FileInputStream(picturePath), pictureType, "image.png", width, height); + + // 娣诲姞绌烘牸鎴栧埗琛ㄧ锛屼娇鏂囨湰灞呬腑瀵归綈 + int numberOfSpaces = 3; + for (int i = 0; i < numberOfSpaces; i++) { + run.setText(" "); + } + // 璁剧疆瀛楃闂磋窛涓哄眳涓榻� + paragraph.setVerticalAlignment(TextAlignment.CENTER); + run.setText("缁撴灉鍙俊锛屽彲浠ョ洿鎺ヨВ璇伙紙娴嬭瘯涓湭鍙戠幇鏄庢樉鐨勨�滀吉瑁呭ソ鈥濆�惧悜锛�"); + + } + if (text.contains("{{box1}}")) { // 妫�鏌ユ槸鍚﹀寘鍚鏇挎崲鐨勬枃瀛楀彉閲� + String picturePath = ""; // 鍥剧墖璺緞 + + String Box = (String) textMap.get("Box"); + int box = Integer.parseInt(Box); + if(box== 1) + { + picturePath =selectedPic; + } + else + { + picturePath = defaultPic; + } + + // 鍒涘缓鏂扮殑鍥剧墖娈佃惤 +// XWPFParagraph paragraph = document.createParagraph(); + // 鑾峰彇鎵�鏈夎繍琛岀殑鍒楄〃 + List<XWPFRun> runs = paragraph.getRuns(); + // 绉婚櫎鎵�鏈夎繍琛� + for (int i = runs.size() - 1; i >= 0 ; i--) { + paragraph.removeRun(i); + } + // 鍒涘缓鍥剧墖瀵硅薄 + XWPFRun run = paragraph.createRun(); + int pictureType = Document.PICTURE_TYPE_PNG; // 鍥剧墖绫诲瀷 + + // 灏嗗浘鐗囨彃鍏ュ埌娈佃惤涓� + int width = Units.toEMU(20); // 鍥剧墖瀹藉害 + int height = Units.toEMU(20); // 鍥剧墖楂樺害 + run.addPicture(new FileInputStream(picturePath), pictureType, "image.png", width, height); + // 娣诲姞绌烘牸鎴栧埗琛ㄧ锛屼娇鏂囨湰灞呬腑瀵归綈 + int numberOfSpaces = 3; + for (int i = 0; i < numberOfSpaces; i++) { + run.setText(" "); + } + // 璁剧疆瀛楃闂磋窛涓哄眳涓榻� + paragraph.setVerticalAlignment(TextAlignment.CENTER); + run.setText("缁撴灉涓嶅彲淇★紙娴嬭瘯涓湁鏄庢樉鐨勨�滀吉瑁呭ソ鈥濆�惧悜锛�"); + + } + if (text.contains("{{box2}}")) { // 妫�鏌ユ槸鍚﹀寘鍚鏇挎崲鐨勬枃瀛楀彉閲� + String picturePath = ""; // 鍥剧墖璺緞 + + String Box = (String) textMap.get("Box"); + int box = Integer.parseInt(Box); + if(box== 2) + { + picturePath =selectedPic; + } + else + { + picturePath = defaultPic; + } + + // 鍒涘缓鏂扮殑鍥剧墖娈佃惤 +// XWPFParagraph paragraph = document.createParagraph(); + // 鑾峰彇鎵�鏈夎繍琛岀殑鍒楄〃 + List<XWPFRun> runs = paragraph.getRuns(); + // 绉婚櫎鎵�鏈夎繍琛� + for (int i = runs.size() - 1; i >= 0 ; i--) { + paragraph.removeRun(i); + } + // 鍒涘缓鍥剧墖瀵硅薄 + XWPFRun run = paragraph.createRun(); + int pictureType = Document.PICTURE_TYPE_PNG; // 鍥剧墖绫诲瀷 + + // 灏嗗浘鐗囨彃鍏ュ埌娈佃惤涓� + int width = Units.toEMU(20); // 鍥剧墖瀹藉害 + int height = Units.toEMU(20); // 鍥剧墖楂樺害 + run.addPicture(new FileInputStream(picturePath), pictureType, "image.png", width, height); + // 娣诲姞绌烘牸鎴栧埗琛ㄧ锛屼娇鏂囨湰灞呬腑瀵归綈 + int numberOfSpaces = 3; + for (int i = 0; i < numberOfSpaces; i++) { + run.setText(" "); + } + // 璁剧疆瀛楃闂磋窛涓哄眳涓榻� + paragraph.setVerticalAlignment(TextAlignment.CENTER); + run.setText("缁撴灉鍙兘鍙俊锛岃В璇绘椂瑕佽皑鎱庯紙娴嬭瘯涓湁涓�瀹氱殑鈥滀吉瑁呭ソ鍊惧悜鈥濓級"); + + } + } + } + + + + } + catch (Exception ex) + { + System.out.println(ex.getMessage()); + } + return true; } @@ -129,14 +288,14 @@ p_stress08 = (String) textMap.get("P_Stress08"); p_sdecepT1 = (String) textMap.get("P_SdecepT1"); - p_sdecept10 = (String) textMap.get("P_Sdecept10"); + p_sdecep10 = (String) textMap.get("P_Sdecep10"); p_impmgT1 = (String) textMap.get("P_ImpmgT1"); p_impmg11 = (String) textMap.get("P_Impmg11"); bst1 = (String) textMap.get("BST1"); bst2 = (String) textMap.get("BST2"); String[] paramValue = new String[]{p_total, p_retent09, p_social01,p_cooper02,p_analth03,p_initia04, - p_persis05,p_depend06,p_emotct07,p_stress08,p_sdecepT1, p_sdecept10,p_impmgT1,p_impmg11,bst1,bst2}; + p_persis05,p_depend06,p_emotct07,p_stress08,p_sdecepT1, p_sdecep10,p_impmgT1,p_impmg11,bst1,bst2}; //鍒ゆ柇鏄惁涓虹┖ if (checkParamsIsNull(paramValue)) @@ -157,7 +316,7 @@ Double P_Emotct07 = Double.valueOf(p_emotct07); Double P_Stress08 = Double.valueOf(p_stress08); Double P_SdecepT1 = Double.valueOf(p_sdecepT1); - Double P_Sdecept10 = Double.valueOf(p_sdecept10); + Double P_Sdecep10 = Double.valueOf(p_sdecep10); Double P_ImpmgT1 = Double.valueOf(p_impmgT1); Double P_Impmg11 = Double.valueOf(p_impmg11); Double BST1 = Double.valueOf(bst1); @@ -179,7 +338,7 @@ )), new SeriesData("鑷垜璁ょ煡鐨勫噯纭害", Arrays.asList( - new RowData("鑷垜璁ょ煡鐨勫噯纭害", P_Sdecept10),//椤哄簭瑕佸�掔疆 + new RowData("鑷垜璁ょ煡鐨勫噯纭害", P_Sdecep10),//椤哄簭瑕佸�掔疆 new RowData("鑷垜璁ょ煡鐨勫噯纭害", P_SdecepT1)//椤哄簭瑕佸�掔疆 )), @@ -204,7 +363,7 @@ * @param doc * @param seriesDatas */ - public static void changePAQChart(XWPFDocument doc,List<SeriesData> seriesDatas) { + public static void changeAPIFanChart(XWPFDocument doc,List<SeriesData> seriesDatas) { try { //鍔ㄦ�佸埛鏂板浘琛� List<POIXMLDocumentPart> relations = doc.getRelations(); @@ -219,24 +378,30 @@ // excel鍐呯疆琛ㄦ牸 XSSFWorkbook workbook = chart.getWorkbook(); XSSFSheet sheet = workbook.getSheetAt(0); - + String sheetName = sheet.getSheetName(); //鏌卞舰鍥� if (!plot.getBarChartList().isEmpty()) { CTBarChart barChart = plot.getBarChartArray(0); //鍒锋柊鍐呯疆excel鏁版嵁 List<SeriesData> excelData = new ArrayList<>(); - excelData.add(seriesDatas.get(k)); + //excelData.add(seriesDatas.get(k)); + //閫氳繃sheetName鏉ヨВ鍐冲尮閰嶅琛ㄧ殑闂 + SeriesData seriesData = seriesDatas.stream() + .filter(item -> item.getName().equals(sheetName)) + .findFirst() + .orElse(null); + excelData.add(seriesData); refreshExcel(excelData, workbook, sheet); workbook.write(chart.getPackagePart().getOutputStream()); //鏌卞舰鍥炬暟鎹簮 - List<SeriesData> barDatas = seriesDatas; +// List<SeriesData> barDatas = seriesDatas; int i = 0; for (CTBarSer ser : barChart.getSerList()) { //鏇存柊鏌卞舰鍥炬暟鎹紦瀛� - updateBarChart(barDatas.get(k), ser.getVal()); + updateBarChart(seriesData, ser.getVal()); ++i; } -- Gitblit v1.9.1