From bca92c7c2376f0e4d8d779251d45155b863b031c Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期四, 26 六月 2025 15:58:12 +0800
Subject: [PATCH] 实时数据曲线统计-交流单元初稿

---
 src/main/java/com/whyc/dto/RealDataStatic/ResRealDataAc.java    |   16 ++++
 src/main/java/com/whyc/controller/RealDataStaticController.java |   30 +++++++
 src/main/java/com/whyc/util/ActionUtil.java                     |   14 +++
 src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java   |   12 +++
 src/main/java/com/whyc/service/SubTablePageInfoService.java     |   69 +++++++++-------
 src/main/java/com/whyc/service/PwrdevHistorydataIdService.java  |   58 ++++++++++++++
 6 files changed, 167 insertions(+), 32 deletions(-)

diff --git a/src/main/java/com/whyc/controller/RealDataStaticController.java b/src/main/java/com/whyc/controller/RealDataStaticController.java
new file mode 100644
index 0000000..13e447e
--- /dev/null
+++ b/src/main/java/com/whyc/controller/RealDataStaticController.java
@@ -0,0 +1,30 @@
+package com.whyc.controller;
+
+import com.whyc.dto.RealDataStatic.SticRealDataAc;
+import com.whyc.dto.Response;
+import com.whyc.service.BattRealdataIdService;
+import com.whyc.service.PwrdevHistorydataIdService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.ParseException;
+
+@RestController
+@Api(tags = "瀹炴椂鏁版嵁鏇茬嚎缁熻")
+@RequestMapping("realStatic")
+public class RealDataStaticController {
+    @Autowired
+    private PwrdevHistorydataIdService pwrdevHistorydataIdService;
+
+    @Autowired
+    private BattRealdataIdService battRealdataIdService;
+
+    @ApiOperation(value = "浜ゆ祦鍗曞厓")
+    @PostMapping("getPwrHisAcData")
+    public Response getPwrHisAcData(@RequestBody SticRealDataAc stic) throws ParseException, InterruptedException {
+        return pwrdevHistorydataIdService.getPwrHisAcData(stic);
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/RealDataStatic/ResRealDataAc.java b/src/main/java/com/whyc/dto/RealDataStatic/ResRealDataAc.java
new file mode 100644
index 0000000..80be3e2
--- /dev/null
+++ b/src/main/java/com/whyc/dto/RealDataStatic/ResRealDataAc.java
@@ -0,0 +1,16 @@
+package com.whyc.dto.RealDataStatic;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.Value;
+
+import java.util.Date;
+import java.util.Map;
+
+@Data
+public class ResRealDataAc {
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date recordDatetime;
+
+    private Map<String,Map<String, Float>> propertyInfo;
+}
\ 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
new file mode 100644
index 0000000..9a5cec2
--- /dev/null
+++ b/src/main/java/com/whyc/dto/RealDataStatic/SticRealDataAc.java
@@ -0,0 +1,12 @@
+package com.whyc.dto.RealDataStatic;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class SticRealDataAc {
+    private Integer powerId;
+    private Map<String,List<String>> propertyInfo;
+}
\ 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 b39b1f5..98bed35 100644
--- a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
+++ b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -7,6 +7,8 @@
 import com.whyc.dto.Real.PwrHisRealAcInDto;
 import com.whyc.dto.Real.PwrHisRealDcoutInDto;
 import com.whyc.dto.Real.QuarterDto;
+import com.whyc.dto.RealDataStatic.ResRealDataAc;
+import com.whyc.dto.RealDataStatic.SticRealDataAc;
 import com.whyc.dto.Response;
 import com.whyc.dto.Statistic.QuarterPwr7Res;
 import com.whyc.factory.ThreadPoolExecutorFactory;
@@ -301,4 +303,60 @@
         List dataListSorted = dataList.stream().sorted(Comparator.comparing(PwrHisRealDcoutInDto::getRecordDatetime)).collect(Collectors.toList());
         return new Response().setII(1,dataList.size()>0,dataListSorted,"鑾峰彇鍗婂皬鏃跺唴鐩存祦杈撳嚭缁熻");
     }
+    //瀹炴椂鏁版嵁鏁版嵁鏇茬嚎缁熻-浜ゆ祦鍗曞厓
+    public Response getPwrHisAcData(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;
+                Date recordDatetime=monthTimeList.get(finalII).get(0);
+                Date recordDatetime1=monthTimeList.get(finalII).get(1);
+                String table = stic.getPowerId() + "_" + ThreadLocalUtil.format(recordDatetime,2);
+                String tableName="db_data_history.tb_pwrdev_historydata_"+table;
+                //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦�
+                int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
+                List<ResRealDataAc> list = new ArrayList();
+                if (tableNum > 0) {
+                    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐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.getPwrHisAcData(tableName, finalGranularity,recordDatetime,recordDatetime1,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/SubTablePageInfoService.java b/src/main/java/com/whyc/service/SubTablePageInfoService.java
index d2fced7..009cd4a 100644
--- a/src/main/java/com/whyc/service/SubTablePageInfoService.java
+++ b/src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -5,6 +5,7 @@
 import com.whyc.dto.AlmHis.PwrAlmPar;
 import com.whyc.dto.AnalysisAlm.ResAnalysis;
 import com.whyc.dto.Real.*;
+import com.whyc.dto.RealDataStatic.ResRealDataAc;
 import com.whyc.dto.Statistic.ComPareChangeCurve;
 import com.whyc.dto.Statistic.ComPareChart;
 import com.whyc.dto.Statistic.QuarterPwr7Res;
@@ -610,34 +611,6 @@
         });
         return list;
     }
-    //绯荤粺姒傝鑾峰彇鍗婂皬鏃舵牳瀹硅澶囦俊鎭�(缁勭淇℃伅鍙栦竴涓崟浣撲俊鎭嵆鍙�)
-    public List<BattHisRealDto> getHalfHourBattDevData(String tableName,Integer granularity,String halfHourAgoTime) {
-        String sql="select  distinct mon_num,record_time,group_vol,online_vol,group_curr,group_tmp,load_curr " +
-                "from (select a.*, (@i:= @i+1) as number " +
-                "     from (select * from "+tableName+" "+
-                "                    where record_time>='"+halfHourAgoTime+"' and mon_num=1) a, " +
-                "                   (select @i:=0) b) c "+
-                " where c.number%"+granularity+"=0 or c.number=1 ";
-        sql+=" order by record_time asc";
-        List<BattHisRealDto> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
-            @Override
-            public List getResults(ResultSet rs) throws SQLException {
-                List<BattHisRealDto> list=new ArrayList<>();
-                while (rs.next()){
-                    BattHisRealDto data=new BattHisRealDto();
-                    data.setRecordTime(rs.getTimestamp("record_time"));
-                    data.setGroupVol(rs.getFloat("group_vol"));
-                    data.setOnlineVol(rs.getFloat("online_vol"));
-                    data.setGroupCurr(rs.getFloat("group_curr"));
-                    data.setGroupTmp(rs.getFloat("group_tmp"));
-                    data.setLoadCurr(rs.getFloat("load_curr"));
-                    list.add(data);
-                }
-                return list;
-            }
-        });
-        return list;
-    }
     //绯荤粺姒傝鑾峰彇鍗婂皬鏃朵氦娴佽緭鍏ョ粺璁�
     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 " +
