wenzheng.yang
2023-06-13 76017226c92e01ead75b24e10d36477dd631c2cd
更新
已添加2个文件
300 ■■■■■ 文件已修改
src/baowen/Dell_55AA01.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/baowen/Insertdatabase.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }
}
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);
    }
}