From 22e80b64405b03d39305134dacbe821b8d5a23ad Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期二, 27 五月 2025 14:16:44 +0800
Subject: [PATCH] 电池,设备,电源历史告警

---
 src/main/java/com/whyc/dto/AlmHis/BattAlarmRes.java                 |   25 
 src/main/java/com/whyc/mapper/CommonMapper.java                     |    2 
 src/main/java/com/whyc/pojo/db_alarm/DevalarmDataHistory.java       |   11 
 src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java       |    2 
 /dev/null                                                           |  352 ------------
 src/main/java/com/whyc/controller/AlarmHistoryController.java       |   43 +
 src/main/java/com/whyc/util/SubTablePageInfoUtils.java              |  322 +++++++++++
 src/main/java/com/whyc/dto/Real/AlmDto.java                         |   10 
 src/main/java/com/whyc/service/SubTablePageInfoService.java         |  730 +++++++++++++++----------
 src/main/resources/mapper/CommonMapper.xml                          |    2 
 src/main/java/com/whyc/service/AlarmHisService.java                 |   80 ++
 src/main/java/com/whyc/dto/AlmHis/BattAlmPar.java                   |   28 +
 src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmHistory.java |   14 
 src/main/java/com/whyc/dto/AlmHis/DevAlmPar.java                    |   29 +
 src/main/java/com/whyc/dto/AlmHis/PwrAlmPar.java                    |   28 +
 15 files changed, 1,031 insertions(+), 647 deletions(-)

