From 05b98aee3034e9fd06ca7018999796b1490bed36 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期四, 26 六月 2025 16:47:29 +0800
Subject: [PATCH] 实时数据曲线统计-核容设备初稿

---
 src/main/java/com/whyc/controller/RealDataStaticController.java |   12 ++++-
 src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java   |    1 
 src/main/java/com/whyc/service/SubTablePageInfoService.java     |   42 +++++++++++++++++++-
 src/main/java/com/whyc/service/BattRealdataIdService.java       |   60 ++++++++++++++++++++++++++++++
 src/main/java/com/whyc/service/PwrdevHistorydataIdService.java  |    4 +-
 5 files changed, 111 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/whyc/controller/RealDataStaticController.java b/src/main/java/com/whyc/controller/RealDataStaticController.java
index 13e447e..886e388 100644
--- a/src/main/java/com/whyc/controller/RealDataStaticController.java
+++ b/src/main/java/com/whyc/controller/RealDataStaticController.java
@@ -22,9 +22,15 @@
     private BattRealdataIdService battRealdataIdService;
 
     @ApiOperation(value = "浜ゆ祦鍗曞厓")
-    @PostMapping("getPwrHisAcData")
-    public Response getPwrHisAcData(@RequestBody SticRealDataAc stic) throws ParseException, InterruptedException {
-        return pwrdevHistorydataIdService.getPwrHisAcData(stic);
+    @PostMapping("getSticRealAcData")
+    public Response getSticRealAcData(@RequestBody SticRealDataAc stic) throws ParseException, InterruptedException {
+        return pwrdevHistorydataIdService.getSticRealAcData(stic);
+    }
+
+    @ApiOperation(value = "鏍稿璁惧")
+    @PostMapping("getSticRealHrData")
+    public Response getSticRealHrData(@RequestBody SticRealDataAc stic) throws ParseException, InterruptedException {
+        return battRealdataIdService.getSticRealHrData(stic);
     }
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java b/src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java
index 9a5cec2..94121a9 100644
--- a/src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java
+++ b/src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java
@@ -7,6 +7,7 @@
 
 @Data
 public class SticRealDataAc {
+    private Integer battgroupId;
     private Integer powerId;
     private Map<String,List<String>> propertyInfo;
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/service/BattRealdataIdService.java b/src/main/java/com/whyc/service/BattRealdataIdService.java
index 06a34ad..1771a88 100644
--- a/src/main/java/com/whyc/service/BattRealdataIdService.java
+++ b/src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -1,6 +1,8 @@
 package com.whyc.service;
 
 import com.whyc.dto.Real.*;
+import com.whyc.dto.RealDataStatic.ResRealDataAc;
+import com.whyc.dto.RealDataStatic.SticRealDataAc;
 import com.whyc.dto.Response;
 import com.whyc.factory.ThreadPoolExecutorFactory;
 import com.whyc.mapper.CommonMapper;
@@ -275,4 +277,62 @@
         List dataListSorted = dataList.stream().sorted(Comparator.comparing(RealDateDTO::getRecordTime)).collect(Collectors.toList());
         return new Response().setIII(1, dataListSorted!=null,dataListSorted,map,"鍘嗗彶瀹炴椂鏌ヨ");
     }
+    //瀹炴椂鏁版嵁缁熻鏇茬嚎--鏍稿璁惧
+    public Response getSticRealHrData(SticRealDataAc stic) throws ParseException, InterruptedException {
+        //鑾峰彇鍓嶇瑪鏁�*鏃堕棿闂撮殧
+        PowerheartParam heartParam=heartService.getHeartParamByPowerId(stic.getPowerId());
+        Integer interverCount=100*5;//榛樿鍊�
+        Integer granularity=5;//榛樿鍊�
+        if(heartParam!=null){
+            interverCount=heartParam.getAcinInterverCfg()*heartParam.getAcinCountCfg();
+            granularity=heartParam.getAcinInterverCfg();
+        }
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        String dateTime = now.format(formatter);
+        Date endTime=ActionUtil.sdf.parse(dateTime);
+        // 璁$畻绗旀暟*鏃堕棿闂撮殧鐨勬椂闂寸偣
+        LocalDateTime halfHourAgo = now.minusMinutes(interverCount);
+        // 鏍煎紡鍖栬緭鍑�
+        String halfHourAgoTime=halfHourAgo.format(formatter);
+        Date startTime=ActionUtil.sdf.parse(halfHourAgoTime);
+        //鑾峰彇涓や釜鏃堕棿鍒嗗壊澶氬皯寮犺〃
+        List<List<Date>> monthTimeList = DateUtil.getMonthTime(startTime,endTime);
+        List<ResRealDataAc> dataList = new LinkedList<>();
+        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
+        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
+        for (int i = 0; i < monthTimeList.size(); i++) {
+            int finalI = i;
+            Integer finalGranularity = granularity;
+            pool.execute(() -> {
+                int finalII = finalI;
+                BattRealdataId realdata = new BattRealdataId();
+                realdata.setRecordTime(monthTimeList.get(finalII).get(0));
+                realdata.setRecordTime1(monthTimeList.get(finalII).get(1));
+                String table = stic.getBattgroupId() + "_" + ThreadLocalUtil.format(realdata.getRecordTime(),2);
+                String tableName="db_data_history.tb_batt_realdata_"+table;
+                realdata.setTableName(table);//琛ㄥ悕鏃堕棿鏍煎紡閮ㄥ垎
+                //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦�
+                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
+                List<ResRealDataAc> list = new ArrayList();
+                if (tableNum > 0) {
+                    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+                    List recordNums= subTablePageInfoService.getBattMaxAndMinRecordNum(tableName,realdata.getRecordTime(),realdata.getRecordTime1());
+                    Integer maxRecordNum= 0;
+                    Integer minRecordNum= 0;
+                    if(recordNums.size()>0){
+                        maxRecordNum=(Integer)recordNums.get(0);
+                        minRecordNum=(Integer)recordNums.get(1);
+                    }
+                    list = subTablePageInfoService.getSticRealHrData(realdata, finalGranularity,maxRecordNum,minRecordNum,stic.getPropertyInfo());
+                }
+                dataList.addAll(list);
+                latch.countDown();
+            });
+            sleep(200);
+        }
+        latch.await(10, TimeUnit.MINUTES);
+        List dataListSorted = dataList.stream().sorted(Comparator.comparing(ResRealDataAc::getRecordDatetime)).collect(Collectors.toList());
+        return new Response().setII(1,dataList.size()>0,dataListSorted,"瀹炴椂鏁版嵁缁熻鏇茬嚎--鏍稿璁惧");
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
index 98bed35..07db9c6 100644
--- a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
+++ b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -304,7 +304,7 @@
         return new Response().setII(1,dataList.size()>0,dataListSorted,"鑾峰彇鍗婂皬鏃跺唴鐩存祦杈撳嚭缁熻");
     }
     //瀹炴椂鏁版嵁鏁版嵁鏇茬嚎缁熻-浜ゆ祦鍗曞厓
-    public Response getPwrHisAcData(SticRealDataAc stic) throws ParseException, InterruptedException {
+    public Response getSticRealAcData(SticRealDataAc stic) throws ParseException, InterruptedException {
         //鑾峰彇鍓嶇瑪鏁�*鏃堕棿闂撮殧
         PowerheartParam heartParam=heartService.getHeartParamByPowerId(stic.getPowerId());
         Integer interverCount=100*5;//榛樿鍊�
@@ -348,7 +348,7 @@
                         maxRecordNum=(Integer)recordNums.get(0);
                         minRecordNum=(Integer)recordNums.get(1);
                     }
-                    list=subTablePageInfoService.getPwrHisAcData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum,stic.getPropertyInfo());
+                    list=subTablePageInfoService.getSticRealAcData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum,stic.getPropertyInfo());
                 }
                 dataList.addAll(list);
                 latch.countDown();
