From 39b74c6fb4a50bed412bbebdd38440d384f47733 Mon Sep 17 00:00:00 2001
From: whycxzp <glperry@163.com>
Date: 星期日, 30 三月 2025 14:40:18 +0800
Subject: [PATCH] 完善温度告警

---
 src/main/java/com/whyc/mapper/CommonMapper.java                          |    2 
 src/main/java/com/whyc/service/JdbcSqlExecuteService.java                |  206 +++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/whyc/pojo/db_power_history/BattStationTempHistory.java |   26 +++++
 src/main/java/com/whyc/mapper/BattStationTempHisMapper.java              |    1 
 src/main/resources/mapper/CommonMapper.xml                               |   12 +-
 src/main/java/com/whyc/schedule/BattStationTempScheduleService.java      |   22 +++
 src/main/java/com/whyc/service/BattStationTempHisService.java            |   21 +++
 src/main/java/com/whyc/util/SubTablePageInfoUtil.java                    |    4 
 8 files changed, 280 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/whyc/mapper/BattStationTempHisMapper.java b/src/main/java/com/whyc/mapper/BattStationTempHisMapper.java
index e4ecd25..32d8445 100644
--- a/src/main/java/com/whyc/mapper/BattStationTempHisMapper.java
+++ b/src/main/java/com/whyc/mapper/BattStationTempHisMapper.java
@@ -1,6 +1,5 @@
 package com.whyc.mapper;
 
 public interface BattStationTempHisMapper {
-    void createTableByMonth(Integer battGroupId, String month);
 
 }
diff --git a/src/main/java/com/whyc/mapper/CommonMapper.java b/src/main/java/com/whyc/mapper/CommonMapper.java
index ec8f2da..daca304 100644
--- a/src/main/java/com/whyc/mapper/CommonMapper.java
+++ b/src/main/java/com/whyc/mapper/CommonMapper.java
@@ -17,7 +17,7 @@
     //Object getMaxValue(String schema,String table,String field,String valuePrefix);
     Object getMaxValue(String schema, String table, String field);
 
-    String existTable(String dbName, String tableName);
+    boolean existTable(String dbName, String tableName);
 
     //void truncate(String dbName, String tableName);
 
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 da4f0ab..328b287 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,4 +1,30 @@
 package com.whyc.pojo.db_power_history;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.Date;
+
+@Data
+@ToString
 public class BattStationTempHistory {
+
+    private Integer id;
+
+    private Integer pixelX;
+
+    private Integer pixelY;
+
+    private Float minTemp;
+    private Float maxTemp;
+
+    private String minTempPoint;
+    private String maxTempPoint;
+    private String cameraId;
+    private Integer battGroupId;
+    private Integer stationId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date recordTime;
 }
diff --git a/src/main/java/com/whyc/schedule/BattStationTempScheduleService.java b/src/main/java/com/whyc/schedule/BattStationTempScheduleService.java
index c7efb8b..49a82ca 100644
--- a/src/main/java/com/whyc/schedule/BattStationTempScheduleService.java
+++ b/src/main/java/com/whyc/schedule/BattStationTempScheduleService.java
@@ -7,18 +7,23 @@
 import com.whyc.pojo.db_alarm.BattStationTempAlarm;
 import com.whyc.pojo.db_batt.BattCamera;
 import com.whyc.pojo.db_param.PageParam;
+import com.whyc.pojo.db_power_history.BattStationTempHistory;
 import com.whyc.pojo.db_power_rt.BattStationTemp;
 import com.whyc.service.BattStationTempAlarmService;
 import com.whyc.service.BattStationTempHisService;
 import com.whyc.service.BattStationTempService;
 import com.whyc.service.PageParamService;
+import com.whyc.util.DateUtil;
 import com.whyc.util.HikTempUtil;
+import com.whyc.util.ThreadLocalUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -91,9 +96,20 @@
                     battStationTemp.setStationId(stationId);
 
                     service.addOrUpdate(battStationTemp);
-                    //娓╁害鍘嗗彶 - 鎸夌數姹犵粍id,鏈堝害琛�
-
-
+                    String yearMonth = ThreadLocalUtil.format(date, 2);
+                    //娓╁害鍘嗗彶 - 璁板綍鍒� 鎸夌數姹犵粍id,鏈堝害琛�
+                    boolean exist = hisService.existTempHisTableByMonth(battGroupId,yearMonth);
+                    //涓嶅瓨鍦ㄥ垯鍒涘缓.鎻掑叆璁板綍
+                    if(!exist){
+                        hisService.createTableByMonth(battGroupId,yearMonth);
+                    }
+                    BattStationTempHistory tempHistory = new BattStationTempHistory();
+                    try {
+                        BeanUtils.copyProperties(tempHistory,battStationTemp);
+                    } catch (IllegalAccessException | InvocationTargetException e) {
+                        throw new RuntimeException(e);
+                    }
+                    hisService.add(battGroupId,yearMonth,tempHistory);
                     //娓╁害鍛婅鍒ゆ柇
                     //鏌ヨ娓╁害鍛婅琛紝濡傛灉瀛樺湪
                     BattStationTempAlarm alarmInDB = alarmService.getByBattGroupId(battGroupId);
