From a9df6151d30ea1e2053d168496763dd8f0b27a45 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期一, 23 六月 2025 09:57:00 +0800
Subject: [PATCH] 实时页面系统概论推送指定时间到当前的数据

---
 src/main/java/com/whyc/service/SubTablePageInfoService.java    |   71 ++++++++++++++++++++---
 src/main/java/com/whyc/service/BattRealdataIdService.java      |   65 +++++++++++++++------
 src/main/java/com/whyc/service/PwrdevHistorydataIdService.java |   24 ++++++-
 src/main/java/com/whyc/controller/RealContoller.java           |    2 
 4 files changed, 128 insertions(+), 34 deletions(-)

diff --git a/src/main/java/com/whyc/controller/RealContoller.java b/src/main/java/com/whyc/controller/RealContoller.java
index 0ec2631..860c52c 100644
--- a/src/main/java/com/whyc/controller/RealContoller.java
+++ b/src/main/java/com/whyc/controller/RealContoller.java
@@ -45,7 +45,7 @@
 
     @ApiOperation(value = "绯荤粺姒傝鑾峰彇鍓嶄竴鐧炬瘮鏃堕棿闂撮殧鏁版嵁鏍稿璁惧淇℃伅")
     @GetMapping("getBattDevData100")
-    public Response getBattDevData100(@RequestParam Integer powerId,@RequestParam Integer battgroupId){
+    public Response getBattDevData100(@RequestParam Integer powerId,@RequestParam Integer battgroupId) throws ParseException, InterruptedException {
         return battRealdataIdService.getBattDevData100(powerId,battgroupId);
     }
 
diff --git a/src/main/java/com/whyc/service/BattRealdataIdService.java b/src/main/java/com/whyc/service/BattRealdataIdService.java
index 1a7d628..06a34ad 100644
--- a/src/main/java/com/whyc/service/BattRealdataIdService.java
+++ b/src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -1,9 +1,6 @@
 package com.whyc.service;
 
-import com.whyc.dto.Real.BattHisRealDto;
-import com.whyc.dto.Real.CompareDto;
-import com.whyc.dto.Real.QuarterDto;
-import com.whyc.dto.Real.RealDateDTO;
+import com.whyc.dto.Real.*;
 import com.whyc.dto.Response;
 import com.whyc.factory.ThreadPoolExecutorFactory;
 import com.whyc.mapper.CommonMapper;
@@ -175,30 +172,59 @@
         return new Response().setII(1,map.size()>0,map,"鑾峰彇鐢垫睜缁勬渶杩戜竴瀛e害鐨勬俯搴︽暟鎹�");
     }
     //绯荤粺姒傝鑾峰彇鍓峃绗旀牳瀹硅澶囦俊鎭�
