diff --git a/pom.xml b/pom.xml
index 09193c0..145306f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,17 @@
+
+ org.apache.poi
+ poi
+ 4.1.2
+
+
+ org.apache.poi
+ poi-ooxml
+ 4.1.2
+
+
diff --git a/src/main/java/com/example/device/controller/DeviceStatus.java b/src/main/java/com/example/device/controller/DeviceStatus.java
index ceac7d4..17569d1 100644
--- a/src/main/java/com/example/device/controller/DeviceStatus.java
+++ b/src/main/java/com/example/device/controller/DeviceStatus.java
@@ -2,6 +2,7 @@ package com.example.device.controller;
import com.example.device.entity.Device;
import com.example.device.entity.Status;
import com.example.device.service.DeviceService;
+import com.example.device.service.ExcelExportService;
import com.example.device.service.StatusService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -10,11 +11,15 @@ import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.InetAddress;
import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import java.io.FileOutputStream;
@Component
@EnableScheduling
@@ -25,9 +30,11 @@ public class DeviceStatus {
@Autowired
private StatusService statusService;
+ @Autowired
+ private ExcelExportService excelExportService;
+
- //每天凌晨开始执行,每4小时执行一次
- @Scheduled(cron = "0 33 * * * ?")
+ @Scheduled(cron = "0 51 8 * * ?")
// @Scheduled(cron = "0 0 1,5,7,8,11,14,17,19,21,23")
public void generateDeviceStatus() {
deviceStatus();
@@ -55,12 +62,13 @@ public class DeviceStatus {
System.out.println("Error pinging " + device.getDeviceIp() + ": " + e.getMessage());
}
}
+ calculateSuccessRate();
}
/**
* 计算成功率
*/
- public Map calculateSuccessRate() {
+ public void calculateSuccessRate() {
LocalDateTime todayStart = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
LocalDateTime currentTime = LocalDateTime.now();
@@ -71,18 +79,33 @@ public class DeviceStatus {
status.setStartTime(todayStart);
status.setTime(currentTime);
List listStatus = statusService.list(status);
- Map> map = listStatus.stream().collect(Collectors.groupingBy(Status::getDeviceIp));
-
- for (String ip : map.keySet()) {
+ Map> map = listStatus.stream().collect(Collectors.groupingBy(Status::getDeviceName));
+ for (String name : map.keySet()) {
// 成功的次数
- long successNumber = map.get(ip).stream().filter(item -> item.getDeviceStatus() == 1).count();
+ long successNumber = map.get(name).stream().filter(item -> item.getDeviceStatus() == 1).count();
// 此ip对应的成功率
- String successRate = String.format("%.2f%%", (double) successNumber / map.get(ip).size() * 100);
- ipMap.put(ip, successRate);
+ String successRate = String.format("%.2f%%", (double) successNumber / map.get(name).size() * 100);
+ ipMap.put(name, successRate);
}
-
- return ipMap;
+ String filePath=CreateNamedExcel();
+ excelExportService.exportDataToExcel(ipMap,filePath);
}
+
+ public String CreateNamedExcel() {
+ LocalDateTime dateTime = LocalDateTime.now();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String formattedDateTime = dateTime.format(formatter);
+ String filePath = "/Users/mengfanfeng/Downloads/excel/"+formattedDateTime+"--deviceStatus.xlsx";
+ try (Workbook workbook = new XSSFWorkbook()) {
+ FileOutputStream fileOut = new FileOutputStream(filePath);
+ workbook.write(fileOut);
+ System.out.println("Empty named Excel created successfully.");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return filePath;
+ }
+
}
diff --git a/src/main/java/com/example/device/service/ExcelExportService.java b/src/main/java/com/example/device/service/ExcelExportService.java
new file mode 100644
index 0000000..c0a4bd7
--- /dev/null
+++ b/src/main/java/com/example/device/service/ExcelExportService.java
@@ -0,0 +1,43 @@
+package com.example.device.service;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.stereotype.Service;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.Map;
+
+@Service
+public class ExcelExportService {
+
+ public void exportDataToExcel(Map ipMap, String filePath) {
+ Workbook workbook = new XSSFWorkbook();
+ Sheet sheet = workbook.createSheet("设备故障率");
+ LocalDateTime dateTime = LocalDateTime.now();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String formattedDateTime = dateTime.format(formatter);
+ int rowNum = 0;
+ for (String name : ipMap.keySet()) {
+ Row row = sheet.createRow(rowNum++);
+ row.createCell(0).setCellValue(name);
+ row.createCell(1).setCellValue(ipMap.get(name));
+ row.createCell(2).setCellValue(formattedDateTime);
+ CellStyle style = workbook.createCellStyle();
+ // 应用样式到单元格
+ row.getCell(0).setCellStyle(style);
+ row.getCell(1).setCellStyle(style);
+ row.getCell(2).setCellStyle(style);
+
+ }
+
+ try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
+ workbook.write(outputStream);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
+