package com.fgkj.dao.impl; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import com.fgkj.dao.AlarmDaoFactory; import com.fgkj.dao.BaseDAO; import com.fgkj.dao.BattCapFactory; import com.fgkj.dao.BattTestData; import com.fgkj.dao.CallBack; import com.fgkj.dao.DAOHelper; import com.fgkj.db.DBUtil; import com.fgkj.db.IDatabaseName; import com.fgkj.dto.Alarm_param; import com.fgkj.dto.BattInf; import com.fgkj.dto.BattInf_Rebuild; import com.fgkj.dto.Batt_Maint_Dealarm; import com.fgkj.dto.Batttestdata; import com.fgkj.dto.Batttestdata_inf; import com.fgkj.dto.Batttestdatastop; import com.fgkj.test.Mon_vols; public class BatttestdatastopDAOImpl implements BaseDAO,CallBack{ public boolean add(Object obj) { List list=(List) obj; ArrayList sql_str=new ArrayList(); if(list!=null&&list.size()>0){ for (int i = 0; i < list.size(); i++) { Batttestdata b=list.get(i); String sql="insert into db_batt_testdata.tb_batttestdatastop_"+b.getBattGroupId()+"(BattGroupId,test_record_count,test_type,data_new,data_available,record_num,test_starttime,record_time,test_timelong,online_vol,group_vol,test_curr,test_cap,mon_num,mon_vol,mon_tmp) " + " values("+b.getBattGroupId()+","+b.getTest_record_count()+","+b.getTest_type()+","+b.getData_new()+","+b.getData_available()+","+b.getRecord_num()+",'"+DAOHelper.sdf.format(b.getTest_starttime())+"','"+DAOHelper.sdf.format(b.getRecord_time())+"',"+b.getTest_timelong()+","+b.getOnline_vol()+","+b.getGroup_vol()+","+b.getTest_curr()+","+b.getTest_cap()+","+b.getMon_num()+","+b.getMon_vol()+","+b.getMon_tmp()+")"; sql_str.add(sql); } } boolean bl=DAOHelper.makeManualCommit(DBUtil.getConn(), sql_str); return bl; } public boolean updatenew(Object obj) { Batttestdata b=(Batttestdata) obj; String sql="update db_batt_testdata.tb_batttestdatastop_"+b.getBattGroupId()+" set mon_tmp=? where mon_num=? and record_num=?"; boolean bl=DAOHelper.executeUpdate(DBUtil.getConn(), sql, new Object[]{b.getMon_tmp(),b.getMon_num(),b.getRecord_num()}); return bl; } public boolean update(Object obj) { Mon_vols ms=(Mon_vols) obj; String sql="update db_batt_testdata.tb_batttestdatastop_"+ms.getBattggroupid()+" set online_vol=? ,group_vol=? where record_num=?"; boolean bl=DAOHelper.executeUpdate(DBUtil.getConn(), sql, new Object[]{ms.getMon_vols(),ms.getMon_vols(),ms.getRecord_num()}); return bl; } //6.1电池充放电管理删除操作 public boolean del(Object obj) { Batttestdatastop tstop = (Batttestdatastop) obj; String sql = "delete from db_batt_testdata.tb_batttestdatastop_" + tstop.getBattGroupId() + " where battgroupid=? and test_record_count=? "; Boolean bl = DAOHelper.executeUpdate( DBUtil.getConn(), sql, new Object[] { tstop.getBattGroupId(),tstop.getTest_record_count() }); return bl; } public List searchAll() { return null; } //历史监测单体电压折线图 public List serchByCondition(Object obj) { Batttestdatastop btd=(Batttestdatastop)obj; //System.out.println(btd); 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 db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+"" + " where test_record_count=?"; //System.out.println(sql); return DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[]{btd.getTest_record_count()}, new BatttestdatastopDAOImpl()); } public List serchByInfo(Object obj) { return null; } public List getResults(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ Batttestdatastop bs=new Batttestdatastop(); bs.setNum(rs.getInt("num")); bs.setBattGroupId(rs.getInt("BattGroupId")); bs.setTest_record_count(rs.getInt("test_record_count")); bs.setTest_type(rs.getInt("test_type")); bs.setData_new(rs.getInt("data_new")); bs.setData_available(rs.getInt("data_available")); bs.setRecord_num(rs.getInt("record_num")); bs.setTest_starttime(rs.getTimestamp("test_starttime")); bs.setRecord_time(rs.getTimestamp("record_time")); bs.setTest_timelong(rs.getInt("test_timelong")); bs.setGroup_vol(rs.getFloat("group_vol")); bs.setTest_curr(rs.getFloat("test_curr")); bs.setTest_cap(rs.getFloat("test_cap")); bs.setMon_num(rs.getInt("mon_num")); bs.setMon_vol(rs.getFloat("mon_vol")); list.add(bs); //System.out.println(b); } } catch (SQLException e) { e.printStackTrace(); } return list; } //3根据battgroupid和mon_num(电池编号)查测试信息 public List serchByMonNum(Object obj) { Batttestdatastop btd=(Batttestdatastop)obj; String sql=null; List list=new ArrayList(); if(btd.getMon_num()==0){ 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 db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+"" + " where battgroupid=? and mon_num!=? and test_record_count=? " + " and db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+".data_available=1 "; }else{ 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 db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+"" + " where battgroupid=? and mon_num=? and test_record_count=? " + " and db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+".data_available=1 "; } list=DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[]{btd.getBattGroupId(),btd.getMon_num(),btd.getTest_record_count()}, new BatttestdatastopDAOImpl()); return list; } //1根据与阈值比较得到最新落后信息 public List serchByLowNew(Object obj) { Batttestdatastop btd=(Batttestdatastop)obj; // System.out.println(btd); String sql="select battgroupid,mon_num,mon_vol from db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+" where mon_vol<=? *(select avg(mon_vol) from db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+" where battgroupid=?) and data_new=1 " + " and db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+".data_available=1 and test_cap? " + " and db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+".data_available=1 order by battgroupid"; //System.out.println(sql); return DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[]{btd.getLowC()}, new CallBack() { public List getResults(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ Batttestdatastop bs=new Batttestdatastop(); bs.setBattGroupId(rs.getInt("BattGroupId")); bs.setMon_num(rs.getInt("mon_num")); bs.setMon_vol(rs.getFloat("mon_vol")); list.add(bs); //System.out.println(b); } } catch (SQLException e) { e.printStackTrace(); } return list; } }); } //2根据落后的数据(数量,编号,电压) public List serchByLow(Object obj){ Batttestdatastop btd=(Batttestdatastop)obj; String sql="select distinct battGroupId,test_curr,test_cap,mon_num,mon_vol " + "from db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+" where test_record_count=? " + " and db_batt_testdata.tb_batttestdatastop_"+btd.getBattGroupId()+".data_available=1 "; List list=DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[]{btd.getTest_record_count()}, new CallBack() { public List getResults(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ Batttestdatastop bstop=new Batttestdatastop(); bstop.setTest_curr(rs.getFloat("test_curr")); bstop.setTest_cap(rs.getFloat("test_cap")); bstop.setBattGroupId(rs.getInt("battGroupId")); bstop.setMon_vol(rs.getFloat("mon_vol")); bstop.setMon_num(rs.getInt("mon_num")); list.add(bstop); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }); double realCap=0;//实际容量 double STDAH=0;//标存容量 int hourRate=0;//小时率 double current=0;//当前电流 double SumAH=0;//测试容量 double MaxMonomerVol=0;//最大电压 double MonomerVol=0; //最小电压 double MonomerVolType=0;//电池电压类型 int flag=1;//电池单体告警标识 float sumVol=0;//一组电池电压总值 List listB=new ArrayList();//存放落后单体 if(list!=null && list.size()>0){ for(int i=0;i标存电压*0.9的时的那笔数据,new Object[]{tdata.getTest_record_count(),tdata.getRecord_time()} //System.out.println(sql); List list=DAOHelper.executeQuery(sql, DBUtil.getConn(),new Object[]{tdata.getTest_record_count(),tdata.getRecord_time()}, new CallBack() { public List getResults(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ Batt_Maint_Dealarm bmd=new Batt_Maint_Dealarm(); BattInf binf=new BattInf(); Batttestdatastop sdata=new Batttestdatastop(); sdata.setNum(rs.getInt("num")); sdata.setBattGroupId(rs.getInt("BattGroupId")); sdata.setTest_record_count(rs.getInt("test_record_count")); sdata.setTest_type(rs.getInt("test_type")); sdata.setData_new(rs.getInt("data_new")); sdata.setData_available(rs.getInt("data_available")); sdata.setRecord_num(rs.getInt("record_num")); sdata.setTest_starttime(rs.getTimestamp("test_starttime")); sdata.setRecord_time(rs.getTimestamp("record_time")); sdata.setTest_timelong(rs.getInt("test_timelong")); sdata.setGroup_vol(rs.getFloat("group_vol")); sdata.setTest_curr(rs.getFloat("test_curr")); sdata.setTest_cap(rs.getFloat("test_cap")); sdata.setMon_num(rs.getInt("mon_num")); sdata.setMon_vol(rs.getFloat("mon_vol")); bmd.setBinf(binf); bmd.setSdata(sdata); list.add(bmd); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }); //System.out.println(list.size()); double realCap=0;//实际容量 float param=0;//容量告警参数 int Caplevel=0; int Changelevel=0;//告警等级 Alarm_param aparam=new Alarm_param(); aparam.setAlm_id(AlarmDaoFactory.Alarm_CapAlarm); List listA=(new Alarm_paramImpl()).serchByCondition(aparam); if(listA!=null&&listA.size()>0){ param=listA.get(listA.size()-1).getAlm_low_coe(); Caplevel=listA.get(listA.size()-1).getAlm_low_level(); } float Cparam=0;//容量更换告警参数 aparam.setAlm_id(AlarmDaoFactory.Alarm_CapChange); List listC=(new Alarm_paramImpl()).serchByCondition(aparam); if(listC!=null&&listA.size()>0){ Cparam=listC.get(listC.size()-1).getAlm_low_coe(); Changelevel=listC.get(listC.size()-1).getAlm_low_level(); } //System.out.println("param:"+param); double STDAH=0;//标存容量 int hourRate=0;//小时率 double current=0;//当前电流 double SumAH=0;//测试容量 double MaxMonomerVol=0;//最大电压 double MonomerVol=0; //最小电压 double MonomerVolType=0;//电池电压类型 int flag=1;//电池单体告警标识 List listB=new ArrayList();//存放落后单体 if(list!=null&&list.size()>0){ for(int i=0;ibinf.getMonVolStd()*BattTestData.test_stop){ realCap=BattCapFactory.GetMonomerCap(STDAH, hourRate, SumAH, MaxMonomerVol, MonomerVol, MonomerVolType, BattCapFactory.CapType_Real); }else{ list.get(i).getSdata().setMon_vol(binf.getMonVolStd()*BattTestData.test_stop); realCap=(new BatttestdataDAOImpl()).serchRealCap(list.get(i).getSdata()); } flag=BattCapFactory.JudgeAlarm(realCap, param,Cparam, STDAH); if(flag!=1){ list.get(i).getSdata().setNum(flag); list.get(i).setBinf(binf); //将电池组信息设置进去 if(flag==AlarmDaoFactory.Alarm_CapAlarm){ list.get(i).getSdata().setData_available(Caplevel);//存放告警等级 list.get(i).getSdata().setTest_type(AlarmDaoFactory.Alarm_IGNAL_ID_CapAlarmLow);//存放alm_signal_id list.get(i).getSdata().setTest_cap(Float.parseFloat(String.valueOf(realCap))); }else if(flag==AlarmDaoFactory.Alarm_CapChange){ list.get(i).getSdata().setData_available(Changelevel);//存放告警等级 list.get(i).getSdata().setTest_type(AlarmDaoFactory.Alarm_IGNAL_ID_CapChangeLow);//存放alm_signal_id list.get(i).getSdata().setTest_cap(Float.parseFloat(String.valueOf(realCap))); } listB.add(list.get(i)); }else{ continue; } flag=1; } } return listB; } //电池配组管理(重要) public List serchMakeGroup(Object obj1,Object obj2){ BattInf binf=(BattInf) obj1; List listr=(List) binf.getObj(); Batttestdata_inf tinf=(Batttestdata_inf) obj2; 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 db_batt_testdata.tb_batttestdatastop_"+tinf.getBattGroupId()+" " + " where " + "test_record_count=? and record_time=? " + " and db_batt_testdata.tb_batttestdatastop_"+tinf.getBattGroupId()+".data_available=1 ";//tb_batttestdatastop_id表中筛选出实际电压>标存电压*0.9的时的那笔数据,new Object[]{tdata.getTest_record_count(),tdata.getRecord_time()} List list=DAOHelper.executeQuery(sql, DBUtil.getConn(),new Object[]{tinf.getTest_record_count(),tinf.getRecord_time()}, new CallBack() { public List getResults(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ Batttestdatastop sdata=new Batttestdatastop(); sdata.setNum(rs.getInt("num")); sdata.setBattGroupId(rs.getInt("BattGroupId")); sdata.setTest_record_count(rs.getInt("test_record_count")); sdata.setTest_type(rs.getInt("test_type")); sdata.setData_new(rs.getInt("data_new")); sdata.setData_available(rs.getInt("data_available")); sdata.setRecord_num(rs.getInt("record_num")); sdata.setTest_starttime(rs.getTimestamp("test_starttime")); sdata.setRecord_time(rs.getTimestamp("record_time")); sdata.setTest_timelong(rs.getInt("test_timelong")); sdata.setGroup_vol(rs.getFloat("group_vol")); sdata.setTest_curr(rs.getFloat("test_curr")); sdata.setTest_cap(rs.getFloat("test_cap")); sdata.setMon_num(rs.getInt("mon_num")); sdata.setMon_vol(rs.getFloat("mon_vol")); list.add(sdata); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }); double realCap=0;//实际容量 double STDAH=0;//标存容量 int hourRate=0;//小时率 double current=0;//当前电流 double SumAH=0;//测试容量 double MaxMonomerVol=0;//最大电压 double MonomerVol=0; //最小电压 double MonomerVolType=0;//电池电压类型 int flag=1;//电池单体告警标识 if(list!=null&&list.size()>0){ for(int i=0;ibinf.getMonVolStd()*BattTestData.test_stop){ realCap=BattCapFactory.GetMonomerCap(STDAH, hourRate, SumAH, MaxMonomerVol, MonomerVol, MonomerVolType, BattCapFactory.CapType_Real); }else{ sdata.setMon_vol(binf.getMonVolStd()*BattTestData.test_stop); realCap=(new BatttestdataDAOImpl()).serchRealCap(sdata); } sdata.setTest_cap((float)realCap); sdata.setPercent((float)(realCap/STDAH)); } } return list; } //查询指定电池组指定单体的实际容量 public double serchRealCapByMon_num(Object obj) { BattInf binf=(BattInf) obj; String sql="select " + " db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".battgroupid" + ",db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".test_curr" + ",db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".test_cap" + ",db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".mon_vol" + ",db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".test_record_count " + ",db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".mon_num" + ",db_batt_testdata.tb_batttestdata_inf.max_monvol " + " from db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+",db_batt_testdata.tb_batttestdata_inf " + " where db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".BattGroupId=db_batt_testdata.tb_batttestdata_inf.BattGroupId" + " and db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".test_starttime=db_batt_testdata.tb_batttestdata_inf.test_starttime" + " and db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".mon_num=? " + " and db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".data_available=1 " + " and db_batt_testdata.tb_batttestdata_inf.test_type=3 " + " order by db_batt_testdata.tb_batttestdatastop_"+binf.getBattGroupId()+".test_starttime desc " + " limit 1 "; //System.out.println("sql:"+sql); List list=DAOHelper.executeQuery(sql, DBUtil.getConn(),new Object[]{binf.getMonNum()} , new CallBack() { public List getResults(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ Batttestdatastop sdata=new Batttestdatastop(); sdata.setBattGroupId(rs.getInt("battGroupId")); sdata.setTest_record_count(rs.getInt("test_record_count")); sdata.setMon_num(rs.getInt("mon_num")); sdata.setTest_curr(rs.getFloat("test_curr")); sdata.setTest_cap(rs.getFloat("test_cap")); sdata.setMon_vol(rs.getFloat("mon_vol")); sdata.setGroup_vol(rs.getFloat("max_monvol")); list.add(sdata); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }); double realCap=0f;//实际容量 double STDAH=0;//标存容量 int hourRate=0;//小时率 double current=0;//当前电流 double SumAH=0;//测试容量 double MaxMonomerVol=0;//最大电压 double MonomerVol=0; //最小电压 double MonomerVolType=0;//电池电压类型(标存电压) int flag=1;//电池单体告警标识 if(list!=null&&list.size()>0){ for(int i=0;ibinf.getMonVolStd()*BattTestData.test_stop){ realCap=BattCapFactory.GetMonomerCap(STDAH, hourRate, SumAH, MaxMonomerVol, MonomerVol, MonomerVolType, BattCapFactory.CapType_Real); }else{ list.get(i).setMon_vol(binf.getMonVolStd()*BattTestData.test_stop); realCap=(new BatttestdataDAOImpl()).serchRealCap(list.get(i)); } } } return realCap; } public static void main(String[] args) { Batttestdatastop btds=new Batttestdatastop(); btds.setBattGroupId(1000001); btds.setTest_record_count(1); BatttestdatastopDAOImpl bi=new BatttestdatastopDAOImpl(); //List list=bi.serch(btds); List list=bi.serchByCap(btds); for(Batttestdatastop b:list){ System.out.println(b); } //System.out.println(new BatttestdatastopDAOImpl().serchByCondition(btds)); } }