diff --git a/src/main/java/com/whyc/service/SubTablePageInfoService.java b/src/main/java/com/whyc/service/SubTablePageInfoService.java
index 009cd4a..0fd03d3 100644
--- a/src/main/java/com/whyc/service/SubTablePageInfoService.java
+++ b/src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -700,7 +700,7 @@
         return list;
     }
     //瀹炴椂鏁版嵁鏁版嵁鏇茬嚎缁熻-浜ゆ祦鍗曞厓
-    public List<ResRealDataAc> getPwrHisAcData(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1
+    public List<ResRealDataAc> getSticRealAcData(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1
             , Integer maxRecordNum, Integer minRecordNum, Map<String, List<String>> propertyInfo) {
         String  propertyStr = propertyInfo.values().stream()
                 .flatMap(List::stream)
@@ -879,7 +879,7 @@
     }
     //鐢垫睜鏁版嵁鍘嗗彶瀹炴椂澶勭悊
     public List<RealDateDTO> getBattRealDataHis(BattRealdataId realdata, int granularity,Integer maxRecordNum,Integer minRecordNum) {
-        String sql=" select record_time, group_vol, online_vol,group_curr,load_curr, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
+        String sql=" select distinct record_time, group_vol, online_vol,group_curr,load_curr, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
                 "               from db_data_history.tb_batt_realdata_"+realdata.getTableName()+" " +
                 "               where record_time >= '"+ThreadLocalUtil.format(realdata.getRecordTime(),1)+"' " +
                 "               and record_time <= '"+ThreadLocalUtil.format(realdata.getRecordTime1(),1)+"' "+
@@ -906,7 +906,42 @@
         });
         return list;
     }
