From a127882c8f15593783fcf0a1489835c16db70682 Mon Sep 17 00:00:00 2001
From: whycxzp <glperry@163.com>
Date: 星期一, 31 三月 2025 00:51:54 +0800
Subject: [PATCH] 电池站点温度历史,按摄像头id,月分表

---
 src/main/java/com/whyc/pojo/db_power_history/BattStationTempHistory.java |   17 +++
 src/main/java/com/whyc/service/SubTableService.java                      |   62 ++++++++++++
 src/main/java/com/whyc/controller/BattStationTempHisController.java      |   36 +++++++
 src/main/java/com/whyc/webSocket/BattStationTempSocket.java              |   98 +++++++++++++++++++
 src/main/java/com/whyc/service/BattStationTempHisService.java            |   14 ++
 src/main/java/com/whyc/util/DateUtil.java                                |   39 +++++++
 src/main/java/com/whyc/util/SubTablePageInfoUtil.java                    |   21 ++++
 7 files changed, 286 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/whyc/controller/BattStationTempHisController.java b/src/main/java/com/whyc/controller/BattStationTempHisController.java
new file mode 100644
index 0000000..b2c5290
--- /dev/null
+++ b/src/main/java/com/whyc/controller/BattStationTempHisController.java
@@ -0,0 +1,36 @@
+package com.whyc.controller;
+
+import com.whyc.dto.Response;
+import com.whyc.pojo.db_power_history.BattStationTempHistory;
+import com.whyc.pojo.db_power_rt.BattStationTemp;
+import com.whyc.service.BattStationTempHisService;
+import com.whyc.service.BattStationTempService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+import java.util.List;
+
+@RestController
+@Api(tags = "鐢垫睜鏈烘埧娓╁害鍘嗗彶")
+@RequestMapping("battStationTempHis")
+public class BattStationTempHisController {
+
+    @Autowired
+    private BattStationTempHisService service;
+
+    @ApiOperation("鏌ヨ鍒楄〃")
+    @GetMapping("getPageByCameraId")
+    public Response getPageByCameraId(@RequestParam String cameraId,@RequestParam int pageNum, @RequestParam int pageSize,
+                                                                    @RequestParam String startTime,@RequestParam String endTime
+    ) throws ParseException, InterruptedException {
+        return service.getPageByCameraId(pageNum,pageSize,cameraId,startTime,endTime);
+    }
+
+
+}
diff --git a/src/main/java/com/whyc/pojo/db_power_history/BattStationTempHistory.java b/src/main/java/com/whyc/pojo/db_power_history/BattStationTempHistory.java
index 328b287..4691711 100644
--- a/src/main/java/com/whyc/pojo/db_power_history/BattStationTempHistory.java
+++ b/src/main/java/com/whyc/pojo/db_power_history/BattStationTempHistory.java
@@ -1,5 +1,6 @@
 package com.whyc.pojo.db_power_history;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.ToString;
@@ -27,4 +28,20 @@
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date recordTime;
+
+    @TableField(exist = false)
+    private Date startTime;
+
+    @TableField(exist = false)
+    private Date endTime;
+
+    @TableField(exist = false)
+    private String recordYearMonth;
+
+    @TableField(exist = false)
+    private Integer limitStart;
+
+    @TableField(exist = false)
+    private Integer limitEnd;
+
 }
diff --git a/src/main/java/com/whyc/service/BattStationTempHisService.java b/src/main/java/com/whyc/service/BattStationTempHisService.java
index 2109e8f..cfc2a20 100644
--- a/src/main/java/com/whyc/service/BattStationTempHisService.java
+++ b/src/main/java/com/whyc/service/BattStationTempHisService.java
@@ -1,12 +1,18 @@
 package com.whyc.service;
 
+import com.github.pagehelper.PageInfo;
+import com.whyc.dto.Response;
 import com.whyc.mapper.BattStationTempHisMapper;
 import com.whyc.mapper.CommonMapper;
 import com.whyc.pojo.db_power_history.BattStationTempHistory;
