package com.dev.data;
|
|
import java.io.IOException;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Date;
|
import java.util.List;
|
|
import com.base.BaseData;
|
import com.base.Com;
|
import com.base.ComBase;
|
import com.base.ComFn;
|
import com.sql.MysqlConnPool;
|
|
/**
|
* ½âÎö¿ª¹ØÁ¿°åÊý¾Ý
|
* @author LiJun
|
*
|
*/
|
public class SwitchBoardParse_Thread implements Runnable{
|
public static final int Timing_DataCount = 130; //¶¨Ê±·¢ËÍÊý¾Ý°ü³¤¶È
|
public static final int Event_DataCount = 60; //ʼþ·¢ËÍÊý¾Ý°ü³¤¶È
|
public static final boolean isUseDataTime = true; //ÊÇ·ñʹÓÃÊý¾ÝÖ¡ÖеÄʱ¼ä
|
|
|
public MysqlConnPool conn_pool;
|
public List<Device_inf> devices;
|
public BaseData baseData;
|
public int dev_id;
|
|
public SwitchBoardParse_Thread(MysqlConnPool conn_pool,List<Device_inf> devices,BaseData baseData) {
|
this.conn_pool = conn_pool;
|
this.devices = devices;
|
this.baseData = baseData;
|
}
|
|
@Override
|
public void run() {
|
boolean flag = true;
|
// if(baseData.data.length == Timing_DataCount ||
|
// baseData.data.length == Event_DataCount) {
|
if(flag) {
|
//ÅжÏÊý¾Ý°ü³¤¶È
|
//System.out.println("½ÓÊÕµ½Êý¾Ý°ü");
|
//ÕýÈ·Êý¾Ý°ü
|
parseSwitchBoardData(); //½âÎö¿ª¹ØÁ¿°åÊý¾Ý
|
|
|
for(int i=0;i<devices.size();i++) {
|
|
//System.out.println("¸üпª¹ØÁ¿°åÊý¾Ý");
|
if(devices.get(i).dev_id/1000 == 5 && devices.get(i).isNewData) {
|
//System.err.println("¸üпª¹ØÁ¿°åÊý¾Ý");
|
devices.get(i).isNewData = false;
|
if(isUseDataTime) {
|
//System.err.println(Com.getDateTimeFormat(baseData.getDateFromDate(), Com.DTF_YMDhms)+"==="+Com.getDateTimeFormat(new Date(),Com.DTF_YMDhms));
|
//¸ù¾ÝʼþÖ¡ÖеÄʼþ¼Ç¼¿ª·¢Á¿°åÊý¾Ý
|
//¸üÐÂʵʱÊý¾Ý
|
ChildStoodParse_Thread_SQL.upDeviceRtData(conn_pool,devices.get(i),baseData.getDateFromDate());
|
|
//²åÈëÀúʷʵʱÊý¾Ý
|
ChildStoodParse_Thread_SQL.insertDeviceHistoryData(conn_pool, devices.get(i),baseData.getDateFromDate());
|
}else {
|
//¸üÐÂʵʱÊý¾Ý
|
ChildStoodParse_Thread_SQL.upDeviceRtData(conn_pool,devices.get(i));
|
|
//²åÈëÀúʷʵʱÊý¾Ý
|
ChildStoodParse_Thread_SQL.insertDeviceHistoryData(conn_pool, devices.get(i));
|
}
|
}
|
|
}
|
|
}
|
}
|
|
/**
|
* ½âÎö¿ª¹ØÁ¿°åÊý¾Ý
|
*/
|
public void parseSwitchBoardData() {
|
ByteBuffer bf = ByteBuffer.allocate(baseData.data.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(baseData.data);
|
bf.flip();
|
bf.position(0);
|
int canid = 0;
|
int update_en = 0;
|
int cfg_index = 0;
|
//System.err.println("0xE062:"+ComFn.bytesToHexString(baseData.data, baseData.data.length));
|
//System.err.println("length:"+bf.limit()+"==="+bf.position());
|
while(bf.position() != bf.limit()) {
|
if(bf.limit()-bf.position() < 10) {
|
//³¤¶ÈÉÙÓÚÒ»¸öÊý¾Ý³¤¶ÈʱÍ˳ö½âÎöÊý¾Ý
|
break;
|
}
|
canid = ComBase.changeShortToInt(bf.getShort());
|
cfg_index = 0;
|
update_en = 0;
|
switch(canid) {
|
case 0xE062:{
|
parseSpecifi(5001,bf,1);
|
};break;
|
case 0xE061:{
|
//1ºÅ¿ª¹ØÁ¿°å
|
parseSpecifi(5001,bf,0);
|
// Device_inf dev = getNowDevice(5001);
|
// if(null != dev) {
|
// List<ConfigData> cfgs = dev.cfgdatas;
|
// for(int k = 0;k<4;k++) {
|
// canid = ComBase.changeShortToInt(bf.getShort());
|
// for(int i=0;i<16 && cfg_index< cfgs.size();i++) {
|
// if(checkCanUpdate(cfgs.get(cfg_index),update_en)) {
|
// cfgs.get(cfg_index++).value = ((canid&my_power_2(i))>0)?1:0;
|
// }
|
// }
|
// }
|
// }
|
}break;
|
case 0xE064:{
|
parseSpecifi(5002,bf,1);
|
}break;
|
case 0xE063:{
|
//2ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseSpecifi(5002,bf,0);
|
};break;
|
case 0xE066:{
|
parseSpecifi(5003,bf,1);
|
}break;
|
case 0xE065:{
|
//3ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseSpecifi(5003,bf,0);
|
};break;
|
case 0xE068:{
|
parseSpecifi(5004,bf,1);
|
}break;
|
case 0xE067:{
|
//4ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseSpecifi(5004,bf,0);
|
};break;
|
case 0xE06A:{
|
parseSpecifi(5005,bf,1);
|
}break;
|
case 0xE069:{
|
//5ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseSpecifi(5005,bf,0);
|
};break;
|
case 0xE06C:{
|
parseSpecifi(5006,bf,1);
|
}break;
|
case 0xE06B:{
|
//6ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseSpecifi(5006,bf,0);
|
};break;
|
//case 0xEC46:{
|
//7ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
//parseSevenControlPanel(5007,bf,0);
|
//};break;
|
case 0xEC40:{
|
//1ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5001,bf,128);
|
}break;
|
case 0xE051:{
|
//1ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5001,bf,129);
|
}break;
|
case 0xEC41:{
|
//2ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5002,bf,128);
|
}break;
|
case 0xE052:{
|
//2ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5002,bf,129);
|
}break;
|
case 0xEC42:{
|
//3ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5003,bf,128);
|
}break;
|
case 0xE053:{
|
//3ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5003,bf,129);
|
};break;
|
case 0xEC43:{
|
//4ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5004,bf,128);
|
}break;
|
case 0xE054:{
|
//4ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5004,bf,129);
|
}break;
|
case 0xEC44:{
|
//5ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5005,bf,128);
|
}break;
|
case 0xE055:{
|
//5ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5005,bf,129);
|
}break;
|
case 0xEC45:{
|
//6ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5006,bf,128);
|
}break;
|
case 0xE056:{
|
//6ºÅ¿ª¹ØÁ¿°åÊý¾Ý
|
parseControlPanel(5006,bf,129);
|
}break;
|
default:{
|
//ÌÞ³ý´íÎóÖ¡
|
for(int k = 0;k<4;k++) {
|
canid = ComBase.changeShortToInt(bf.getShort());
|
//System.out.println(canid);
|
}
|
}break;
|
}
|
}
|
}
|
|
//½âÎöÖ¸¶¨É豸idµÄÉ豸ÐÅÏ¢
|
public void parseSpecifi(int dev_id,ByteBuffer bf,int cfg_index) {
|
int canid = 0;
|
Device_inf dev = getNowDevice(dev_id);
|
if(null != dev) {
|
dev.isNewData = true;
|
List<ConfigData> cfgs = dev.cfgdatas;
|
for(int k = 0;k<4;k++) {
|
canid = ComBase.changeShortToInt(bf.getShort());
|
for(int i=0;i<16 && cfg_index< cfgs.size();i++) {
|
cfgs.get(cfg_index++).setValue(((canid&my_power_2(i))>0)?1:0);
|
cfg_index++;
|
}
|
}
|
}
|
}
|
|
//½âÎöÄ£Äâ¿ØÖÆÅÌÊý¾Ý
|
public void parseControlPanel(int dev_id,ByteBuffer bf,int cfg_index) {
|
int canid = 0;
|
Device_inf dev = getNowDevice(dev_id);
|
if(null != dev) {
|
dev.isNewData = true;
|
List<ConfigData> cfgs = dev.cfgdatas;
|
for(int k = 0;k<3;k++) {
|
canid = ComBase.changeShortToInt(bf.getShort());
|
for(int i=0;i<16 && cfg_index< cfgs.size();i++) {
|
//System.out.println(cfgs.get(cfg_index).data_value+"===="+cfgs.get(cfg_index).value);
|
cfgs.get(cfg_index++).setValue(((canid&my_power_2(i))>0)?1:0);
|
cfg_index++;
|
}
|
}
|
canid = ComBase.changeShortToInt(bf.getShort());
|
cfgs.get(cfg_index++).setValue(canid);;
|
}
|
}
|
|
//½âÎöÄ£Äâ¿ØÖÆÅÌÊý¾Ý
|
public void parseSevenControlPanel(int dev_id,ByteBuffer bf,int cfg_index) {
|
int canid = 0;
|
Device_inf dev = getNowDevice(dev_id);
|
if(null != dev) {
|
dev.isNewData = true;
|
List<ConfigData> cfgs = dev.cfgdatas;
|
for(int k = 0;k<3;k++) {
|
canid = ComBase.changeShortToInt(bf.getShort());
|
for(int i=0;i<16 && cfg_index< cfgs.size();i++) {
|
//System.out.println(cfgs.get(cfg_index).data_value+"===="+cfgs.get(cfg_index).value);
|
cfgs.get(cfg_index++).setValue(((canid&my_power_2(i))>0)?1:0);
|
}
|
}
|
canid = ComBase.changeShortToInt(bf.getShort());
|
cfgs.get(cfg_index++).setValue(canid);;
|
}
|
}
|
|
|
//ÅжÏÊÇ·ñÐèÒª¸üÐÂ״̬
|
public boolean checkCanUpdate(ConfigData cfg,int update_en) {
|
if(cfg.update_code == 0 || (cfg.update_code ==1 && update_en == 1)) {
|
cfg.update_en = 1;
|
return true;
|
}
|
return false;
|
}
|
|
public static void main(String[] args) throws IOException{
|
for(int i = 0; i<17;i++) {
|
//System.out.println(Math.pow(2,i));
|
for(int k=0;k<6535;k++) {
|
System.out.println(k&(int)Math.pow(2,i));
|
}
|
}
|
|
|
// while(true) {
|
// BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
|
// int n = Integer.parseInt(cin.readLine().trim());
|
// System.out.println(my_power_2(n));
|
// }
|
//System.out.println(Long.MAX_VALUE);
|
//System.out.println(Long.MIN_VALUE);
|
}
|
public static int my_power_2(int N){
|
StringBuffer v = new StringBuffer("");
|
long num[] = new long[2];
|
num[1] = 1;
|
if(N > 62){
|
num[0] = 1;
|
num[0] = num[0]<<(N - 62);
|
num[1] = num[1]<<62;
|
String s = String.valueOf(num[1]);
|
int size = 30,i = 0,j = 0;
|
long n[] = new long[size + 1];
|
//System.out.println(num[0]+" "+s);
|
for(i = s.length() - 1;i >= 0;-- i){
|
n[j ++] = (long) (num[0] * (s.charAt(i) - '0'));
|
//System.out.println(n[j - 1]);
|
}
|
for(i = 0;i < size;++ i){
|
while(n[i] > 9){
|
n[i + 1] += n[i] / 10;
|
n[i] %= 10;
|
}
|
}
|
boolean bl = false;
|
for(i = size;i >= 0;-- i){
|
if(n[i] != 0 || bl){
|
v.append(n[i]);
|
bl = true;
|
}
|
}
|
}else{
|
num[1] = num[1] << N;
|
v.append(String.valueOf(num[1]));
|
}
|
return Integer.parseInt(v.toString());
|
}
|
|
//»ñÈ¡µ±Ç°É豸ÐÅÏ¢
|
public Device_inf getNowDevice(int dev_id) {
|
for(int i=0;i<devices.size();i++) {
|
if(devices.get(i).dev_id == dev_id) {
|
return devices.get(i);
|
}
|
}
|
return null;
|
}
|
|
}
|