diff --git a/src/main/java/com/whyc/controller/AlarmHistoryController.java b/src/main/java/com/whyc/controller/AlarmHistoryController.java
new file mode 100644
index 0000000..fbd00b5
--- /dev/null
+++ b/src/main/java/com/whyc/controller/AlarmHistoryController.java
@@ -0,0 +1,43 @@
+package com.whyc.controller;
+
+import com.whyc.dto.AlmHis.BattAlmPar;
+import com.whyc.dto.AlmHis.DevAlmPar;
+import com.whyc.dto.AlmHis.PwrAlmPar;
+import com.whyc.dto.Real.AlmDto;
+import com.whyc.dto.Response;
+import com.whyc.service.AlarmHisService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+
+@RestController
+@Api(tags = "鍛婅鍘嗗彶绠$悊")
+@RequestMapping("almHis")
+public class AlarmHistoryController {
+    @Autowired
+    private AlarmHisService service;
+
+    @PostMapping("getBattAlmHis")
+    @ApiOperation(value = "鐢垫睜鍛婅鍘嗗彶璁板綍鏌ヨ")
+    public Response serchByInfo(@RequestBody BattAlmPar almDto) throws ParseException, InterruptedException {
+        return service.getBattAlmHis(almDto);
+    }
+
+    @PostMapping("getDevAlmHis")
+    @ApiOperation(value = "璁惧鍛婅鍘嗗彶璁板綍鏌ヨ")
+    public Response getDevAlmHis(@RequestBody DevAlmPar almDto) throws ParseException, InterruptedException {
+        return service.getDevAlmHis(almDto);
+    }
+
+    @PostMapping("getPwrAlmHis")
+    @ApiOperation(value = "鐢垫簮鍛婅鍘嗗彶璁板綍鏌ヨ")
+    public Response getPwrAlmHis(@RequestBody PwrAlmPar almDto) throws ParseException, InterruptedException {
+        return service.getPwrAlmHis(almDto);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/AlmHis/BattAlarmRes.java b/src/main/java/com/whyc/dto/AlmHis/BattAlarmRes.java
new file mode 100644
index 0000000..52fa40a
--- /dev/null
+++ b/src/main/java/com/whyc/dto/AlmHis/BattAlarmRes.java
@@ -0,0 +1,25 @@
+package com.whyc.dto.AlmHis;
+
+import com.whyc.pojo.db_alarm.BattalarmDataHistory;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class BattAlarmRes implements Serializable {
+    private int battgroupId;//鐢垫睜缁刬d
+    private String stationName;//鏈烘埧鍚嶇О
+    private String provice;//鏈烘埧鍚嶇О
+    private String city;//鏈烘埧鍚嶇О
+    private String country;//鏈烘埧鍚嶇О
+    private String stationId;//鏈烘埧id
+    private String battGroupName;//鐢垫睜缁勫悕绉�
+    private List<BattalarmDataHistory> adataHs;//鍘嗗彶鍛婅淇℃伅
+}
diff --git a/src/main/java/com/whyc/dto/AlmHis/BattAlmPar.java b/src/main/java/com/whyc/dto/AlmHis/BattAlmPar.java
new file mode 100644
index 0000000..99e812d
--- /dev/null
+++ b/src/main/java/com/whyc/dto/AlmHis/BattAlmPar.java
@@ -0,0 +1,28 @@
+package com.whyc.dto.AlmHis;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+@Data
+public class BattAlmPar {
+    private String provice;
+    private String city;
+    private String country;
+    private String stationName;
+    private List<Integer> almIds;
+    private Integer almLevel;
+    private Integer pageNum;
+    private Integer pageSize;
+    private Integer uid;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almStartTime;//寮�濮嬫椂闂�
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almEndTime;//缁撴潫鏃堕棿
+
+    private String recordYear;
+    private Integer limitStart;
+    private Integer limitEnd;
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/AlmHis/DevAlmPar.java b/src/main/java/com/whyc/dto/AlmHis/DevAlmPar.java
new file mode 100644
index 0000000..0ca9529
--- /dev/null
+++ b/src/main/java/com/whyc/dto/AlmHis/DevAlmPar.java
@@ -0,0 +1,29 @@
+package com.whyc.dto.AlmHis;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class DevAlmPar {
+    private String provice;
+    private String city;
+    private String country;
+    private String stationName;
+    private List<Integer> almIds;
+    private Integer almLevel;
+    private Integer pageNum;
+    private Integer pageSize;
+    private Integer uid;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almStartTime;//寮�濮嬫椂闂�
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almEndTime;//缁撴潫鏃堕棿
+
+    private String recordYear;
+    private Integer limitStart;
+    private Integer limitEnd;
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/AlmHis/PwrAlmPar.java b/src/main/java/com/whyc/dto/AlmHis/PwrAlmPar.java
new file mode 100644
index 0000000..a27ffbc
--- /dev/null
+++ b/src/main/java/com/whyc/dto/AlmHis/PwrAlmPar.java
@@ -0,0 +1,28 @@
+package com.whyc.dto.AlmHis;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+@Data
+public class PwrAlmPar {
+    private String provice;
+    private String city;
+    private String country;
+    private String stationName;
+    private List<Integer> almIds;
+    private Integer almLevel;
+    private Integer pageNum;
+    private Integer pageSize;
+    private Integer uid;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almStartTime;//寮�濮嬫椂闂�
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almEndTime;//缁撴潫鏃堕棿
+
+    private String recordYear;
+    private Integer limitStart;
+    private Integer limitEnd;
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/Real/AlmDto.java b/src/main/java/com/whyc/dto/Real/AlmDto.java
index 59d47b4..283d164 100644
--- a/src/main/java/com/whyc/dto/Real/AlmDto.java
+++ b/src/main/java/com/whyc/dto/Real/AlmDto.java
@@ -1,7 +1,10 @@
 package com.whyc.dto.Real;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -11,8 +14,13 @@
     private String country;
     private String stationName;
     private List<Integer> almIds;
-    private String almLevel;
+    private Integer almLevel;
     private Integer pageNum;
     private Integer pageSize;
     private Integer uid;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almStartTime;//寮�濮嬫椂闂�
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date almEndTime;//缁撴潫鏃堕棿
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java b/src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java
index 7645737..57bcd20 100644
--- a/src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java
+++ b/src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java
@@ -11,7 +11,7 @@
     private static ThreadPoolExecutor init() {
         //绾跨▼姹犲垵濮嬪寲,鎷掔粷绛栫暐涓轰涪寮�
         UserThreadFactory userThreadFactory = new UserThreadFactory("br");
-        ThreadPoolExecutor pool = new ThreadPoolExecutor(8, 48, 10, TimeUnit.SECONDS, new LinkedBlockingDeque<>(16), userThreadFactory,new ThreadPoolExecutor.AbortPolicy());
+        ThreadPoolExecutor pool = new ThreadPoolExecutor(10, 48, 10, TimeUnit.SECONDS, new LinkedBlockingDeque<>(16), userThreadFactory,new ThreadPoolExecutor.AbortPolicy());
         poolExecutor = pool;
         return pool;
     }
diff --git a/src/main/java/com/whyc/mapper/CommonMapper.java b/src/main/java/com/whyc/mapper/CommonMapper.java
index 0ecd11a..9c7724c 100644
--- a/src/main/java/com/whyc/mapper/CommonMapper.java
+++ b/src/main/java/com/whyc/mapper/CommonMapper.java
@@ -19,7 +19,7 @@
     //Object getMaxValue(String schema,String table,String field,String valuePrefix);
     Object getMaxValue(@Param("schema") String schema,@Param("table") String table,@Param("field")  String field);
 
-    boolean existTable(String dbName, String tableName);
+    String existTable(String dbName, String tableName);
 
     //void truncate(String dbName, String tableName);
 
diff --git a/src/main/java/com/whyc/pojo/db_alarm/DevalarmDataHistory.java b/src/main/java/com/whyc/pojo/db_alarm/DevalarmDataHistory.java
index 703b2f9..a96765f 100644
--- a/src/main/java/com/whyc/pojo/db_alarm/DevalarmDataHistory.java
+++ b/src/main/java/com/whyc/pojo/db_alarm/DevalarmDataHistory.java
@@ -1,6 +1,7 @@
 package com.whyc.pojo.db_alarm;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -73,5 +74,15 @@
     @ApiModelProperty(value = "鍛婅閲嶈绛夌骇[0:閲嶈锛�1:绱ф�")
     private Integer almSeverity;
 
+    @TableField(exist = false)
+    private String stationName;
+    @TableField(exist = false)
+    private String provice;
+    @TableField(exist = false)
+    private String city;
+    @TableField(exist = false)
+    private String country;
+    @TableField(exist = false)
+    private String devName;
 
 }
diff --git a/src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmHistory.java b/src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmHistory.java
index 8869e19..5d1abb3 100644
--- a/src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmHistory.java
+++ b/src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmHistory.java
@@ -1,6 +1,7 @@
 package com.whyc.pojo.db_pwrdev_alarm;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -32,7 +33,7 @@
     private Long num;
 
     @ApiModelProperty(value = "鐢垫簮ID")
-    private Long powerId;
+    private Integer powerId;
 
     @ApiModelProperty(value = "鍛婅ID")
     private Integer almId;
@@ -67,5 +68,16 @@
     @ApiModelProperty(value = "鍛婅閲嶈绛夌骇[0:閲嶈锛�1:绱ф�")
     private Integer almSeverity;
 
+    @TableField(exist = false)
+    private String stationName;
+    @TableField(exist = false)
+    private String provice;
+    @TableField(exist = false)
+    private String city;
+    @TableField(exist = false)
+    private String country;
+    @TableField(exist = false)
+    private String powerName;
+
 
 }
diff --git a/src/main/java/com/whyc/service/AlarmHisService.java b/src/main/java/com/whyc/service/AlarmHisService.java
new file mode 100644
index 0000000..80b3964
--- /dev/null
+++ b/src/main/java/com/whyc/service/AlarmHisService.java
@@ -0,0 +1,80 @@
+package com.whyc.service;
+
+import com.github.pagehelper.PageInfo;
+import com.whyc.dto.AlmHis.BattAlmPar;
+import com.whyc.dto.AlmHis.DevAlmPar;
+import com.whyc.dto.AlmHis.PwrAlmPar;
+import com.whyc.dto.Real.AlmDto;
+import com.whyc.dto.Response;
+import com.whyc.pojo.db_user.User;
+import com.whyc.util.ActionUtil;
+import com.whyc.util.MessageUtils;
+import com.whyc.util.SubTablePageInfoUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class AlarmHisService {
+    @Resource
+    private SubTablePageInfoUtils subTablePageInfoUtils;
+    //鐢垫睜鍛婅鍘嗗彶璁板綍鏌ヨ
+    public Response getBattAlmHis(BattAlmPar almDto) throws ParseException, InterruptedException {
+        //鍒嗛〉淇℃伅
+        Integer pageNum = almDto.getPageNum();
+        Integer pageSize = almDto.getPageSize();
+        User uinf = ActionUtil.getUser();
+        int uid = uinf.getId();
+        almDto.setUid(uid);
+        Date almStartTime = almDto.getAlmStartTime();
+        Date almEndTime = almDto.getAlmEndTime();
+        PageInfo<Object> pageInfo = subTablePageInfoUtils.getPageInfoByMonthTable(pageNum, pageSize, almStartTime, almEndTime,
+                "db_alarm", "tb_battalarm_data_history", almDto);
+        List<Object> list = pageInfo.getList();
+        /*for (Object data : list) {
+            AlarmRes a = (AlarmRes) data;
+            List<BattalarmDataHistory> l = a.getAdataHs();
+            for (BattalarmDataHistory adataH : l) {
+                adataH.setAlmSignalIdName(AlarmDaoFactory.getAlarmName(adataH.getAlmSignalId()));
+                adataH.setAlmLevelName(AlarmDaoFactory.getAlarmType(adataH.getAlmLevel()));
+            }
+        }*/
+        return new Response().setII(1, list!=null, pageInfo, "鐢垫睜鍛婅鍘嗗彶璁板綍鏌ヨ");
+    }
+    //璁惧鍛婅鍘嗗彶璁板綍鏌ヨ
+    public Response getDevAlmHis(DevAlmPar almDto) throws ParseException, InterruptedException {
+        Integer pageNum = almDto.getPageNum();
+        Integer pageSize = almDto.getPageSize();
+        Date almStartTime = almDto.getAlmStartTime();
+        Date almEndTime = almDto.getAlmEndTime();
+        User uinf = ActionUtil.getUser();
+        int uid = uinf.getId();
+        almDto.setUid(uid);
+        PageInfo<Object> pageInfo = subTablePageInfoUtils.getPageInfoByMonthTable(pageNum, pageSize, almStartTime, almEndTime,
+                "db_alarm", "tb_devalarm_data_history", almDto);
+        return new Response().setII(1, pageInfo.getList()!=null, pageInfo, "杩斿洖缁撴灉");
+    }
+    //鐢垫簮鍛婅鍘嗗彶璁板綍鏌ヨ
+    public Response getPwrAlmHis(PwrAlmPar almDto) throws ParseException {
+        Integer pageNum = almDto.getPageNum();
+        Integer pageSize = almDto.getPageSize();
+        Date almStartTime = almDto.getAlmStartTime();
+        Date almEndTime = almDto.getAlmEndTime();
+        //recordId = 1 鏅�氱數婧�
+        //param.setRecordId(1L);
+        User uinf = ActionUtil.getUser();
+        int uid = uinf.getId();
+        almDto.setUid(uid);
+        PageInfo<Object> pageInfo = subTablePageInfoUtils.getPageInfo(pageNum, pageSize, almStartTime, almEndTime,
+                "db_pwrdev_alarm", "tb_pwrdev_alarm_history", almDto);
+        List<Object> list = pageInfo.getList();
+        /*for (Object temp : list) {
+            PwrdevAlarmHistory p = (PwrdevAlarmHistory) temp;
+            p.setAlarmName(AlarmDaoFactory.getAllAlarmName(p.getAlmType()));
+        }*/
+        return new Response<>().setII(1, pageInfo, null, "鐢垫簮鍛婅鍘嗗彶璁板綍鏌ヨ");
+    }
+}
\ 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 40fba41..46fb3dd 100644
--- a/src/main/java/com/whyc/service/SubTablePageInfoService.java
+++ b/src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -1,290 +1,440 @@
-//package com.whyc.service;
-//
-//import com.whyc.dto.DevA200AlarmDto;
-//import com.whyc.mapper.CallBack;
-//import com.whyc.pojo.db_alarm.DevLithiumAlarmDataYear;
-//import com.whyc.pojo.db_lithium_testdata.BattLithiumTestData;
-//import com.whyc.util.ThreadLocalUtil;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Service;
-//
-//import java.sql.ResultSet;
-//import java.sql.SQLException;
-//import java.util.ArrayList;
-//import java.util.LinkedList;
-//import java.util.List;
-//
-//@Service
-//public class SubTablePageInfoService {
-//    @Autowired
-//    private MybatisSqlExecuteService sqlExecuteService;
-//    //鑾峰彇璁惧鏌愭璁板綍璇︾粏鐨勫崟浣撴斁鐢佃繃绋�
-//    public List<BattLithiumTestData> getTdataById(Integer devId, Integer testRecordCount) {
-//        String sql="select  * from db_batt_testdata.tb_batttestdata_" +devId
-//                +" where need_test=1 and test_record_count="+testRecordCount+" ";
-//        sql+="  ORDER BY record_num asc ";
-//        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
-//            @Override
-//            public List getResults(ResultSet rs) throws SQLException {
-//                List<BattLithiumTestData> list=new ArrayList<>();
-//                while (rs.next()){
-//                    BattLithiumTestData tdata=new BattLithiumTestData();
-//                    tdata.setNum(rs.getInt("num"));
-//                    tdata.setDevId(rs.getInt("dev_id"));
-//                    tdata.setBattIdx(rs.getInt("batt_idx"));
-//                    tdata.setTestRecordCount(rs.getInt("test_record_count"));
-//                    tdata.setTestType(rs.getInt("test_type"));
-//                    tdata.setRecordNum(rs.getInt("record_num"));
-//                    tdata.setTestStarttime(rs.getTimestamp("test_starttime"));
-//                    tdata.setRecordTime(rs.getTimestamp("record_time"));
-//                    tdata.setTestTimelong(rs.getInt("test_timelong"));
-//                    tdata.setGroupVol(rs.getDouble("group_vol"));
-//                    tdata.setTestCurr(rs.getDouble("test_curr"));
-//                    tdata.setTestCap(rs.getDouble("test_cap"));
-//                    tdata.setMonNum(rs.getInt("mon_num"));
-//                    tdata.setMonVol(rs.getDouble("mon_vol"));
-//                    tdata.setMonTmp(rs.getDouble("mon_tmp"));
-//                    tdata.setMonCurr(rs.getDouble("mon_curr"));
-//                    tdata.setMonCap(rs.getDouble("mon_cap"));
-//                    tdata.setMonWh(rs.getDouble("mon_wh"));
-//                    tdata.setMonState(rs.getString("mon_state"));
-//                    tdata.setMonFault(rs.getString("mon_fault"));
-//                    tdata.setNeedTest(rs.getInt("need_test"));
-//                    list.add(tdata);
-//                }
-//                return list;
-//            }
-//        });
-//        return list;
-//    }
-//
-//    //鑾峰彇璁惧鏌愭璁板綍璇︾粏鐨勫崟浣撴斁鐢佃繃绋�
-//    public List<BattLithiumTestData> getTdataByIdWithListA200(Integer devId, Integer testRecordCount) {
-//        String sql="select  * from db_lithium_testdata.tb_batttestdata_" +devId
-//                +" where need_test=1 and test_record_count="+testRecordCount+" ";
-//        sql+="  ORDER BY record_num asc ";
-//        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
-//            @Override
-//            public List getResults(ResultSet rs) throws SQLException {
-//                List list=new ArrayList<>();
-//                List<Float> monVols=null;
-//                List<Integer> monNums=null;
-//                BattLithiumTestData tdata=null;
-//                int num=0;
-//                try {
-//                    while (rs.next()){
-//                        int monNum=rs.getInt("mon_num");
-//                        float monvol=rs.getFloat("mon_vol");
-//                        int recordNum=rs.getInt("record_num");
-//                        if(num!=recordNum){
-//                            if(num!=0){
-//                                tdata.setMonVols(monVols);
-//                                tdata.setMonNums(monNums);
-//                                list.add(tdata);
-//                            }
-//                            tdata=new BattLithiumTestData();
-//                            monVols=new ArrayList<>();
-//                            monNums=new ArrayList<>();
-//                            tdata.setDevId(rs.getInt("dev_id"));
-//                            tdata.setBattIdx(rs.getInt("batt_idx"));
-//                            tdata.setTestRecordCount(rs.getInt("test_record_count"));
-//                            tdata.setTestType(rs.getInt("test_type"));
-//                            tdata.setRecordNum(recordNum);
-//                            tdata.setTestStarttime(rs.getTimestamp("test_starttime"));
-//                            tdata.setRecordTime(rs.getTimestamp("record_time"));
-//                            tdata.setTestTimelong(rs.getInt("test_timelong"));
-//                            tdata.setGroupVol(rs.getDouble("group_vol"));
-//                            tdata.setTestCurr(rs.getDouble("test_curr"));
-//                            tdata.setTestCap(rs.getDouble("test_cap"));
-//                            tdata.setNeedTest(rs.getInt("need_test"));
-//                            tdata.setMaxTemp(rs.getFloat("max_temp"));
-//                            tdata.setMinTemp(rs.getFloat("min_temp"));
-//                            num=recordNum;
-//                        }
-//                        monVols.add(monvol);
-//                        monNums.add(monNum);
-//                    }
-//                    tdata.setMonVols(monVols);
-//                    tdata.setMonNums(monNums);
-//                    list.add(tdata);
-//                } catch (SQLException e) {
-//                    e.printStackTrace();
-//                }
-//                return list;
-//            }
-//        });
-//        return list;
-//    }
-//    //鏌ヨDevAlm鍘嗗彶鍛婅鏁伴噺
-//    public int getCountForDevAlm(DevA200AlarmDto dto) {
-//        String sql="select  count(distinct num) as number from db_alarm." +dto.getTableName()
-//                +" where 1=1 ";
-//
-//        if(dto.getStartTime()!=null){
-//            sql+=" and alm_starttime  >='"+ ThreadLocalUtil.format(dto.getStartTime(),1)+"' ";
-//        }
-//        if(dto.getEndTime()!=null){
-//            sql+=" and alm_endtime  <='"+ThreadLocalUtil.format(dto.getEndTime(),1)+"' ";
-//        }
-//        if(dto.getDevType()!=null){
-//           sql+=" and  FLOOR(dev_id/100000000)="+dto.getDevType();
-//        }
-//        if(dto.getDevId()!=null){
-//            sql+=" and  dev_id="+dto.getDevId();
-//        }
-//        if(dto.getAlmId()!=null){
-//            sql+=" and alm_id="+dto.getAlmId();
-//        }
-//        sql+=" and dev_id in (" +
-//                "            SELECT distinct dev_id from db_user.tb_battgroup_baojigroup,db_user.tb_battgroup_usr" +
-//                "            where tb_battgroup_baojigroup.baoji_group_id=tb_battgroup_usr.baoji_group_id" +
-//                "           and uid="+dto.getUid()+
-//                ")";
-//        sql+="  order by alm_starttime desc ";
-//        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
-//            @Override
-//            public List getResults(ResultSet rs) throws SQLException {
-//                LinkedList<Object> temp = new LinkedList<>();
-//                try {
-//                    while (rs.next())
-//                        temp.add(rs.getInt("number"));
-//                } catch (SQLException e) {
-//                    e.printStackTrace();
-//                }
-//                return temp;
-//            }
-//        });
-//        int num =0;
-//        if(list!=null){
-//            num= (int) list.get(0);
-//        }
-//        return num;
-//    }
-//    //鏌ヨdevalm鍘嗗彶鍛婅
-//    public List getListDevAlm(DevA200AlarmDto dto){
-//        String sql="select  * from db_alarm." +dto.getTableName()
-//                +" where 1=1 ";
-//
-//        if(dto.getStartTime()!=null){
-//            sql+=" and alm_starttime  >='"+ ThreadLocalUtil.format(dto.getStartTime(),1)+"' ";
-//        }
-//        if(dto.getEndTime()!=null){
-//            sql+=" and alm_endtime  <='"+ThreadLocalUtil.format(dto.getEndTime(),1)+"' ";
-//        }
-//        if(dto.getDevType()!=null){
-//            sql+=" and  FLOOR(dev_id/100000000)="+dto.getDevType();
-//        }
-//        if(dto.getDevId()!=null){
-//            sql+=" and  dev_id="+dto.getDevId();
-//        }
-//        if(dto.getAlmId()!=null){
-//            sql+=" and alm_id="+dto.getAlmId();
-//        }
-//        sql+=" and dev_id in (" +
-//                "            SELECT distinct dev_id from db_user.tb_battgroup_baojigroup,db_user.tb_battgroup_usr" +
-//                "           where tb_battgroup_baojigroup.baoji_group_id=tb_battgroup_usr.baoji_group_id" +
-//                "           and uid="+dto.getUid()+
-//                ")";
-//        sql+="  ORDER BY alm_starttime desc  limit "+dto.getLimitStart()+","+dto.getLimitEnd()+" ";
-//        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
-//            @Override
-//            public List getResults(ResultSet rs) throws SQLException {
-//                List<DevLithiumAlarmDataYear> list=new ArrayList<>();
-//                while (rs.next()){
-//                    DevLithiumAlarmDataYear dataYear=new DevLithiumAlarmDataYear();
-//                    dataYear.setNum(rs.getInt("num"));
-//                    dataYear.setDevId(rs.getInt("dev_id"));
-//                    dataYear.setAlmId(rs.getInt("alm_id"));
-//                    dataYear.setAlmSignalId(rs.getInt("alm_signal_id"));
-//                    dataYear.setAlmStarttime(rs.getTimestamp("alm_starttime"));
-//                    dataYear.setAlmValue(rs.getFloat("alm_value"));
-//                    dataYear.setAlmIsConfirmed(rs.getInt("alm_is_confirmed"));
-//                    dataYear.setConfirmedUid(rs.getInt("confirmed_uid"));
-//                    dataYear.setConfirmedTime(rs.getTimestamp("confirmed_time"));
-//                    dataYear.setAlmEndtime(rs.getTimestamp("alm_endtime"));
-//                    dataYear.setAlmClearedType(rs.getInt("alm_cleared_type"));
-//                    list.add(dataYear);
-//                }
-//                return list;
-//            }
-//        });
-//        return list;
-//    }
-//
-//
-//    public List<BattLithiumTestData> getTdataByIdWithListActm(Integer devId, Integer testRecordCount) {
-//        String sql="select  * from db_batt_testdata.tb_batttestdata_" +devId
-//                +" where need_test=1 and test_record_count="+testRecordCount+" ";
-//        sql+="  ORDER BY record_num asc ";
-//        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
-//            @Override
-//            public List getResults(ResultSet rs) throws SQLException {
-//                List list=new ArrayList<>();
-//                List<Float> monVols=null;
-//                List<Float> monCurrs=null;
-//                List<Float> monCaps=null;
-//                List<Float> monWhs=null;
-//                List<Integer> monNums=null;
-//                BattLithiumTestData tdata=null;
-//                int num=0;
-//                try {
-//                    while (rs.next()){
-//                        int monNum=rs.getInt("mon_num");
-//                        float monvol=rs.getFloat("mon_vol");
-//                        float monCurr=rs.getFloat("mon_curr");
-//                        float monCap=rs.getFloat("mon_cap");
-//                        float monWh=rs.getFloat("mon_wh");
-//                        int recordNum=rs.getInt("record_num");
-//
-//                        if(num!=recordNum){
-//                            if(num!=0){
-//                                tdata.setMonVols(monVols);
-//                                tdata.setMonNums(monNums);
-//                                tdata.setMonCurrs(monCurrs);
-//                                tdata.setMonCaps(monCaps);
-//                                tdata.setMonWhs(monWhs);
-//                                list.add(tdata);
-//                            }
-//                            tdata=new BattLithiumTestData();
-//                            monVols=new ArrayList<>();
-//                            monNums=new ArrayList<>();
-//                            monCurrs=new ArrayList<>();
-//                            monCaps=new ArrayList<>();
-//                            monWhs=new ArrayList<>();
-//                            tdata.setDevId(rs.getInt("dev_id"));
-//                            tdata.setBattIdx(rs.getInt("batt_idx"));
-//                            tdata.setTestRecordCount(rs.getInt("test_record_count"));
-//                            tdata.setTestType(rs.getInt("test_type"));
-//                            tdata.setRecordNum(recordNum);
-//                            tdata.setTestStarttime(rs.getTimestamp("test_starttime"));
-//                            tdata.setRecordTime(rs.getTimestamp("record_time"));
-//                            tdata.setTestTimelong(rs.getInt("test_timelong"));
-//                            tdata.setGroupVol(rs.getDouble("group_vol"));
-//                            tdata.setTestCurr(rs.getDouble("test_curr"));
-//                            tdata.setTestCap(rs.getDouble("test_cap"));
-//                            tdata.setNeedTest(rs.getInt("need_test"));
-//                            tdata.setMonTmp(rs.getDouble("mon_tmp"));
-//                            num=recordNum;
-//                        }
-//                        monVols.add(monvol);
-//                        monNums.add(monNum);
-//                        monCurrs.add(monCurr);
-//                        monCaps.add(monCap);
-//                        monWhs.add(monWh);
-//                    }
-//
-//                    tdata.setMonVols(monVols);
-//                    tdata.setMonNums(monNums);
-//                    tdata.setMonCurrs(monCurrs);
-//                    tdata.setMonCaps(monCaps);
-//                    tdata.setMonWhs(monWhs);
-//                    list.add(tdata);
-//                } catch (SQLException e) {
-//                    e.printStackTrace();
-//                }
-//                return list;
-//            }
-//        });
-//        return list;
-//    }
-//}
+package com.whyc.service;
+
+import com.whyc.dto.AlmHis.BattAlarmRes;
+import com.whyc.dto.AlmHis.BattAlmPar;
+import com.whyc.dto.AlmHis.DevAlmPar;
+import com.whyc.dto.AlmHis.PwrAlmPar;
+import com.whyc.mapper.CallBack;
+import com.whyc.pojo.db_alarm.BattalarmDataHistory;
+import com.whyc.pojo.db_alarm.DevalarmDataHistory;
+import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarmHistory;
+import com.whyc.util.ThreadLocalUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+@Service
+public class SubTablePageInfoService {
+    @Autowired
+    private MybatisSqlExecuteService sqlExecuteService;
+
+
+
+    //鑾峰彇鐢垫睜缁勫巻鍙插憡璀︽暟閲�
+    public int getBattAlmHisCount(BattAlmPar param){
+        String sql="select count(distinct history.num) as number " +
+                "        from db_alarm."+param.getRecordYear()+" history,db_station.tb_station_inf,db_station.tb_batt_inf " +
+                "        where  history.battgroup_id=tb_battinf.battgroup_id " +
+                 "       and tb_batt_inf.station_id=tb_station_inf.station_id " +
+                "        and alm_start_time>='"+ThreadLocalUtil.format(param.getAlmStartTime(),1)+"' and alm_start_time <='"+ThreadLocalUtil.format(param.getAlmEndTime(),1)+"'  " ;
+        if(param.getProvice()!=null){
+            sql+=" and tb_station_inf.province='"+param.getProvice()+"' ";
+        }
+        if(param.getCity()!=null){
+            sql+=" and tb_station_inf.city='"+param.getCity()+"' ";
+        }
+        if(param.getCountry()!=null){
+            sql+=" and tb_station_inf.country='"+param.getCountry()+"' ";
+        }
+        if(param.getStationName()!=null){
+            sql+=" and tb_station_inf.station_name like '%"+param.getStationName()+"%' ";
+        }
+        if(param.getAlmLevel()!=null){
+            sql+=" and history.alm_level="+param.getAlmLevel()+" ";
+        }
+        List<Integer> almIds=param.getAlmIds();
+        if(almIds!=null&&almIds.size()>0){
+            sql+=" and history.alm_id in ( ";
+            for (int i=0;i<almIds.size();i++) {
+                sql+=almIds.get(i);
+                if(i!=(almIds.size()-1)){
+                    sql+=",";
+                }
+            }
+            sql+=")";
+        }
+        if(param.getUid()>100){
+            sql+=" and tb_batt_inf.station_id  in(" +
+            "            select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr " +
+            "            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id " +
+            "            and tb_baojigroup_usr.uid="+param.getUid()+
+            "            )";
+        }
+        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                LinkedList<Object> temp = new LinkedList<>();
+                try {
+                    while (rs.next())
+                        temp.add(rs.getInt("number"));
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                }
+                return temp;
+            }
+        });
+        int num =0;
+        if(list!=null){
+            num= (int) list.get(0);
+        }
+        return num;
+    }
+    //鑾峰彇鐢垫睜缁勫巻鍙插憡璀﹂泦鍚�
+    public List<BattAlarmRes> getBattAlmHisList(BattAlmPar param){
+        String sql="select history.battgroup_id,history.num,alm_signal_id,history.mon_num,alm_value,alm_level,alm_is_confirmed,alm_confirmed_time,alm_start_time,alm_end_time,alm_severity  " +
+                "        ,tb_station_inf.station_name,tb_station_inf.provice,tb_station_inf.city,tb_station_inf.country,tb_batt_inf.battgroup_name  " +
+                "        from db_alarm."+param.getRecordYear()+" history,db_station.tb_station_inf,db_station.tb_batt_inf " +
+                "        where  history.battgroup_id=tb_battinf.battgroup_id " +
+                "       and tb_batt_inf.station_id=tb_station_inf.station_id " +
+                "        and alm_start_time>='"+ThreadLocalUtil.format(param.getAlmStartTime(),1)+"' and alm_start_time <='"+ThreadLocalUtil.format(param.getAlmEndTime(),1)+"'  " ;
+        if(param.getProvice()!=null){
+            sql+=" and tb_station_inf.province='"+param.getProvice()+"' ";
+        }
+        if(param.getCity()!=null){
+            sql+=" and tb_station_inf.city='"+param.getCity()+"' ";
+        }
+        if(param.getCountry()!=null){
+            sql+=" and tb_station_inf.country='"+param.getCountry()+"' ";
+        }
+        if(param.getStationName()!=null){
+            sql+=" and tb_station_inf.station_name like '%"+param.getStationName()+"%' ";
+        }
+        if(param.getAlmLevel()!=null){
+            sql+=" and history.alm_level="+param.getAlmLevel()+" ";
+        }
+        List<Integer> almIds=param.getAlmIds();
+        if(almIds!=null&&almIds.size()>0){
+            sql+=" and history.alm_id in ( ";
+            for (int i=0;i<almIds.size();i++) {
+                sql+=almIds.get(i);
+                if(i!=(almIds.size()-1)){
+                    sql+=",";
+                }
+            }
+            sql+=")";
+        }
+        if(param.getUid()>100){
+            sql+=" and tb_batt_inf.station_id  in(" +
+                    "            select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr " +
+                    "            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id " +
+                    "            and tb_baojigroup_usr.uid="+param.getUid()+
+                    "            )";
+        }
+        sql+="   order by history.alm_start_time desc,history.battgroup_id asc,history.mon_num asc limit "+param.getLimitStart()+","+param.getLimitEnd()+" ";
+
+        List<BattAlarmRes> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<BattAlarmRes> list=new ArrayList<>();
+                int id=0;
+                int i=0;
+                List dataList=new ArrayList();
+                BattAlarmRes ph=new BattAlarmRes();
+                while (rs.next()){
+                    int battGroupId=rs.getInt("battgroup_id");
+                    if(battGroupId!=id){
+                        ph.setAdataHs(dataList);
+                        dataList=new ArrayList();
+                    }
+                    BattalarmDataHistory data=new BattalarmDataHistory();
+                    data.setNum(rs.getLong("num"));
+                    data.setBattgroupId(rs.getInt("battgroup_id"));
+                    data.setAlmSignalId(rs.getInt("alm_signal_id"));
+                    data.setMonNum(rs.getInt("mon_num"));
+                    data.setAlmValue(rs.getFloat("alm_value"));
+                    data.setAlmLevel(rs.getInt("alm_level"));
+                    data.setAlmIsConfirmed(rs.getInt("alm_is_confirmed"));
+                    data.setAlmConfirmedTime(rs.getTimestamp("alm_confirmed_time"));
+                    data.setAlmStartTime(rs.getTimestamp("alm_start_time"));
+                    data.setAlmEndTime(rs.getTimestamp("alm_end_time"));
+                    data.setAlmSeverity(rs.getInt("alm_severity"));
+                    dataList.add(data);
+                    if(battGroupId!=id){
+                        if(i!=0){
+                            list.add(ph);
+                        }
+                        id=battGroupId;
+                        ph=new BattAlarmRes();
+                        ph.setBattgroupId(battGroupId);
+                        ph.setStationName(rs.getString("station_name"));
+                        ph.setProvice(rs.getString("provice"));
+                        ph.setCity(rs.getString("city"));
+                        ph.setCountry(rs.getString("country"));
+                        ph.setBattGroupName(rs.getString("battgroup_name"));
+                    }
+                    if(rs.isLast()){
+                        ph.setAdataHs(dataList);
+                        list.add(ph);
+                    }
+                    i++;
+                }
+                return list;
+            }
+        });
+        return list;
+    }
+
+    //鑾峰彇璁惧鍘嗗彶鍛婅鏁伴噺
+    public int getDevAlmHisCount(DevAlmPar param){
+        String sql="SELECT count(distinct history.num) as number FROM db_alarm."+param.getRecordYear()+" history,db_station.tb_batt_inf,db_station.tb_station_inf " +
+                " where  history.dev_id=tb_batt_inf.dev_id "+
+                " and tb_batt_inf.station_id=tb_station_inf.station_id "+
+                " and alm_start_time>='"+ThreadLocalUtil.format(param.getAlmStartTime(),1)+"' and alm_start_time <='"+ThreadLocalUtil.format(param.getAlmEndTime(),1)+"'  " ;
+        if(param.getProvice()!=null){
+            sql+=" and tb_station_inf.province='"+param.getProvice()+"' ";
+        }
+        if(param.getCity()!=null){
+            sql+=" and tb_station_inf.city='"+param.getCity()+"' ";
+        }
+        if(param.getCountry()!=null){
+            sql+=" and tb_station_inf.country='"+param.getCountry()+"' ";
+        }
+        if(param.getStationName()!=null){
+            sql+=" and tb_station_inf.station_name like '%"+param.getStationName()+"%' ";
+        }
+        if(param.getAlmLevel()!=null){
+            sql+=" and history.alm_level="+param.getAlmLevel()+" ";
+        }
+        List<Integer> almIds=param.getAlmIds();
+        if(almIds!=null&&almIds.size()>0){
+            sql+=" and history.alm_id in ( ";
+            for (int i=0;i<almIds.size();i++) {
+                sql+=almIds.get(i);
+                if(i!=(almIds.size()-1)){
+                    sql+=",";
+                }
+            }
+            sql+=")";
+        }
+        if(param.getUid()>100){
+            sql+=" and tb_batt_inf.station_id  in(" +
+                    "            select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr " +
+                    "            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id " +
+                    "            and tb_baojigroup_usr.uid="+param.getUid()+
+                    "            )";
+        }
+        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                LinkedList<Object> temp = new LinkedList<>();
+                try {
+                    while (rs.next())
+                        temp.add(rs.getInt("number"));
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                }
+                return temp;
+            }
+        });
+        int num =0;
+        if(list!=null){
+            num= (int) list.get(0);
+        }
+        return num;
+    }
+    //鑾峰彇璁惧鍘嗗彶鍛婅闆嗗悎
+    public List getDevAlmHisList(DevAlmPar param){
+        String sql="SELECT  history.num,dev_id,dev_ip,alm_level,alm_start_time,alm_end_time,alm_is_confirmed,alm_confirmed_time,alm_cleared_type,alm_severity, " +
+                "   tb_station_inf.station_name,tb_station_inf.provice,tb_station_inf.city,tb_station_inf.country,tb_batt_inf.dev_name  " +
+                "   FROM db_alarm."+param.getRecordYear()+" history,db_station.tb_batt_inf,db_station.tb_station_inf " +
+                " where  history.dev_id=tb_batt_inf.dev_id "+
+                " and tb_batt_inf.station_id=tb_station_inf.station_id "+
+                " and alm_start_time>='"+ThreadLocalUtil.format(param.getAlmStartTime(),1)+"' and alm_start_time <='"+ThreadLocalUtil.format(param.getAlmEndTime(),1)+"'  " ;
+        if(param.getProvice()!=null){
+            sql+=" and tb_station_inf.province='"+param.getProvice()+"' ";
+        }
+        if(param.getCity()!=null){
+            sql+=" and tb_station_inf.city='"+param.getCity()+"' ";
+        }
+        if(param.getCountry()!=null){
+            sql+=" and tb_station_inf.country='"+param.getCountry()+"' ";
+        }
+        if(param.getStationName()!=null){
+            sql+=" and tb_station_inf.station_name like '%"+param.getStationName()+"%' ";
+        }
+        if(param.getAlmLevel()!=null){
+            sql+=" and history.alm_level="+param.getAlmLevel()+" ";
+        }
+        List<Integer> almIds=param.getAlmIds();
+        if(almIds!=null&&almIds.size()>0){
+            sql+=" and history.alm_id in ( ";
+            for (int i=0;i<almIds.size();i++) {
+                sql+=almIds.get(i);
+                if(i!=(almIds.size()-1)){
+                    sql+=",";
+                }
+            }
+            sql+=")";
+        }
+        if(param.getUid()>100){
+            sql+=" and tb_batt_inf.station_id  in(" +
+                    "            select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr " +
+                    "            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id " +
+                    "            and tb_baojigroup_usr.uid="+param.getUid()+
+                    "            )";
+        }
+        sql+="   order by history.alm_start_time desc,history.dev_id asc limit "+param.getLimitStart()+","+param.getLimitEnd()+" ";
+        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<DevalarmDataHistory> list=new ArrayList<>();
+                while (rs.next()){
+                    DevalarmDataHistory ph=new DevalarmDataHistory();
+                    ph.setNum(rs.getLong("num"));
+                    ph.setDevId(rs.getInt("dev_id"));
+                    ph.setDevIp(rs.getString("dev_ip"));
+                    ph.setAlmLevel(rs.getInt("alm_level"));
+                    ph.setAlmStartTime(rs.getTimestamp("alm_start_time"));
+                    ph.setAlmEndTime(rs.getTimestamp("alm_end_time"));
+                    ph.setAlmIsConfirmed(rs.getInt("alm_is_confirmed"));
+                    ph.setAlmConfirmedTime(rs.getTimestamp("alm_confirmed_time"));
+                    ph.setAlmClearedType(rs.getInt("alm_cleared_type"));
+                    ph.setDevName(rs.getString("dev_name"));
+                    ph.setStationName(rs.getString("station_name"));
+                    ph.setProvice(rs.getString("provice"));
+                    ph.setCity(rs.getString("city"));
+                    ph.setCountry(rs.getString("country"));
+                    list.add(ph);
+                }
+                return list;
+            }
+        });
+        return list;
+    }
+    //鐢垫簮鍘嗗彶鍛婅鏁�
+    public int getPwrAlmHisCount(PwrAlmPar param){
+        String sql="select  count(distinct alarm.num) as number from db_pwrdev_alarm."+param.getRecordYear()+" alarm" +
+                ",db_station.tb_power_inf,db_station.tb_station_inf " +
+                "  where alarm.power_id = tb_power_inf.power_id " +
+                "  and  tb_power_inf.station_id=tb_station_inf.station_id "+
+                " and alm_start_time>='"+ThreadLocalUtil.format(param.getAlmStartTime(),1)+"' and alm_start_time <='"+ThreadLocalUtil.format(param.getAlmEndTime(),1)+"'  " ;
+        if(param.getProvice()!=null){
+            sql+=" and tb_station_inf.province='"+param.getProvice()+"' ";
+        }
+        if(param.getCity()!=null){
+            sql+=" and tb_station_inf.city='"+param.getCity()+"' ";
+        }
+        if(param.getCountry()!=null){
+            sql+=" and tb_station_inf.country='"+param.getCountry()+"' ";
+        }
+        if(param.getStationName()!=null){
+            sql+=" and tb_station_inf.station_name like '%"+param.getStationName()+"%' ";
+        }
+        if(param.getAlmLevel()!=null){
+            sql+=" and history.alm_level="+param.getAlmLevel()+" ";
+        }
+        List<Integer> almIds=param.getAlmIds();
+        if(almIds!=null&&almIds.size()>0){
+            sql+=" and history.alm_id in ( ";
+            for (int i=0;i<almIds.size();i++) {
+                sql+=almIds.get(i);
+                if(i!=(almIds.size()-1)){
+                    sql+=",";
+                }
+            }
+            sql+=")";
+        }
+        if(param.getUid()>100){
+            sql+=" and tb_power_inf.power_id  in(" +
+                    "            select distinct power_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr " +
+                    "            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id " +
+                    "            and tb_baojigroup_usr.uid="+param.getUid()+
+                    "            )";
+        }
+        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                LinkedList<Object> temp = new LinkedList<>();
+                try {
+                    while (rs.next())
+                        temp.add(rs.getInt("number"));
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                }
+                return temp;
+            }
+        });
+        int num =0;
+        if(list!=null){
+            num= (int) list.get(0);
+        }
+        return num;
+    }
+    //鐢垫簮鍘嗗彶鍛婅闆嗗悎
+    public List<PwrdevAlarmHistory> getPwrAlmHisList(PwrAlmPar param){
+        String sql="select  alarm.*," +
+                "  tb_station_inf.station_name,tb_station_inf.provice,tb_station_inf.city,tb_station_inf.country,tb_power_inf.power_name  " +
+                " from db_pwrdev_alarm."+param.getRecordYear()+" alarm" +
+                ",db_station.tb_power_inf,db_station.tb_station_inf " +
+                "  where alarm.power_id = tb_power_inf.power_id " +
+                "  and  tb_power_inf.station_id=tb_station_inf.station_id "+
+                " and alm_start_time>='"+ThreadLocalUtil.format(param.getAlmStartTime(),1)+"' and alm_start_time <='"+ThreadLocalUtil.format(param.getAlmEndTime(),1)+"'  " ;
+        if(param.getProvice()!=null){
+            sql+=" and tb_station_inf.province='"+param.getProvice()+"' ";
+        }
+        if(param.getCity()!=null){
+            sql+=" and tb_station_inf.city='"+param.getCity()+"' ";
+        }
+        if(param.getCountry()!=null){
+            sql+=" and tb_station_inf.country='"+param.getCountry()+"' ";
+        }
+        if(param.getStationName()!=null){
+            sql+=" and tb_station_inf.station_name like '%"+param.getStationName()+"%' ";
+        }
+        if(param.getAlmLevel()!=null){
+            sql+=" and history.alm_level="+param.getAlmLevel()+" ";
+        }
+        List<Integer> almIds=param.getAlmIds();
+        if(almIds!=null&&almIds.size()>0){
+            sql+=" and history.alm_id in ( ";
+            for (int i=0;i<almIds.size();i++) {
+                sql+=almIds.get(i);
+                if(i!=(almIds.size()-1)){
+                    sql+=",";
+                }
+            }
+            sql+=")";
+        }
+        if(param.getUid()>100){
+            sql+=" and tb_power_inf.power_id  in(" +
+                    "            select distinct power_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr " +
+                    "            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id " +
+                    "            and tb_baojigroup_usr.uid="+param.getUid()+
+                    "            )";
+        }
+        sql+="order by alarm.alm_start_time desc limit "+param.getLimitStart()+","+param.getLimitEnd()+" ";
+        List<PwrdevAlarmHistory> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<PwrdevAlarmHistory> list=new ArrayList<>();
+                while (rs.next()){
+                    PwrdevAlarmHistory ph=new PwrdevAlarmHistory();
+                    ph.setNum(rs.getLong("num"));
+                    ph.setPowerId(rs.getInt("power_id"));
+                    ph.setPowerName(rs.getString("power_name"));
+                    ph.setAlmLevel(rs.getInt("alm_level"));
+                    ph.setAlmStartTime(rs.getTimestamp("alm_start_time"));
+                    ph.setAlmEndTime(rs.getTimestamp("alm_end_time"));
+                    ph.setAlmValue(rs.getFloat("alm_value"));
+                    ph.setAlmIsConfirmed(rs.getInt("alm_is_confirmed"));
+                    ph.setAlmConfirmedTime(rs.getTimestamp("alm_confirmed_time"));
+                    ph.setAlmClearedType(rs.getInt("alm_cleared_type"));
+                    ph.setUsrId(rs.getInt("usr_Id"));
+                    ph.setAlmTrigger(rs.getInt("alm_trigger"));
+                    ph.setAlmSeverity(rs.getInt("alm_severity"));
+                    ph.setStationName(rs.getString("station_name"));
+                    ph.setProvice(rs.getString("provice"));
+                    ph.setCity(rs.getString("city"));
+                    ph.setCountry(rs.getString("country"));
+                    list.add(ph);
+                }
+                return list;
+            }
+        });
+        return  list;
+    }
+
+}
diff --git a/src/main/java/com/whyc/util/SubTablePageInfoUtil.java b/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
deleted file mode 100644
index 1b24f82..0000000
--- a/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
+++ /dev/null
@@ -1,352 +0,0 @@
-//package com.whyc.util;
-//
-//import com.github.pagehelper.PageInfo;
-//import com.whyc.constant.DevAlmEnum;
-//import com.whyc.dto.DevA200AlarmDto;
-//import com.whyc.factory.ThreadPoolExecutorFactory;
-//import com.whyc.mapper.CommonMapper;
-//import com.whyc.pojo.db_alarm.BattAlarmHistory;
-//import com.whyc.pojo.db_alarm.DevLithiumAlarmDataYear;
-//import com.whyc.pojo.db_lithium_ram_db.DevLithiumInf;
-//import com.whyc.pojo.db_power_alarm.PowerAlarmHistory;
-//import com.whyc.pojo.db_power_history.BattRealTimeDataHistory;
-//import com.whyc.pojo.db_power_history.BattStationTempHistory;
-//import com.whyc.pojo.db_power_history.PowerRealTimeDataHistory;
-//import com.whyc.pojo.db_user.UserInf;
-//import com.whyc.service.DevLithiumInfService;
-//import com.whyc.service.SubTableService;
-//import com.whyc.service.UserInfService;
-//import org.springframework.beans.BeanUtils;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//
-//import java.text.ParseException;
-//import java.util.*;
-//import java.util.concurrent.CountDownLatch;
-//import java.util.concurrent.ThreadPoolExecutor;
-//import java.util.regex.Pattern;
-//import java.util.stream.Collectors;
-//
-///**
-// * 鏁版嵁閲忔瀬澶х殑琛�,鎸夌収骞翠唤鍒嗚〃,鍒嗛〉鏌ヨ鏃惰幏鍙栨暟鎹�
-// */
-//@Component
-//public class SubTablePageInfoUtil {
-//    @Autowired(required = false)
-//    private CommonMapper commonMapper;
-//
-//    @Autowired
-//    private SubTableService service;
-//
-//    @Autowired
-//    private DevLithiumInfService devLithiumInfService;
-//
-//    @Autowired
-//    private UserInfService userInfService;
-//
-//    /**鎸夊勾浠借〃鍒嗛〉鏌ヨ*/
-//    public PageInfo<Object> getPageInfo(int pageNum,int pageSize,
-//                                        Date startTime,Date endTime,
-//                                        String dbName,String tablePrefix,
-//                                        Object pojo) throws ParseException {
-//        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesDescWithOutDefault(startTime, endTime);
-//        //鏌ヨ鍒嗚〃鏄惁瀛樺湪,瀛樺湪鍒欐煡璇㈢粨鏋�
-//        Map<String,Integer> queryCountMap = new LinkedHashMap<>();
-//        Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
-//        for (String tableYear : tableYearKeySet) {
-//            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
-//
-//            //鏁板��
-//            String tableName = tablePrefix+"_"+tableYear;
-//            boolean existTableName = commonMapper.existTable(dbName, tableName);
-//            if(!existTableName){
-//                continue;
-//            }
-//            //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
-//            if(pojo instanceof BattAlarmHistory) {
-//                BattAlarmHistory battAlarmHistory = new BattAlarmHistory();
-//                BeanUtils.copyProperties(pojo, battAlarmHistory);
-//                battAlarmHistory.setAlmStartTime(queryTime.get(0));
-//                battAlarmHistory.setAlmEndTime(queryTime.get(1));
-//                battAlarmHistory.setRecordYear(tableName);
-//                int currentCount = service.getBattHisCount(battAlarmHistory);
-//                queryCountMap.put(tableYear, currentCount);
-//            }
-//            else if(pojo instanceof PowerAlarmHistory) {
-//                PowerAlarmHistory powerAlarmHistory = new PowerAlarmHistory();
-//                BeanUtils.copyProperties(pojo, powerAlarmHistory);
-//                powerAlarmHistory.setAlmStartTime(queryTime.get(0));
-//                powerAlarmHistory.setAlmEndTime(queryTime.get(1));
-//                powerAlarmHistory.setRecordYear(tableName);
-//                int currentCount = service.getPowerHisCount(powerAlarmHistory);
-//                queryCountMap.put(tableYear, currentCount);
-//            }
-//            else if (pojo instanceof DevA200AlarmDto) {
-//                DevA200AlarmDto dto = (DevA200AlarmDto) pojo;
-//                dto.setStartTime(queryTime.get(0));
-//                dto.setEndTime(queryTime.get(1));
-//                dto.setTableName(tableName);
-//                int currentCount = service.getCountForDevAlm(dto);
-//                queryCountMap.put(tableYear, currentCount);
-//            }
-//
-//        }
-//
-//        //鍒嗛〉淇℃伅
-//        //纭鎬婚〉鏁�,鎬昏褰曟暟
-//        PageInfo<Object> pageInfo = new PageInfo<>();
-//
-//        int total = 0;
-//        Set<String> queryKeySet = queryCountMap.keySet();
-//        for (String queryKey : queryKeySet) {
-//            int size = queryCountMap.get(queryKey);
-//            total+=size;
-//        }
-//        int pages = (int) Math.ceil(Float.parseFloat(String.valueOf(total))/pageSize);
-//        pageInfo.setTotal(total);
-//        pageInfo.setPages(pages);
-//        pageInfo.setPageNum(pageNum);
-//        pageInfo.setPageSize(pageSize);
-//        //鏍规嵁褰撳墠椤垫墍闇�璁板綍,鏌ヨ褰撳墠椤佃褰�
-//        int startNum = (pageNum-1)*pageSize+1;
-//        int endNum = pageNum*pageSize;
-//
-//        //鏈�鍚庝竴涓畻娉�:涓婇潰涓嶅簲璇ュ厛鏌ヨ鎵�鏈夎褰�,搴旇鍙朿ount. 杩欏悗闈㈠畾浣嶅埌鍝釜琛ㄦ垨鍝嚑寮犺〃鍚�,閲囧彇limit鑾峰彇褰撳墠椤佃褰曟暟;
-//        //鏍煎紡:{琛ㄥ悕,[limit 2,20]}
-//        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMap);
-//        Set<String> keySet = tableAndLimitMap.keySet();
-//        List<Object> dataList = new LinkedList<>();
-//        for (String key : keySet) {
-//            List<Date> queryTime = queryTimeForSubTables.get(key);
-//            //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
-//            String recordYear = tablePrefix + "_" + key;
-//            if(pojo instanceof BattAlarmHistory) {
-//                BattAlarmHistory battAlarmHistory = new BattAlarmHistory();
-//                BeanUtils.copyProperties(pojo, battAlarmHistory);
-//                battAlarmHistory.setAlmStartTime(queryTime.get(0));
-//                battAlarmHistory.setAlmEndTime(queryTime.get(1));
-//                battAlarmHistory.setRecordYear(recordYear);
-//                List<Integer> limitList = tableAndLimitMap.get(key);
-//                battAlarmHistory.setLimitStart(limitList.get(0));
-//                battAlarmHistory.setLimitEnd(limitList.get(1));
-//                List<BattAlarmHistory> list =  service.getBattHisList(battAlarmHistory);
-//                dataList.addAll(list);
-//            }
-//            else if(pojo instanceof PowerAlarmHistory) {
-//                PowerAlarmHistory powerAlarmHistory = new PowerAlarmHistory();
-//                BeanUtils.copyProperties(pojo, powerAlarmHistory);
-//                powerAlarmHistory.setAlmStartTime(queryTime.get(0));
-//                powerAlarmHistory.setAlmEndTime(queryTime.get(1));
-//                powerAlarmHistory.setRecordYear(recordYear);
-//                List<Integer> limitList = tableAndLimitMap.get(key);
-//                powerAlarmHistory.setLimitStart(limitList.get(0));
-//                powerAlarmHistory.setLimitEnd(limitList.get(1));
-//                List<PowerAlarmHistory> list =  service.getPowerHisList(powerAlarmHistory);
-//                dataList.addAll(list);
-//            }
-//            else if (pojo instanceof DevA200AlarmDto) {
-//                if(!key.equals("default")){
-//                    DevA200AlarmDto dto = (DevA200AlarmDto) pojo;
-//                    dto.setStartTime(queryTime.get(0));
-//                    dto.setEndTime(queryTime.get(1));
-//                    List<Integer> limitList = tableAndLimitMap.get(key);
-//                    dto.setLimitStart(limitList.get(0));
-//                    dto.setLimitEnd(limitList.get(1));
-//                    dto.setTableName(recordYear);
-//                    List<DevLithiumAlarmDataYear> list =  service.getListDevAlm(dto);
-//                    for (DevLithiumAlarmDataYear year:list) {
-//                        int devId=year.getDevId();
-//                        int uid=year.getConfirmedUid();
-//                        DevLithiumInf dinf=devLithiumInfService.getDinfByDevId(devId);
-//                        UserInf uinf= userInfService.getUinfByUId(uid);
-//                        int almId=year.getAlmId();
-//                        String almName= DevAlmEnum.getValue(almId);
-//                        year.setAlmName(almName!=null?almName:"");
-//                        year.setDevInf(dinf);
-//                        year.setConfirmedUname(uinf!=null?uinf.getUname():"");
-//                    }
-//                    dataList.addAll(list);
-//                }
-//            }
-//        }
-//        pageInfo.setList(dataList);
-//        return pageInfo;
-//    }
-//
-//    /**鎸夋湀鍒嗚〃,鍒嗛〉鏌ヨ*/
-//    public PageInfo<Object> getPageInfoByMonthTable(int pageNum, int pageSize,
-//                                                    Date startTime, Date endTime,
-//                                                    String dbName, String tablePrefix,
-//                                                    Object pojo) throws ParseException, InterruptedException {
-//        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesByMonthDesc2(startTime, endTime);
-//        //鏌ヨ鍒嗚〃鏄惁瀛樺湪,瀛樺湪鍒欐煡璇㈢粨鏋�
-//        Map<String,Integer> queryCountMap = new LinkedHashMap<>();
-//        Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
-//        //浼樺寲1-鏌ヨ鎵�鏈夌殑绗﹀悎鏈堜唤瑙勫垯鐨勮〃鍜屼富琛�
-//        List<String> tableNameListDB = getTableList(dbName, tablePrefix, tablePrefix + "(_[0-9]{4}_[0-9]{2})?");
-//        List<String> tableYearListInDB = new LinkedList<>(); //鏌ヨ鏃堕棿娈靛唴鐨勫勾鏈堝垎琛ㄩ泦鍚堜笖鍦ㄦ暟鎹簱涓瓨鍦�
-//        //杩囨护鎺夋椂闂存鍐呮暟鎹簱涓笉瀛樺湪鐨勫勾鏈堝垎琛�
-//        for (String tableYear : tableYearKeySet) {
-//            String tableName;
-//            if(!tableYear.equals("default")){
-//                //鏁板��
-//                tableName = tablePrefix+"_"+tableYear;
-//                //String existTableName = commonMapper.existTable(dbName, tableName);
-//                if(!tableNameListDB.contains(tableName)){ //浼樺寲1-鏁版嵁搴撲腑涓嶅瓨鍦�,鍘婚櫎澶氭鏌ヨ〃,涓�娆℃煡鍑�
-//                    continue;
-//                }
-//            }
-//            tableYearListInDB.add(tableYear);
-//        }
-//        //鏌ヨ骞存湀鍒嗚〃鐨勮褰曟暟
-//        //浼樺寲2:澶氱嚎绋嬭鍙�
-//        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
-//        CountDownLatch latch = new CountDownLatch(tableYearListInDB.size());
-//        for (String tableYear : tableYearListInDB) {
-//            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
-//
-//            String tableName;
-//            if(!tableYear.equals("default")){
-//                //鏁板��
-//                tableName = tablePrefix+"_"+tableYear;
-//            }else{
-//                tableName = tablePrefix;
-//            }
-//            pool.execute(()-> {
-//                //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
-//                if (pojo instanceof BattAlarmHistory) {
-//                    BattAlarmHistory battAlarmHistory = new BattAlarmHistory();
-//                    BeanUtils.copyProperties(pojo, battAlarmHistory);
-//                    battAlarmHistory.setAlmStartTime(queryTime.get(0));
-//                    battAlarmHistory.setAlmEndTime(queryTime.get(1));
-//                    battAlarmHistory.setRecordYear(tableName);
-//                    int currentCount = service.getBattHisCount(battAlarmHistory);
-//                    queryCountMap.put(tableYear, currentCount);
-//                 }
-//                else if (pojo instanceof BattStationTempHistory) {
-//                    BattStationTempHistory tempHistory = new BattStationTempHistory();
-//                    tempHistory.setStartTime(queryTime.get(0));
-//                    tempHistory.setEndTime(queryTime.get(1));
-//                    tempHistory.setRecordYearMonth(tableName);
-//                    int currentCount = service.getBattStationTempHisCount(tempHistory);
-//                    queryCountMap.put(tableYear, currentCount);
-//                }
-//                else if (pojo instanceof BattRealTimeDataHistory) {
-//                    BattRealTimeDataHistory tempHistory = new BattRealTimeDataHistory();
-//                    tempHistory.setStartTime(queryTime.get(0));
-//                    tempHistory.setEndTime(queryTime.get(1));
-//                    tempHistory.setRecordYearMonth(tableName);
-//                    int currentCount = service.getBattRealTimeDataHisCount(tempHistory);
-//                    queryCountMap.put(tableYear, currentCount);
-//                }
-//                else if (pojo instanceof PowerRealTimeDataHistory) {
-//                    PowerRealTimeDataHistory tempHistory = new PowerRealTimeDataHistory();
-//                    tempHistory.setStartTime(queryTime.get(0));
-//                    tempHistory.setEndTime(queryTime.get(1));
-//                    tempHistory.setRecordYearMonth(tableName);
-//                    int currentCount = service.getPowerRealTimeDataHisCount(tempHistory);
-//                    queryCountMap.put(tableYear, currentCount);
-//                }
-//
-//                latch.countDown();
-//            });
-//        }
-//        latch.await();
-//        //鍥犱负澶氱嚎绋嬪悗鏃犲簭,闇�瑕侀噸鎺掑簭
-//        List<String> keySetDesc = queryCountMap.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
-//        Map<String,Integer> queryCountMapDesc = new LinkedHashMap<>();
-//        for (String key : keySetDesc) {
-//            Integer count = queryCountMap.get(key);
-//            queryCountMapDesc.put(key,count);
-//        }
-//        //鍒嗛〉淇℃伅
-//        //纭鎬婚〉鏁�,鎬昏褰曟暟
-//        PageInfo<Object> pageInfo = new PageInfo<>();
-//        int total = 0;
-//        Set<String> queryKeySet = queryCountMap.keySet();
-//        for (String queryKey : queryKeySet) {
-//            int size = queryCountMap.get(queryKey);
-//            total+=size;
-//        }
-//        int pages = (int) Math.ceil(Float.parseFloat(String.valueOf(total))/pageSize);
-//        pageInfo.setTotal(total);
-//        pageInfo.setPages(pages);
-//        pageInfo.setPageNum(pageNum);
-//        pageInfo.setPageSize(pageSize);
-//        //鏍规嵁褰撳墠椤垫墍闇�璁板綍,鏌ヨ褰撳墠椤佃褰�
-//        int startNum = (pageNum-1)*pageSize+1;
-//        int endNum = pageNum*pageSize;
-//
-//        //鏈�鍚庝竴涓畻娉�:涓婇潰涓嶅簲璇ュ厛鏌ヨ鎵�鏈夎褰�,搴旇鍙朿ount. 杩欏悗闈㈠畾浣嶅埌鍝釜琛ㄦ垨鍝嚑寮犺〃鍚�,閲囧彇limit鑾峰彇褰撳墠椤佃褰曟暟;
-//        //鏍煎紡:{琛ㄥ悕,[limit 2,20]}
-//        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMapDesc);
-//        Set<String> keySet = tableAndLimitMap.keySet();
-//        List<Object> dataList = new LinkedList<>();
-//        for (String key : keySet) {
-//            List<Date> queryTime = queryTimeForSubTables.get(key);
-//            //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
-//            String recordYear = key.equals("default") ? tablePrefix : tablePrefix + "_" + key;
-//            if(pojo instanceof BattAlarmHistory) {
-//                BattAlarmHistory battAlarmHistory = new BattAlarmHistory();
-//                BeanUtils.copyProperties(pojo, battAlarmHistory);
-//                battAlarmHistory.setAlmStartTime(queryTime.get(0));
-//                battAlarmHistory.setAlmEndTime(queryTime.get(1));
-//                battAlarmHistory.setRecordYear(recordYear);
-//                List<Integer> limitList = tableAndLimitMap.get(key);
-//                battAlarmHistory.setLimitStart(limitList.get(0));
-//                battAlarmHistory.setLimitEnd(limitList.get(1));
-//                List<BattAlarmHistory> list =  service.getBattHisList(battAlarmHistory);
-//                dataList.addAll(list);
-//            }
-//            else if (pojo instanceof BattStationTempHistory){
-//                BattStationTempHistory tempHistory = new BattStationTempHistory();
-//                tempHistory.setStartTime(queryTime.get(0));
-//                tempHistory.setEndTime(queryTime.get(1));
-//                tempHistory.setRecordYearMonth(recordYear);
-//                List<Integer> limitList = tableAndLimitMap.get(key);
-//                tempHistory.setLimitStart(limitList.get(0));
-//                tempHistory.setLimitEnd(limitList.get(1));
-//                List<BattStationTempHistory> list =  service.getBattStationTempHisList(tempHistory);
-//                dataList.addAll(list);
-//            }
-//            else if (pojo instanceof BattRealTimeDataHistory){
-//                BattRealTimeDataHistory tempHistory = new BattRealTimeDataHistory();
-//                tempHistory.setStartTime(queryTime.get(0));
-//                tempHistory.setEndTime(queryTime.get(1));
-//                tempHistory.setRecordYearMonth(recordYear);
-//                List<Integer> limitList = tableAndLimitMap.get(key);
-//                tempHistory.setLimitStart(limitList.get(0));
-//                tempHistory.setLimitEnd(limitList.get(1));
-//                List<BattRealTimeDataHistory> list =  service.getBattRealTimeDataHisList(tempHistory);
-//                dataList.addAll(list);
-//            }
-//            else if (pojo instanceof PowerRealTimeDataHistory){
-//                PowerRealTimeDataHistory tempHistory = new PowerRealTimeDataHistory();
-//                tempHistory.setStartTime(queryTime.get(0));
-//                tempHistory.setEndTime(queryTime.get(1));
-//                tempHistory.setRecordYearMonth(recordYear);
-//                List<Integer> limitList = tableAndLimitMap.get(key);
-//                tempHistory.setLimitStart(limitList.get(0));
-//                tempHistory.setLimitEnd(limitList.get(1));
-//                List<PowerRealTimeDataHistory> list =  service.getPowerRealTimeDataHisList(tempHistory);
-//                dataList.addAll(list);
-//            }
-//        }
-//        pageInfo.setList(dataList);
-//        return pageInfo;
-//
-//    }
-//
-//    /**鏌ヨ鏄惁鍖呭惈鐗瑰畾瑙勫垯鐨勮〃,瀛樺湪,鍒欒繑鍥炶〃鍚�*/
-//    public List<String> getTableList(String dbName,String tableLike,String regex){
-//        List<String> resultTableList = new LinkedList<>();
-//        List<String> tableList = commonMapper.getTableListLike(dbName,tableLike);
-//        for (String tableName : tableList) {
-//            boolean matches = Pattern.matches(regex, tableName);
-//            if(matches){
-//                resultTableList.add(tableName);
-//            }
-//        }
-//        return resultTableList;
-//    }
-//}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/util/SubTablePageInfoUtils.java b/src/main/java/com/whyc/util/SubTablePageInfoUtils.java
new file mode 100644
index 0000000..2ec9399
--- /dev/null
+++ b/src/main/java/com/whyc/util/SubTablePageInfoUtils.java
@@ -0,0 +1,322 @@
+package com.whyc.util;
+
+import com.github.pagehelper.PageInfo;
+import com.whyc.dto.AlmHis.BattAlarmRes;
+import com.whyc.dto.AlmHis.BattAlmPar;
+import com.whyc.dto.AlmHis.DevAlmPar;
+import com.whyc.dto.AlmHis.PwrAlmPar;
+import com.whyc.factory.ThreadPoolExecutorFactory;
+import com.whyc.mapper.CommonMapper;
+import com.whyc.pojo.db_alarm.BattalarmDataHistory;
+import com.whyc.pojo.db_alarm.DevalarmDataHistory;
+import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarmHistory;
+import com.whyc.service.SubTablePageInfoService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 鏁版嵁閲忔瀬澶х殑琛�,鎸夌収骞翠唤鍒嗚〃,鍒嗛〉鏌ヨ鏃惰幏鍙栨暟鎹�
+ */
+@Component
+public class SubTablePageInfoUtils {
+
+    @Resource
+    private CommonMapper commonMapper;
+
+    @Autowired
+    private SubTablePageInfoService subService;
+
+    /**鎸夊勾浠借〃鍒嗛〉鏌ヨ*/
+   public PageInfo<Object> getPageInfo(int pageNum,int pageSize,
+                                Date startTime,Date endTime,
+                                String dbName,String tablePrefix,
+                                Object pojo) throws ParseException {
+        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesDesc(startTime, endTime);
+        //鏌ヨ鍒嗚〃鏄惁瀛樺湪,瀛樺湪鍒欐煡璇㈢粨鏋�
+        Map<String,Integer> queryCountMap = new LinkedHashMap<>();
+        Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
+        for (String tableYear : tableYearKeySet) {
+            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
+
+            String tableName;
+            if(!tableYear.equals("default")){
+                //鏁板��
+                tableName = tablePrefix+"_"+tableYear;
+                String existTableName = commonMapper.existTable(dbName, tableName);
+                if(existTableName == null){
+                    continue;
+                }
+            }else{
+                tableName = tablePrefix;
+            }
+            //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
+             if(pojo instanceof PwrAlmPar) {
+                PwrAlmPar param = (PwrAlmPar) pojo;
+                param.setAlmStartTime(queryTime.get(0));
+                param.setAlmEndTime(queryTime.get(1));
+                param.setRecordYear(tableName);
+                int currentCount = subService.getPwrAlmHisCount(param);
+                queryCountMap.put(tableYear, currentCount);
+            }
+        }
+
+        //鍒嗛〉淇℃伅
+        //纭鎬婚〉鏁�,鎬昏褰曟暟
+        PageInfo<Object> pageInfo = new PageInfo<>();
+
+        int total = 0;
+        Set<String> queryKeySet = queryCountMap.keySet();
+        for (String queryKey : queryKeySet) {
+            int size = queryCountMap.get(queryKey);
+            total+=size;
+        }
+        int pages = (int) Math.ceil(Float.parseFloat(String.valueOf(total))/pageSize);
+        pageInfo.setTotal(total);
+        pageInfo.setPages(pages);
+        pageInfo.setPageNum(pageNum);
+        pageInfo.setPageSize(pageSize);
+        //鏍规嵁褰撳墠椤垫墍闇�璁板綍,鏌ヨ褰撳墠椤佃褰�
+        int startNum = (pageNum-1)*pageSize+1;
+        int endNum = pageNum*pageSize;
+
+        //鏈�鍚庝竴涓畻娉�:涓婇潰涓嶅簲璇ュ厛鏌ヨ鎵�鏈夎褰�,搴旇鍙朿ount. 杩欏悗闈㈠畾浣嶅埌鍝釜琛ㄦ垨鍝嚑寮犺〃鍚�,閲囧彇limit鑾峰彇褰撳墠椤佃褰曟暟;
+        //鏍煎紡:{琛ㄥ悕,[limit 2,20]}
+        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMap);
+        Set<String> keySet = tableAndLimitMap.keySet();
+        List<Object> dataList = new LinkedList<>();
+        for (String key : keySet) {
+            List<Date> queryTime = queryTimeForSubTables.get(key);
+            //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
+            String recordYear = key.equals("default") ? tablePrefix : tablePrefix + "_" + key;
+
+
+           if (pojo instanceof PwrAlmPar) {
+                PwrAlmPar data = (PwrAlmPar) pojo;
+                data.setAlmStartTime(queryTime.get(0));
+                data.setAlmEndTime(queryTime.get(1));
+                List<Integer> limitList = tableAndLimitMap.get(key);
+                data.setLimitStart(limitList.get(0));
+                data.setLimitEnd(limitList.get(1));
+                data.setRecordYear(recordYear);
+                List<PwrdevAlarmHistory> list= subService.getPwrAlmHisList(data);
+                dataList.addAll(list);
+            }
+
+        }
+        pageInfo.setList(dataList);
+        return pageInfo;
+    }
+    /**鎸夋湀鍒嗚〃,鍒嗛〉鏌ヨ*/
+    public PageInfo<Object> getPageInfoByMonthTable(int pageNum,int pageSize,
+                                        Date startTime,Date endTime,
+                                        String dbName,String tablePrefix,
+                                        Object pojo) throws ParseException, InterruptedException {
+        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesByMonthDesc(startTime, endTime);
+        //鏌ヨ鍒嗚〃鏄惁瀛樺湪,瀛樺湪鍒欐煡璇㈢粨鏋�
+        Map<String,Integer> queryCountMap = new LinkedHashMap<>();
+        Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
+        //浼樺寲1-鏌ヨ鎵�鏈夌殑绗﹀悎鏈堜唤瑙勫垯鐨勮〃鍜屼富琛�
+        List<String> tableNameListDB = getTableList(dbName, tablePrefix, tablePrefix + "(_[0-9]{4}_[0-9]{2})?");
+        List<String> tableYearListInDB = new LinkedList<>(); //鏌ヨ鏃堕棿娈靛唴鐨勫勾鏈堝垎琛ㄩ泦鍚堜笖鍦ㄦ暟鎹簱涓瓨鍦�
+        //杩囨护鎺夋椂闂存鍐呮暟鎹簱涓笉瀛樺湪鐨勫勾鏈堝垎琛�
+        for (String tableYear : tableYearKeySet) {
+
+            String tableName;
+            if(!tableYear.equals("default")){
+                //鏁板��
+                tableName = tablePrefix+"_"+tableYear;
+                //String existTableName = commonMapper.existTable(dbName, tableName);
+                if(!tableNameListDB.contains(tableName)){ //浼樺寲1-鏁版嵁搴撲腑涓嶅瓨鍦�,鍘婚櫎澶氭鏌ヨ〃,涓�娆℃煡鍑�
+                    continue;
+                }
+            }
+            tableYearListInDB.add(tableYear);
+        }
+        //鏌ヨ骞存湀鍒嗚〃鐨勮褰曟暟
+        //浼樺寲2:澶氱嚎绋嬭鍙�
+        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
+        CountDownLatch latch = new CountDownLatch(tableYearListInDB.size());
+        for (String tableYear : tableYearListInDB) {
+            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
+
+            String tableName;
+            if(!tableYear.equals("default")){
+                //鏁板��
+                tableName = tablePrefix+"_"+tableYear;
+            }else{
+                tableName = tablePrefix;
+            }
+            pool.execute(()-> {
+
+                //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
+                if (pojo instanceof BattAlmPar) { //鐢垫睜鍛婅鍘嗗彶
+                    BattAlmPar param = new BattAlmPar();
+                    BeanUtils.copyProperties(pojo,param);
+                    param.setAlmStartTime(queryTime.get(0));
+                    param.setAlmEndTime(queryTime.get(1));
+                    param.setRecordYear(tableName);
+                    int currentCount = subService.getBattAlmHisCount(param);
+                    queryCountMap.put(tableYear, currentCount);
+                }
+                else if (pojo instanceof DevAlmPar) {
+                    DevAlmPar param = new DevAlmPar();
+                    BeanUtils.copyProperties(pojo,param);
+                    param.setAlmStartTime(queryTime.get(0));
+                    param.setAlmEndTime(queryTime.get(1));
+                    param.setRecordYear(tableName);
+                    int currentCount = subService.getDevAlmHisCount(param);
+                    queryCountMap.put(tableYear, currentCount);
+
+                }
+
+                latch.countDown();
+            });
+        }
+        latch.await();
+        //鍥犱负澶氱嚎绋嬪悗鏃犲簭,闇�瑕侀噸鎺掑簭
+        List<String> keySetDesc = queryCountMap.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
+        Map<String,Integer> queryCountMapDesc = new LinkedHashMap<>();
+        for (String key : keySetDesc) {
+            Integer count = queryCountMap.get(key);
+            queryCountMapDesc.put(key,count);
+        }
+        //鍒嗛〉淇℃伅
+        //纭鎬婚〉鏁�,鎬昏褰曟暟
+        PageInfo<Object> pageInfo = new PageInfo<>();
+
+        int total = 0;
+        Set<String> queryKeySet = queryCountMap.keySet();
+        for (String queryKey : queryKeySet) {
+            int size = queryCountMap.get(queryKey);
+            total+=size;
+        }
+        int pages = (int) Math.ceil(Float.parseFloat(String.valueOf(total))/pageSize);
+        pageInfo.setTotal(total);
+        pageInfo.setPages(pages);
+        pageInfo.setPageNum(pageNum);
+        pageInfo.setPageSize(pageSize);
+        //鏍规嵁褰撳墠椤垫墍闇�璁板綍,鏌ヨ褰撳墠椤佃褰�
+        int startNum = (pageNum-1)*pageSize+1;
+        int endNum = pageNum*pageSize;
+
+        //鏈�鍚庝竴涓畻娉�:涓婇潰涓嶅簲璇ュ厛鏌ヨ鎵�鏈夎褰�,搴旇鍙朿ount. 杩欏悗闈㈠畾浣嶅埌鍝釜琛ㄦ垨鍝嚑寮犺〃鍚�,閲囧彇limit鑾峰彇褰撳墠椤佃褰曟暟;
+        //鏍煎紡:{琛ㄥ悕,[limit 2,20]}
+        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMapDesc);
+        Set<String> keySet = tableAndLimitMap.keySet();
+        List<Object> dataList = new LinkedList<>();
+        for (String key : keySet) {
+            List<Date> queryTime = queryTimeForSubTables.get(key);
+            //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
+            String recordYear = key.equals("default") ? tablePrefix : tablePrefix + "_" + key;
+            if (pojo instanceof BattAlmPar) {
+                BattAlmPar data = (BattAlmPar) pojo;
+                data.setAlmStartTime(queryTime.get(0));
+                data.setAlmEndTime(queryTime.get(1));
+
+                List<Integer> limitList = tableAndLimitMap.get(key);
+                data.setLimitStart(limitList.get(0));
+                data.setLimitEnd(limitList.get(1));
+                data.setRecordYear(recordYear);
+                List<BattAlarmRes> list = subService.getBattAlmHisList(data);
+                dataList.addAll(list);
+            }
+            else if (pojo instanceof DevAlmPar) {
+                DevAlmPar data = (DevAlmPar) pojo;
+                data.setAlmStartTime(queryTime.get(0));
+                data.setAlmEndTime(queryTime.get(1));
+
+                List<Integer> limitList = tableAndLimitMap.get(key);
+                data.setLimitStart(limitList.get(0));
+                data.setLimitEnd(limitList.get(1));
+                data.setRecordYear(recordYear);
+                List<DevalarmDataHistory> list =  subService.getDevAlmHisList(data);
+                dataList.addAll(list);
+            }
+
+
+        }
+        pageInfo.setList(dataList);
+        return pageInfo;
+    }
+
+    /**鏌ヨ鏄惁鍖呭惈鐗瑰畾瑙勫垯鐨勮〃,瀛樺湪,鍒欒繑鍥炶〃鍚�*/
+    public List<String> getTableList(String dbName,String tableLike,String regex){
+        List<String> resultTableList = new LinkedList<>();
+        List<String> tableList = commonMapper.getTableListLike(dbName,tableLike);
+        for (String tableName : tableList) {
+            boolean matches = Pattern.matches(regex, tableName);
+            if(matches){
+                resultTableList.add(tableName);
+            }
+        }
+        return resultTableList;
+    }
+
+   /* *//**鎵�鏈夎褰曞垎涓哄洓绾ф煡璇釜鏁�*//*
+    public List<Integer> getLevelList(int uId,String dbName,String tableLike,String regex,List<Integer> almTypes ){
+        List<Integer> result = new LinkedList<>();
+        List<String> tableList = getTableList(dbName, tableLike, regex);
+        List<Integer> levelList = new LinkedList();
+        for (String tableName : tableList) {
+            List<BattalarmDataHistory> levelInfoSubList;
+            List<Integer> levelSubList;
+            if(tableLike.equals("tb_battalarm_data_history")) {
+                //levelInfoSubList = battAlarmDataHistoryMapper.getLevelSubList(uId, tableName);
+                levelInfoSubList = subService.getLevelSubList_batt(uId, tableName);
+            }
+            else if(tableLike.equals("tb_devalarm_data_history")){
+                //levelInfoSubList = devAlarmDataHistoryMapper.getLevelSubList(uId, tableName);
+                levelInfoSubList = subService.getLevelSubList_dev(uId, tableName);
+            }
+            else{
+                //levelInfoSubList = powerAlarmHistoryMapper.getLevelSubList(uId, tableName,almTypes);
+                levelInfoSubList = subService.getLevelSubList_pwr(uId, tableName,almTypes);
+            }
+            levelSubList = levelInfoSubList.stream().map(BattalarmDataHistory::getAlmLevel).collect(Collectors.toList());
+            levelList.addAll(levelSubList);
+        }
+        //鍒嗕负鍥涚骇鏌ヨ涓暟
+        Map<Integer, List<Integer>> levelMap = levelList.stream().collect(Collectors.groupingBy(Integer::intValue));
+        Set<Integer> levelSet = levelMap.keySet();
+        List<Integer> listOfLevelSet = new LinkedList();
+        //琛ラ綈1,2,3,4鍥涚骇
+        listOfLevelSet.add(1);
+        listOfLevelSet.add(2);
+        listOfLevelSet.add(3);
+        listOfLevelSet.add(4);
+        if(!levelSet.contains(1)){
+            levelMap.put(1,new LinkedList<>());
+        }
+        if(!levelSet.contains(2)){
+            levelMap.put(2,new LinkedList<>());
+        }
+        if(!levelSet.contains(3)){
+            levelMap.put(3,new LinkedList<>());
+        }
+        if(!levelSet.contains(4)){
+            levelMap.put(4,new LinkedList<>());
+        }
+        //寰呮祴璇�
+        for (Integer level : listOfLevelSet) {
+            result.add(levelMap.get(level).size());
+        }
+        return result;
+    }
+*/
+    public static void main(String[] args) {
+        //String regex = "tb_battalarm_data_history_?[0-9]*";
+        String regex = "tb_battalarm_data_history(_[0-9]{4}_[0-9]{2})?";
+        //String table = "tb_battalarm_data_history";
+        String table = "tb_battalarm_data_history_0222_04";
+        System.out.println(Pattern.matches(regex,table));
+    }
+}
diff --git a/src/main/resources/mapper/CommonMapper.xml b/src/main/resources/mapper/CommonMapper.xml
index 1b5bc97..8a2a3b5 100644
--- a/src/main/resources/mapper/CommonMapper.xml
+++ b/src/main/resources/mapper/CommonMapper.xml
@@ -6,7 +6,7 @@
     <select id="getMaxValue" resultType="java.lang.Object">
         select max(${field}) from ${schema}.${table}
     </select>
-    <select id="existTable" resultType="java.lang.Boolean">
+    <select id="existTable" resultType="java.lang.String">
         select
             table_name
         from `INFORMATION_SCHEMA`.`TABLES`

--
Gitblit v1.9.1