From 82d3504d93db29e2b04ed1137e541a19e0cba0f1 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期一, 23 六月 2025 09:08:14 +0800
Subject: [PATCH] 预警分析管理

---
 src/main/java/com/whyc/service/SubTablePageInfoService.java    |   18 ++++-----
 src/main/java/com/whyc/service/PwrdevHistorydataIdService.java |   46 ++++++++++++++++------
 src/main/java/com/whyc/controller/RealContoller.java           |    2 
 src/main/java/com/whyc/service/AlmAnalysisParamService.java    |   38 ++++++++++++-------
 4 files changed, 66 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/whyc/controller/RealContoller.java b/src/main/java/com/whyc/controller/RealContoller.java
index 0fe7730..0ec2631 100644
--- a/src/main/java/com/whyc/controller/RealContoller.java
+++ b/src/main/java/com/whyc/controller/RealContoller.java
@@ -39,7 +39,7 @@
 
     @ApiOperation(value = "绯荤粺姒傝鑾峰彇鍓嶄竴鐧炬瘮鏃堕棿闂撮殧鏁版嵁鐩存祦杈撳嚭缁熻")
     @GetMapping("getPwrHisDcoutData100")
-    public Response getPwrHisDcoutData100(@RequestParam Integer powerId){
+    public Response getPwrHisDcoutData100(@RequestParam Integer powerId) throws ParseException, InterruptedException {
         return pwrdevHistorydataIdService.getHalfHourPwrHisDcoutData(powerId);
     }
 
diff --git a/src/main/java/com/whyc/service/AlmAnalysisParamService.java b/src/main/java/com/whyc/service/AlmAnalysisParamService.java
index 060006f..64574c1 100644
--- a/src/main/java/com/whyc/service/AlmAnalysisParamService.java
+++ b/src/main/java/com/whyc/service/AlmAnalysisParamService.java
@@ -68,9 +68,12 @@
             return new Response().set(1,false,"鏃犲搴斿垎鏋愬睘鎬�");
         }else{
             //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁
-            Map<String,  Map<String,Integer>> groupmap=groupPwrAndBatt(almAnalysisParam);
-            Map<String,Integer> battMap=groupmap.get("batt");
-            Map<String,Integer> pwrMap=groupmap.get("pwr");
+            Map<String,  Map<String,Object>> groupmap=groupPwrAndBatt(almAnalysisParam);
+            Map<String,Object> battMap=groupmap.get("batt");
+            Map<String,Object> pwrMap=groupmap.get("pwr");
+            Map<String,Object> mainMap=groupmap.get("main");
+            mainMap.put("pwr",pwrMap.size());
+            mainMap.put("batt",battMap.size());
             if(battgroupId!=null){
                 if(battMap!=null&&battMap.size()>0){
                     List battHislist=getBattRealData(battgroupId,monthTimeList,battMap);
@@ -83,21 +86,24 @@
                     map.put("pwr",pwrHislist);
                 }
             }
-            return new Response().setII(1,true, map,"棰勮鍒嗘瀽绠$悊-鐢垫簮涓诲睘鎬у拰鍒嗘瀽灞炴��");
+            return new Response().setIII(1,true, map,mainMap,"棰勮鍒嗘瀽绠$悊-鐢垫簮涓诲睘鎬у拰鍒嗘瀽灞炴��");
         }
     }
     //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁
-    private  Map<String,  Map<String,Integer>> groupPwrAndBatt(AlmAnalysisParam almAnalysisParam) {
-        Map<String,  Map<String,Integer>> map = new HashMap<>();
-        Map<String,Integer> battMap=new HashMap<>();
-        Map<String,Integer> pwrMap=new HashMap<>();
+    private  Map<String,  Map<String,Object>> groupPwrAndBatt(AlmAnalysisParam almAnalysisParam) {
+        Map<String,  Map<String,Object>> map = new HashMap<>();
+        Map<String,Object> battMap=new HashMap<>();
+        Map<String,Object> pwrMap=new HashMap<>();
+        Map<String,Object> mainMap=new HashMap<>();
         if(almAnalysisParam.getMainFieldType()==1||almAnalysisParam.getMainFieldType()==2||almAnalysisParam.getMainFieldType()==3){
             if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){
                 pwrMap.put(almAnalysisParam.getMainField(),almAnalysisParam.getMainFieldType());
+                mainMap.put("main","pwr");
             }
         }else{
             if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){
                 battMap.put(almAnalysisParam.getMainField(),almAnalysisParam.getMainFieldType());
+                mainMap.put("main","batt");
             }
         }
         if(almAnalysisParam.getMinorField1Type()==1||almAnalysisParam.getMinorField1Type()==2||almAnalysisParam.getMinorField1Type()==3){
@@ -138,10 +144,11 @@
         }
         map.put("pwr",pwrMap);
         map.put("batt",battMap);
