BattMonitor_FBS9600SMore/src/com/battmonitor/base/Com.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
BattMonitor_FBS9600SMore/src/com/battmonitor/sql/Sql_Mysql.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
BattMonitor_FBS9600SMore/src/com/dev_fbs9600s/data/Batt_RealDataRecord_Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
BattMonitor_FBS9600SMore/src/com/dev_fbs9600s/data/Batt_RealDataRecord_Thread_SQL.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
BattMonitor_FBS9600SMore/src/main/main_MonitorServer_FBS9600SMore.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
BattMonitor_FBS9600SMore/src/com/battmonitor/base/Com.java
@@ -15,6 +15,7 @@ final public static String DTF_YMDhm = "yyyy-MM-dd HH:mm"; final public static String DTF_YMDh = "yyyy-MM-dd HH"; final public static String DTF_YMD = "yyyy-MM-dd"; final public static String DTF_Y_M_D = "yyyy_MM_dd"; final public static String DTFYMD = "yyyyMMdd"; final public static String DTF_hms = "HH:mm:ss"; final public static String DTF_YMD_h_m_s = "yyyy-MM-dd+HH_mm_ss"; BattMonitor_FBS9600SMore/src/com/battmonitor/sql/Sql_Mysql.java
@@ -23,6 +23,7 @@ final public static String DB_RamDB_BATT_RT = "`db_ram_batt_rt`"; final public static String WEB_Site = "`web_site`"; final public static String DB_Batt_History = "`db_batt_history`"; //--------------------------------------------------------------------------------------------// public final static String TB_HardDevSmsState = "tb_hard_dev_sms_state"; //--------------------------------------------------------------------------------------------// @@ -123,6 +124,9 @@ public final static String UserPermitGroupTable = DB_USER + ".`tb_user_permitgroup`"; public final static String UserPermitGroupDataTable = DB_USER + ".`tb_user_permitgroup_data`"; public final static String UserJieJiaRiTable = DB_USER + ".`tb_user_jiejiari`"; public final static String BattRealDataTable = DB_Batt_History + ".tb_batt_realdata_"; //蓄电池组历史实时记录表 //--------------------------------------------------------------------------------------------// //--------------------------------------------------------------------------------------------// public Connection mysql_con = null; BattMonitor_FBS9600SMore/src/com/dev_fbs9600s/data/Batt_RealDataRecord_Thread.java
New file @@ -0,0 +1,132 @@ package com.dev_fbs9600s.data; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import com.battmonitor.base.Com; import com.battmonitor.data.BattData_RT; import com.battmonitor.data.BattData_RT_Array; import com.battmonitor.sql.MysqlConnPool; public class Batt_RealDataRecord_Thread implements Runnable{ public static final int TESTDATA_RECORD_INTERVAL = 10; //记录数据间隔 public static final int MAX_SAVE_DAY_COUNT = 30; public MysqlConnPool pool; public List<TestData_Record_Thread> threads; public BattData_RT_Array battData; public Batt_RealDataRecord_Thread(MysqlConnPool pool,BattData_RT_Array battData){ this.pool = pool; this.battData = battData; threads = new ArrayList<>(); } @Override public void run() { System.out.println("Batt_RealDataRecord_Thread Start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)); Date now = null; Date last = new Date(0); while(true) { try { now = new Date(); for(int i=0;i<battData.getItemCount();i++) { boolean isExist = false; BattData_RT batt = battData.getItem(i); for(int k=0;k<threads.size();k++) { if(threads.get(k).batt.BattGroupId == batt.BattGroupId) { isExist = true; break; } } if(!isExist) { TestData_Record_Thread thread = new TestData_Record_Thread(pool, batt); threads.add(thread); new Thread(thread).start(); } //构造今天和明天的历史实时数据表 Batt_RealDataRecord_Thread_SQL.createBatt_RealDataTable(pool, batt.BattGroupId, now); Batt_RealDataRecord_Thread_SQL.createBatt_RealDataTable(pool, batt.BattGroupId, tomorrow(now)); } Date del_time = getDateBefore(now,MAX_SAVE_DAY_COUNT); Batt_RealDataRecord_Thread_SQL.deleteHistoryData(pool, del_time); //System.out.println(Com.getDateTimeFormat(del_time, Com.DTF_YMDhms)); Thread.sleep(3000); } catch (Exception e) { try { Thread.sleep(5000); } catch (InterruptedException e1) { e1.printStackTrace(); } e.printStackTrace(); } } } class TestData_Record_Thread implements Runnable{ public MysqlConnPool pool; public BattData_RT batt; public TestData_Record_Thread(MysqlConnPool pool,BattData_RT batt) { this.pool = pool; this.batt = batt; } @Override public void run() { Date last = new Date(0); //上一次测试的时间 Date now = null; //当前时间 while(true) { try { now = new Date(); long timelong = (now.getTime()-last.getTime())/1000; if(timelong >= TESTDATA_RECORD_INTERVAL) { if(batt.getBattState()>0) { //通讯正常 Batt_RealDataRecord_Thread_SQL.insertBatt_RealDataTable(pool, batt, now); last = now; } } Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } } } } /** * 返回明天日期 * @param today * @return */ public Date tomorrow(Date today) { Calendar calendar = Calendar.getInstance(); calendar.setTime(today); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1); return calendar.getTime(); } /** * 获取指定时间之前多少天的时间 * @param d * @param day * @return */ public static Date getDateBefore(Date d,int day){ Calendar now =Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE,now.get(Calendar.DATE)-day); return now.getTime(); } } BattMonitor_FBS9600SMore/src/com/dev_fbs9600s/data/Batt_RealDataRecord_Thread_SQL.java
New file @@ -0,0 +1,114 @@ package com.dev_fbs9600s.data; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import com.battmonitor.base.Com; import com.battmonitor.data.BattData_RT; import com.battmonitor.sql.MysqlConnPool; import com.battmonitor.sql.Sql_Mysql; public class Batt_RealDataRecord_Thread_SQL { /** * 创建电池组历史实时记录表 * @param pool * @param BattGroupId * @param time */ public static void createBatt_RealDataTable(MysqlConnPool pool,int BattGroupId,Date time) { String sql_str = "CREATE TABLE IF NOT EXISTS "+Sql_Mysql.BattRealDataTable+BattGroupId+"_"+Com.getDateTimeFormat(time, Com.DTF_Y_M_D)+" (" + " num bigint(20) NOT NULL AUTO_INCREMENT," + " BattGroupId int(11) NOT NULL DEFAULT '10001' COMMENT '电池组id'," + " record_time datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '记录时间'," + " group_vol float NOT NULL DEFAULT '0' COMMENT '组端电压'," + " online_vol float NOT NULL DEFAULT '0' COMMENT '在线电压'," + " group_curr float NOT NULL DEFAULT '0' COMMENT '组端电流'," + " batt_state int(11) NOT NULL DEFAULT '0' COMMENT '电池状态'," + " note varchar(255) NOT NULL DEFAULT '' COMMENT '备用'," + " PRIMARY KEY (num)," + " KEY index_battgroupid (BattGroupId) USING BTREE," + " KEY index_record_time (record_time) USING BTREE" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"; Sql_Mysql sql = new Sql_Mysql(pool.getConn()); try { //System.out.println(sql_str); sql.sqlMysqlExecute(sql_str); } catch (SQLException e) { e.printStackTrace(); } finally { sql.close_con(); } } /** * 删除创建时间超时的历史实时记录表 * @param conn_pool * @param deldate */ public static void deleteHistoryData(MysqlConnPool conn_pool,Date deldate) { String sql_select_strs = " select TABLE_NAME,UPDATE_TIME,CREATE_TIME " + " from information_schema.tables " + " where table_schema='db_batt_history' " + " AND TABLE_NAME like 'tb_batt_realdata_%' " + " AND CREATE_TIME <= '"+Com.getDateTimeFormat(deldate, Com.DTF_YMDhms)+"';" ; String sql_delete_strs = " DROP TABLE IF EXISTS "; Sql_Mysql sql = new Sql_Mysql(conn_pool.getConn()); ResultSet res = null; int count = 0; res = sql.sqlMysqlQuery(sql_select_strs); try { while(res.next()) { if(count > 0) { sql_delete_strs += ","; } sql_delete_strs += "db_batt_history." + res.getString("TABLE_NAME"); System.out.println("删除:"+res.getString("TABLE_NAME")+"\t at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)); count++; } if(count >0) { sql.sqlMysqlExecute(sql_delete_strs); } } catch (SQLException e) { e.printStackTrace(); } finally { if(res != null) { try { res.close(); } catch (SQLException e) { e.printStackTrace(); } } sql.close_con(); } } /** * 插入历史实时数据 * @param pool * @param batt * @param time */ public static void insertBatt_RealDataTable(MysqlConnPool pool,BattData_RT batt,Date time) { String sql_str ="INSERT INTO "+Sql_Mysql.BattRealDataTable+batt.BattGroupId+"_"+Com.getDateTimeFormat(time, Com.DTF_Y_M_D)+"(BattGroupId,record_time,group_vol,online_vol,group_curr,batt_state) values(" + ""+batt.BattGroupId + ",'"+Com.getDateTimeFormat(time, Com.DTF_Y_M_D) + "',"+batt.getGroupVol() + "," +batt.getOnlineVol() + "," +batt.getTestCurr() + "," +batt.getBattState() + ")"; Sql_Mysql sql = new Sql_Mysql(pool.getConn()); try { sql.sqlMysqlExecute(sql_str); } catch (SQLException e) { e.printStackTrace(); } finally { sql.close_con(); } } } BattMonitor_FBS9600SMore/src/main/main_MonitorServer_FBS9600SMore.java
@@ -11,6 +11,7 @@ import com.config.AppConfig; import com.dev_fbs9600.data.FBS9600_ServerSocket_Thread; import com.dev_fbs9600.data.FBS9600_Task_Thread; import com.dev_fbs9600s.data.Batt_RealDataRecord_Thread; import com.dev_fbs9600s.data.FBS9600S_ServerSocket_Thread; import com.dev_fbs9600s.data.FBS9600S_SocketClient_Thread_SQL; @@ -191,6 +192,11 @@ */ } { Batt_RealDataRecord_Thread record_thread = new Batt_RealDataRecord_Thread(GB_MysqlConnPool, GB_DataArray); new Thread(record_thread).start(); } { FBS9600S_ServerSocket_Thread task_9600s_server = new FBS9600S_ServerSocket_Thread(GB_MysqlConnPool, GB_DataArray); task_9600s_server.start(); }