-
+    //瀹炴椂鏁版嵁缁熻鏇茬嚎--鏍稿璁惧
+    public List<ResRealDataAc> getSticRealHrData(BattRealdataId realdata, Integer granularity, Integer maxRecordNum, Integer minRecordNum, Map<String, List<String>> propertyInfo) {
+        String  propertyStr = propertyInfo.values().stream()
+                .flatMap(List::stream)
+                .collect(Collectors.joining(","));
+        String sql=" select distinct record_time, "+propertyStr+" "+
+                "               from db_data_history.tb_batt_realdata_"+realdata.getTableName()+" " +
+                "               where record_time >= '"+ThreadLocalUtil.format(realdata.getRecordTime(),1)+"' " +
+                "               and record_time <= '"+ThreadLocalUtil.format(realdata.getRecordTime1(),1)+"' "+
+                "               and (record_num-"+minRecordNum+")%"+granularity+"=0 or record_num="+maxRecordNum+" or record_num="+minRecordNum ;
+        List<ResRealDataAc> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<ResRealDataAc> list=new ArrayList<>();
+                while (rs.next()){
+                    ResRealDataAc data=new ResRealDataAc();
+                    data.setRecordDatetime(rs.getTimestamp("record_time"));
+                    Map<String,Map<String,Float>>dataMap=new HashMap<>();
+                    for (Map.Entry<String, List<String>> entry : propertyInfo.entrySet()) {
+                        String key = entry.getKey();
+                        List<String> valueList = entry.getValue();
+                        Map<String,Float> propertyMap=new HashMap<>();
+                        for (String value : valueList) {
+                            Float propertyValue = rs.getFloat(value);
+                            propertyMap.put(value,propertyValue);
+                        }
+                        dataMap.put(key,propertyMap);
+                    }
+                    data.setPropertyInfo(dataMap);
+                    list.add(data);
+                }
+                return list;
+            }
+        });
+        return list;
+    }
     //绯荤粺姒傝鑾峰彇鍓峃绗旀牳瀹硅澶囦俊鎭�
     public List<RealDateDTO> getBattDevData100(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1,Integer maxRecordNum,Integer minRecordNum) {
         String sql=" select record_time, group_vol, online_vol,group_curr, load_curr,record_num  " +
@@ -1139,4 +1174,5 @@
         });
         return list;
     }
+
 }

--
Gitblit v1.9.1