+import com.whyc.util.SubTablePageInfoUtil;
+import com.whyc.util.ThreadLocalUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
+import java.util.List;
 
 @Service
 public class BattStationTempHisService {
@@ -20,6 +26,9 @@
     @Autowired
     private JdbcSqlExecuteService jdbcSqlExecuteService;
 
+    @Autowired
+    private SubTablePageInfoUtil pageInfoUtil;
+
     public void createTableByMonth(Integer battGroupId,String yearMonth) {
         jdbcSqlExecuteService.execute("CREATE TABLE IF NOT EXISTS `db_power_history`.`db_batt_station_temp_history_"+yearMonth+"` LIKE `db_power_history`.`db_batt_station_temp_history`");
     }
@@ -32,4 +41,9 @@
         jdbcSqlExecuteService.execute("INSERT INTO `db_power_history`.`db_batt_station_temp_history_"+battGroupId+"_"+yearMonth+"` (`batt_group_id`, `station_id`, `pixel_x`, `pixel_y`, `max_temp`, `min_temp`, `min_temp_point`, `max_temp_point`, `camera_id`, `record_time`)" +
                 "\n values("+tempHistory.getBattGroupId()+","+tempHistory.getStationId()+","+tempHistory.getPixelX()+","+tempHistory.getPixelY()+","+tempHistory.getMaxTemp()+","+tempHistory.getMinTemp()+",'"+tempHistory.getMinTempPoint()+"','"+tempHistory.getMaxTempPoint()+"','"+tempHistory.getCameraId()+"','"+tempHistory.getRecordTime());
     }
+
+    public Response getPageByCameraId(int pageNum, int pageSize, String cameraId, String startTime, String endTime) throws ParseException, InterruptedException {
+        PageInfo<Object> pageInfo = pageInfoUtil.getPageInfoByMonthTable(pageNum, pageSize, ThreadLocalUtil.parse(startTime, 1), ThreadLocalUtil.parse(endTime, 1), "db_power_history", "tb_batt_station_temp_history_" + cameraId, new BattStationTempHistory());
+        return new Response().set(1, pageInfo);
+    }
 }
diff --git a/src/main/java/com/whyc/service/SubTableService.java b/src/main/java/com/whyc/service/SubTableService.java
index dafca62..4a66f0f 100644
--- a/src/main/java/com/whyc/service/SubTableService.java
+++ b/src/main/java/com/whyc/service/SubTableService.java
@@ -6,6 +6,7 @@
 import com.whyc.pojo.db_alarm.DevLithiumAlarmDataYear;
 import com.whyc.pojo.db_dis_batt.BattTestInfData;
 import com.whyc.pojo.db_power_alarm.PowerAlarmHistory;
+import com.whyc.pojo.db_power_history.BattStationTempHistory;
 import com.whyc.util.ActionUtil;
 import com.whyc.util.ThreadLocalUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -124,6 +125,67 @@
         return list;
     }
 
