package com.table.badbatt; import java.awt.dnd.DropTargetListener; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.UUID; import com.mysql_param.Mysql_database_param; import com.table.alarm.AlarmDaoFactory; import com.table.alarm.Alarm_param; import com.table.alarm.Battalarm_data; import com.table_sql.CallBack; import com.table_sql.MySqlPool; public class BadBatt_thread extends Thread{ private MySqlPool m_ConnPool = null; private Connection conn=null; private String selecteffectiveBatt="";//²éѯ³öµç³Ø·Åµç×îÐÂÓÐЧ²âÊÔ private String selectBadSql="";//²éѯ³öÂäºóµ¥Ìå private String insertalarmSql="";//Ïò¸æ¾¯±íÖвåÈëÒòµ¥ÌåÂäºóµ¼Öµĸ澯 private String updatealarmSql="";//Âäºóµ¥Ìåɸѡ³öÀ´ºóÐÞ¸ÄͬÀàÐ͵ĸ澯 private String deletealarmSql="";//ɾ³ýͬÖÖµ¥ÌåͬÖÖÀàÐ͵¥ÌåÂäºóµ¼Öµĸ澯ʵʱµÄ private String selectParamSql="";//²éѯbatt_param_low±íÖеIJÎÊý private String selectAlarmparamSql="";//²éѯµç³Ø×鏿¾¯²ÎÊý±íÖÐÐÅÏ¢ private String deletebadbatt_monSql="";//Çå³ýÂäºóµ¥Ìå±íÖеÄÊý¾Ý private String createbadbatt_monSql="";//´´½¨Âäºóµ¥Ìå±í private String createbadbatt_mon_flagSql="";//´´½¨Âäºóµ¥Ìå±íʾ±í private String deletebadbatt_mon_flagSql="";//Çå¿ÕÂäºóµ¥Ìå±íʾ±í private String searchbadbatt_mon_flagSql="";//¼ì²âÂäºóµ¥Ìå±íʾ±í private String insertbadbatt_monSql="";//ÏòÂäºóµ¥Ìå±íÖвåÈëÊý¾Ý //battinf±í private static String binf=Mysql_database_param.db_battinf+Mysql_database_param.tb_battinf; //testdata_inf±í private static String tinf=Mysql_database_param.db_batt_testdata+Mysql_database_param.tb_batttestdata_inf; //testdatastop±í private static String tstop=Mysql_database_param.db_batt_testdata+Mysql_database_param.tb_batttestdatastop; //batt_param_low±í private static String bparam=Mysql_database_param.web_site+Mysql_database_param.tb_batt_param_low; //tb_alarm_param±í private static String aparam=Mysql_database_param.db_param+Mysql_database_param.tb_alarm_param; //tb_badbatt_mon±í private static String bad_mon=Mysql_database_param.web_site+Mysql_database_param.tb_badbatt_mon; //tb_battalarm_data±í private static String balarm=Mysql_database_param.db_alarm+Mysql_database_param.tb_battalarm_data; //tb_batttestdata_id±í private static String tdata=Mysql_database_param.db_batt_testdata+Mysql_database_param.tb_batttestdata; //tb_badbatt_mon_flag±í£¨Âäºóµ¥Ìåºǫ́¹¦ÄÜÆô¶¯µÄ±êÖ¾±í£© private static String bad_mon_flag=Mysql_database_param.web_site+Mysql_database_param.tb_badbatt_mon_flag; //tb_fbs9100_state±í private static String fbs9100_state=Mysql_database_param.db_ram_db+Mysql_database_param.tb_fbs9100_state; public static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static int number=0;//×ܵ¥ÌåÊý----------- public static int hourRate=0;//СʱÂÊ public static double current=0;//µ±Ç°µçÁ÷ public static double SumAH=0;//²âÊÔÈÝÁ¿ public static double MaxMonomerVol=0;//×î´óµçѹ public static double MonomerVol=0; //×îСµçѹ public static double MonomerVolType=0;//µç³ØµçѹÀàÐÍ public static double realCap=0;//ʵ¼ÊÈÝÁ¿ public static float param=0;//ÈÝÁ¿ÓÐЧ²ÎÊý public static double STDAH=0;//±ê´æÈÝÁ¿ public BadBatt_thread(MySqlPool m_ConnPool) { super(); this.m_ConnPool = m_ConnPool; /*System.out.println("binf: "+binf); System.out.println("tinf: "+tinf); System.out.println("tstop: "+tstop); System.out.println("bparam: "+bparam); System.out.println("aparam: "+aparam); System.out.println("bad_mon: "+bad_mon); System.out.println("bad_mon_flag: "+bad_mon_flag); System.out.println("fbs9100_state: "+fbs9100_state);*/ } //´´½¨badBatt_Mon_flag±í public void badBatt_Mon_flagcreate(MySqlPool m_ConnPool){ //´´½¨Âäºóµ¥ÌåµÄ±íʾ±í createbadbatt_mon_flagSql="CREATE TABLE IF NOT EXISTS "+bad_mon_flag+" " + "(" + "`num` int(11) NOT NULL AUTO_INCREMENT," + "`count` int NOT NULL DEFAULT '0'," + "PRIMARY KEY (`num`)" + ")"; Connection conn=m_ConnPool.getConn(); Boolean bl=m_ConnPool.sqlMysqlUpdate(conn, createbadbatt_mon_flagSql); } //´´½¨badBattMon±íÈç¹ûûÓÐÔò´´½¨ public void insertBadBatt(MySqlPool m_ConnPool) { //´´½¨Êý¾Ý±í String createbadbatt_monSql="CREATE TABLE IF NOT EXISTS "+bad_mon+" " + "(" + "`num` int(11) NOT NULL AUTO_INCREMENT," + "`battgroupid` int NOT NULL DEFAULT '0'," + " `mon_num` int NOT NULL DEFAULT '0'," + "`record_num` int NOT NULL DEFAULT '0'," + "`test_starttime` datetime NOT NULL DEFAULT '1982-01-01 00:00:00'," + "`group_vol` float NOT NULL DEFAULT '0'," + "`test_curr` float NOT NULL DEFAULT '0'," + "`mon_vol` float NOT NULL DEFAULT '0'," + "`real_cap` float NOT NULL DEFAULT '0'," + "`stdcap` float NOT NULL DEFAULT '0'," + "`note` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' '," + "`flag` int NOT NULL DEFAULT '4'," + "PRIMARY KEY (`num`)," + "KEY `index_num` (`battgroupid`)" + ")"; Connection conn=m_ConnPool.getConn(); Boolean bl=m_ConnPool.sqlMysqlUpdate(conn, createbadbatt_mon_flagSql); } //¼ì²âbadBatt_Mon_flag±íÊý¾ÝÁ¿ public boolean badBatt_Mon_flagsearch(MySqlPool m_ConnPool){ searchbadbatt_mon_flagSql=" select count(num) as nums from "+bad_mon_flag+" limit 1"; Connection conn=m_ConnPool.getConn(); ResultSet rs=m_ConnPool.sqlMysqlQuery(conn, searchbadbatt_mon_flagSql); boolean bl=false; try { while(rs.next()){ int nums=rs.getInt("nums"); if(nums>0){ bl=true; } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(rs != null){ rs.close(); } m_ConnPool.close_con(conn); } catch (SQLException e) { e.printStackTrace(); } } return bl; } //Ð޸Ľø³Ì¼à¿Ø±íÖеÄʵʱʱ¼ä public boolean processupdateSql(Date nowdate,String ProcessName,MySqlPool m_ConnPool_){ String sql=" update "+Mysql_database_param.web_site+Mysql_database_param.tb_Process_survey+" " +" set ProcessTime='"+BadBatt_thread.sdf.format(nowdate) +"' where ProcessName='"+ProcessName+"'"; Connection conn=m_ConnPool_.getConn(); //System.out.println(sql); boolean bl=m_ConnPool_.sqlMysqlUpdate(conn, sql); return bl; } //»ñÈ¡µ±Ç°Ìì23µã59·Ö59ÃëµÄtime public long getDateTIme() { Calendar calendar2 = Calendar.getInstance(); calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH), 23,59, 0); Date endOfDate = calendar2.getTime(); //String time=BadBatt_thread.sdf.format(endOfDate); long time=endOfDate.getTime(); return time; } //²éѯµç³Ø¸æ¾¯²ÎÊý±íalarm_param public List batt_alarmparamSql(int alm_id,MySqlPool m_ConnPool){ String sql="select num,alm_id,alm_name,alm_high_coe,alm_low_coe,alm_high_level,alm_low_level,alm_high_en,alm_low_en from "+aparam+" where alm_id="+alm_id+" and alm_low_en=1 "; List list=new ArrayList(); Connection conn=m_ConnPool.getConn(); ResultSet rs=m_ConnPool.sqlMysqlQuery(conn, sql); try { while(rs.next()){ Alarm_param ap=new Alarm_param(); ap.setNum(rs.getInt("num")); ap.setAlm_id(rs.getInt("alm_id")); ap.setAlm_name(rs.getString("alm_name")); ap.setAlm_high_coe(rs.getFloat("alm_high_coe")); ap.setAlm_low_coe(rs.getFloat("alm_low_coe")); ap.setAlm_high_level(rs.getInt("alm_high_level")); ap.setAlm_low_level(rs.getInt("alm_low_level")); ap.setAlm_high_en(rs.getInt("alm_high_en")); ap.setAlm_low_en(rs.getInt("alm_low_en")); list.add(ap); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(rs != null){ rs.close(); } m_ConnPool.close_con(conn); } catch (SQLException e) { e.printStackTrace(); } } return list; } //²éѯ³öÂäºóµ¥Ìå public List Batt_selectBadSql(int battgroupid,int recourd_count,int record_num,String record_time,MySqlPool m_ConnPool){ String usesql=tdata+battgroupid; String sql="select num,BattGroupId,test_record_count,test_type,data_new,data_available,record_num,test_starttime,record_time,test_timelong,group_vol,test_curr,test_cap,mon_num,mon_vol " + " from "+usesql + " where test_record_count="+recourd_count+" and record_num="+record_num+" and record_time='"+record_time+"'"; //System.out.println(sql); List list=new ArrayList(); Connection conn=m_ConnPool.getConn(); ResultSet rs=m_ConnPool.sqlMysqlQuery(conn, sql); try { while(rs.next()){ Batttestdatastop tstop=new Batttestdatastop(); tstop.setNum(rs.getInt("num")); tstop.setBattGroupId(rs.getInt("BattGroupId")); tstop.setTest_record_count(rs.getInt("test_record_count")); tstop.setTest_type(rs.getInt("test_type")); tstop.setData_new(rs.getInt("data_new")); tstop.setData_available(rs.getInt("data_available")); tstop.setRecord_num(rs.getInt("record_num")); tstop.setTest_starttime(rs.getTimestamp("test_starttime")); tstop.setRecord_time(rs.getTimestamp("record_time")); tstop.setTest_timelong(rs.getInt("test_timelong")); tstop.setGroup_vol(rs.getFloat("group_vol")); tstop.setTest_curr(rs.getFloat("test_curr")); tstop.setTest_cap(rs.getFloat("test_cap")); tstop.setMon_num(rs.getInt("mon_num")); tstop.setMon_vol(rs.getFloat("mon_vol")); list.add(tstop); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(rs != null){ rs.close(); } m_ConnPool.close_con(conn); } catch (SQLException e) { e.printStackTrace(); } } return list; } //1.²éѯËùÓÐµÄµç³Ø×é public List getAllBinf(MySqlPool m_ConnPool){ String sql="select distinct * from db_battinf.tb_battinf order by BattGroupId asc "; List list=new ArrayList(); Connection conn=m_ConnPool.getConn(); ResultSet rs=m_ConnPool.sqlMysqlQuery(conn, sql); try { while(rs.next()){ BattInf binf=new BattInf(); binf.setBattGroupId(rs.getInt("battGroupId")); binf.setStationId(rs.getString("StationId")); binf.setStationName1(rs.getString("stationName1")); binf.setStationName(rs.getString("stationName")); binf.setBattProducer(rs.getString("battProducer")); if(rs.getString("battInUseDate")!=null) binf.setBattInUseDate(rs.getDate("battInUseDate")); binf.setMonVolStd(rs.getFloat("monVolStd")); binf.setMonCapStd(rs.getFloat("monCapStd")); binf.setBattGroupName(rs.getString("battGroupName")); binf.setMonCount(rs.getInt("moncount")); list.add(binf); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); } m_ConnPool.close_con(conn); } catch (SQLException e) { e.printStackTrace(); } } return list; } //2.²éѯÿ¸öµç³Ø×éµÄÓÐЧ·Åµç¼Ç¼£¬Èç¹ûÕÒ²»µ½½«Õû×éµ¥Ìå±ê¼ÇΪ"ÎÞ·¨ÅжÏ"£¬½« public Batttestdata_inf getEffectiveTinf(int battGroupId,MySqlPool m_ConnPool) { String sql="select tb_batttestdata_inf.BattGroupId ,test_record_count,record_num, test_curr, max_monvol, min_monvol, test_cap" + " , test_starttime,record_time, test_timelong" + " from db_batt_testdata.tb_batttestdata_inf " + " where db_batt_testdata.tb_batttestdata_inf.data_available = 1 " + " and test_type = 3 " + " and (test_stoptype in (3, 4, 6) " + " or (test_stoptype = 2 and test_timelong >= 7200)) " + " and BattGroupId="+battGroupId + " ORDER BY tb_batttestdata_inf.BattGroupId asc, test_starttime desc " + " limit 1"; //System.out.println(sql); List list=new ArrayList<>(); Connection conn=m_ConnPool.getConn(); ResultSet rs=m_ConnPool.sqlMysqlQuery(conn, sql); try { while(rs.next()){ Batttestdata_inf tinf=new Batttestdata_inf(); tinf.setBattGroupId(rs.getInt("battGroupId")); if(rs.getString("test_starttime")!=null) tinf.setTest_starttime(rs.getTimestamp("test_starttime")); if(rs.getString("record_time")!=null) tinf.setRecord_time(rs.getTimestamp("record_time")); tinf.setTest_timelong(rs.getInt("test_timelong")); tinf.setTest_cap(rs.getFloat("test_cap")); tinf.setMax_monvol(rs.getFloat("max_monvol")); tinf.setMin_monvol(rs.getFloat("min_monvol")); tinf.setTest_curr(rs.getFloat("test_curr")); tinf.setTest_record_count(rs.getInt("test_record_count")); tinf.setRecord_num(rs.getInt("record_num")); list.add(tinf); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); } m_ConnPool.close_con(conn); } catch (SQLException e) { e.printStackTrace(); } } if(list.size()>0) { return list.get(list.size()-1); }else { return null; } } //±ê¼ÇΪÎÞ·¨ÅжϣºflagΪ4²¢²åÈë public void insertUnjudge(BattInf binf,String note,int flag,MySqlPool m_ConnPool) { ArrayList sql_str=new ArrayList(); String deletebadbatt_monSql="DELETE FROM "+bad_mon+" WHERE battgroupid="+binf.getBattGroupId()+" "; sql_str.add(deletebadbatt_monSql); String insertbadbatt_monSql="insert into "+bad_mon+" " + "(" + "battgroupid," + "mon_num," + "record_num," + "test_starttime," + "group_vol," + "test_curr," + "mon_vol," + "real_cap," + "stdcap," + "note," + "flag" + ") " + " values "; for(int i=0;i0){ insertbadbatt_monSql+=" , "; } insertbadbatt_monSql=insertbadbatt_monSql + "(" + binf.getBattGroupId()+"," + (i+1)+"," + 0+"," + "'1972-01-01 00:00:00'," + 0+"," + 0+"," + 0+"," + 0+"," + binf.getMonCapStd()+"," + "'"+note+"'," + flag+"" + ")";//Èç¹û¶ÔÓ¦ÊÇ×Ö·û¼¸¸ö´øÉϵ¥ÒýºÅ } sql_str.add(insertbadbatt_monSql); MySqlPool.makeManualCommit(m_ConnPool.getConn(), sql_str); } //¼ÆËã³öÂäºóµ¥Ìå public List calculatorBadBatt(int battGroupId,int monCount,double monCapStd,double monVolStd,double maxVol,List stopList,MySqlPool m_ConnPool) { //²éѯ¸æ¾¯ÂäºóºÍ¸ü»»µÄ²ÎÊýÖµ float aparam=1; int Caplevel=1; List listA=batt_alarmparamSql(AlarmDaoFactory.Alarm_CapAlarm, m_ConnPool); if(listA!=null&&listA.size()>0){ aparam=listA.get(listA.size()-1).getAlm_low_coe(); Caplevel=listA.get(listA.size()-1).getAlm_low_level(); } float Cparam=0;//ÈÝÁ¿¸ü»»¸æ¾¯²ÎÊý int Changelevel=0;//¸æ¾¯µÈ¼¶ List listC1=batt_alarmparamSql(AlarmDaoFactory.Alarm_CapChange, m_ConnPool); if(listC1!=null&&listC1.size()>0){ Cparam=listC1.get(listC1.size()-1).getAlm_low_coe(); Changelevel=listC1.get(listC1.size()-1).getAlm_low_level(); } List list=new ArrayList<>(); if(stopList!=null&&stopList.size()>0){ for(int i=0;i badList,MySqlPool m_ConnPool) { ArrayList sql_str=new ArrayList(); String insertbadbatt_monSql="insert into "+bad_mon+" " + "(" + "battgroupid," + "mon_num," + "record_num," + "test_starttime," + "group_vol," + "test_curr," + "mon_vol," + "real_cap," + "stdcap," + "note," + "flag" + ") " + " values "; for(int i=0;i0){ insertbadbatt_monSql+=" , "; }else { String deletebadbatt_monSql="DELETE FROM "+bad_mon+" WHERE battgroupid="+badMon.getBattgroupid()+" "; sql_str.add(deletebadbatt_monSql); } insertbadbatt_monSql=insertbadbatt_monSql + "(" + badMon.getBattgroupid()+"," + badMon.getMonNum()+"," + badMon.getRecordNum()+"," + "'"+badMon.getTestStarttime()+"'," + badMon.getGroupVol()+"," + badMon.getTestCurr()+"," + badMon.getMonVol()+"," + badMon.getRealCap()+"," + badMon.getStdcap()+"," + badMon.getNote()+"," + badMon.getFlag()+"" + ")";//Èç¹û¶ÔÓ¦ÊÇ×Ö·û¼¸¸ö´øÉϵ¥ÒýºÅ } sql_str.add(insertbadbatt_monSql); MySqlPool.makeManualCommit(m_ConnPool.getConn(), sql_str); } //ɽÎ÷Ì«¹©×îаæÊµ¼ÊÈÝÁ¿Ëã·¨ public void serchBadBattandInsert_TG(){ //1.²éѯËùÓÐµÄµç³Ø×é List binfList=getAllBinf(m_ConnPool); //2.²éѯÿ¸öµç³Ø×éµÄÓÐЧ·Åµç¼Ç¼£¬Èç¹ûÕÒ²»µ½½«Õû×éµ¥Ìå±ê¼ÇΪ"ÎÞ·¨ÅжÏ"£¬½« for (BattInf binf : binfList) { Batttestdata_inf tinf=getEffectiveTinf(binf.getBattGroupId(),m_ConnPool); if(tinf!=null) { //3.¼ÆËãÿ¸öµ¥ÌåµÄʵ¼ÊÈÝÁ¿²¢ÅжÏÊÇ·ñΪ¸æ¾¯»ò¸ü»»»òÓÅÐã(1,2,3) List stopList=Batt_selectBadSql(binf.getBattGroupId(), tinf.getTest_record_count(),tinf.getRecord_num(),BadBatt_thread.sdf.format(tinf.getRecord_time()), m_ConnPool ); //¼ÆËã³öÂäºóµ¥Ìå List badList=calculatorBadBatt(binf.getBattGroupId(),binf.getMonCount(),binf.getMonCapStd(),binf.getMonVolStd(),tinf.getMax_monvol(),stopList,m_ConnPool); //4.½«Êý¾Ý²åÈëbadBattMon±í if(badList.size()>0) { insertBadBatt(badList,m_ConnPool); } }else { //±ê¼ÇΪÎÞ·¨ÅжϣºflagΪ4²¢²åÈë insertUnjudge(binf,"0",4,m_ConnPool); } } } public void run(){ System.out.println("Æô¶¯¶¨Ê±²éѯÂäºóµ¥ÌåÐÅÏ¢±íºÍÂäºó¸æ¾¯²åÈë±í!------badbatt_threadÆô¶¯"); serchBadBattandInsert_TG(); //long tenHouerAgo=(new Date()).getTime()-12*60*60*1000; while(true){ badBatt_Mon_flagcreate(m_ConnPool); boolean bl=badBatt_Mon_flagsearch(m_ConnPool); System.out.println("¼ì²âbadBatt_Mon_flag±íÊý¾ÝÁ¿: "+bl+" "+BadBatt_thread.sdf.format(new Date())); //Ð޸Ľø³Ì¼à¿Ø±íÖеÄʵʱʱ¼ä boolean b=processupdateSql(new Date(),Mysql_database_param.BMS_FBSDEV_BADBATT_MON, m_ConnPool); if(bl){ serchBadBattandInsert_TG(); }else{ try { Thread.sleep(60*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //Date now=new Date(); //String nowtime=BadBatt_thread.sdf.format(now); long nowtime=new Date().getTime(); //System.out.println(getDateTIme()+" "+nowtime); if(Math.abs((getDateTIme()-nowtime))<30*1000) { serchBadBattandInsert_TG(); } /*if((nowtime-tenHouerAgo)>=12*60*60*1000){ serchBadBattandInsert(); tenHouerAgo=nowtime; }*/ } } public static void main(String[] args) { MySqlPool mPool=new MySqlPool(); Connection conn=mPool.getConn(); BadBatt_thread bd_t=new BadBatt_thread(mPool); //bd_t.Batt_selecteffectiveBatt(); //bd_t.start(); bd_t.serchBadBattandInsert_TG(); } }