-    public Response getBattDevData100(Integer powerId,Integer battgroupId) {
-        String dateTime = ActionUtil.sdfwithOutday.format(new Date());
-        String tableName ="db_data_history.tb_batt_realdata_"+battgroupId+"_"+dateTime;
+    public Response getBattDevData100(Integer powerId,Integer battgroupId) throws ParseException, InterruptedException {
         //鑾峰彇鍓嶇瑪鏁�*鏃堕棿闂撮殧
         PowerheartParam heartParam=heartService.getHeartParamByPowerId(powerId);
         Integer interverCount=100*10;//榛樿鍊�
-        Integer granularity=10;//榛樿鍊�
+        Integer granularity=5;//榛樿鍊�
         if(heartParam!=null){
-            interverCount=heartParam.getAcinInterverCfg()*heartParam.getAcinCountCfg();
-            granularity=heartParam.getAcinInterverCfg();
+            interverCount=heartParam.getHrInterverCfg()*heartParam.getHrCountCfg();
+            granularity=heartParam.getHrInterverCfg();
         }
-        //鑾峰彇鍓嶅崐涓皬鏃舵暟鎹�
+        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);
         // 鏍煎紡鍖栬緭鍑�
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         String halfHourAgoTime=halfHourAgo.format(formatter);
-        String existTableName = commonMapper.existTable("db_data_history", "tb_batt_realdata_"+battgroupId+"_"+dateTime);
-        if(existTableName == null){
-            return new Response().set(1,false,"褰撳墠鐢垫睜缁勪笉瀛樺湪鍓嶉潰灏忔椂鏁版嵁");
+        Date startTime=ActionUtil.sdf.parse(halfHourAgoTime);
+        List<List<Date>> monthTimeList = DateUtil.getMonthTime(startTime,endTime);
+        List<RealDateDTO> 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;
+                Date recordDatetime=monthTimeList.get(finalII).get(0);
+                Date recordDatetime1=monthTimeList.get(finalII).get(1);
+                String table = battgroupId + "_" + ThreadLocalUtil.format(recordDatetime,2);
+                String tableName="db_data_history.tb_batt_realdata_"+table;
+                //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦�
+                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
+                List<RealDateDTO> list = new ArrayList();
+                if (tableNum > 0) {
+                    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+                    List recordNums= subTablePageInfoService.getBattMaxAndMinRecordNum(tableName,recordDatetime,recordDatetime1);
+                    Integer maxRecordNum= 0;
+                    Integer minRecordNum= 0;
+                    if(recordNums.size()>0){
+                        maxRecordNum=(Integer)recordNums.get(0);
+                        minRecordNum=(Integer)recordNums.get(1);
+                    }
+                    list = subTablePageInfoService.getBattDevData100(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum);
+                }
+                dataList.addAll(list);
+                latch.countDown();
+            });
+            sleep(200);
         }
-        List<BattHisRealDto> datalist=subTablePageInfoService.getHalfHourBattDevData(tableName,granularity,halfHourAgoTime);
-        return new Response().setII(1,datalist.size()>0,datalist,"鑾峰彇鍗婂皬鏃跺唴鏍稿璁惧淇℃伅");
+        latch.await(10, TimeUnit.MINUTES);
+        List dataListSorted = dataList.stream().sorted(Comparator.comparing(RealDateDTO::getRecordTime)).collect(Collectors.toList());
+        return new Response().setII(1,dataList.size()>0,dataListSorted,"鑾峰彇鍗婂皬鏃跺唴鏍稿璁惧淇℃伅");
     }
     //鍘嗗彶瀹炴椂鏁版嵁
     public Response getBattRealDataHis(Integer battgroupId, Integer granularity,String startTime,String endTime) throws ParseException, InterruptedException {
@@ -224,13 +250,14 @@
                 realdata.setRecordTime(monthTimeList.get(finalII).get(0));
                 realdata.setRecordTime1(monthTimeList.get(finalII).get(1));
                 String table = battgroupId + "_" + ThreadLocalUtil.format(realdata.getRecordTime(),2);
+                String tableName="db_data_history.tb_batt_realdata_"+table;
                 realdata.setTableName(table);//琛ㄥ悕鏃堕棿鏍煎紡閮ㄥ垎
                 //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦�
                 int tableNum = subTablePageInfoService.judgeTable_realdata(table);
                 List<RealDateDTO> list = new ArrayList();
                 if (tableNum > 0) {
                     //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
-                    List recordNums= subTablePageInfoService.getMaxAndMinRecordNum(realdata);
+                    List recordNums= subTablePageInfoService.getBattMaxAndMinRecordNum(tableName,realdata.getRecordTime(),realdata.getRecordTime1());
                     Integer maxRecordNum= 0;
                     Integer minRecordNum= 0;
                     if(recordNums.size()>0){
diff --git a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
index 8e69404..7c00d39 100644
--- a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
+++ b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -96,7 +96,15 @@
                 int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
                 List<PwrHisRealAcInDto> list = new ArrayList();
                 if (tableNum > 0) {
-                    list=subTablePageInfoService.getHalfHourPwrHisAcinData(tableName, finalGranularity,recordDatetime,recordDatetime1);
+                    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+                    List recordNums= subTablePageInfoService.getPwrMaxAndMinRecordNum(tableName,recordDatetime,recordDatetime1);
+                    Integer maxRecordNum= 0;
+                    Integer minRecordNum= 0;
+                    if(recordNums.size()>0){
+                        maxRecordNum=(Integer)recordNums.get(0);
+                        minRecordNum=(Integer)recordNums.get(1);
+                    }
+                    list=subTablePageInfoService.getHalfHourPwrHisAcinData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum);
                 }
                 dataList.addAll(list);
                 latch.countDown();
@@ -114,8 +122,8 @@
         Integer interverCount=100*5;//榛樿鍊�
         Integer granularity=5;//榛樿鍊�
         if(heartParam!=null){
-            interverCount=heartParam.getAcinInterverCfg()*heartParam.getAcinCountCfg();
-            granularity=heartParam.getAcinInterverCfg();
+            interverCount=heartParam.getAcoutInterverCfg()*heartParam.getAcoutCountCfg();
+            granularity=heartParam.getAcoutInterverCfg();//榛樿鏃堕棿闂撮殧涓�鍒嗛挓涓�绗旓紝鎵�浠ユ椂闂撮棿闅斿氨鏄嚑绗斿彇涓�绗�
         }
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
@@ -144,7 +152,15 @@
                 int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
                 List<PwrHisRealDcoutInDto> list = new ArrayList();
                 if (tableNum > 0) {
-                    list=subTablePageInfoService.getHalfHourPwrHisDcoutData(tableName, finalGranularity,recordDatetime,recordDatetime1);
+                    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+                    List recordNums= subTablePageInfoService.getPwrMaxAndMinRecordNum(tableName,recordDatetime,recordDatetime1);
+                    Integer maxRecordNum= 0;
+                    Integer minRecordNum= 0;
+                    if(recordNums.size()>0){
+                        maxRecordNum=(Integer)recordNums.get(0);
+                        minRecordNum=(Integer)recordNums.get(1);
+                    }
+                    list=subTablePageInfoService.getHalfHourPwrHisDcoutData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum);
                 }
                 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 23f6ad1..839845b 100644
--- a/src/main/java/com/whyc/service/SubTablePageInfoService.java
+++ b/src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -593,13 +593,13 @@
         return list;
     }
     //绯荤粺姒傝鑾峰彇鍗婂皬鏃朵氦娴佽緭鍏ョ粺璁�
