package com.battmonitor.data;
|
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.Date;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import com.battmonitor.base.AppParam;
|
import com.battmonitor.base.Com;
|
import com.battmonitor.data_store.InsertDataToMysql_Task_SQL;
|
import com.battmonitor.sql.MysqlConnPool;
|
import com.battmonitor.sql.Sql_Mysql;
|
import com.config.AppConfig;
|
import com.dev.btse.comm.FBS9100_Task_Thread_SQL;
|
|
public class BattData_RT_Array {
|
|
final public static int DATA_SOURCE_FBSDEV = 0;
|
final public static int DATA_SOURCE_SQLSERVER = 1;
|
final public static int DATA_SOURCE_C_INTERFACE = 2;
|
final public static int DATA_SOURCE_SQLSERVER_AND_C_INTERFACE = 3;
|
|
private ArrayList<BattData_RT> Data_Array = new ArrayList<BattData_RT>();
|
private MysqlConnPool m_Conn_Pool;
|
private int Sybase_query_count = 0;
|
private Date m_SybaseServerDate = new Date();
|
private AppParam m_Param;
|
public AppConfig m_AppCFG;
|
|
private Logger logger = null;
|
|
public BattData_RT_Array(AppConfig app_cfg, AppParam param, MysqlConnPool pool)
|
{
|
logger = LogManager.getLogger(this.getClass());
|
|
m_AppCFG = app_cfg;
|
m_Param = param;
|
m_Conn_Pool = pool;
|
}
|
|
public Date getSybaseServerDateTime()
|
{
|
return m_SybaseServerDate;
|
}
|
|
public int getSybaseQueryCount()
|
{
|
return Sybase_query_count;
|
}
|
|
public int getItemCount()
|
{
|
return Data_Array.size();
|
}
|
|
public BattData_RT getItem(int index)
|
{
|
return Data_Array.get(index);
|
}
|
|
public void addItem(BattData_RT data)
|
{
|
Data_Array.add(data);
|
}
|
/******************************************************************************************/
|
/**
|
* ÅжÏData_ArrayÖÐÊÇ·ñÓе¥ÌåµçѹֵµÍÓÚ0.001
|
* @return
|
*/
|
public boolean checkIfHaveZeroMonVol()
|
{
|
boolean have_zero_vol = false;
|
|
for(int n=0; n<Data_Array.size(); n++)
|
{
|
if(n >= 1000000)
|
break;
|
|
if(true == Data_Array.get(n).checkIfHaveZeroMonVol())
|
{
|
have_zero_vol = true;
|
break;
|
}
|
}
|
|
return have_zero_vol;
|
}
|
/********************************* initBattDataRT_Inf *************************************/
|
public void initBattDataRT_Inf(double ser_ver)
|
{
|
FBS9100_Task_Thread_SQL.createBTS_BattGroupState_Table(m_Conn_Pool);
|
Data_Array.clear();
|
//³õʼ»¯ Data_Array ¼¯ºÏÖеÄÊý¾Ý
|
initBattDataRT_Inf_FromSQL(); //ÉèÖÃData_ArrayÖеÄÖµ
|
|
new BattData_RT_RamDB_Thread(m_Conn_Pool, ser_ver, m_AppCFG).start();
|
}
|
|
/******************************************************************************************/
|
private void initBattDataRT_Inf_FromSQL()
|
{
|
logger.warn("run initBattDataRT_Inf_FromSQL()");
|
Sql_Mysql sql = new Sql_Mysql(m_Conn_Pool.getConn());
|
try {
|
sql.sqlMysqlUseDB(Sql_Mysql.DB_BATT_INF);
|
|
String sql_str = "SELECT DISTINCT "
|
+ " FBSDeviceId,FBSDeviceIp,BattGroupName6,GroupIndexInFBSDevice,"
|
+ " BattGroupId,BattGroupNum,MonCount,BattFloatCurrent,FloatVolLevel,MonCapStd,MonVolStd,CInterFaceId"
|
+ " FROM " + Sql_Mysql.BattInf_Table
|
+ " ORDER BY BattGroupId ASC";
|
|
ResultSet res = sql.sqlMysqlQuery(sql_str);
|
int auto_cid = 100000001;
|
while(res.next()) {
|
int bg_id = res.getInt("BattGroupId");
|
int mon_cnt = res.getInt("MonCount");
|
if(mon_cnt >= 500) {
|
mon_cnt = 500;
|
}
|
if(mon_cnt < 0) {
|
mon_cnt = 0;
|
}
|
boolean batt_group_exist = false;
|
String tmp_devip = res.getString("FBSDeviceIp").trim();
|
String reg_code = res.getString("BattGroupName6").trim();
|
float float_vol_lev = res.getFloat("FloatVolLevel");
|
float float_curr_lev = res.getFloat("BattFloatCurrent");
|
int GroupIndexInFBSDevice = res.getInt("GroupIndexInFBSDevice");
|
int CInterFaceId = res.getInt("CInterFaceId"); //ÅжÏÊÇ·ñ¼ÓÃÜ
|
if(GroupIndexInFBSDevice > 3) {
|
GroupIndexInFBSDevice = 3;
|
}
|
if(GroupIndexInFBSDevice < 0) {
|
GroupIndexInFBSDevice = 0;
|
}
|
for(int n=0; n<Data_Array.size(); n++) {
|
BattData_RT brt = Data_Array.get(n);
|
if(bg_id == brt.BattGroupId) {
|
//----------------- edit by mxpopstar @2020-11-10 -----------------//
|
if(false == tmp_devip.contentEquals(brt.FBSDeviceIp)) {
|
logger.warn("old dev_ip:" + brt.FBSDeviceIp + ", new dev_ip:" + tmp_devip);
|
brt.FBSDeviceIp = tmp_devip;
|
Com.getIPFromStr(brt.FBSDeviceIp, brt.FBSDevIp);
|
}
|
|
boolean param_changed = false;
|
if(false == reg_code.equals(brt.getDevRegCode())) {
|
brt.setDevRegCode(reg_code);
|
param_changed = true;
|
}
|
if((float_vol_lev!=brt.getBattFloatVolLev()) || (float_curr_lev!=brt.getBattFloatCurrLev())) {
|
brt.setBattFloatVolCurrLevel(float_vol_lev, float_curr_lev);
|
param_changed = true;
|
}
|
if(mon_cnt != brt.al_MonVol.size()) {
|
brt.updateMonCnt(mon_cnt);
|
param_changed = true;
|
}
|
if(GroupIndexInFBSDevice != brt.GroupIndexInFBSDevice) {
|
brt.GroupIndexInFBSDevice = GroupIndexInFBSDevice;
|
param_changed = true;
|
}
|
|
if(true == param_changed) {
|
logger.warn(String.format("FBS9100S Dev Inf Changed£ºdevid:%d, bgid:%d, group_index:%d, moncnt:%d,"
|
+ "floatvollev:%1.1fV, floatcurrlev:%1.1fA, devregcode:%s",
|
brt.FBSDeviceId, brt.BattGroupId,
|
brt.GroupIndexInFBSDevice, brt.MonCount,
|
brt.getBattFloatVolLev(), brt.getBattFloatCurrLev(),
|
brt.getDevRegCode()));
|
|
FBS9100_Task_Thread_SQL.update_BTS_BattGroupState_Table(m_Conn_Pool, brt.FBSDeviceId, brt.BattGroupId,
|
brt.GroupIndexInFBSDevice, brt.MonCount,
|
brt.getBattFloatVolLev(), brt.getBattFloatCurrLev(),
|
brt.getDevRegCode());
|
}
|
|
batt_group_exist = true;
|
break;
|
}
|
}
|
|
if(true == batt_group_exist) {
|
continue;
|
} else {
|
BattData_RT rtdata = new BattData_RT(m_Param, m_Conn_Pool);
|
|
rtdata.aescode_en = (CInterFaceId == 0);
|
|
rtdata.FBSDeviceId = res.getInt("FBSDeviceId");
|
rtdata.FBSDeviceIp = res.getString("FBSDeviceIp").trim();
|
Com.getIPFromStr(rtdata.FBSDeviceIp, rtdata.FBSDevIp);
|
rtdata.setDevRegCode(res.getString("BattGroupName6").trim());
|
rtdata.GroupIndexInFBSDevice = res.getInt("GroupIndexInFBSDevice");
|
if(rtdata.GroupIndexInFBSDevice > 3) {
|
rtdata.GroupIndexInFBSDevice = 3;
|
}
|
if(rtdata.GroupIndexInFBSDevice < 0) {
|
rtdata.GroupIndexInFBSDevice = 0;
|
}
|
|
rtdata.BattGroupId = res.getInt("BattGroupId");
|
rtdata.BattGroupNum = res.getInt("BattGroupNum");
|
|
rtdata.MonCount = res.getInt("MonCount");
|
if(rtdata.MonCount >= 500) {
|
rtdata.MonCount = 500;
|
}
|
if(rtdata.MonCount < 0) {
|
rtdata.MonCount = 0;
|
}
|
|
rtdata.MonStdCap = res.getFloat("MonCapStd");
|
rtdata.MonStdVol = res.getFloat("MonVolStd");
|
rtdata.setBattFloatVolCurrLevel(res.getFloat("FloatVolLevel"), res.getFloat("BattFloatCurrent"));
|
|
for(int mn=0; mn<rtdata.MonCount; mn++) {
|
MonVolData data = new MonVolData(0, 0, auto_cid++);
|
rtdata.al_MonVol.add(data);
|
//System.out.println(data.monVol+"################");
|
rtdata.al_MonVol_RtOld.add(data.clone());
|
rtdata.al_MonVol_History.add(data.clone());
|
}
|
/*****rtdata.initTestDataSaveRunable();*****/
|
if(true == m_AppCFG.getBattTestStateReloadEn()) {
|
BattData_RT_SQL.queryBattState_From_RT_Table(m_Conn_Pool, rtdata);
|
byte batttest_type = rtdata.getBattTestType();
|
if((BattStatData.BATTDATA_DISCHARGE == batttest_type)
|
|| (BattStatData.BATTDATA_CHARGE == batttest_type)) {
|
rtdata.setMonitorParam(batttest_type);
|
InsertDataToMysql_Task_SQL.get_MonData_From_BattData_RT_RamDB_Table(m_Conn_Pool, rtdata);
|
|
rtdata.mTestData.testRecordCount
|
= BattData_RT_SQL.queryTestRecordCountMax_From_tb_batttestdata_inf(m_Conn_Pool, rtdata.BattGroupId);
|
|
rtdata.MysqlRecordInf_Exist = true;
|
}
|
}
|
Data_Array.add(rtdata);
|
FBS9100_Task_Thread_SQL.insert_BTS_BattGroupState_Table(m_Conn_Pool, rtdata.FBSDeviceId, rtdata.BattGroupId,
|
rtdata.GroupIndexInFBSDevice, rtdata.MonCount,
|
rtdata.getBattFloatVolLev(), rtdata.getBattFloatCurrLev(),
|
rtdata.getDevRegCode());
|
}
|
}
|
res.close();
|
|
/*
|
sql.sqlMysqlUseDB(Sql_Mysql.DB_BATT_INF);
|
al_stationid.clear();
|
sql_str = "SELECT DISTINCT StationId FROM " + Sql_Mysql.BattInf_Table;
|
res = sql.sqlMysqlQuery(sql_str);
|
while(res.next()) {
|
al_stationid.add(res.getString("StationId"));
|
}*/
|
/**********************************************************************************/
|
|
} catch (SQLException e) {
|
logger.error(e.toString(), e);
|
} finally {
|
sql.close_con();
|
}
|
}
|
/******************************************************************************************/
|
/******************************************************************************************/
|
public void checkAndReinitBattGroupData() {
|
boolean reinit_en = false;
|
boolean config_reinit_en = false;
|
Sql_Mysql sql = new Sql_Mysql(m_Conn_Pool.getConn());
|
try {
|
String sql_str = "SELECT AppServer_Reinit_BattGroupData_EN, AppServer_Reinit_Config_EN,AppServer_Reinit_BattGroupData_A059_EN"
|
+ " FROM " + Sql_Mysql.AppSys_Table;
|
ResultSet res = sql.sqlMysqlQuery(sql_str);
|
if(res.next()) {
|
reinit_en = res.getBoolean("AppServer_Reinit_BattGroupData_A059_EN");
|
config_reinit_en = res.getBoolean("AppServer_Reinit_Config_EN");
|
}
|
if(true == reinit_en) {
|
sql_str = "UPDATE " + Sql_Mysql.AppSys_Table
|
+ " SET AppServer_Reinit_BattGroupData_A059_EN=false WHERE num>0";
|
sql.sqlMysqlExecute(sql_str);
|
}
|
|
} catch (SQLException e) {
|
logger.error(e.toString(), e);
|
} finally {
|
sql.close_con();
|
}
|
|
if(true == reinit_en) {
|
try {
|
Thread.sleep(1000);
|
} catch (InterruptedException e) {
|
// TODO Auto-generated catch block
|
logger.error(e.toString(), e);
|
}
|
|
initBattDataRT_Inf_FromSQL();
|
}
|
if(true == config_reinit_en) {
|
m_AppCFG.readConfigFromXml();
|
m_Conn_Pool.setMaxPoolSize(m_AppCFG.getMysqlConnCountMax());
|
}
|
try {
|
Thread.sleep(1000);
|
} catch (InterruptedException e) {
|
// TODO Auto-generated catch block
|
logger.error(e.toString(), e);
|
}
|
}
|
}
|