From 423fa581b48ef7799dd3f6f531f9ea5920bbaa63 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Tue, 18 Mar 2025 13:45:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AdHarmonicServiceImpl.java | 4 + system/pom.xml | 11 ++ .../dictionary/pojo/enums/DictDataEnum.java | 2 +- .../service/impl/SysLogAuditServiceImpl.java | 108 +++++++++++++++++- 4 files changed, 120 insertions(+), 5 deletions(-) diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java index 547e0d8c..121659d3 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java @@ -83,6 +83,8 @@ public class AdHarmonicServiceImpl extends ServiceImplfastjson 1.2.83 + + + org.apache.poi + poi-ooxml + 5.2.3 + + + org.apache.poi + poi-ooxml-full + 5.2.3 + diff --git a/system/src/main/java/com/njcn/gather/system/dictionary/pojo/enums/DictDataEnum.java b/system/src/main/java/com/njcn/gather/system/dictionary/pojo/enums/DictDataEnum.java index aae287b1..9a7815e7 100644 --- a/system/src/main/java/com/njcn/gather/system/dictionary/pojo/enums/DictDataEnum.java +++ b/system/src/main/java/com/njcn/gather/system/dictionary/pojo/enums/DictDataEnum.java @@ -33,7 +33,7 @@ public enum DictDataEnum { */ I2_50("谐波电流幅值", "I2-50"), SI_1_49("间谐波电流幅值", "SI_1-49"), - + P2_50("谐波有功功率", "P2-50") ; diff --git a/system/src/main/java/com/njcn/gather/system/log/service/impl/SysLogAuditServiceImpl.java b/system/src/main/java/com/njcn/gather/system/log/service/impl/SysLogAuditServiceImpl.java index fe9ca5c1..7737b2ab 100644 --- a/system/src/main/java/com/njcn/gather/system/log/service/impl/SysLogAuditServiceImpl.java +++ b/system/src/main/java/com/njcn/gather/system/log/service/impl/SysLogAuditServiceImpl.java @@ -13,13 +13,18 @@ import com.njcn.gather.system.log.pojo.param.SysLogParam; import com.njcn.gather.system.log.pojo.po.SysLogAudit; import com.njcn.gather.system.log.service.ISysLogAuditService; import com.njcn.gather.system.log.util.CSVUtil; -import com.njcn.gather.user.user.service.ISysUserService; import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.HttpServletUtil; import com.njcn.web.utils.RequestUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.xddf.usermodel.chart.*; +import org.apache.poi.xssf.usermodel.XSSFChart; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -53,7 +58,8 @@ public class SysLogAuditServiceImpl extends ServiceImpl(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), queryWrapper); } @@ -142,12 +148,12 @@ public class SysLogAuditServiceImpl extends ServiceImpl list = this.list(queryWrapper); - Map> collect = list.stream().collect(Collectors.groupingBy(SysLogAudit::getCreateBy, Collectors.toList())); + Map collect = list.stream().collect(Collectors.groupingBy(SysLogAudit::getCreateBy, Collectors.counting())); this.exportAnalyseExcel("分析结果", collect); } - private void exportAnalyseExcel(String fileName, Map> collect) { + private void exportAnalyseExcel(String fileName, Map collect) { HttpServletResponse response = HttpServletUtil.getResponse(); XSSFWorkbook wb = new XSSFWorkbook(); @@ -157,7 +163,9 @@ public class SysLogAuditServiceImpl extends ServiceImpl>> 导出数据异常:{}", e.getMessage()); } } + + /** + * 创建饼图 + * + * @param sheet + * @param categoryList + * @param sheetDataList + */ + private void createPieChart(XSSFSheet sheet, List categoryList, List sheetDataList) { + int row1 = 0; + int row2 = 8; + int col1 = 0; + int col2 = 30; + // 设置图表列宽 + for (int i = 0; i < row2; i++) { + sheet.setColumnWidth(i, 6000); + } + //y轴显示数据 + String[] headArray = categoryList.stream().collect(Collectors.toList()).toArray(new String[]{}); + + // Create a chart + XSSFDrawing drawing = sheet.createDrawingPatriarch(); + ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, col1, row1, row2, col2); + XSSFChart chart = drawing.createChart(anchor); + //标题是否覆盖图表 + chart.setTitleOverlay(false); + //设置图表标题 + chart.setTitleText("分析结果"); + // 创建图表系列 + XDDFChartLegend legend = chart.getOrAddLegend(); + legend.setPosition(LegendPosition.TOP); + + //动态数据 + //x轴数据 + XDDFDataSource xData = XDDFDataSourcesFactory.fromArray(headArray); + //饼图数据 + XDDFPieChartData data = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null); + data.setVaryColors(true); + + Double[] yArray = sheetDataList.stream().collect(Collectors.toList()).toArray(new Double[]{}); + //y轴数据 + XDDFNumericalDataSource yData = XDDFDataSourcesFactory.fromArray(yArray); + XDDFChartData.Series series = data.addSeries(xData, yData); + + //series.setTitle("title", null); + series.setShowLeaderLines(true); + // 隐藏图例标识、系列名称、分类名称和数值 + XDDFPieChartData.Series s = (XDDFPieChartData.Series) series; + CTPieSer ctPieSer = s.getCTPieSer(); + showCateName(ctPieSer, false); + showVal(ctPieSer, false); + showLegendKey(ctPieSer, false); + showSerName(ctPieSer, false); + + chart.plot(data); + } + + // 控制值系列名称是否显示 + private void showSerName(CTPieSer series, boolean val) { + if (series.getDLbls().isSetShowSerName()) { + series.getDLbls().getShowSerName().setVal(val); + } else { + series.getDLbls().addNewShowSerName().setVal(val); + } + } + + // 控制分类名称是否显示 + private void showCateName(CTPieSer series, boolean val) { + if (series.getDLbls().isSetShowCatName()) { + series.getDLbls().getShowCatName().setVal(val); + } else { + series.getDLbls().addNewShowCatName().setVal(val); + } + } + + // 控制值是否显示 + private void showVal(CTPieSer series, boolean val) { + if (series.getDLbls().isSetShowVal()) { + series.getDLbls().getShowVal().setVal(val); + } else { + series.getDLbls().addNewShowVal().setVal(val); + } + } + + // 控制图例标识是否显示 + private void showLegendKey(CTPieSer series, boolean val) { + if (series.getDLbls().isSetShowLegendKey()) { + series.getDLbls().getShowLegendKey().setVal(val); + } else { + series.getDLbls().addNewShowLegendKey().setVal(val); + } + } }