+    public int getBattStationTempHisCount(BattStationTempHistory tempHistory) {
+        String sql="select count(id) as number from db_power_history."+tempHistory.getRecordYearMonth()+" where 1=1 ";
+        if(tempHistory.getStartTime()!=null){
+            sql+=" and record_time  >='"+ ThreadLocalUtil.format(tempHistory.getStartTime(),1)+"' ";
+        }
+        if(tempHistory.getEndTime()!=null){
+            sql+=" and record_time  <='"+ThreadLocalUtil.format(tempHistory.getEndTime(),1)+"' ";
+        }
+        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<BattStationTempHistory> getBattStationTempHisList(BattStationTempHistory tempHistory) {
+        String sql="select * from db_power_history."+tempHistory.getRecordYearMonth()+" where 1=1 ";
+        if(tempHistory.getStartTime()!=null){
+            sql+=" and record_time  >='"+ ThreadLocalUtil.format(tempHistory.getStartTime(),1)+"' ";
+        }
+        if(tempHistory.getEndTime()!=null){
+            sql+=" and record_time  <='"+ThreadLocalUtil.format(tempHistory.getEndTime(),1)+"' ";
+        }
+        sql+="  ORDER BY record_time desc  limit "+ tempHistory.getLimitStart()+","+ tempHistory.getLimitEnd()+" ";
+        List<BattStationTempHistory> list=sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<BattStationTempHistory> list=new ArrayList();
+                while (rs.next()){
+                    BattStationTempHistory data=new BattStationTempHistory();
+                    data.setId(rs.getInt("id"));
+                    data.setBattGroupId(rs.getInt("batt_group_id"));
+                    data.setStationId(rs.getInt("station_id"));
+                    data.setCameraId(rs.getString("camera_id"));
+                    data.setPixelX(rs.getInt("pixel_x"));
+                    data.setPixelY(rs.getInt("pixel_y"));
+                    data.setMinTemp(rs.getFloat("min_temp"));
+                    data.setMaxTemp(rs.getFloat("max_temp"));
+                    data.setMinTempPoint(rs.getString("min_temp_point"));
+                    data.setMaxTempPoint(rs.getString("max_temp_point"));
+                    data.setRecordTime(rs.getTimestamp("record_time"));
+                    list.add(data);
+                }
+                return list;
+            }
+        });
+        return list;
+    }
     //鐢垫簮鍛婅鍘嗗彶瀹炴椂璁$畻姣忓紶琛ㄦ煡璇㈡�绘暟
     public int getPowerHisCount(PowerAlarmHistory powerAlarmHistory) {
         String sql="SELECT  count(*) as number FROM db_power_alarm."+ powerAlarmHistory.getRecordYear()+" history " +
diff --git a/src/main/java/com/whyc/util/DateUtil.java b/src/main/java/com/whyc/util/DateUtil.java
index 3259817..7421971 100644
--- a/src/main/java/com/whyc/util/DateUtil.java
+++ b/src/main/java/com/whyc/util/DateUtil.java
@@ -664,6 +664,45 @@
         return yearTimeDescMap;
     }
 
+    /**
+     *  鎸夋湀鍒掑垎涓�,涓嶅瓨鍦ㄩ粯璁よ〃,閮芥槸鍒嗚〃
+     * @param startTimeDate
+     * @param endTimeDate
+     * @return
+     * @throws ParseException
+     */
+    public static Map<String,List<Date>> getQueryTimeForSubTablesByMonthDesc2(Date startTimeDate,Date endTimeDate) throws ParseException {
+        //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟
+        //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰�
+        Calendar now = Calendar.getInstance();
+        if(endTimeDate.compareTo(now.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂�
+            endTimeDate = now.getTime();
+        }
+        LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getMonthListDesc(startTimeDate, endTimeDate);
+        Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>();
+        boolean existDefaultYear = false;
+        //鏌ヨ鐨勭粨鏉熸椂闂�
+        //if(DateUtil.YYYY_MM_TABLE.format(endTimeDate).equals(DateUtil.YYYY_MM_TABLE.format(now.getTime()))){
+        if(ThreadLocalUtil.format(endTimeDate,2).equals(ThreadLocalUtil.format(now.getTime(),2))){
+            List<Date> defaultDateList = new LinkedList<>();
+            defaultDateList.add(startTimeDate);
+            defaultDateList.add(endTimeDate);
+        }
+        //璋冩暣涓嬮『搴�,灏哾efault璋冩暣鍒伴浣�
+        if(existDefaultYear){
+            List<Date> defaultTimeList = yearTimeMap.get("default");
+            yearTimeDescMap.put("default",defaultTimeList);
+        }
+        Set<String> yearSet = yearTimeMap.keySet();
+        for (String year : yearSet) {
+            if(!year.equals("default")){
+                yearTimeDescMap.put(year,yearTimeMap.get(year));
+            }
+        }
+
+        return yearTimeDescMap;
+    }
+
 
     public static void main(String[] args) throws ParseException {
         //Date d1 = YYYY_MM_DD_HH_MM_SS.parse("2023-01-22 14:12:22");
diff --git a/src/main/java/com/whyc/util/SubTablePageInfoUtil.java b/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
index c436eca..956cb48 100644
--- a/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
+++ b/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
@@ -9,6 +9,7 @@
 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.BattStationTempHistory;
 import com.whyc.pojo.db_user.UserInf;
 import com.whyc.service.DevLithiumInfService;
 import com.whyc.service.SubTableService;
@@ -175,7 +176,7 @@
                                                     Date startTime, Date endTime,
                                                     String dbName, String tablePrefix,
                                                     Object pojo) throws ParseException, InterruptedException {
-        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesByMonthDesc(startTime, endTime);
+        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesByMonthDesc2(startTime, endTime);
         //鏌ヨ鍒嗚〃鏄惁瀛樺湪,瀛樺湪鍒欐煡璇㈢粨鏋�
         Map<String,Integer> queryCountMap = new LinkedHashMap<>();
         Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
@@ -220,6 +221,14 @@
                     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);
+                }
                 latch.countDown();
             });
         }
