From 4fce1788cfb5bc37484060b068daf6303a584058 Mon Sep 17 00:00:00 2001
From: whycxzp <glperry@163.com>
Date: 星期三, 30 四月 2025 14:38:46 +0800
Subject: [PATCH] 表格生成调整

---
 src/main/java/com/whyc/service/ExcelService.java |  125 +++++++++++++++++++++++++++++++++--------
 1 files changed, 100 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/whyc/service/ExcelService.java b/src/main/java/com/whyc/service/ExcelService.java
index cbba9d6..9d16272 100644
--- a/src/main/java/com/whyc/service/ExcelService.java
+++ b/src/main/java/com/whyc/service/ExcelService.java
@@ -22,7 +22,9 @@
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 @Service
@@ -317,29 +319,65 @@
         XSSFCell cellOfSheet4 = sheet4.createRow(0).createCell(0);
         cellOfSheet4.setCellValue( battInfo.getPowerName()+ battInfo.getBattGroupName()+"娓╁害鏁版嵁");
 
-        int columnCount = 2;
+        //30澶�+2鍒楀叾浠栧垪
+        int columnCount = 30+2;
         //鏌ヨ鍘嗗彶瀹炴椂琛�. 瀛樺湪鐨勬湀浠�. 濡傛灉瀛樺湪鐨勮瘽,鍙栫涓�绗旇褰�(104鏉�)
         //棣栧厛鏌ヨ褰撳墠鏈堜唤瀵瑰簲鐨勬棩鏈�
         List<String> tableListLike = commonMapper.getTableListLike("db_power_history", "tb_batt_realdata_"+battGroupId);
-        //褰撳墠鏈堜唤寰�鍓嶆帹11涓湀
+        //鑾峰彇褰撳墠鏃ユ湡寰�鍓�30澶╃殑鍑屾櫒闆剁鐨勬暟鎹�. 寰�鍓嶆帹30澶�
         List<String> tableListInDB = new ArrayList<>();
         Calendar calendar = Calendar.getInstance();
-        for (int i = 0; i < 12; i++) {
-            int year = calendar.get(Calendar.YEAR);
-            int month = calendar.get(Calendar.MONTH) + 1;
-            String monthStr;
-            if (month < 10) {
-                monthStr = "0" + month;
-            } else {
-                monthStr = String.valueOf(month);
-            }
-            if (tableListLike.contains("tb_batt_realdata_" + battGroupId + "_" + year + "_" + monthStr)) {
-                //瀛樺湪,鍒楁暟+1
-                columnCount++;
-                tableListInDB.add("tb_batt_realdata_" + battGroupId + "_" + year + "_" + monthStr);
-            }
-            calendar.add(Calendar.MONTH, -1);
+        int year = calendar.get(Calendar.YEAR);
+        int month = calendar.get(Calendar.MONTH) + 1;
+        String monthStr;
+        if (month < 10) {
+            monthStr = "0" + month;
+        } else {
+            monthStr = String.valueOf(month);
         }
+        //褰撳墠鏃堕棿寰�鍓�30澶�
+        calendar.add(Calendar.DAY_OF_MONTH, -30);
+        Date timeAgo = calendar.getTime();
+        int yearAgo = calendar.get(Calendar.YEAR);
+        int monthAgo = calendar.get(Calendar.MONTH) + 1;
+        String monthAgoStr;
+        if (monthAgo < 10) {
+            monthAgoStr = "0" + (monthAgo);
+        } else {
+            monthAgoStr = String.valueOf(monthAgo);
+        }
+        String tableName  = "tb_batt_realdata_" + battGroupId + "_" + year + "_" + monthStr;
+        //30澶╁墠鐨勬椂闂�
+        String tableNameAgo = "tb_batt_realdata_" + battGroupId + "_" + yearAgo + "_" + monthAgoStr;
+        if (tableListLike.contains(tableName)) {
+            tableListInDB.add(tableName);
+        }
+        if (tableListLike.contains(tableNameAgo)) {
+            tableListInDB.add(tableNameAgo);
+        }
+
+        //鑾峰彇鎵�鏈夋暟鎹�
+        List<BattRealTimeDataHistory> dataList = new ArrayList<>();
+        for (int i = 0; i < tableListInDB.size(); i++) {
+            String tableNameTmp = tableListInDB.get(i);
+            List<BattRealTimeDataHistory> list;
+            if(tableNameTmp.equals(tableName)){
+                list = battRTDataHisService.getFirstRecordListOfDay(tableNameTmp, null);
+            }else{
+                //璇存槑鏄笂涓湀鐨勮褰�,闇�瑕佽褰曟椂闂村ぇ浜�30澶╁墠鐨勬椂闂�
+                list = battRTDataHisService.getFirstRecordListOfDay(tableNameTmp, timeAgo);
+            }
+            dataList.addAll(list);
+        }
+        //鎸夋椂闂存帓搴忓拰鍒嗙粍
+        dataList.sort(Comparator.comparing(BattRealTimeDataHistory::getRecordTime));
+        Map<Date, List<BattRealTimeDataHistory>> dataListMap = dataList.stream().collect(Collectors.groupingBy(BattRealTimeDataHistory::getRecordTime));
+        Set<Date> dateKeySet = dataListMap.keySet();
+        dataListMap.forEach((key,data)->{
+            addStatistics(data, "tmp");
+        });
+        //缁欏垪鏁拌祴鍊�
+        columnCount = dateKeySet.size()+2;
 
         //鍒楁牴鎹疄闄呮儏鍐靛彉鍔�
         sheet4.addMergedRegion(new CellRangeAddress(0, 0,  0, columnCount-1));
@@ -348,7 +386,7 @@
             if(j==0){
                 sheet4.setColumnWidth(j, 170 * 20);
             }else {
-                sheet4.setColumnWidth(j, 128 * 20);
+                sheet4.setColumnWidth(j, 138 * 20);
             }
         }
         //琛屽
