package com.fgkj.fbo;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.ArrayList;
|
|
import com.fgkj.fbo.FboData;
|
import com.fgkj.fbo.FboDataInf;
|
|
public class IdcData {
|
public static final int Data400_Len = 1632;
|
public static final int Data24_Len = 128;
|
|
public static final int DataVer_YC = 0;
|
public static final int DataVer_MR = 1;
|
|
public int DataVersion = DataVer_YC;
|
|
public int DataType;
|
public IdcTestTime DateTime = new IdcTestTime();
|
public float SumVol;
|
public float SumCur;
|
public float SumAH;
|
public float[] MonomerVol = new float[400];
|
|
public void setData(byte[] buf)
|
{
|
ByteBuffer bf = ByteBuffer.allocate(2048);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(buf);
|
bf.position(0);
|
|
DataVersion = DataVer_YC;
|
|
DataType = (bf.getInt()&0xFFFF);
|
DateTime.year = (int) (bf.getShort()&0xFFFF);
|
DateTime.month = (int) (bf.getShort()&0xFFFF);
|
DateTime.dayofweek = (int) (bf.getShort()&0xFFFF);
|
DateTime.day = (int) (bf.getShort()&0xFFFF);
|
DateTime.hour = (int) (bf.getShort()&0xFFFF);
|
DateTime.minute = (int) (bf.getShort()&0xFFFF);
|
DateTime.second = (int) (bf.getShort()&0xFFFF);
|
DateTime.millsecond = (int) (bf.getShort()&0xFFFF);
|
SumVol = bf.getFloat();
|
SumCur = bf.getFloat();
|
SumAH = bf.getFloat();
|
|
for(int n=0; n<400; n++)
|
{
|
MonomerVol[n] = bf.getFloat();
|
if(n > 30) {
|
if(MonomerVol[n] > 0.1) {
|
DataVersion = DataVer_MR;
|
}
|
}
|
}
|
}
|
|
public static void checkIdcFile(File file, FboDataInf data_inf, ArrayList<FboData> al_fbo_data)
|
{
|
File f = file;
|
FileInputStream fis = null;
|
try {
|
fis = new FileInputStream(f);
|
byte[] buf = new byte[1024];
|
if(fis.read(buf, 0, buf.length) == 1024)
|
{
|
IdcDataInf idc_inf = new IdcDataInf();
|
idc_inf.setDataInf(buf);
|
data_inf.setDataInf(idc_inf);
|
data_inf.DataType = 0xFD;
|
|
int data_count = 0;
|
int data_len = IdcData.Data400_Len;
|
IdcData idc_data_begin = new IdcData();
|
IdcData idc_data_tmp = new IdcData();
|
byte[] databuf = new byte[IdcData.Data400_Len];
|
FboData fbo_data = new FboData();
|
|
if(fis.read(databuf , 0 , data_len) == data_len)
|
{
|
idc_data_tmp.setData(databuf);
|
if(IdcData.DataVer_MR == idc_data_tmp.DataVersion) {
|
data_len = IdcData.Data24_Len;
|
}
|
}
|
fis.skip(IdcData.Data400_Len * (-1));
|
|
while(true)
|
{
|
if(fis.read(databuf, 0, data_len) == data_len)
|
{
|
IdcData idc_data = new IdcData();
|
idc_data.setData(databuf);
|
if(0 == data_count) {
|
idc_data_begin = idc_data;
|
idc_data_tmp = idc_data;
|
if(0xCC == idc_data.DataType) {
|
data_inf.DataType = 0xFC;
|
}
|
}
|
idc_data.DataType = data_inf.DataType;
|
|
fbo_data = new FboData();
|
fbo_data.setData(idc_data);
|
fbo_data.m_TestTime = IdcTestTime.getFboTestTime(idc_data.DateTime, idc_data_begin.DateTime);
|
int second_count = (int) (idc_data.DateTime.getTimeInSecond() - idc_data_tmp.DateTime.getTimeInSecond());
|
if(second_count > 56) {
|
data_inf.SaveInterval = second_count / 60;
|
if((second_count % 60) > 0) {
|
data_inf.SaveInterval += 1;
|
}
|
}
|
float tmp_cap = (fbo_data.SubCurrent[0] * second_count) / 3600;
|
if(al_fbo_data.size() > 0) {
|
fbo_data.SubCap[0] = al_fbo_data.get(al_fbo_data.size()-1).SubCap[0] + tmp_cap;
|
} else {
|
fbo_data.SubCap[0] = tmp_cap;
|
}
|
fbo_data.AllCap = fbo_data.SubCap[0];
|
al_fbo_data.add(fbo_data);
|
|
idc_data_tmp = idc_data;
|
|
data_count += 1;
|
} else {
|
break;
|
}
|
}
|
|
data_inf.TestTimeLong.hour = fbo_data.m_TestTime.hour;
|
data_inf.TestTimeLong.minute = fbo_data.m_TestTime.minute;
|
data_inf.TestTimeLong.second = fbo_data.m_TestTime.second;
|
data_inf.TestCur = fbo_data.SubCurrent[0];
|
data_inf.TestCap = fbo_data.SubCap[0];
|
data_inf.SMaxIndex[0] = fbo_data.getMaxIndex();
|
data_inf.SMaxVol[0] = fbo_data.getMaxVol();
|
data_inf.SMinIndex[0] = fbo_data.getMinIndex();
|
data_inf.SMinVol[0] = fbo_data.getMinVol();
|
}
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} finally {
|
if(null != fis)
|
{
|
try {
|
fis.close();
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
}
|