-    public List<PwrHisRealAcInDto> getHalfHourPwrHisAcinData(String tableName,Integer granularity,Date recordDatetime,Date recordDatetime1) {
+    public List<PwrHisRealAcInDto> getHalfHourPwrHisAcinData(String tableName,Integer granularity,Date recordDatetime,Date recordDatetime1,Integer maxRecordNum,Integer minRecordNum) {
         String sql=" select  distinct record_datetime,acin1_vola,acin1_volb,acin1_volc,acin2_vola,acin2_volb,acin2_volc " +
                 " ,acin1_curra,acin1_currb,acin1_currc,acin2_curra,acin2_currb,acin2_currc  " +
                 " from "+tableName+" where record_datetime>='"+ActionUtil.sdf.format(recordDatetime)+"'" +
                 "                    and record_datetime<='"+ActionUtil.sdf.format(recordDatetime1)+
-                "' and record_num%"+granularity+"=0 or record_num=1 or record_num=100 ";
-        sql+=" order by record_datetime asc";
+                "' and (record_num-"+minRecordNum+")%"+granularity+"=0  or record_num="+minRecordNum+" or record_num="+maxRecordNum;
+        sql+="  order by record_datetime asc";
         List<PwrHisRealAcInDto> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
             @Override
             public List getResults(ResultSet rs) throws SQLException {
@@ -627,11 +627,11 @@
         return list;
     }
 
-    public List<PwrHisRealDcoutInDto> getHalfHourPwrHisDcoutData(String tableName,Integer granularity,Date recordDatetime,Date recordDatetime1) {
+    public List<PwrHisRealDcoutInDto> getHalfHourPwrHisDcoutData(String tableName,Integer granularity,Date recordDatetime,Date recordDatetime1,Integer maxRecordNum,Integer minRecordNum) {
         String sql="select  distinct * " +
                 " from "+tableName+" where record_datetime>='"+ActionUtil.sdf.format(recordDatetime)+"'" +
                 "                    and record_datetime<='"+ActionUtil.sdf.format(recordDatetime1)+
-                "' and record_num%"+granularity+"=0 or record_num=1 or record_num=100 ";
+                "' and (record_num-"+minRecordNum+")%"+granularity+"=0 or record_num="+minRecordNum+" or record_num="+maxRecordNum;
         sql+=" order by record_datetime asc";
         List<PwrHisRealDcoutInDto> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
             @Override
@@ -796,6 +796,36 @@
         });
         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, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
+                "               from "+tableName+" " +
+                "               where record_time >= '"+ThreadLocalUtil.format(recordDatetime,1)+"' " +
+                "               and record_time <= '"+ThreadLocalUtil.format(recordDatetime1,1)+"' "+
+                "               and (record_num-"+minRecordNum+")%"+granularity+"=0 or record_num="+minRecordNum+" or record_num="+maxRecordNum ;
+        List<RealDateDTO> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<RealDateDTO> list=new ArrayList<>();
+                while (rs.next()){
+                    RealDateDTO ph=new RealDateDTO();
+                    ph.setRecordTime(rs.getTimestamp("record_time"));
+                    ph.setGroupVol(rs.getFloat("group_vol"));
+                    ph.setOnlineVol(rs.getFloat("online_vol"));
+                    ph.setGroupCurr(rs.getFloat("group_curr"));
+                    ph.setMonVol(rs.getFloat("mon_vol"));
+                    ph.setMonTmp(rs.getFloat("mon_tmp"));
+                    ph.setMonRes(rs.getFloat("mon_res"));
+                    ph.setMonNum(rs.getInt("mon_num"));
+                    ph.setRecordNum(rs.getInt("record_num"));
+                    list.add(ph);
+                }
+                return list;
+            }
+        });
+        return list;
+    }
     //鐢垫睜鏁版嵁鍘嗗彶瀹炴椂澶勭悊(棰勮鍒嗘瀽)
     public List<ResAnalysis> getBattHisRealInAlm(BattRealdataId realdata, Map<String,Object> battMap) {
         String result = String.join(",", battMap.keySet());
@@ -893,12 +923,12 @@
         });
         return list;
     }