@@ -380,24 +418,42 @@
                 } else if (i == 107) {
                     sheet4.createRow(i + 2).createCell(0).setCellValue("鍗曡妭鏈�灏忔俯搴�");
                 }else if (i == 108) {
-                    sheet4.createRow(i + 2).createCell(0).setCellValue("鍗曡妭鏈�澶ф俯搴�");
+                    sheet4.createRow(i + 2).createCell(0).setCellValue("鍗曡妭鏈�澶у樊鍊�");
                 }
             }
         }
         //鍒涘缓绗笁琛�
         XSSFRow row2OfSheet4 = sheet4.createRow(2);
-
+        row2OfSheet4.setHeightInPoints(40);
         sheet4.getRow(0).createCell(columnCount-1);
-        for (int i = 0; i <= tableListInDB.size(); i++) { //杩欎釜鏄垪鐨勯亶鍘�
-            if (i == tableListInDB.size()) {
+
+        //濉厖鏁版嵁鍒�,key鏄垪鏃ユ湡. value鏄垪鏁版嵁
+        AtomicInteger count = new AtomicInteger();
+        dataListMap.forEach((key, value) -> {
+            //绗笁琛屾椂闂村垪濉厖
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss");
+            row2OfSheet4.createCell(count.get() + 1).setCellValue(format.format(key));
+            for (int j = 1; j <= 108; j++) { //杩欎釜鏄鐨勯亶鍘�
+                sheet4.getRow(j + 2).createCell(count.get() + 1).setCellValue(value.get(j - 1).getMonTmp());
+            }
+            count.getAndIncrement();
+        });
+        //鏈�鍚庝竴鍒楀娉�:鍏ㄩ儴濉┖
+        row2OfSheet4.createCell(columnCount-1);
+        for (int j = 1; j <= 108; j++) { //杩欎釜鏄鐨勯亶鍘�
+            sheet4.getRow(j + 2).createCell(columnCount-1);
+        }
+
+        /*for (int i = 0; i < columnCount; i++) { //杩欎釜鏄垪鐨勯亶鍘�
+            if (i == columnCount - 1) {
                 //鏈�鍚庝竴鍒楀娉�:鍏ㄩ儴濉┖
                 row2OfSheet4.createCell(i + 1);
                 for (int j = 1; j <= 108; j++) { //杩欎釜鏄鐨勯亶鍘�
-                    sheet4.getRow(j + 2).createCell(i + 1);
+                    sheet4.getRow(j + 2).createCell(i );
                 }
             } else {
                 //鑾峰彇鏁版嵁
-                List<BattRealTimeDataHistory> list = battRTDataHisService.getFirstRecordList(tableListInDB.get(i));
+                List<BattRealTimeDataHistory> list = battRTDataHisService.getFirstRecordListOfDay(tableListInDB.get(i), timeAgo);
                 list.sort(Comparator.comparing(BattRealTimeDataHistory::getMonNum));
                 //绗笁琛岀殑鏃堕棿鍒楀~鍏�
                 Date testStartTime = list.get(0).getTestStartTime();
@@ -409,7 +465,7 @@
                     sheet4.getRow(j + 2).createCell(i + 1).setCellValue((list.get(j - 1).getMonVol()));
                 }
             }
-        }
+        }*/
 
         addGlobalStylesToAllCells(sheet4, workbook);
 
@@ -417,6 +473,16 @@
         XSSFCellStyle cellStyleOriginal = cellOfSheet4.getCellStyle();
         XSSFCellStyle cellStyleNew = getCellStyleFont(cellStyleOriginal,workbook, true, 15);
         cellOfSheet4.setCellStyle(cellStyleNew);
+
+        //绗笁琛� 鎵�鏈夊垪姘村钩鍨傜洿灞呬腑,鑷姩鎹㈣
+        for (int i = 1; i < columnCount; i++) {
+            XSSFCell cell = sheet4.getRow(2).getCell(i);
+            XSSFCellStyle cellStyle = cell.getCellStyle();
+            cellStyle.setAlignment(HorizontalAlignment.CENTER);
+            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+            cellStyle.setWrapText(true);
+            cell.setCellStyle(cellStyle);
+        }
 
         createChart(sheet4, columnCount,"娓╁害鎶樼嚎鍥�");
 
@@ -889,10 +955,19 @@
                 //鏈�澶у樊鍊�
                 float tmpGap = tmpMax - tmpMin;
 
+                Date now = new Date();
+
                 hisAvg.setMonTmp(tmpAvg);
+                hisAvg.setRecordTime(now);
+
                 hisMax.setMonTmp(tmpMax);
+                hisMax.setRecordTime(now);
+
                 hisMin.setMonTmp(tmpMin);
+                hisMin.setRecordTime(now);
+
                 hisGap.setMonTmp(tmpGap);
+                hisGap.setRecordTime(now);
             }
 
 

--
Gitblit v1.9.1