@@ -269,6 +278,16 @@
                 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);
             }
         }
         pageInfo.setList(dataList);
diff --git a/src/main/java/com/whyc/webSocket/BattStationTempSocket.java b/src/main/java/com/whyc/webSocket/BattStationTempSocket.java
new file mode 100644
index 0000000..37bb131
--- /dev/null
+++ b/src/main/java/com/whyc/webSocket/BattStationTempSocket.java
@@ -0,0 +1,98 @@
+package com.whyc.webSocket;
+
+import com.whyc.config.WebSocketConfig;
+import com.whyc.dto.PageAlarm;
+import com.whyc.dto.Response;
+import com.whyc.service.BattAlarmService;
+import com.whyc.service.BattStationTempService;
+import com.whyc.util.ActionUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpSession;
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * 鐢垫睜鍛婅
+ */
+@Component
+@ServerEndpoint(value = "/battStationTemp",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class)
+public class BattStationTempSocket {
+    private Session session;
+
+    private Thread thread;
+
+    private static BattStationTempService service;
+
+    private volatile boolean runFlag = true;
+
+    private volatile Map<String, Thread> threadMap = new HashMap<>();
+
+    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
+
+    @Autowired
+    public void setService(BattStationTempService service) {
+        BattStationTempSocket.service = service;
+    }
+
+    @OnOpen
+    public void onOpen(Session session, EndpointConfig config) {
+        this.session = session;
+        thread = new Thread("Thread_BattStationTempSocket") {
+            @Override
+            public void run() {
+                while (runFlag && !isInterrupted()) {
+                    Thread thread = currentThread();
+                    threadFlagMap.put(thread.getId(), true);
+                    try {
+                        if (session.isOpen()) {
+                            //鎺ㄩ�佷俊鎭�
+                            synchronized (session) {
+                                session.getBasicRemote().sendObject(service.getList());
+                            }
+                            threadFlagMap.put(thread.getId(), false);
+                        }
+                        sleep(4000);
+                    } catch (Exception e) {
+                        interrupt();
+                    }
+                }
+            }
+        };
+        thread.start();
+        threadFlagMap.put(thread.getId(),true);
+        //鍋滄鑰佺殑socket绾跨▼
+        Thread threadBefore = threadMap.get(session.getId());
+        if(threadBefore !=null && threadBefore.isAlive()){
+            while (threadFlagMap.get(threadBefore.getId())){
+            }
+            threadBefore.interrupt();
+        }
+        //灏嗙嚎绋嬪瓨鍌�,渚夸簬璋冪敤瀹氫綅
+        threadMap.put(session.getId(), this.thread);
+    }
+
+
+    @OnClose
+    public void onClose(CloseReason closeReason){
+        System.err.println("closeReason = " + closeReason);
+        runFlag = false;
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
+        }
+        threadMap.remove(session.getId());
+    }
+
+    @OnError
+    public void onError(Throwable error) {
+        error.printStackTrace();
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
+        }
+        threadMap.remove(session.getId());
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.1