-    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
-    public List getMaxAndMinRecordNum(BattRealdataId realdata) {
+    //鑾峰彇鐢垫睜缁勬寚瀹氭椂闂存鍐呮渶澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+    public List getBattMaxAndMinRecordNum(String tableName,  Date recordDatetime, Date recordDatetime1) {
         String sql="select max(record_num) as maxRecordNum,min(record_num) as minRecordNum " +
-                " 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)+"'  " +
+                " from " + tableName+" " +
+                " where record_time >= '"+ThreadLocalUtil.format(recordDatetime,1)+"' " +
+                " and record_time <= '"+ThreadLocalUtil.format(recordDatetime1,1)+"'  " +
                 " limit 1";
         List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
             @Override
@@ -912,6 +942,26 @@
             }
            });
          return list;
+    }
+    //鑾峰彇鐢垫簮鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+    public List getPwrMaxAndMinRecordNum(String tableName,  Date recordDatetime, Date recordDatetime1) {
+        String sql="select max(record_num) as maxRecordNum,min(record_num) as minRecordNum " +
+                " from " + tableName+" " +
+                " where record_datetime >= '"+ThreadLocalUtil.format(recordDatetime,1)+"' " +
+                " and record_datetime <= '"+ThreadLocalUtil.format(recordDatetime1,1)+"'  " +
+                " limit 1";
+        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List list = new ArrayList<>();
+                while (rs.next()) {
+                    list.add(rs.getInt("maxRecordNum"));
+                    list.add(rs.getInt("minRecordNum"));
+                }
+                return list;
+            }
+        });
+        return list;
     }
     //1.2.7浼樿壇鐢垫簮缁熻涓婁竴瀛e害鐨勭數婧愭煇涓�灞炴�у拰鍙傛暟闃堝�艰秴杩囩殑娆℃暟
     public List<PwrdevHistorydataId> getPwrQuarter7(String tableName,List<String> propertyNameList) {
@@ -982,4 +1032,5 @@
         });
         return list;
     }
+
 }

--
Gitblit v1.9.1