From 76017226c92e01ead75b24e10d36477dd631c2cd Mon Sep 17 00:00:00 2001
From: wenzheng.yang <981894274@qq.com>
Date: 星期二, 13 六月 2023 09:14:24 +0800
Subject: [PATCH] 更新
---
src/baowen/Dell_55AA01.java | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++
src/baowen/Insertdatabase.java | 50 ++++++++++
2 files changed, 300 insertions(+), 0 deletions(-)
diff --git a/src/baowen/Dell_55AA01.java b/src/baowen/Dell_55AA01.java
new file mode 100644
index 0000000..bfb6032
--- /dev/null
+++ b/src/baowen/Dell_55AA01.java
@@ -0,0 +1,250 @@
+package baowen;
+import java.math.BigInteger;
+
+import DataBase.DatabaseManagement;
+import data_model.Dell_door;
+import data_model.Dell_fangzhuang;
+import data_model.Dell_tag;
+import data_model.Tb_fangzhuang;
+import data_model.Tb_tag;
+import frame.Index1;
+import publicclass.GetNowTime;
+import publicclass.Shi_jian_cha_sss;
+public class Dell_55AA01 {
+ static String baotou;//包头 0x55AA
+ static String zhilingtype;//指令类型0x01正常模式;0x02心跳包
+ static String lenth;//数据长度17 1BYTE
+ static String xuhao;//序号 1BYTE
+ static String tagid;//标签id 2BYTE
+ static String anchorid;//基站id
+ static String distance10;//10进制距离
+ static String power;//电量
+ static String button;//按键
+ static String baoliu;//保留
+ static String distanceMessage;//实时距离信息
+ static String zhiling01="01";//指令类型01代表正常模式
+ static String zhiling02="02";//指令类型02代表心跳包
+ static String zhiling03="03";//指令类型03代表参数读写模式
+ static String zhiling="";
+ static String hexshow="";
+ static String sudu="";
+ static String baistart;//白名单起始ID
+ static String baistop;//白名单终止ID
+ static String gujiantype;//固件类型
+ static int f4gj=0;//固件类型
+ static String tag_state;//标签激活状态
+ static Tb_fangzhuang fzdata=null;
+ static StringBuffer data=new StringBuffer();
+
+
+ static int info_lenth=0;
+
+ static boolean succpeizhi=false;
+
+
+ public static void dell55aa01_start(String message,String ip,int port) {
+ if(!message.startsWith("55AA01")) {
+ return;
+ }
+ message=message.replaceAll("\r\n|\r|\n", "");//取出所有換行和回车
+ String[] aa0=message.split("55AA");
+ int size=aa0.length;
+ for(int i=0;i<size;i++) {
+ String info="55AA"+aa0[i];
+ dell55AA01(info,ip,port);
+ }
+ }
+
+ /**处理55AA01开头的测距信息
+ * 55 AA 01 11 AF 01 00 05 00 10 02 00 00 64 00 00 00 00 00 C2 FE
+ */
+ public static void dell55AA01(String infom,String ip,int port) {
+ int timestamp=GetNowTime.timestamp();
+ String intime=GetNowTime.timestamp2();
+ int lenth1=infom.length()/2;
+ if(lenth1>10) {
+ int size=lenth1;
+ //将信息2个字符1位保存在数组中
+ String[] hex=new String[size];
+ for(int i=0;i<size;i++) {
+ hex[i]=infom.substring(i*2, 2+i*2);
+ }
+ //指令类型
+ zhilingtype=hex[2];
+ if(!zhilingtype.equals("01")) {
+ return;
+ }
+ //数据长度
+ int datalen=decodeHEX(hex[3])+4;
+ lenth= String.valueOf(decodeHEX(hex[3]));
+ if(datalen==lenth1) {
+ //包序
+ xuhao=String.valueOf(decodeHEX(hex[4]));
+ //模块ID tagid
+ tagid=hex[6]+hex[5];
+ //模块ID anchorid
+ anchorid=hex[8]+hex[7];
+ /**测距距离*/
+ int dis=decodeHEX(hex[12]+hex[11]+hex[10]+hex[9]);
+ distance10=String.valueOf(dis);
+
+ /**电量*/
+ power=String.valueOf(decodeHEX(hex[13]));
+
+ /**按键*/
+ button=String.valueOf(decodeHEX(hex[14]));
+
+ /**保留位*/
+ baoliu=String.valueOf(decodeHEX(hex[15]));
+ dellceju(anchorid ,dis);
+ showdata();
+ }else {
+ Dell_uanshi_byt.intsert(ip,infom,intime, timestamp,port);
+ }
+ hex=null;
+ }else {
+ Dell_uanshi_byt.intsert(ip,infom,intime, timestamp,port);
+ }
+
+
+ }
+
+
+ /**报文显示调用*/
+ public static void showdata() {
+ if(Index1.getTagid().equals("原始数据")) {
+ return;
+ }
+ if(Index1.isShoware()) {
+ data.append("ID:"+tagid+",");
+ data.append("包序:"+xuhao+",");
+ data.append("电量:"+power+",");
+ data.append("编号:"+anchorid+",");
+ data.append("距离:"+distance10);
+ String as=data.toString();
+ if(Index1.getTagid().equals("0")) {
+ Index1.ara_show(as);
+ }else {
+ if(Index1.getTagid().equals(tagid)) {
+ Index1.ara_show(as);
+ }
+ }
+ data.setLength(0);
+ }
+
+ }
+
+ public static String get_realldistance() {
+ return distanceMessage;
+ }
+
+ /**16进制转为10进制*/
+ public static int decodeHEX(String hexs){
+ BigInteger bigint=new BigInteger(hexs, 16);
+ int numb=bigint.intValue();
+ return numb;
+
+ }
+
+ /**32进制转为10进制*/
+ public static String change32To10(String num) {
+ int f=32;
+ int t=10;
+ return new java.math.BigInteger(num, f).toString(t);
+ }
+
+
+ /**
+ * 将byte[]转为各种进制的字符串
+ * @param bytes byte[]
+ * @param radix 基数可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制
+ * @return 转换后的字符串
+ */
+ public static String binary(byte[] bytes, int radix){
+ return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数
+ }
+
+
+ private static final char[] HEXES = {
+ '0', '1', '2', '3',
+ '4', '5', '6', '7',
+ '8', '9', 'a', 'b',
+ 'c', 'd', 'e', 'f'
+ };
+
+ /**
+ * byte数组 转换成 16进制小写字符串
+ */
+ public static String bytes2Hex(byte[] bytes) {
+ if (bytes == null || bytes.length == 0) {
+ return null;
+ }
+
+ StringBuilder hex = new StringBuilder();
+
+ for (byte b : bytes) {
+ hex.append(HEXES[(b >> 4) & 0x0F]);
+ hex.append(HEXES[b & 0x0F]);
+ }
+
+ return hex.toString();
+ }
+
+
+
+
+
+ /**截取指定长度的BYTE数组
+ * @param src原字节数组
+ * @param 开始位置
+ * @param 截取长度*/
+ public static byte[] subBytes(byte[] src, int begin, int count) {
+ byte[] bs = new byte[count];
+ System.arraycopy(src, begin, bs, 0, count);
+ return bs;
+ }
+
+ /**处理测距数据方法*/
+ public static void dellceju(String anchorid ,int dis) {
+ fzdata=Dell_fangzhuang.get_anchor(anchorid);
+ if(fzdata !=null) {
+ int dis0=Integer.parseInt(fzdata.getFzDis());//防撞距离
+ String door=fzdata.getDoor();
+ if(!(dis0<dis)) {//如果防撞距离不大于设定为距离
+ Tb_tag tag =Dell_tag.get_tag(tagid);
+ if(tag ==null) {//插入数据库
+ indatabase(anchorid,dis+"", power+"");
+ }else {
+ String time=tag.getTime();
+ boolean aa=Shi_jian_cha_sss.shijiancha(time,300);
+ if(aa) {//插入数据库
+ indatabase(anchorid,dis+"", power+"");
+ }
+ }
+ Dell_tag.addtagoraler(tagid, anchorid, door);
+ }
+ }
+ }
+
+ //将数据插入数据库
+ public static void indatabase(String anchorid,String distance, String power) {
+ if (power.equals("0")) {
+ power="1";
+ }
+ Dell_door.insert_tbdoor(tagid,anchorid,distance,power,GetNowTime.now());
+
+// String[] ziduan= {"tagid","anchorid","distance","power","addtime"};
+// String[] zhi= {tagid,anchorid,distance ,power,GetNowTime.now()};
+// DatabaseManagement.insertfast("tb_door", ziduan, zhi);
+ }
+ public static String[] hex(String message) {
+ int size=message.length()/2;
+ String[] hex=new String[size];
+ for(int i=0;i<size;i++) {
+ hex[i]=message.substring(i*2, 2+i*2);
+ }
+
+ return hex;
+ }
+
+}
diff --git a/src/baowen/Insertdatabase.java b/src/baowen/Insertdatabase.java
new file mode 100644
index 0000000..3248d8a
--- /dev/null
+++ b/src/baowen/Insertdatabase.java
@@ -0,0 +1,50 @@
+package baowen;
+import java.util.Vector;
+import DataBase.DatabaseManagement;
+import data_model.Dell_door;
+import data_model.Tb_door;
+import publicclass.Open_soft_dialog;
+public class Insertdatabase implements Runnable{
+ Vector<Tb_door> Tb_doorvc;
+ static int sleeptime =1000;
+ /**启动线程的方法*/
+ public void startThread() {
+ Thread t=new Thread(this);
+ t.start();
+ Open_soft_dialog.addara("启动插入数据库线程");
+ }
+
+
+ public void run() {
+ while (true) {
+ try {
+ insertdatabase();
+ Thread.sleep(sleeptime);//休眠时间
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ public void insertdatabase() {
+ Tb_doorvc=Dell_door.getTb_doorvc();
+ int size=Tb_doorvc.size();
+ if(size==0) {
+ sleeptime =1000;
+ return;
+ }
+ sleeptime =100;
+ Tb_door door=Tb_doorvc.get(0);
+ String tagid=door.getTagid();
+ String anchorid=door.getAnchorid();
+ String distance=door.getDistance();
+ String power=door.getPower();
+ String time=door.getAddtime();
+ String[] ziduan= {"tagid","anchorid","distance","power","addtime"};
+ String[] zhi= {tagid,anchorid,distance ,power,time};
+ DatabaseManagement.insertfast("tb_door", ziduan, zhi);
+ //删除处理过的报文
+ Tb_doorvc.removeElement(door);
+ }
+}
--
Gitblit v1.9.3