6a11d13546c73912c019002f914c39202b3b49d2..76017226c92e01ead75b24e10d36477dd631c2cd
2023-06-13 wenzheng.yang
更新
760172 对比 | 目录
2023-06-13 wenzheng.yang
更新
963ab4 对比 | 目录
已添加2个文件
已修改5个文件
377 ■■■■■ 文件已修改
src/baowen/Dell_55AA01.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/baowen/Dell_uanshi_byt.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/baowen/Insertdatabase.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/baowen/Udp_Receive.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/data_model/Dell_door.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/frame/Index1.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/home/DabaseInitialize.java 4 ●●● 补丁 | 查看 | 原始文档 | 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/Dell_uanshi_byt.java
@@ -123,7 +123,7 @@
                        String type=ysbyt.getType();
                        switch(type) {
                        case "01"://测距信息
                            Dell_55AA01.dell55AA01(ysbyt.getPack().toString(), ip, port);
                            break;
                        case "0A"://0A注册包
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);
    }
}
src/baowen/Udp_Receive.java
@@ -89,12 +89,18 @@
                int port=packet.getPort();    
                String datas=Tools.Bytes2HexString(byt);
                String upinfo=datas.toUpperCase();
                if(Index1.getTagid().equals("原始数据")){
                    if(Index1.isShoware()) {
                        Index1.ara_show(upinfo);
                    }
                }
                i=i+1;
                Index1.getUdpnum().setText(i+"条");    
                if(i==100000) {
                    i=0;
                }
                dell55aa0c_start(upinfo,ip,port);
                Dell_55AA01.dell55aa01_start(upinfo, ip, port);
                byt=null;
            } catch (Exception e) {
                e.printStackTrace(); // è¾“出异常信息
@@ -112,8 +118,11 @@
        System.arraycopy(src, begin, bs, 0, count);
        return bs;
    }
    public static void dell55aa0c_start(String message,String ip,int port) {
        if(!message.startsWith("55AA0C")) {
            return;
        }
        message=message.replaceAll("\r\n|\r|\n", "");//取出所有換行和回车
        String[] aa0=message.split("55AA");
        int size=aa0.length;
@@ -124,13 +133,17 @@
    }
    //处理55AAOC开头的报文
    public static void dell_55aa0c(String message,String ip,int port) {
    public static void dell_55aa0c(String message,String ip,int port) {
        int lenth=message.length();
        int timestamp=GetNowTime.timestamp();
        String intime=GetNowTime.timestamp2();
        if(lenth>10) {
            hex=hex(message);
            String type= hex[2] ;//指令类型
            if(!type.equals("0C")) {
                return;
            }
            int datalenth1=decodeHEX(hex[3]) ;//数据长度
            datalenth1=datalenth1*2+8;
            if(lenth==datalenth1) {                        
@@ -162,7 +175,7 @@
        }
    }
    /**处理测距数据方法*/
    public static void dellceju(String anchorid ,int dis) {
        fzdata=Dell_fangzhuang.get_anchor(anchorid);
@@ -218,24 +231,34 @@
        return numb;
    }
    /**报文显示调用*/
    public static void showdata() {
        if(Index1.getTagid().equals("原始数据")) {
            return;
        }
        if(Index1.isShoware()) {
            data.append("ID:"+tagid+",");
            data.append("包序:"+baoxu+",");
            data.append("电量:"+power+",");
            data.append("基站:"+anchornum+",");
            data.append("基站:"+anchids+",");
            data.append("基站数:"+anchornum+",");
            data.append("编号:"+anchids+",");
            data.append("距离:"+distances+",");            
            String as=data.toString();
            Index1.ara_show(as);
            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);
            anchids.setLength(0);
            distances.setLength(0);
        }
    }
    /**添加基站进入报文*/
    public static void addbuf(StringBuffer buf,int i,String anchorid) {
        if(Index1.isShoware()) {
src/data_model/Dell_door.java
@@ -4,7 +4,7 @@
import java.util.Vector;
import DataBase.DatabaseManagement;
public class Dell_door {
    static Vector<Tb_door> Tb_doorvc=new Vector<Tb_door>();
    @SuppressWarnings("rawtypes")
    public static  Vector<Tb_door> getvec() {
        Vector<Tb_door> jiancevc=new Vector<Tb_door>();
@@ -42,4 +42,23 @@
        }
        return jiancevc;
    }
    public static Vector<Tb_door> getTb_doorvc() {
        return Tb_doorvc;
    }
    public static void insert_tbdoor(String tagid,String anchorid,String distance,String power,String addtime) {
        Tb_door data=new Tb_door();
        data.setTagid(tagid);
        data.setAnchorid(anchorid);
        data.setDistance(distance);
        data.setPower(power);
        data.setAddtime(addtime);
        Tb_doorvc.add(data);
    }
    public void setTb_doorvc(Vector<Tb_door> tb_doorvc) {
        Tb_doorvc = tb_doorvc;
    }
}
src/frame/Index1.java
@@ -79,6 +79,7 @@
    static String datatypeis="全部数据类型";
    static boolean chushi_enhd=false;
    static boolean start_jiexi=false;
    static String tagid="0";
    public Index1() {//构造方法
        Toolkit toolkit = getToolkit();// èŽ·å¾—çª—ä½“å·¥å…·åŒ…
@@ -434,7 +435,8 @@
            search.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String serch=getSearchFileld().getText().trim();
                    if(getSearchFileld().getText().length()>=1) {
                    tagid=serch;
                    if(serch.length()>=1) {
                        int size=Dell_door.serch(serch).size();
                        ShowMessage.zidingyi("搜索到数据"+size);
                        updateSerch(serch);    
@@ -485,6 +487,7 @@
            but_shuaxin1=new JButtonModel("刷新表格");
            but_shuaxin1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    tagid="0";
                    updateTable();
                }
            });
@@ -513,6 +516,10 @@
        Index1.showare = showare;
    }
    public static String getTagid() {
        return tagid;
    }
    
    
src/home/DabaseInitialize.java
@@ -1,4 +1,5 @@
package home;
import baowen.Insertdatabase;
import baowen.Udp_Receive;
import data_model.Dell_door;
import data_model.Dell_fangzhuang;
@@ -14,7 +15,8 @@
        new Dell_door();//初始化系统        
        new Index1();    
//        ChuShiHua.ding_shi_qi();//启动定时器//            
        new Udp_Receive().startThread();
        new Udp_Receive().startThread();
        new Insertdatabase().startThread();
//        new Dell_message24().startThread();//启动处理报文线程2
    }