+        map.put("main",mainMap);
         return map;
     }
     //杩炴帴姹犺幏鍙栫數婧愬巻鍙插疄鏃舵暟鎹�
-    public List getPwrRealData(Integer powerId,List<List<Date>> monthTimeList,Map<String,Integer> pwrMap) throws InterruptedException {
+    public List getPwrRealData(Integer powerId,List<List<Date>> monthTimeList,Map<String,Object> pwrMap) throws InterruptedException {
         List<ResAnalysis> dataList = new LinkedList<>();
         ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
         CountDownLatch latch = new CountDownLatch(monthTimeList.size());
@@ -171,7 +178,7 @@
     }
 
     //鐢垫睜鍛婅鐐瑰嚮鍏蜂綋鍛婅淇℃伅鏌ョ湅浠庡憡璀﹀紑濮嬫椂闂村埌鐜板湪鐨勫巻鍙插疄鏃舵暟鎹�
-    public List getBattRealData(Integer battgroupId, List<List<Date>> monthTimeList,Map<String,Integer> battMap) throws ParseException, InterruptedException {
+    public List getBattRealData(Integer battgroupId, List<List<Date>> monthTimeList,Map<String,Object> battMap) throws ParseException, InterruptedException {
         List<ResAnalysis> dataList = new LinkedList<>();
         ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
         CountDownLatch latch = new CountDownLatch(monthTimeList.size());
@@ -218,9 +225,12 @@
         //灏嗗睘鎬ф嫹璐濊嚦almAnalysisParam涓�
         copyProperties(almAnalysisParam,res);
         //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁
-        Map<String,  Map<String,Integer>> groupmap=groupPwrAndBatt(almAnalysisParam);
-        Map<String,Integer> battMap=groupmap.get("batt");
-        Map<String,Integer> pwrMap=groupmap.get("pwr");
+        Map<String,  Map<String,Object>> groupmap=groupPwrAndBatt(almAnalysisParam);
+        Map<String,Object> battMap=groupmap.get("batt");
+        Map<String,Object> pwrMap=groupmap.get("pwr");
+        Map<String,Object> mainMap=groupmap.get("pwr");
+        mainMap.put("pwr",pwrMap.size());
+        mainMap.put("batt",battMap.size());
         if(res.getBattgroupId()!=null){
             if(battMap!=null&&battMap.size()>0){
                 List battHislist=getBattRealData(res.getBattgroupId(),monthTimeList,battMap);
@@ -233,7 +243,7 @@
                 map.put("pwr",pwrHislist);
             }
         }
-        return new Response().setII(1,true, map,"棰勮鍒嗘瀽绠$悊-鍒囨崲鏃堕棿闂撮殧鍜屽壇灞炴��");
+        return new Response().setIII(1,true, map,mainMap,"棰勮鍒嗘瀽绠$悊-鍒囨崲鏃堕棿闂撮殧鍜屽壇灞炴��");
     }
     //灏嗗睘鎬ф嫹璐濊嚦almAnalysisParam涓�
     private void copyProperties(AlmAnalysisParam almAnalysisParam, AnalysisChangeRes res) {
diff --git a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
index ca1b960..8e69404 100644
--- a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
+++ b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -106,11 +106,9 @@
         latch.await(10, TimeUnit.MINUTES);
         List dataListSorted = dataList.stream().sorted(Comparator.comparing(PwrHisRealAcInDto::getRecordDatetime)).collect(Collectors.toList());
         return new Response().setII(1,dataList.size()>0,dataListSorted,"鑾峰彇鍗婂皬鏃跺唴浜ゆ祦杈撳叆缁熻");
-
     }
     //绯荤粺姒傝鑾峰彇鍓峃绗旂洿娴佽緭鍑虹粺璁�
-    public Response getHalfHourPwrHisDcoutData(Integer powerId) {
-        String dateTime = ActionUtil.sdfwithOutday.format(new Date());
+    public Response getHalfHourPwrHisDcoutData(Integer powerId) throws InterruptedException, ParseException {
         //鑾峰彇鍓嶇瑪鏁�*鏃堕棿闂撮殧
         PowerheartParam heartParam=heartService.getHeartParamByPowerId(powerId);
         Integer interverCount=100*5;//榛樿鍊�
@@ -119,26 +117,48 @@
             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);
         // 鏍煎紡鍖栬緭鍑�
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         String halfHourAgoTime=halfHourAgo.format(formatter);
-
-        String tableName ="db_data_history.tb_pwrdev_historydata_"+powerId+"_"+dateTime;
-        String existTableName = commonMapper.existTable("db_data_history", "tb_pwrdev_historydata_"+powerId+"_"+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<PwrHisRealDcoutInDto> 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 = powerId + "_" + ThreadLocalUtil.format(recordDatetime,2);
+                String tableName="db_data_history.tb_pwrdev_historydata_"+table;
+                //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦�
+                int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
+                List<PwrHisRealDcoutInDto> list = new ArrayList();
+                if (tableNum > 0) {
+                    list=subTablePageInfoService.getHalfHourPwrHisDcoutData(tableName, finalGranularity,recordDatetime,recordDatetime1);
+                }
+                dataList.addAll(list);
+                latch.countDown();
+            });
+            sleep(200);
         }
-        List<PwrHisRealDcoutInDto> datalist=subTablePageInfoService.getHalfHourPwrHisDcoutData(tableName,granularity,halfHourAgoTime);
+        latch.await(10, TimeUnit.MINUTES);
+        List dataListSorted = dataList.stream().sorted(Comparator.comparing(PwrHisRealDcoutInDto::getRecordDatetime)).collect(Collectors.toList());
         Long modelCfg=0l;
         PowerInf pinf=powerInfService.getPowerInfById(powerId);
         if(pinf!=null){
             modelCfg=pinf.getModelCfg();
         }
-        return new Response().setIII(1,datalist.size()>0,datalist,modelCfg,"鑾峰彇鍗婂皬鏃跺唴鐩存祦杈撳嚭缁熻");
+        return new Response().setIII(1,dataList.size()>0,dataListSorted,modelCfg,"鑾峰彇鍗婂皬鏃跺唴鐩存祦杈撳嚭缁熻");
     }
     //1.2.7浼樿壇鐢垫簮缁熻涓婁竴瀛e害鐨勭數婧愭煇涓�灞炴�у拰鍙傛暟闃堝�艰秴杩囩殑娆℃暟
     public Integer getPwrQuarter7(Integer powerId,Integer powerType) throws NoSuchFieldException, IllegalAccessException {
diff --git a/src/main/java/com/whyc/service/SubTablePageInfoService.java b/src/main/java/com/whyc/service/SubTablePageInfoService.java
index 473555c..23f6ad1 100644
--- a/src/main/java/com/whyc/service/SubTablePageInfoService.java
+++ b/src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -627,13 +627,11 @@
         return list;
     }
 
