package com.battdata_rt;
|
|
import com.base.Com;
|
import com.config.AppConfig;
|
import com.config.AppParam;
|
import com.sql.MysqlConnPool;
|
import com.sql.Sql_Mysql;
|
import com.sql.Sql_Sybase;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.sql.Timestamp;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.GregorianCalendar;
|
import java.util.Random;
|
|
public class BattData_RT_Array {
|
public static final int DATA_SOURCE_FBSDEV = 0;
|
public static final int DATA_SOURCE_SQLSERVER = 1;
|
public static final int DATA_SOURCE_C_INTERFACE = 2;
|
public static final int DATA_SOURCE_SQLSERVER_AND_C_INTERFACE = 3;
|
private ArrayList<BattData_RT> Data_Array = new ArrayList();
|
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 ArrayList<String> al_stationid = new ArrayList();
|
|
public BattData_RT_Array(AppConfig cfg, AppParam param, MysqlConnPool pool) {
|
this.m_AppCfg = cfg;
|
this.m_Param = param;
|
this.m_Conn_Pool = pool;
|
}
|
|
public Date getSybaseServerDateTime() {
|
return this.m_SybaseServerDate;
|
}
|
|
public int getSybaseQueryCount() {
|
return this.Sybase_query_count;
|
}
|
|
public int getItemCount() {
|
return this.Data_Array.size();
|
}
|
|
public BattData_RT getItem(int index) {
|
return (BattData_RT) this.Data_Array.get(index);
|
}
|
|
public void addItem(BattData_RT data) {
|
this.Data_Array.add(data);
|
}
|
|
public boolean checkIfHaveZeroMonVol() {
|
boolean have_zero_vol = false;
|
|
for (int n = 0; n < this.Data_Array.size(); n++) {
|
if (n >= 1000000) {
|
break;
|
}
|
if (((BattData_RT) this.Data_Array.get(n)).checkIfHaveZeroMonVol()) {
|
have_zero_vol = true;
|
break;
|
}
|
}
|
|
return have_zero_vol;
|
}
|
|
public void initBattDataRT_Inf(double ser_ver) {
|
this.Data_Array.clear();
|
|
initBattDataRT_Inf_FromSQL();
|
|
new BattData_RT_RamDB_Thread(this.m_Conn_Pool, this.Data_Array, ser_ver).start();
|
}
|
|
private void initBattDataRT_Inf_FromSQL() {
|
Sql_Mysql sql = new Sql_Mysql(this.m_Conn_Pool.getConn());
|
try {
|
sql.sqlMysqlUseDB("`db_battinf`");
|
|
String sql_str = "SELECT DISTINCT StationId,StationName,StationIp, FBSDeviceId,FBSDeviceIp,FBSDeviceName,GroupIndexInFBSDevice, BattGroupId,BattGroupNum,MonCount,BattFloatCurrent,FloatVolLevel,MonCapStd,MonVolStd FROM `db_battinf`.`tb_battinf` ORDER BY BattGroupId ASC";
|
|
ResultSet res = sql.sqlMysqlQuery(sql_str);
|
while (res.next()) {
|
BattData_RT rtdata = new BattData_RT(this.m_AppCfg, this.m_Param, this.m_Conn_Pool);
|
|
rtdata.StationId = res.getInt("StationId");
|
rtdata.StationName = res.getString("StationName");
|
Com.getIPFromStr(res.getString("StationIp").trim(), rtdata.StationIp);
|
|
rtdata.FBSDeviceId = res.getInt("FBSDeviceId");
|
rtdata.FBSDeviceIp = res.getString("FBSDeviceIp").trim();
|
rtdata.FBSDeviceName = res.getString("FBSDeviceName");
|
rtdata.GroupIndexInFBSDevice = res.getInt("GroupIndexInFBSDevice");
|
|
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"));
|
this.Data_Array.add(rtdata);
|
}
|
|
boolean std_SignalName = false;
|
sql_str = "SELECT SignalName FROM `db_battinf`.`tb_battinf` LIMIT 1";
|
|
res = sql.sqlMysqlQuery(sql_str);
|
if ((res.next()) && (res.getString("SignalName").contains("#"))) {
|
std_SignalName = true;
|
}
|
|
int auto_cid = 1000;
|
for (int n = 0; n < this.Data_Array.size(); n++) {
|
BattData_RT rtdata = (BattData_RT) this.Data_Array.get(n);
|
if (std_SignalName)
|
sql_str = "SELECT DISTINCT DeviceId,SignalId,SignalName,CInterFaceId FROM `db_battinf`.`tb_battinf` WHERE BattGroupId="
|
+ rtdata.BattGroupId + " ORDER BY SignalName ASC";
|
else {
|
sql_str = "SELECT DISTINCT DeviceId,SignalId,SignalName,CInterFaceId FROM `db_battinf`.`tb_battinf` WHERE BattGroupId="
|
+ rtdata.BattGroupId + " ORDER BY "
|
+ " CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(DeviceName,'-',-2),'-',1) AS SIGNED) ASC, "
|
+ " CAST(TRIM('单体电压' FROM SignalName) AS SIGNED) ASC";
|
}
|
|
res = sql.sqlMysqlQuery(sql_str);
|
|
boolean mon_data_ready = false;
|
while (res.next()) {
|
if (res.getString("SignalName").contains("单体")) {
|
if (rtdata.al_MonVol.size() < rtdata.MonCount) {
|
MonVolData data = new MonVolData(res.getInt("DeviceId"), res.getInt("SignalId"),
|
res.getInt("CInterFaceId"));
|
rtdata.al_MonVol.add(data);
|
rtdata.al_MonVol_RtOld.add(data.clone());
|
rtdata.al_MonVol_History.add(data.clone());
|
}
|
mon_data_ready = true;
|
} else {
|
mon_data_ready = false;
|
break;
|
}
|
}
|
|
if (!mon_data_ready) {
|
for (int mn = 0; mn < rtdata.MonCount; mn++) {
|
MonVolData data = new MonVolData(0, 0, auto_cid++);
|
rtdata.al_MonVol.add(data);
|
|
rtdata.al_MonVol_RtOld.add(data.clone());
|
rtdata.al_MonVol_History.add(data.clone());
|
}
|
|
}
|
|
}
|
|
res.close();
|
|
sql.sqlMysqlUseDB("`db_battinf`");
|
this.al_stationid.clear();
|
sql_str = "SELECT DISTINCT StationId FROM `db_battinf`.`tb_battinf`";
|
res = sql.sqlMysqlQuery(sql_str);
|
while (res.next()) {
|
this.al_stationid.add(res.getString("StationId"));
|
}
|
} catch (SQLException e) {
|
e.printStackTrace();
|
} finally {
|
sql.close_con();
|
}
|
}
|
|
public void getDataFromSybase_Task(AppConfig cfg, int start_index, int count, GregorianCalendar gc_start,
|
GregorianCalendar gc_end, boolean realtime_data, String time_order) {
|
Sql_Sybase m_sybase_sql = null;
|
try {
|
String sql_str = null;
|
m_sybase_sql = new Sql_Sybase(cfg);
|
if (!m_sybase_sql.get_conn_state()) {
|
Thread.sleep(1000L);
|
return;
|
}
|
|
if (start_index < 0)
|
start_index = 0;
|
if (count < 0) {
|
count = 0;
|
}
|
if (start_index >= this.al_stationid.size()) {
|
start_index = this.al_stationid.size() - 1;
|
}
|
if (start_index + count > this.al_stationid.size()) {
|
count = this.al_stationid.size() - start_index;
|
}
|
|
ResultSet rs = m_sybase_sql.sqlSybaseQuery("select getdate()");
|
if (rs.next()) {
|
this.m_SybaseServerDate.setTime(rs.getTimestamp("").getTime());
|
}
|
if (Math.abs(this.m_SybaseServerDate.getTime() - new Date().getTime()) > 5000L) {
|
Com.setDateTime(this.m_SybaseServerDate);
|
}
|
|
if (1 == m_sybase_sql.get_SQL_TYPE()) {
|
for (int n = start_index; n < start_index + count; n++) {
|
sql_str = m_sybase_sql.getQueryCurrentString((String) this.al_stationid.get(n), gc_start, gc_end,
|
time_order);
|
|
rs = m_sybase_sql.sqlSybaseQuery(sql_str);
|
int st_index = 0;
|
for (; rs.next() && st_index < this.Data_Array.size();) {
|
int st_id = rs.getInt("StationId");
|
int dv_id = rs.getInt("EquipmentId");
|
int sg_id = rs.getInt("SignalId");
|
|
if ((dv_id < 1) || (sg_id < 1)) {
|
break;
|
}
|
// st_index = 0;
|
// continue;
|
|
if (((BattData_RT) this.Data_Array.get(st_index)).StationId == st_id) {
|
BattData_RT batt_data = (BattData_RT) this.Data_Array.get(st_index);
|
if (batt_data.BattCurrDeviceId == dv_id) {
|
if (realtime_data) {
|
for (int id_cnt = 0; id_cnt < batt_data.BattCurrValueId.length; id_cnt++) {
|
if (sg_id == batt_data.BattCurrValueId[id_cnt]) {
|
batt_data.mTestData.TestCurr_RT_TMP = rs.getFloat("FloatValue");
|
}
|
}
|
}
|
}
|
}
|
st_index++;
|
}
|
|
rs.close();
|
}
|
|
}
|
|
for (int n = start_index; n < start_index + count; n++) {
|
sql_str = m_sybase_sql.getQueryVolString((String) this.al_stationid.get(n), gc_start, gc_end,
|
time_order);
|
|
rs = m_sybase_sql.sqlSybaseQuery(sql_str);
|
int st_index = 0;
|
for (; rs.next() && st_index < this.Data_Array.size();) {
|
int st_id = rs.getInt("StationId");
|
int dv_id = rs.getInt("EquipmentId");
|
int sg_id = rs.getInt("SignalId");
|
|
if ((dv_id < 1) || (sg_id < 1))
|
break;
|
// st_index = 0;
|
// continue;
|
|
if (((BattData_RT) this.Data_Array.get(st_index)).StationId == st_id) {
|
BattData_RT batt_data = (BattData_RT) this.Data_Array.get(st_index);
|
if ((1 != m_sybase_sql.get_SQL_TYPE()) && (batt_data.BattCurrDeviceId == dv_id)) {
|
if (realtime_data) {
|
for (int id_cnt = 0; id_cnt < batt_data.BattCurrValueId.length; id_cnt++) {
|
if (sg_id == batt_data.BattCurrValueId[id_cnt]) {
|
batt_data.mTestData.TestCurr_RT_TMP = rs.getFloat("FloatValue");
|
}
|
}
|
}
|
} else {
|
for (int bt_index = 0; bt_index < batt_data.al_MonVol.size(); bt_index++) {
|
if ((((MonVolData) batt_data.al_MonVol.get(bt_index)).deviceId == dv_id)
|
&& (((MonVolData) batt_data.al_MonVol.get(bt_index)).monId == sg_id)) {
|
if ((realtime_data)
|
|| (((MonVolData) batt_data.al_MonVol.get(bt_index)).monVol_TMP <= 0.01D)) {
|
((MonVolData) batt_data.al_MonVol.get(bt_index)).monVol_TMP = rs
|
.getFloat("FloatValue");
|
}
|
}
|
}
|
}
|
}
|
st_index++;
|
}
|
|
rs.close();
|
}
|
|
m_sybase_sql.close_conn();
|
|
for (int n = 0; n < this.Data_Array.size(); n++) {
|
BattData_RT batt_data = (BattData_RT) this.Data_Array.get(n);
|
batt_data.mTestData.updateCurrFrom_SqlServer();
|
}
|
|
this.Sybase_query_count += 1;
|
if (this.Sybase_query_count < 0) {
|
this.Sybase_query_count = 0;
|
}
|
|
} catch (InterruptedException | SQLException localInterruptedException) {
|
try {
|
m_sybase_sql.close_conn();
|
} catch (SQLException localSQLException1) {
|
}
|
} finally {
|
try {
|
m_sybase_sql.close_conn();
|
} catch (SQLException localSQLException2) {
|
}
|
}
|
}
|
|
public void makeRondomData_Task(int start_index, int count) {
|
if (start_index < 0)
|
start_index = 0;
|
if (count < 0) {
|
count = 0;
|
}
|
if (start_index >= this.al_stationid.size()) {
|
start_index = this.al_stationid.size() - 1;
|
}
|
if (start_index + count > this.al_stationid.size()) {
|
count = this.al_stationid.size() - start_index;
|
}
|
|
Random rd = new Random();
|
for (int n = 0; n < this.Data_Array.size(); n++) {
|
BattData_RT batt_data = (BattData_RT) this.Data_Array.get(n);
|
for (int bt_index = 0; bt_index < batt_data.al_MonVol.size(); bt_index++) {
|
((MonVolData) batt_data.al_MonVol.get(bt_index)).monVol_TMP = (batt_data.MonStdVol
|
+ batt_data.MonStdVol / 2.0F * (rd.nextFloat() / 10.0F));
|
}
|
}
|
|
for (int n = 0; n < this.Data_Array.size(); n++) {
|
BattData_RT batt_data = (BattData_RT) this.Data_Array.get(n);
|
|
float sumvol = 0.0F;
|
for (int bt_index = 0; bt_index < batt_data.al_MonVol.size(); bt_index++) {
|
((MonVolData) batt_data.al_MonVol.get(bt_index)).monVol = ((MonVolData) batt_data.al_MonVol
|
.get(bt_index)).monVol_TMP;
|
((MonVolData) batt_data.al_MonVol.get(bt_index)).monTmp = ((float) (20.0D + rd.nextFloat() * 5.0F));
|
((MonVolData) batt_data.al_MonVol.get(bt_index)).monRes = ((float) (1.0D + rd.nextFloat() / 2.0F)
|
* (batt_data.MonStdVol / 2.0F));
|
|
float ser = 0.0F;
|
if (((MonVolData) batt_data.al_MonVol.get(bt_index)).monRes > 0.1D) {
|
ser = (float) (1000.0D / ((MonVolData) batt_data.al_MonVol.get(bt_index)).monRes
|
* (batt_data.MonStdVol / 2.0F));
|
}
|
((MonVolData) batt_data.al_MonVol.get(bt_index)).monSer = ser;
|
sumvol += ((MonVolData) batt_data.al_MonVol.get(bt_index)).monVol;
|
}
|
batt_data.mTestData.groupVol = sumvol;
|
}
|
|
this.Sybase_query_count += 1;
|
if (this.Sybase_query_count < 0)
|
this.Sybase_query_count = 0;
|
}
|
}
|
|
/*
|
* Location:
|
* C:\Users\LiJun\Desktop\公司各种设备资料\9600显示模块相关文件\后台程序\2018-09-07\BattFBS9600XSP.
|
* jar Qualified Name: com.battdata_rt.BattData_RT_Array JD-Core Version: 0.6.2
|
*/
|