summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2024-08-13 18:47:40 +0800
committershizhendong <[email protected]>2024-08-13 18:47:40 +0800
commit7988de7a1f8d677854551bb9a32928bb77393833 (patch)
tree805738deb5099e7110d41a72d17d4eb3d4163a72
parent4e8bfd74c2828949108d9b04d7058c4a78a0b999 (diff)
fix: OMPUB-1405 取消使用 数据透析表 统计告警消息计数,改为通过代码统计rel-24.01.27
-rw-r--r--nz-admin/src/main/java/com/nis/common/utils/ExcelUtils.java9
-rw-r--r--nz-admin/src/main/java/com/nis/modules/alert/service/impl/AlertHandlerServiceImpl.java109
2 files changed, 107 insertions, 11 deletions
diff --git a/nz-admin/src/main/java/com/nis/common/utils/ExcelUtils.java b/nz-admin/src/main/java/com/nis/common/utils/ExcelUtils.java
index 4096b8e3..b758eace 100644
--- a/nz-admin/src/main/java/com/nis/common/utils/ExcelUtils.java
+++ b/nz-admin/src/main/java/com/nis/common/utils/ExcelUtils.java
@@ -5,6 +5,7 @@ import cn.hutool.core.io.FileMagicNumber;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
+import cn.hutool.poi.excel.cell.setters.CellSetterFactory;
import com.nis.common.exception.NZException;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
@@ -296,4 +297,12 @@ public class ExcelUtils {
return work;
}
+ public static void setCellValue(Cell cell, Object value, CellStyle cellStyle) {
+ if (null != cell) {
+ CellSetterFactory.createCellSetter(value).setValue(cell);
+ if (null != cellStyle) {
+ cell.setCellStyle(cellStyle);
+ }
+ }
+ }
}
diff --git a/nz-admin/src/main/java/com/nis/modules/alert/service/impl/AlertHandlerServiceImpl.java b/nz-admin/src/main/java/com/nis/modules/alert/service/impl/AlertHandlerServiceImpl.java
index b99e7865..7ceccf15 100644
--- a/nz-admin/src/main/java/com/nis/modules/alert/service/impl/AlertHandlerServiceImpl.java
+++ b/nz-admin/src/main/java/com/nis/modules/alert/service/impl/AlertHandlerServiceImpl.java
@@ -42,16 +42,12 @@ import com.nis.modules.tool.service.FullTextSearchService;
import com.nis.setup.controller.TimezoneController;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.SpreadsheetVersion;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.DataConsolidateFunction;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference;
-import org.apache.poi.xssf.usermodel.XSSFPivotTable;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -630,14 +626,14 @@ public class AlertHandlerServiceImpl implements AlertHandlerService {
// PivotSheet
if (Tool.CollUtil.isNotEmpty(exportDataList)) {
String datasheetName = dataSheet.getSheetName();
- String pivotSheetName = "Statistic";
+ String statSheetName = "Statistics";
- // 创建数据透视表
- this.createPivotTable(workbook, datasheetName, pivotSheetName);
+ // 创建 Statistic 统计 sheet
+ this.createStatisticSheet(workbook, statSheetName, exportDataList);
// 调整顺序 Statistic - Datasheet
workbook.setSheetOrder(datasheetName, 1);
- workbook.setSheetOrder(pivotSheetName, 0);
+ workbook.setSheetOrder(statSheetName, 0);
}
// response
@@ -651,8 +647,99 @@ public class AlertHandlerServiceImpl implements AlertHandlerService {
}
/**
+ * 创建统计表
+ */
+ private void createStatisticSheet(XSSFWorkbook workbook, String statSheetName, List<List<String>> alertMsgDataList) {
+ log.info("[createStatisticSheet] [begin]");
+ // Rule - Asset
+ Map<String, Map<String, Long>> originalCountMap = alertMsgDataList.parallelStream()
+ .collect(
+ Collectors.groupingBy(
+ record -> record.get(1),
+ Collectors.groupingBy(
+ record -> record.get(6),
+ Collectors.counting()
+ )
+ )
+ );
+
+ // 按名称排序
+ Comparator<String> comparator = (s1, s2) -> {
+ int cmp = s1.toLowerCase().compareTo(s2.toLowerCase());
+ return cmp != 0 ? cmp : s1.compareTo(s2);
+ };
+ Map<String, Map<String, Long>> sortedOuterMap = new TreeMap<>(comparator);
+ sortedOuterMap.putAll(originalCountMap);
+
+ Map<String, Map<String, Long>> ruleAssetCount = new LinkedHashMap<>();
+ for (Map.Entry<String, Map<String, Long>> outerEntry : sortedOuterMap.entrySet()) {
+ Map<String, Long> sortedInnerMap = new TreeMap<>(comparator);
+ sortedInnerMap.putAll(outerEntry.getValue());
+ ruleAssetCount.put(outerEntry.getKey(), sortedInnerMap);
+ }
+
+ // 表头、统计 名称 - 国际化
+ String headerRuleStr = sysI18nService.queryValue("alert.rule");
+ String headerAssetStr = sysI18nService.queryValue("asset.asset");
+ String headercountStr = sysI18nService.queryValue("overall.count");
+ String headerTotalStr = sysI18nService.queryValue("overall.total");
+
+ // header row
+ Font font = workbook.createFont();
+ font.setBold(true);
+
+ XSSFCellStyle hStyle = workbook.createCellStyle();
+ hStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(221, 235, 247)));
+ hStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ hStyle.setFont(font);
+
+ Sheet sheet = workbook.createSheet(statSheetName);
+ Row headerRow = sheet.createRow(0);
+ ExcelUtils.setCellValue(headerRow.createCell(0), StrUtil.emptyToDefault(headerRuleStr, "Rule"), hStyle);
+ ExcelUtils.setCellValue(headerRow.createCell(1), StrUtil.emptyToDefault(headerAssetStr, "Asset"), hStyle);
+ ExcelUtils.setCellValue(headerRow.createCell(2), StrUtil.emptyToDefault(headercountStr, "Count"), hStyle);
+
+ // data row
+ XSSFCellStyle rStyle = workbook.createCellStyle();
+ rStyle.setBorderBottom(BorderStyle.THICK);
+ rStyle.setBottomBorderColor(new XSSFColor(new java.awt.Color(221, 235, 247)));
+ rStyle.setFont(font);
+
+ int rowIndex = 1;
+ for (Map.Entry<String, Map<String, Long>> rEntry : ruleAssetCount.entrySet()) {
+ String ruleName = rEntry.getKey();
+ Map<String, Long> assetCount = rEntry.getValue();
+ long ruleAlertNum = assetCount.values().stream().mapToLong(Long::longValue).sum();
+
+ Row ruleRow = sheet.createRow(rowIndex++);
+ ExcelUtils.setCellValue(ruleRow.createCell(0), ruleName, rStyle);
+ ExcelUtils.setCellValue(ruleRow.createCell(1), "", rStyle);
+ ExcelUtils.setCellValue(ruleRow.createCell(2), ruleAlertNum, rStyle);
+
+ for (Map.Entry<String, Long> aEntry : assetCount.entrySet()) {
+ Row assetRow = sheet.createRow(rowIndex++);
+ assetRow.createCell(0).setCellValue("");
+ assetRow.createCell(1).setCellValue(aEntry.getKey());
+ assetRow.createCell(2).setCellValue(aEntry.getValue());
+ }
+ }
+
+ // total row
+ Row totalRow = sheet.createRow(rowIndex++);
+ ExcelUtils.setCellValue(totalRow.createCell(0), StrUtil.emptyToDefault(headerTotalStr, "Total"), hStyle);
+ ExcelUtils.setCellValue(totalRow.createCell(1), "", hStyle);
+ ExcelUtils.setCellValue(totalRow.createCell(2), alertMsgDataList.size(), hStyle);
+
+ // 自动调整列大小
+ sheet.autoSizeColumn(0);
+ sheet.autoSizeColumn(1);
+ log.info("[createStatisticSheet] [finshed]");
+ }
+
+ /**
* 创建数据透视表
*/
+ @Deprecated
private void createPivotTable(XSSFWorkbook xssfWorkbook, String datasheetName, String pivotSheetName) {
log.info("[createPivotTable] [begin]");
XSSFSheet dataSheet = xssfWorkbook.getSheet(datasheetName);