diff --git a/src/main/java/com/whyc/service/BattStationTempHisService.java b/src/main/java/com/whyc/service/BattStationTempHisService.java
index 0dd3395..2109e8f 100644
--- a/src/main/java/com/whyc/service/BattStationTempHisService.java
+++ b/src/main/java/com/whyc/service/BattStationTempHisService.java
@@ -1,6 +1,9 @@
 package com.whyc.service;
 
 import com.whyc.mapper.BattStationTempHisMapper;
+import com.whyc.mapper.CommonMapper;
+import com.whyc.pojo.db_power_history.BattStationTempHistory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -11,8 +14,22 @@
     @Resource
     private BattStationTempHisMapper mapper;
 
-    public void createTableByMonth(Integer battGroupId,String month) {
-        mapper.createTableByMonth(battGroupId,month);
+    @Resource
+    private CommonMapper commonMapper;
+
+    @Autowired
+    private JdbcSqlExecuteService jdbcSqlExecuteService;
+
+    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`");
     }
 
+    public boolean existTempHisTableByMonth(Integer battGroupId, String yearMonth) {
+        return commonMapper.existTable("db_power_history","db_batt_station_temp_history_"+battGroupId+"_"+yearMonth);
+    }
+
+    public void add(Integer battGroupId, String yearMonth, BattStationTempHistory tempHistory) {
+        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());
+    }
 }
diff --git a/src/main/java/com/whyc/service/JdbcSqlExecuteService.java b/src/main/java/com/whyc/service/JdbcSqlExecuteService.java
new file mode 100644
index 0000000..5a45cb4
--- /dev/null
+++ b/src/main/java/com/whyc/service/JdbcSqlExecuteService.java
@@ -0,0 +1,206 @@
+package com.whyc.service;
+
+import com.whyc.mapper.CallBack;
+import com.whyc.util.ThreadLocalUtil;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class JdbcSqlExecuteService {
+    @Autowired
+    private SqlSessionTemplate sqlSessionTemplate;
+
+    //    鑷畾涔夋墽琛孲QL
+    public JSONArray executeQuery(String sql){
+        PreparedStatement ps = null;
+        ResultSet rs = null;
+        SqlSession sqlSession = openSession();
+        JSONArray jsonArray = new JSONArray();
+        try {
+            ps=sqlSession.getConnection().prepareStatement(sql);
+            rs=ps.executeQuery();
+            ResultSetMetaData metaData = rs.getMetaData();
+            int colCnt = metaData.getColumnCount();
+            while (rs.next()) {
+                JSONObject jsonObject = new JSONObject();
+                for(int i=1;i<=colCnt;i++){
+                    String property=metaData.getColumnName(i);
+                    Object obj=rs.getObject(i);
+                    if(obj instanceof java.util.Date ){
+                        //jsonObject.put(property, ActionUtil.sdf.format(obj));
+                        jsonObject.put(property, ThreadLocalUtil.format((java.util.Date) obj,1));
+                    }else{
+                        jsonObject.put(property,obj);
+                    }
+                }
+                JSONObject.toBean(jsonObject,Object.class);
+                jsonArray.add(jsonObject);
+            }
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }finally {
+            closeSession(rs,ps,sqlSession);
+        }
+        return jsonArray;
+    }
+
+    //    鑷畾涔夋墽琛孲QL
+    public List executeQuery_call(String sql, CallBack call){
+        PreparedStatement ps = null;
+        ResultSet rs = null;
+        SqlSession sqlSession = openSession();
+        try {
+            ps=sqlSession.getConnection().prepareStatement(sql);
+            rs=ps.executeQuery();
+            return call.getResults(rs);
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }finally {
+            closeSession(rs,ps,sqlSession);
+        }
+        return null;
+    }
+
+    /**
+     * 灏佽鎵�鏈夋洿鏂扮殑鎿嶄綔(娣诲姞,鍒犻櫎,淇敼)
+     * @param sql
+     * @param values
+     * @return
+     */
+    public  int executeUpdate(String sql, Object[] values){
+        PreparedStatement ps = null;
+        ResultSet rs = null;
+        SqlSession sqlSession = openSession();
+        int flag=0;
+        try {
+            ps = sqlSession.getConnection().prepareStatement(sql);
+            if(values != null){
+                for (int i = 0; i < values.length; i++) {
+                    ps.setObject(i+1, values[i]);
+                }
+            }
+            flag =  ps.executeUpdate();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally{
+            closeSession(rs,ps,sqlSession);
+        }
+        return flag;
+    }
+    //鎵цsql璇彞
+    public  boolean execute(String sql){
+        PreparedStatement ps = null;
+        SqlSession sqlSession = openSession();
+        boolean rest = true;
+        try{
+                ps = sqlSession.getConnection().prepareStatement(sql);
+                ps.execute();
+
+        }catch(SQLException ex) {
+            ex.printStackTrace();
+            rest = false;
+        }finally {
+            closeSession(null,ps,sqlSession);
+        }
+
+        return rest;
+    }
+    //    寮�鍚摼鎺�
+    private SqlSession openSession() {
+        SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
+        return sqlSessionFactory.openSession();
+    }
+
+    //    鍏抽棴閾炬帴
+    private void closeSession(ResultSet rs,PreparedStatement ps,SqlSession sqlSession) {
+        try {
+            if(rs!=null){
+                rs.close();
+            }
+            if(ps!=null){
+                ps.close();
+            }
+            if(sqlSession!=null){
+                sqlSession.close();
+            }
+
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    public  boolean makeManualCommit( ArrayList<String> al_sql_strs){
+        PreparedStatement ps = null;
+        SqlSession sqlSession = openSession();
+        Connection mysql_con=sqlSession.getConnection();
+        boolean exe_res = true;
+        try {
+            mysql_con.setAutoCommit(false);
+
+            for(int n=0; n<al_sql_strs.size(); n++) {
+                if(true == exe_res) {
+                    exe_res = executeCreateTableNoclose(mysql_con,al_sql_strs.get(n));
+                } else {
+                    break;
+                }
+            }
+            if(true == exe_res) {
+                mysql_con.commit();
+            }
+        } catch (SQLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            exe_res = false;
+        } finally {
+            try {
+                if(false == exe_res) {
+                    mysql_con.rollback();
+                }
+                mysql_con.setAutoCommit(true);
+            } catch (SQLException e1) {
+                // TODO Auto-generated catch block
+                e1.printStackTrace();
+            }finally {
+                closeSession(null,ps,sqlSession);
+            }
+        }
+        return exe_res;
+    }
+
+    //鎵цsql璇彞with no colse
+    public static boolean executeCreateTableNoclose(Connection mysql_con,String sql_str)
+    {
+        PreparedStatement ps=null;
+
+        boolean rest = true;
+        try
+        {
+            ps = mysql_con.prepareStatement(sql_str);
+            ps.setQueryTimeout(600);
+            ps.execute();
+        }
+        catch(SQLException ex)
+        {
+            ex.printStackTrace();
+            rest = false;
+
+        }finally {
+            try {
+                ps.close();
+            } catch (SQLException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+        return rest;
+    }
+}
diff --git a/src/main/java/com/whyc/util/SubTablePageInfoUtil.java b/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
index 0b78efc..c436eca 100644
--- a/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
+++ b/src/main/java/com/whyc/util/SubTablePageInfoUtil.java
@@ -55,8 +55,8 @@
 
             //鏁板��
             String tableName = tablePrefix+"_"+tableYear;
-            String existTableName = commonMapper.existTable(dbName, tableName);
-            if(existTableName == null){
+            boolean existTableName = commonMapper.existTable(dbName, tableName);
+            if(!existTableName){
                 continue;
             }
             //====== 鏍规嵁涓嶅悓绫诲瀷绫诲瀷瀵硅薄瀵瑰簲璋冩暣 ======
diff --git a/src/main/resources/mapper/CommonMapper.xml b/src/main/resources/mapper/CommonMapper.xml
index 03e827e..ee5558e 100644
--- a/src/main/resources/mapper/CommonMapper.xml
+++ b/src/main/resources/mapper/CommonMapper.xml
@@ -164,11 +164,13 @@
     <select id="getMaxValue" resultType="java.lang.Object">
         select max(${field}) from ${schema}.${table}
     </select>
-    <select id="existTable" resultType="java.lang.String">
-        select distinct table_name
-        from INFORMATION_SCHEMA.TABLES
-        where table_name = #{tableName}
-        and TABLE_SCHEMA = #{dbName}
+    <select id="existTable" resultType="java.lang.Boolean">
+        SELECT EXISTS (
+        SELECT 1
+        FROM INFORMATION_SCHEMA.TABLES
+        WHERE table_name = #{tableName}
+        AND TABLE_SCHEMA = #{dbName}
+        ) AS table_exists
     </select>
     <select id="getTableListLike" resultType="java.lang.String">
             select distinct table_name

--
Gitblit v1.9.1