-    public List<PwrHisRealDcoutInDto> getHalfHourPwrHisDcoutData(String tableName,Integer granularity,String halfHourAgoTime) {
+    public List<PwrHisRealDcoutInDto> getHalfHourPwrHisDcoutData(String tableName,Integer granularity,Date recordDatetime,Date recordDatetime1) {
         String sql="select  distinct * " +
-                "from (select a.*, (@i:= @i+1) as number " +
-                "     from (select * from "+tableName+" "+
-                "                    where record_datetime>='"+halfHourAgoTime+"') a, " +
-                "                   (select @i:=0) b) c "+
-                " where c.number%"+granularity+"=0 or c.number=1 ";
+                " 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";
         List<PwrHisRealDcoutInDto> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
             @Override
@@ -799,7 +797,7 @@
         return list;
     }
     //鐢垫睜鏁版嵁鍘嗗彶瀹炴椂澶勭悊(棰勮鍒嗘瀽)
-    public List<ResAnalysis> getBattHisRealInAlm(BattRealdataId realdata, Map<String,Integer> battMap) {
+    public List<ResAnalysis> getBattHisRealInAlm(BattRealdataId realdata, Map<String,Object> battMap) {
         String result = String.join(",", battMap.keySet());
         String sql=" select record_time,"+result+" " +
                 "               from db_data_history.tb_batt_realdata_"+realdata.getTableName()+" " +
@@ -815,7 +813,7 @@
                     ph.setRecordTime(rs.getTimestamp("record_time"));
                     int i=1;
                     for (String key : battMap.keySet()) {
-                        Integer dataType = battMap.get(key);
+                        Integer dataType = (Integer) battMap.get(key);
                         try {
                             String propertyType = "dataType"+(i);
                             Field fieldType = ResAnalysis.class.getDeclaredField(propertyType);
@@ -848,7 +846,7 @@
     }
 
     //鐢垫簮鏁版嵁鍘嗗彶瀹炴椂澶勭悊(棰勮鍒嗘瀽)
-    public List<ResAnalysis> getPwrHisRealInAlm(PwrdevHistorydataId pwrHis, Map<String,Integer> pwrMap) {
+    public List<ResAnalysis> getPwrHisRealInAlm(PwrdevHistorydataId pwrHis, Map<String,Object> pwrMap) {
         String result = String.join(",", pwrMap.keySet());
         String sql=" select record_datetime,"+result+"  " +
                 "               from db_data_history.tb_pwrdev_historydata_"+pwrHis.getTableName()+" " +
@@ -864,7 +862,7 @@
                     ph.setRecordTime(rs.getTimestamp("record_datetime"));
                     int i=1;
                     for (String key : pwrMap.keySet()) {
-                        Integer dataType = pwrMap.get(key);
+                        Integer dataType = (Integer) pwrMap.get(key);
                         try {
                             String propertyType = "dataType"+(i);
                             Field fieldType = ResAnalysis.class.getDeclaredField(propertyType);

--
Gitblit v1.9.1