@@ -672,7 +645,7 @@
         });
         return list;
     }
-
+    //绯荤粺姒傝鑾峰彇鍗婂皬鏃朵氦娴佽緭鍑虹粺璁�
     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)+"'" +
@@ -719,6 +692,43 @@
                     data.setM14OutVol(rs.getFloat("m14_out_vol"));
                     data.setM15OutVol(rs.getFloat("m15_out_vol"));
                     data.setM16OutVol(rs.getFloat("m16_out_vol"));
+                    list.add(data);
+                }
+                return list;
+            }
+        });
+        return list;
+    }
+    //瀹炴椂鏁版嵁鏁版嵁鏇茬嚎缁熻-浜ゆ祦鍗曞厓
+    public List<ResRealDataAc> getPwrHisAcData(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)
+                .collect(Collectors.joining(","));
+        String sql=" select  distinct record_datetime,"+propertyStr+" "+
+                " from "+tableName+" where record_datetime>='"+ActionUtil.sdf.format(recordDatetime)+"'" +
+                "                    and record_datetime<='"+ActionUtil.sdf.format(recordDatetime1)+
+                "' and (record_num-"+minRecordNum+")%"+granularity+"=0  or record_num="+minRecordNum+" or record_num="+maxRecordNum;
+        sql+="  order by record_datetime asc";
+        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_datetime"));
+                    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;
@@ -1129,5 +1139,4 @@
         });
         return list;
     }
-
 }
diff --git a/src/main/java/com/whyc/util/ActionUtil.java b/src/main/java/com/whyc/util/ActionUtil.java
index fd4edb8..278d4c3 100644
--- a/src/main/java/com/whyc/util/ActionUtil.java
+++ b/src/main/java/com/whyc/util/ActionUtil.java
@@ -23,6 +23,9 @@
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 import com.whyc.pojo.db_user.User;
 
 public class ActionUtil {
@@ -678,7 +681,14 @@
 			System.out.println(date);
 		}*/
 		//System.out.println(toCamelCase("user_name_and_age"));
-		Date time1=getDateAdd(new Date(),-10);
-		System.out.println(ActionUtil.sdf.format(time1));
+		/*Date time1=getDateAdd(new Date(),-10);
+		System.out.println(ActionUtil.sdf.format(time1));*/
+		Map<String, List<String>> map = new HashMap<>();
+		map.put("key1", Stream.of("value1", "value2").collect(Collectors.toList()));
+		map.put("key2", Stream.of("value3", "value4").collect(Collectors.toList()));
+		String result = map.values().stream()
+				.flatMap(List::stream)
+				.collect(Collectors.joining(","));
+		System.out.println( result);
 	}
 }	

--
Gitblit v1.9.1