package com.dev.fbs9009;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import com.base.Com;
|
import com.battdata_rt.BattData_RT;
|
import com.battdata_rt.BattData_RT_Array;
|
import com.config.AppParam;
|
import com.sql.MysqlConnPool;
|
|
public class MyModBusRecordDataThread extends Thread{
|
private MysqlConnPool mysql_pool;
|
private AppParam cfg;
|
private BattData_RT_Array dataArray;
|
|
private List<BattData_RT> dischageArray; //ÕýÔڷŵçµÄµç³Ø×é
|
public MyModBusRecordDataThread() {
|
|
}
|
|
public MyModBusRecordDataThread(MysqlConnPool gB_MysqlConnPool, BattData_RT_Array gB_DataArray,
|
AppParam gB_App_Param) {
|
this.mysql_pool = gB_MysqlConnPool;
|
this.dataArray = gB_DataArray;
|
this.cfg = gB_App_Param;
|
dischageArray = new ArrayList<BattData_RT>();
|
|
new ReCordHistoryDataThread(gB_MysqlConnPool,dischageArray,gB_App_Param).start();
|
|
}
|
|
@Override
|
public void run() {
|
|
MyModBusSocketThread_SQL.createTb_ld9testdata_inf(mysql_pool); //´´½¨ÀúÊ·Êý¾ÝµÄinf±í
|
|
System.out.println("MyModBusRecordDataThread start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
while(true){
|
try {
|
for(int i=0;i<dataArray.getItemCount();i++){
|
//System.out.println("¼à¿ØÊý¾Ý...."+(dataArray.getItem(i).myModBusData.getLd_sys().getSys_state() == MyModBusCom.SYS_STATE_HRTEST)+"==="+(dataArray.getItem(i).myModBusData.getLd_sys().getSys_now_battstate()==MyModBusCom.BATT_DISCHARGE || dataArray.getItem(i).myModBusData.getLd_sys().getSys_next_battstate() == MyModBusCom.BATT_DISCHARGE));
|
if((dataArray.getItem(i).myModBusData != null && dataArray.getItem(i).myModBusData.getLd_sys().getSys_state() == MyModBusCom.SYS_STATE_HRTEST) && (dataArray.getItem(i).myModBusData.getLd_batt_states() !=null && dataArray.getItem(i).myModBusData.getLd_batt_states().isDischarge())){
|
//System.out.println("¿ªÊ¼É¸Ñ¡Êý¾Ý");
|
long timelong = (new Date().getTime()-dataArray.getItem(i).myModBusData.getThreadRunTime().getTime())/1000;
|
if(timelong>60*60){
|
//Ìø¹ýµ±Ç°ÒѾ¹ýʱµÄÊý¾Ý ¶Ï¿ª³¬¹ý¹ýһСʱµÄÉ豸²»¼ì²âÀúÊ·Êý¾Ý
|
continue;
|
}
|
if(!isExistInDischage(dischageArray,dataArray.getItem(i))){
|
int test_monnum = dataArray.getItem(i).myModBusData.getLd_sys().getNowTestMonNum();
|
|
System.err.println(dataArray.getItem(i).BattGroupId+"ÕýÔÚ½øÐкËÈݲâÊÔ...."+test_monnum);
|
|
//´´½¨µ±Ç°µç³Ø×éµÄ²âÊԼǼ±í¸ñ _id±í
|
MyModBusSocketThread_SQL.createTb_ld9testdata(mysql_pool,dataArray.getItem(i).BattGroupId);
|
//´´½¨µ±Ç°µç³Ø×éµÄ²âÊԼǼ±í¸ñ stop_id±í
|
MyModBusSocketThread_SQL.createTb_ld9testdatastop(mysql_pool,dataArray.getItem(i).BattGroupId);
|
|
|
dischageArray.add(dataArray.getItem(i));
|
|
//dataArray.getItem(i).test_monnum = dataArray.getItem(i).myModBusData.getLd_sys().getNowTestMonNum(); //ÉèÖõ±Ç°·ÅµçµÄµç³Ø×éµ¥Ìå±àºÅ
|
dataArray.getItem(i).test_monnum = dataArray.getItem(i).myModBusData.getLd_batt_states().getNowTestMonnum(); //ÉèÖõ±Ç°·ÅµçµÄµç³Ø×éµ¥Ìå±àºÅ
|
|
|
dataArray.getItem(i).myModBusData.setTest_starttime(new Date()); //ÉèÖõ±Ç°µç³Ø×éºËÈݲâÊԵĿªÊ¼²âÊÔʱ¼ä
|
|
dataArray.getItem(i).myModBusData.setNewRecord(true);
|
|
int maxTestRecordCount = MyModBusSocketThread_SQL.searchMaxTestReCord(mysql_pool,dataArray.getItem(i).myModBusData.getBattgroupid()); //ÉèÖõ±Ç°²âÊԵIJâÊÔ±ÊÊý
|
|
if(maxTestRecordCount>=1){
|
int mon_num = MyModBusSocketThread_SQL.searchMaxMonNum(mysql_pool,dataArray.getItem(i).myModBusData.getBattgroupid(),maxTestRecordCount);
|
if(mon_num >= 9 || test_monnum == 1){
|
//ÉÏÒ»´Î²âÊÔÒѾ²âÊÔÍê³É,ÖØÐ¿ªÊ¼¼Ç¼²âÊÔ
|
maxTestRecordCount += 1;
|
}else{
|
dataArray.getItem(i).myModBusData.setTest_record_count(maxTestRecordCount);
|
//ÉÏÒ»´Î²âÊÔ»¹Î´½áÊø½«_id±íÖеÄÊý¾ÝºÍstop±íÖеÄÊý¾Ýɾ³ý
|
MyModBusSocketThread_SQL.deleteHistoryData(mysql_pool,dataArray.getItem(i).myModBusData);
|
}
|
}else{
|
maxTestRecordCount = 1;
|
}
|
//System.out.println(maxTestRecordCount);
|
dataArray.getItem(i).myModBusData.setTest_record_count(maxTestRecordCount);
|
dataArray.getItem(i).record_num = 1;
|
}
|
}
|
}
|
sleep(1000);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
/**
|
* ÅжÏÊÇ·ñÒѾÔڼǼµ±Ç°ÕýÔڷŵçµÄµç³Ø×éÐÅÏ¢
|
* @return
|
*/
|
public boolean isExistInDischage(List<BattData_RT> dischageArray,BattData_RT rtdata){
|
boolean flag = false;
|
for(int i=0;i<dischageArray.size();i++){
|
if(dischageArray.get(i).BattGroupId == rtdata.BattGroupId){
|
flag = true;
|
break;
|
}
|
}
|
return flag;
|
}
|
|
class ReCordHistoryDataThread extends Thread{
|
private List<BattData_RT> dischageArray;
|
private MysqlConnPool mysql_pool;
|
private AppParam cfg;
|
|
public ReCordHistoryDataThread(MysqlConnPool mysql_pool,List<BattData_RT> dischageArray,AppParam gB_App_Param) {
|
this.dischageArray = dischageArray;
|
this.mysql_pool = mysql_pool;
|
this.cfg = gB_App_Param;
|
}
|
|
@Override
|
public void run() {
|
while(true){
|
//System.err.println("µ±Ç°ÕýÔڷŵçµÄµ¥ÌåÊýÄ¿:"+dischageArray.size()+".....................");
|
try {
|
//µ±Ç°ÊÇ·ñ´æÔڷŵçµÄµç³Ø×é
|
if(dischageArray.size() > 0){
|
//Iterator<BattData_RT> it = dischageArray.iterator();
|
for(Iterator<BattData_RT> it = dischageArray.iterator();it.hasNext();){
|
BattData_RT battData = it.next();
|
|
long timecount = (new Date().getTime()-battData.myModBusData.getRecordhistorytime().getTime())/1000;
|
long testlong = (new Date().getTime()-battData.myModBusData.getTest_starttime().getTime())/1000;
|
//µ½´ï×î´óµÄ¼Ç¼±ÊÊýʱֹͣ¼Ç¼
|
if(battData.record_num>cfg.getTestDataRecordCountMax(AppParam.AppParam_Discharge)){
|
System.out.println("³¬¹ý¼Ç¼µÄ×î´ó²âÊÔ±ÊÊý,Í£Ö¹¼Ç¼ÀúÊ·Êý¾Ý");
|
it.remove();
|
continue;
|
}
|
//System.out.println("ʱ¼ä¼ä¸ôtimecount:"+timecount +" > "+cfg.getSaveDataTimeInterval(AppParam.AppParam_Discharge));
|
battData.myModBusData.setTest_timelong(testlong);
|
//¸ù¾ÝÖ¸¶¨µÄʱ¼ä¼ä¸ô´æ´¢·ÅµçÊý¾Ý
|
if(timecount >= cfg.getSaveDataTimeInterval(AppParam.AppParam_Discharge) || battData.myModBusData.isNewRecord()){
|
if(battData.myModBusData.isNewRecord()){
|
battData.myModBusData.setNewRecord(false);
|
battData.record_num = 1;
|
}
|
battData.myModBusData.setRecordhistorytime(new Date());
|
//Åжϵ±Ç°µÄµ¥ÌåÊÇ·ñÔÚ½øÐзŵç²âÊÔ
|
if(battData.myModBusData.getLd_sys().getSys_state() == MyModBusCom.SYS_STATE_HRTEST && (battData.myModBusData.getLd_batt_states().isDischarge())){
|
|
System.err.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
|
int test_monnum = battData.myModBusData.getLd_batt_states().getNowTestMonnum(); //»ñÈ¡µ±Ç°µç³Ø×éÖзŵçµÄµ¥Ìå±àºÅ
|
|
//±»²âµÄµç³Ø×éµ¥Ìå±àºÅ¸Ä±ä
|
if(test_monnum != battData.test_monnum){ //·ÅµçµÄµ¥Ìå·¢Éú±ä»¯Ê±
|
it.remove();
|
System.out.println(battData.test_monnum+"--->"+test_monnum+"·ÅµçµÄµ¥ÌåºÅ±ä»¯,½áÊø¼Ç¼");
|
continue;
|
}
|
MyModBusSocketThread_SQL.insertOrUpdate(mysql_pool,battData); //¸üвâÊÔµÄinf±íÖеÄÊý¾Ý
|
MyModBusSocketThread_SQL.insertOrUpdateMonData(mysql_pool,battData); //¸üвâÊÔ_ID±íÖеÄÊý¾Ý
|
MyModBusSocketThread_SQL.insertOrUpdateMonStopData(mysql_pool,battData); //¸üвâÊÔStop±íÖеÄÊý¾Ý
|
//System.out.println("¼Ç¼һ±ÈÊý¾Ý"+battData.record_num);
|
battData.record_num++;
|
|
}else{
|
MyModBusSocketThread_SQL.updateStopReason(mysql_pool,battData);
|
|
it.remove();
|
System.err.println("·Åµç½áÊø,²¢¼Ç¼×îºóÒ»±ÈÊý¾ÝµÄÍ£Ö¹ÔÒò.................."); //¼ÌÐø¼Ç¼±¾´ÎµÄ×îºóÒ»±ÊÊý¾Ý
|
}
|
}
|
}
|
}
|
sleep(100);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
|
}
|
}
|