package com.battdata_rt;
|
|
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.base.AppConfig;
|
import com.dec.fbs9100.AppParam;
|
import com.dec.fbs9100.FBS9100_Task_Thread_SQL;
|
import com.dec.fbs9100.MysqlConnPool;
|
import com.dec.fbs9100.Sql_Mysql;
|
|
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;
|
private AppConfig m_AppCfg;
|
|
private Logger logger = null;
|
|
public BattData_RT_Array(AppConfig cfg, AppParam param, MysqlConnPool pool)
|
{
|
logger = LogManager.getLogger(this.getClass());
|
|
m_AppCfg = 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 ArrayList<BattData_RT> getRtData()
|
{
|
return Data_Array;
|
}
|
public void addItem(BattData_RT data)
|
{
|
Data_Array.add(data);
|
}
|
/******************************************************************************************/
|
/********************************* initBattDataRT_Inf *************************************/
|
public void initBattDataRT_Inf(double ser_ver)
|
{
|
Data_Array.clear();
|
initBattDataRT_Inf_FromSQL();
|
new BattData_RT_RamDB_Thread(m_Conn_Pool, Data_Array, ser_ver).start();
|
}
|
/******************************************************************************************/
|
private void initBattDataRT_Inf_FromSQL()
|
{
|
Sql_Mysql sql = null;
|
try {
|
sql = new Sql_Mysql(m_Conn_Pool);
|
sql.sqlMysqlUseDB(Sql_Mysql.DB_BATT_INF);
|
|
String sql_str = "SELECT DISTINCT "
|
+ " FBSDeviceId,FBSDeviceIp,BattGroupName6,GroupIndexInFBSDevice,FBSDeviceName,"
|
+ " BattGroupId,BattGroupNum,MonCount,BattFloatCurrent,FloatVolLevel,MonCapStd,MonVolStd,sign_type"
|
+ " FROM " + Sql_Mysql.BattInf_Table
|
+ " WHERE FLOOR(FBSDeviceId/10000)=61850"
|
+ " 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 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 sign_type = res.getInt("sign_type");
|
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) {
|
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(sign_type != brt.sign_type) {
|
brt.sign_type = sign_type;
|
param_changed = true;
|
}
|
|
if(true == param_changed) {
|
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_AppCfg, m_Param, m_Conn_Pool);
|
|
rtdata.FBSDeviceId = res.getInt("FBSDeviceId");
|
rtdata.FBSDeviceIp = res.getString("FBSDeviceIp").trim();
|
rtdata.FBSDeviceName = res.getString("FBSDeviceName").trim();
|
rtdata.setDevRegCode(res.getString("BattGroupName6").trim());
|
rtdata.GroupIndexInFBSDevice = res.getInt("GroupIndexInFBSDevice");
|
rtdata.sign_type = res.getInt("sign_type");
|
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());
|
/***
|
* 2022-07-05 @lijun 设置单体数据默认值
|
*/
|
rtdata.setMonVol_RtOldDefaultVal();
|
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);
|
BattData_RT_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();
|
|
} catch (Exception e) {
|
logger.error(e.toString(), e);
|
} finally {
|
try {
|
sql.close_con();
|
} catch (Exception e){
|
logger.error(e.toString(), e);
|
}
|
}
|
}
|
/******************************************************************************************/
|
/******************************************************************************************/
|
public boolean checkAndReinitBattGroupData() {
|
boolean bg_reinit_en = false;
|
boolean config_reinit_en = false;
|
Sql_Mysql sql = new Sql_Mysql(m_Conn_Pool);
|
try {
|
String sql_str = "SELECT AppServer_Reinit_BattGroupData_EN, AppServer_Reinit_Config_EN"
|
+ " FROM " + Sql_Mysql.AppSys_Table;
|
ResultSet res = sql.sqlMysqlQuery(sql_str);
|
if(res.next()) {
|
bg_reinit_en = res.getBoolean("AppServer_Reinit_BattGroupData_EN");
|
config_reinit_en = res.getBoolean("AppServer_Reinit_Config_EN");
|
}
|
if(true == bg_reinit_en) {
|
sql_str = "UPDATE " + Sql_Mysql.AppSys_Table
|
+ " SET AppServer_Reinit_BattGroupData_EN=false WHERE num>0";
|
sql.sqlMysqlExecute(sql_str);
|
}
|
if(true == config_reinit_en) {
|
sql_str = "UPDATE " + Sql_Mysql.AppSys_Table
|
+ " SET AppServer_Reinit_Config_EN=false WHERE num>0";
|
sql.sqlMysqlExecute(sql_str);
|
}
|
} catch (SQLException e) {
|
logger.error(e.toString(), e);
|
} finally {
|
sql.close_con();
|
}
|
|
if(true == bg_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(200);
|
} catch (InterruptedException e) {
|
// TODO Auto-generated catch block
|
logger.error(e.toString(), e);
|
}
|
|
return bg_reinit_en;
|
}
|
/******************************************************************************************/
|
}
|