DELL
2025-04-21 1af31e38c6a2cd072ed310149c656780610fe57b
2.修复锁具开启之后记录bug
1个文件已删除
5个文件已添加
25个文件已修改
596 ■■■■■ 已修改文件
ElectLock_Monitor/bin/com/base/ComBase.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/comm/Lock_SocketClient_Thread.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/comm/Lock_Task_SQL.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Array.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_ComBase.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Ctl_Log.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Inf.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_State.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/modbus/MyModBusRtu.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/sql/Sql_Mysql.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/version_inf/version_inf.txt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/main/main_ElectLock_Monitor.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/error-20250315-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/error-20250418-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/info-20250106-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/info-20250315-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/info-20250418-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/info-20250419-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/log4j2_electlock_dev_x64.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/base/ComBase.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/comm/Lock_SocketClient_Thread.java 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/comm/Lock_Task_SQL.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Array.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_ComBase.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Ctl_Log.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Inf.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_State.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/modbus/MyModBusRtu.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/sql/Sql_Mysql.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/version_inf/version_inf.txt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/main/main_ElectLock_Monitor.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/base/ComBase.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/comm/Lock_SocketClient_Thread.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/comm/Lock_Task_SQL.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Array.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_ComBase.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Ctl_Log.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Inf.class
Binary files differ
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_State.class
Binary files differ
ElectLock_Monitor/bin/com/dev/modbus/MyModBusRtu.class
Binary files differ
ElectLock_Monitor/bin/com/sql/Sql_Mysql.class
Binary files differ
ElectLock_Monitor/bin/com/version_inf/version_inf.txt
@@ -7,6 +7,10 @@
        
    设备ID:10000001
    
V1.113 edit by lijun 2025-03-15
    1.新增远程开启以及关闭蓝牙功能
    2.修复锁具开启之后记录bug
V1.112 edit by lijun 2025-03-15
    1.新增设置锁具模式后最多重启3次锁具,锁具蓝牙读取的锁具模式需重启后生效    
    2.屏蔽平台远程设置锁具ID逻辑
ElectLock_Monitor/bin/main/main_ElectLock_Monitor.class
Binary files differ
ElectLock_Monitor/electlock_dev_x64_logs/error-20250315-1.log.gz
Binary files differ
ElectLock_Monitor/electlock_dev_x64_logs/error-20250418-1.log.gz
Binary files differ
ElectLock_Monitor/electlock_dev_x64_logs/info-20250106-1.log.gz
Binary files differ
ElectLock_Monitor/electlock_dev_x64_logs/info-20250315-1.log.gz
Binary files differ
ElectLock_Monitor/electlock_dev_x64_logs/info-20250418-1.log.gz
Binary files differ
ElectLock_Monitor/electlock_dev_x64_logs/info-20250419-1.log.gz
Binary files differ
ElectLock_Monitor/log4j2_electlock_dev_x64.xml
@@ -65,7 +65,7 @@
    </Appenders>
    <Loggers>
        <Root level="trace">
        <Root level="DeBug">
            <AppenderRef ref="Console" />
            <appenderRef ref="INFO" />
            <appenderRef ref="ERROR" />
ElectLock_Monitor/src/com/base/ComBase.java
@@ -67,6 +67,16 @@
        return buff;
    }
    
    public static ByteBuffer mkInt32Buffer(long value) {
        ByteBuffer buff = ByteBuffer.allocate(4);
        buff.order(ByteOrder.BIG_ENDIAN);
        buff.putShort(ComBase.changeIntToShort(((int)value>>16)&0xFFFF));
        buff.putShort(ComBase.changeIntToShort(((int)value&0xFFFF)));
        buff.flip();
        return buff;
    }
    public static double GetFDCurrent(double stdcap, int hourrate) {
        double res = 0.055D;
ElectLock_Monitor/src/com/dev/lock/comm/Lock_SocketClient_Thread.java
@@ -31,8 +31,7 @@
    private Logger logger;
    private AppConfig config;
    
    private ElectLock_State mLock_State;
    private ElectLock_State[] mLock_State = new ElectLock_State[ElectLock_ComBase.Lock_MaxLineCount];
    private ElectLock_State mLock_param;
    
    private String client_ip;            //客户端IP地址
@@ -41,7 +40,7 @@
    private MyModBusRtu mRtu_Tx;        //发送数据
    private MyModBusRtu mRtu_Rx;        //返回数据
    
    private ElectLock_Inf ele_lock = null;
    private ElectLock_Inf[] ele_lock = new ElectLock_Inf[ElectLock_ComBase.Lock_MaxLineCount];
    
    private ElectLock_Array GB_Lock_Array;
    
@@ -50,6 +49,11 @@
    private boolean S_thread_run_flag = true;
    
    private int plat_model;
    private int MaxLockCount;
    private int NowLockIdx = 0;        //当前读取状态的锁具索引
    private int ErrorCount = 0;        //连续错误计数,连接错误计数
    
    public Lock_SocketClient_Thread(MysqlConnPool pool,ElectLock_Array GB_Lock_Array ,AppConfig config,Socket tmp_socket) {
        this.pool = pool;
@@ -61,8 +65,9 @@
        this.logger = LogManager.getLogger(this);
        this.mRtu_Tx = new MyModBusRtu();
        this.mRtu_Rx = new MyModBusRtu(); 
        this.mLock_State = new ElectLock_State();
        this.mLock_param = new ElectLock_State();
        mLock_param = new ElectLock_State();
    }
    
    @Override
@@ -71,10 +76,10 @@
        
        int runCount = 0;
        try {
            if(S_thread_run_flag) {
                mLock_State.setLock_online(1);
                Lock_Task_SQL.insertLock_Rt_Table(pool, client_id, mLock_State);
            }
//            if(S_thread_run_flag) {
//                mLock_State.setLock_online(1);
//                Lock_Task_SQL.insertLock_Rt_Table(pool, client_id, mLock_State);
//            }
            while(S_thread_run_flag) {
                
                Lock_Task_SQL.queryElectLockControlCmd(pool,client_id,mLock_param);
@@ -83,39 +88,39 @@
                    ElectLock_Ctl_Log tmp_log = null;
                    
                    if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_ClearIdCard) {
                        mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_YC, ElectLock_ComBase.LOCK_CLEAR_AUTH_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_YC, ElectLock_ComBase.LOCK_CLEAR_AUTH_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(ElectLock_ComBase.Control_Value))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_ClearIdCard_Ack);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_ClearIdCard, true,0,mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_ClearIdCard, true,0,mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_ClearIdCard, false,0,mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_ClearIdCard, false,0,mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_REMOTE_OPEN_Lock) {
                        mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_YC, ElectLock_ComBase.LOCK_REMOTE_OPEN_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_YC, ElectLock_ComBase.LOCK_REMOTE_OPEN_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(ElectLock_ComBase.Control_Value))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_REMOTE_OPEN_Lock_Ack);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_REMOTE_OPEN_Lock, true,0,mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_REMOTE_OPEN_Lock, true,0,mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_REMOTE_OPEN_Lock, false,0,mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_REMOTE_OPEN_Lock, false,0,mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                            
                            //远程开锁失败时,记录一笔开锁失败告警
                            Lock_Task_SQL.insertRemoteOpenFailAlarm(pool, client_id);
                            Lock_Task_SQL.insertRemoteOpenFailAlarm(pool, mLock_param.getLock_id());
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_REMOTE_ReStart) {
                        mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_YC, ElectLock_ComBase.LOCK_RESTART_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_YC, ElectLock_ComBase.LOCK_RESTART_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(ElectLock_ComBase.Control_Value))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_REMOTE_ReStart_Ack);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_REMOTE_ReStart, true,0,mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_REMOTE_ReStart, true,0,mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_REMOTE_ReStart, false,0,mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_REMOTE_ReStart, false,0,mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_SetLockAddr) {
@@ -132,28 +137,53 @@
//                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_AddIdCard) {
                        //添加ID卡授权
                        mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Add_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Add_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
                        System.out.println("mLock_param.getId_card_set():"+mLock_param.getId_card_set());
                        if(SocketComm(mRtu_Tx, ComBase.mkInt32Buffer(mLock_param.getId_card_set()))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_AddIdCard_Ack);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_AddIdCard, true,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_AddIdCard, true,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_AddIdCard, false,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_AddIdCard, false,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_RemoveIdCard) {
                        //取消ID卡授权
                        mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Clear_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Clear_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
                        if(SocketComm(mRtu_Tx, ComBase.mkInt32Buffer(mLock_param.getId_card_set()))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_RemoveIdCard_Ack);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_RemoveIdCard, true,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_RemoveIdCard, true,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_RemoveIdCard, false,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_RemoveIdCard, false,mLock_param.getId_card_set(),mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_OpenBluetooth) {
                        //开启蓝牙
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_STD, ElectLock_ComBase.LOCK_SET_Bluetooth_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        System.out.println("mLock_param.getId_card_set():"+mLock_param.getId_card_set());
                        if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(ElectLock_ComBase.Lock_Bluetooth_Open))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_OpenBluetooth_Ack);
                            //tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_BluetoothOpen, true,0,mLock_param.getCtl_uname());
                            //Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            //tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_BluetoothOpen, false,0,mLock_param.getCtl_uname());
                            //Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_CloseBluetooth) {
                        //关闭蓝牙
                        mRtu_Tx.mkBusRtu((mLock_param.getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_STD, ElectLock_ComBase.LOCK_SET_Bluetooth_ADDR, ElectLock_ComBase.RegCount_Sigle);
                        if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(ElectLock_ComBase.Lock_Bluetooth_Close))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_CloseBluetooth_Ack);
                            //tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_BluetoothClose, true,0,mLock_param.getCtl_uname());
                            //Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        } else {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_Fail);
                            //tmp_log = new ElectLock_Ctl_Log(mLock_param.getLock_id(), ElectLock_ComBase.CtlType_BluetoothClose, false,0,mLock_param.getCtl_uname());
                            //Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }
                    
@@ -162,31 +192,32 @@
                }
                
                
                if((runCount%16) == 0) {
                if((runCount%(16/MaxLockCount)) == 0) {
                    //读取锁具的实时状态
                    mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_READ_INPUT, ElectLock_ComBase.LOCK_REAL_ADDR, ElectLock_State.Reg_Count_Real);
                    mRtu_Tx.mkBusRtu((mLock_State[NowLockIdx].getLockAddr()%255),MyModBusRtu.CMD_TYPE_READ_INPUT, ElectLock_ComBase.LOCK_REAL_ADDR, ElectLock_State.Reg_Count_Real);
                    if(SocketComm(mRtu_Tx, ByteBuffer.allocate(0))) {
                        Lock_Task_SQL.updateLock_Rt_Table(pool,client_id,mLock_State);
                        Lock_Task_SQL.updateLock_Rt_Table(pool,ele_lock[NowLockIdx].getLock_id(),mLock_State[NowLockIdx]);
                        Lock_Task_SQL.updateLock_Inf_Table(pool,ele_lock,mLock_State);
                        Lock_Task_SQL.updateLock_Inf_Table(pool,ele_lock[NowLockIdx],mLock_State[NowLockIdx]);
                        
                        //更新锁具状态
                        ele_lock.lockRecordState.setLockState(mLock_State);
                        ele_lock[NowLockIdx].lockRecordState.setLockState(mLock_State[NowLockIdx]);
                        
                        if(mLock_State.isIDOpen()) {
                            String ctl_uname = Lock_Task_SQL.queryKeyInfByKeyNumberTable(pool,mLock_State.getLast_unlock_id());
                            ElectLock_Ctl_Log tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_IDCardOpen, true,mLock_State.getLast_unlock_id(),ctl_uname);
                        if(mLock_State[NowLockIdx].isIDOpen()) {
//                            String ctl_uname = Lock_Task_SQL.queryKeyInfByKeyNumberTable(pool,mLock_State[NowLockIdx].getLast_unlock_id());
                            String ctl_uname = "";
                            ElectLock_Ctl_Log tmp_log = new ElectLock_Ctl_Log(mLock_State[NowLockIdx].getLock_id(), ElectLock_ComBase.CtlType_IDCardOpen, true,mLock_State[NowLockIdx].getLast_unlock_id(),ctl_uname);
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                            mLock_State.setIDOpen(false);
                            mLock_State[NowLockIdx].setIDOpen(false);
                            tmp_log = null;
                        }
                        
                        plat_model =  Lock_Task_SQL.querySystemLockMode(pool);
                        if(plat_model != ElectLock_ComBase.CMD_Fail) {
                            if(plat_model != mLock_State.getWorkmodel()) {
                                logger.info("LockID:"+client_id + " Start change Model :");
                            if(plat_model != mLock_State[NowLockIdx].getWorkmodel()) {
                                logger.info("LockID:"+mLock_State[NowLockIdx].getLock_id() + " Start change Model :");
                                
                                mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_STD, ElectLock_ComBase.LOCK_SET_Model_ADDR, ElectLock_ComBase.RegCount_Sigle);
                                mRtu_Tx.mkBusRtu((mLock_State[NowLockIdx].getLockAddr()%255),MyModBusRtu.CMD_TYPE_WRITE_STD, ElectLock_ComBase.LOCK_SET_Model_ADDR, ElectLock_ComBase.RegCount_Sigle);
                                if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(plat_model))) {
                                    //远程设置锁具在离线模式后最多重启设备3次
                                    for(int k = 0 ;k < 3;k++) {
@@ -201,64 +232,69 @@
                            }
                        }
                    }
                    NowLockIdx ++;
                    if(NowLockIdx >= MaxLockCount) {
                        NowLockIdx = 0;
                    }
                }
                
                List<ElectLock_AuthIdcard> batch_auth = Lock_Task_SQL.queryAuth_Idcard_Table(pool,client_id);
                if(batch_auth.size() > 0) {
                    logger.info("开始批量授权ID卡,ID数量:" + batch_auth.size());
                    for(int k = 0; k < batch_auth.size() ; k++) {
                        ElectLock_AuthIdcard tmp_auth = batch_auth.get(k);
                        ElectLock_Ctl_Log tmp_log = null;
                        try {
                            int keyNumber = Integer.parseInt(tmp_auth.key_number.trim());
                            if(tmp_auth.state == ElectLock_AuthIdcard.AuthType_ReMove) {
                                //取消ID卡授权
                                mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Clear_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
                                if(SocketComm(mRtu_Tx, ComBase.mkInt32Buffer(keyNumber))) {
                                    tmp_auth.auth_result = ElectLock_ComBase.Auth_Success;
                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_RemoveIdCard, true,keyNumber,tmp_auth.ctl_uname);
                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                                } else {
                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_RemoveIdCard, false,keyNumber,tmp_auth.ctl_uname);
                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                                }
                            }else if(tmp_auth.state == ElectLock_AuthIdcard.AuthType_Add) {
                                //添加授权
                                mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Add_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
                                if(SocketComm(mRtu_Tx, ComBase.mkInt32Buffer(keyNumber))) {
                                    tmp_auth.auth_result = ElectLock_ComBase.Auth_Success;
                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_AddIdCard, true,keyNumber,tmp_auth.ctl_uname);
                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                                } else {
                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_AddIdCard, false,keyNumber,tmp_auth.ctl_uname);
                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                                }
                            }
                        } catch (Exception e) {
                            tmp_auth.auth_result = ElectLock_ComBase.Auth_Fail;
                        } finally {
                            tmp_log = null;
                        }
                        Lock_Task_SQL.moveAuth_Idcard_Table(pool, tmp_auth);
                    }
                }
                batch_auth = null;
//                List<ElectLock_AuthIdcard> batch_auth = Lock_Task_SQL.queryAuth_Idcard_Table(pool,client_id);
//                if(batch_auth.size() > 0) {
//                    logger.info("开始批量授权ID卡,ID数量:" + batch_auth.size());
//                    for(int k = 0; k < batch_auth.size() ; k++) {
//                        ElectLock_AuthIdcard tmp_auth = batch_auth.get(k);
//                        ElectLock_Ctl_Log tmp_log = null;
//                        try {
//                            int keyNumber = Integer.parseInt(tmp_auth.key_number.trim());
//                            if(tmp_auth.state == ElectLock_AuthIdcard.AuthType_ReMove) {
//                                //取消ID卡授权
//                                mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Clear_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
//                                if(SocketComm(mRtu_Tx, ComBase.mkInt32Buffer(keyNumber))) {
//                                    tmp_auth.auth_result = ElectLock_ComBase.Auth_Success;
//                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_RemoveIdCard, true,keyNumber,tmp_auth.ctl_uname);
//                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
//                                } else {
//                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_RemoveIdCard, false,keyNumber,tmp_auth.ctl_uname);
//                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
//                                }
//                            }else if(tmp_auth.state == ElectLock_AuthIdcard.AuthType_Add) {
//                                //添加授权
//                                mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_WRITE_MULTY, ElectLock_ComBase.LOCK_Add_ID_AUTH_ADDR, ElectLock_ComBase.RegCount_Double);
//                                if(SocketComm(mRtu_Tx, ComBase.mkInt32Buffer(keyNumber))) {
//                                    tmp_auth.auth_result = ElectLock_ComBase.Auth_Success;
//                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_AddIdCard, true,keyNumber,tmp_auth.ctl_uname);
//                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
//                                } else {
//                                    tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_AddIdCard, false,keyNumber,tmp_auth.ctl_uname);
//                                    Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
//                                }
//                            }
//                        } catch (Exception e) {
//                            tmp_auth.auth_result = ElectLock_ComBase.Auth_Fail;
//                        } finally {
//                            tmp_log = null;
//                        }
//                        Lock_Task_SQL.moveAuth_Idcard_Table(pool, tmp_auth);
//                    }
//
//                }
//                batch_auth = null;
                
                runCount ++;
                if(runCount > 99999900) {
                    runCount = 0;
                }
                Thread.sleep(200);
                Thread.sleep(100);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            logger.info("设备断开连接:DevIp:" + client_ip + " DevId:" + mLock_State.getLockDevId());
            mLock_State.setLock_online(0);
            logger.info("设备断开连接:DevIp:" + client_ip + " DevId:" + client_id/10000 + "XXXX");
            //重置mac地址会影响app开始,待定逻辑
            //mLock_State.resetLockMacAddr();
            Lock_Task_SQL.updateLock_Inf_Table(pool,ele_lock,mLock_State);
            Lock_Task_SQL.updateLock_OffLineTable(pool,client_id);
        }
        if(null != tmp_socket) {
@@ -283,6 +319,8 @@
            case ElectLock_ComBase.CMD_SetLockAddr:                    //设置锁具地址
            case ElectLock_ComBase.CMD_AddIdCard:                    //添加授权卡ID
            case ElectLock_ComBase.CMD_RemoveIdCard:                //移除授权卡ID
            case ElectLock_ComBase.CMD_OpenBluetooth:                //开启蓝牙
            case ElectLock_ComBase.CMD_CloseBluetooth:                //关闭蓝牙
                isCheckOk = true;break;
            default :
                isCheckOk = false;break;
@@ -297,51 +335,35 @@
    private boolean checkDevceType() {
        boolean isCheckOk = false;
        logger.info("DevIp: " + client_ip + " Check Lock Type:" + config.getCommType());
        for(int k = 0 ;k < 3;k++) {
            try {
                if(config.getCommType().toUpperCase().equals("IP")) {
                    //通过IP地址识别锁具
                    for(int m = 0; m < GB_Lock_Array.getIteamCount();m++) {
                        ElectLock_Inf tmp_lock = GB_Lock_Array.getIteam(m);
                        if(tmp_lock.getLock_ip().equals(client_ip)) {
                            ele_lock = tmp_lock;
                            mLock_State = ele_lock.lockState;
                            client_id = ele_lock.getLock_id();
                            mLock_State.setClient_ip(client_ip);
                            isCheckOk = true;
        MaxLockCount = 0 ;            //连接锁具数量
        try {
            //通过IP地址识别锁具
            for(int m = 0; m < GB_Lock_Array.getIteamCount();m++) {
                ElectLock_Inf tmp_lock = GB_Lock_Array.getIteam(m);
                if(tmp_lock.getLock_ip().equals(client_ip)) {
                    if(client_id == 0) {
                        client_id = tmp_lock.getLock_id();
                        isCheckOk = true;
                    }else {
                        if((client_id/10000) != (tmp_lock.getLock_id()/10000)) {
                            continue;
                        }
                    }
                }else {
                    //通过ID号识别锁具
                    mRtu_Tx.mkBusRtu(MyModBusRtu.CMD_TYPE_READ_INPUT, ElectLock_ComBase.LOCK_REAL_ADDR, ElectLock_State.Reg_Count_Real);
                    if(SocketComm(mRtu_Tx, ByteBuffer.allocate(0))){
                        //System.err.println(mLock_State);
                        //System.out.println("mLock_State.getLockDevId():"+mLock_State.getLockDevId());
                        for(int m = 0; m < GB_Lock_Array.getIteamCount();m++) {
                            ElectLock_Inf tmp_lock = GB_Lock_Array.getIteam(m);
                            if(tmp_lock.getLock_id() == mLock_State.getLockDevId()) {
                                ele_lock = tmp_lock;
                                mLock_State = ele_lock.lockState;
                                client_id = ele_lock.getLock_id();
                                mLock_State.setClient_ip(client_ip);
                                isCheckOk = true;
                            }
                        }
                    }
                    }
                    ele_lock[MaxLockCount] = tmp_lock;
                    mLock_State[MaxLockCount] = ele_lock[MaxLockCount].lockState;
                    mLock_State[MaxLockCount].setClient_ip(client_ip);
                    MaxLockCount ++;
                }
                if(isCheckOk) {
                    break;
                }
                Thread.sleep(20);
            } catch (InterruptedException e) {
                logger.error(e.toString(),e);
            }
        } catch (Exception e) {
            logger.error(e.toString(),e);
        }
        if(isCheckOk) {
            logger.info("DevIp: " + client_ip + "识别成功;LockId:" + client_id);
            logger.info("DevIp: " + client_ip + "识别成功;LockId:" + client_id + "\t 锁具数量:" + MaxLockCount);
            if(MaxLockCount == 0) {
                isCheckOk = false;
            }
        }else {
            logger.info("DevIp: " + client_ip + "识别失败 !!!");
        }
@@ -408,11 +430,11 @@
                        //bytebuffer_for_socket_RX.put((byte)in.read());
                    } else {
                        rx_read_time_out++;
                        if(/*(bytebuffer_for_socket_RX.position() >= 20) && */(rx_read_time_out>100)){
                        if((bytebuffer_for_socket_RX.position() >= 8) && (rx_read_time_out>10)){
                            //    res = true;
                            break;
                        }
                        if(rx_read_time_out > 800) {
                        if(rx_read_time_out > 20) {
                            break;
                        }
                    }
@@ -445,24 +467,27 @@
                if(cipher_buf.length > MyModBusRtu.BYTE_LEN && true == getDataFromCommBuf(cipher_buf,rtu)) {
                    res_t = true; 
                    
                    mLock_State.addCommCount();
                    mLock_State.clearErrorCount();
                    mLock_State[NowLockIdx].addCommCount();
                    mLock_State[NowLockIdx].clearErrorCount();
                    clearErrorCount();
                } else {
                    //System.err.println("DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");
                    
                    res_t = false;
                    
                    mLock_State.addErrorCount();
                    mLock_State[NowLockIdx].addErrorCount();
                    addErrorCount();
                }
            } else {
                //System.out.println(this.getName() + "-------socket  异常关闭-------" + Com.getNowTimeWithAt());
                S_thread_run_flag = false;
            }
        } catch (IOException | InterruptedException e) {
            this.mLock_State.addErrorCount();
            this.mLock_State[NowLockIdx].addErrorCount();
            addErrorCount();
        } finally {
            if(this.mLock_State.getErr_count() > 4) {
                logger.info("设备:DevIp:" + client_ip + " DevId:" + client_id + "通信超时即将断开连接...");
            if(getErrorCount() > 6) {
                logger.info("设备:DevIp:" + client_ip + " DevId:" + client_id/10000 + "XXXX 通信超时即将断开连接...");
                S_thread_run_flag = false;
            }
        }
@@ -481,7 +506,7 @@
        if(MyModBusRtu.CMD_TYPE_READ_INPUT == mRtu_Rx.Cmd) {
            if(ElectLock_ComBase.LOCK_REAL_ADDR == rtu.reg_addr) {
                //读取实时数据
                if(mLock_State.putByteBuffer(buff)) {
                if(mLock_State[NowLockIdx].putByteBuffer(buff)) {
                    isSuccess = true;                    
                }
            }
@@ -490,19 +515,19 @@
                //清空所有授权卡
                if(ElectLock_ComBase.Control_Value == mRtu_Rx.result) {
                    isSuccess = true;
                    logger.info("LockId:" + client_id + " LockIp:"+client_ip + "清空所有授权卡成功");
                    logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + "清空所有授权卡成功");
                }
            }else if(ElectLock_ComBase.LOCK_REMOTE_OPEN_ADDR == mRtu_Rx.reg_addr) {
                //远程开锁
                if(ElectLock_ComBase.Control_Value == mRtu_Rx.result) {
                    isSuccess = true;
                    logger.info("LockId:" + client_id + " LockIp:"+client_ip + " 远程开锁成功");
                    logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 远程开锁成功");
                }
            }else if(ElectLock_ComBase.LOCK_RESTART_ADDR == mRtu_Rx.reg_addr) {
                //远程重启
                if(ElectLock_ComBase.Control_Value == mRtu_Rx.result) {
                    isSuccess = true;
                    logger.info("LockId:" + client_id + " LockIp:"+client_ip + " 远程重启锁具成功");
                    logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 远程重启锁具成功");
                }
            }
        }else if(MyModBusRtu.CMD_TYPE_WRITE_STD == mRtu_Rx.Cmd) {
@@ -510,14 +535,35 @@
                //设置锁具地址
                if(mLock_param.getLock_addr_set() == mRtu_Rx.result) {
                    isSuccess = true;
                    logger.info("LockId:" + client_id + " LockIp:"+client_ip + " 设置锁具地址:" + mLock_param.getLock_addr_set() + "成功");
                    logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 设置锁具地址:" + mLock_param.getLock_addr_set() + "成功");
                }
            }else if(ElectLock_ComBase.LOCK_SET_Model_ADDR == mRtu_Rx.reg_addr) {
                //设置锁具工作模式
                if(plat_model == mRtu_Rx.result) {
                    isSuccess = true;
                    logger.info("LockId:" + client_id + " LockIp:"+client_ip + " 设置锁具模式:" + plat_model + "成功");
                    logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 设置锁具模式:" + plat_model + "成功");
                }
            }else if(ElectLock_ComBase.LOCK_SET_Model_ADDR == mRtu_Rx.reg_addr) {
                //设置锁具工作模式
                if(plat_model == mRtu_Rx.result) {
                    isSuccess = true;
                    logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 设置锁具模式:" + plat_model + "成功");
                }
            }else if(ElectLock_ComBase.LOCK_SET_Bluetooth_ADDR == mRtu_Rx.reg_addr) {
                //设置锁具蓝牙状态
                if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_OpenBluetooth) {
                    if(mRtu_Rx.result == ElectLock_ComBase.Lock_Bluetooth_Open) {
                        isSuccess = true;
                        logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 设置开启锁具蓝牙成功");
                    }
                }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_CloseBluetooth) {
                    if(mRtu_Rx.result == ElectLock_ComBase.Lock_Bluetooth_Close) {
                        isSuccess = true;
                        logger.info("LockId:" + mLock_param.getLock_id() + " LockIp:"+client_ip + " 设置锁具关闭蓝牙成功");
                    }
                }
            }
            
            
@@ -552,4 +598,26 @@
        buffer.flip();
        return buffer.array();
    }
    /**
     *     累加错误计数
     */
    public void addErrorCount() {
        ErrorCount ++;
    }
    public void clearErrorCount() {
        ErrorCount = 0;
    }
    public int getErrorCount() {
        return ErrorCount;
    }
    public static void main(String[] args) {
        for(int k = 1;k<1000;k++) {
            System.out.println(k%(16/k));
        }
    }
}
ElectLock_Monitor/src/com/dev/lock/comm/Lock_Task_SQL.java
@@ -66,7 +66,7 @@
                        ",comm_count = " +  state.getComm_count() +
                        ",err_tol_count = " +  state.getErr_tol_count() +
                        ",err_count = " + state.getErr_count() +
                        " WHERE lock_id = " + lock_id;
                        " WHERE lock_id = " + state.getLock_id();
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
@@ -86,8 +86,10 @@
    public static void updateLock_Inf_Table(MysqlConnPool pool,ElectLock_Inf inf,ElectLock_State state) {
        String sql_str = "UPDATE " + Sql_Mysql.Lock_Inf_Table + 
                        " Set lock_state = " +  state.getLock_state() +
                        " ,lock_online =  " + state.getLock_online() +
                        " ,lock_online =  " + ((state.getErr_count() > 4)?0:1) +
//                        " ,lock_online =  " + state.getLock_online() +
                        " ,lock_mac =  '" + state.getLockMacAddr() + "'" +
                        " ,bl_state =  '" + state.getBluetooth_state() + "'" +
                        " ,lock_open_count =  " + state.getLock_open_count() + 
                        " ,model =  " + state.getWorkmodel() + 
                        " ,last_update_time = '" + Com.getDateTimeFormat(state.getLast_update_time(), Com.DTF_YMDhms) + "'" +
@@ -110,14 +112,25 @@
     * @param param
     */
    public static void queryElectLockControlCmd(MysqlConnPool pool,int lock_id,ElectLock_State param) {
        String sql_str =  " SELECT op_cmd,id_card_set,lock_addr_set,ctl_uname "
        String sql_str =  " SELECT op_cmd,id_card_set,lock_addr_set,ctl_uname,lock_id "
                        + " FROM " + Sql_Mysql.Lock_Rt_Table + ""
                        + " WHERE lock_id = " + lock_id;
                        + " WHERE FLOOR(lock_id/10000) = " + (lock_id/10000)
                        + " AND ("
                        + " op_cmd = " + ElectLock_ComBase.CMD_ClearIdCard
                        + " OR op_cmd = " + ElectLock_ComBase.CMD_REMOTE_OPEN_Lock
                        + " OR op_cmd = " + ElectLock_ComBase.CMD_REMOTE_ReStart
                        + " OR op_cmd = " + ElectLock_ComBase.CMD_AddIdCard
                        + " OR op_cmd = " + ElectLock_ComBase.CMD_RemoveIdCard
                        + " OR op_cmd = " + ElectLock_ComBase.CMD_OpenBluetooth
                        + " OR op_cmd = " + ElectLock_ComBase.CMD_CloseBluetooth
                        + " )";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(res.next()) {
                //当前需要控制的锁具ID
                param.setLock_id(res.getInt("lock_id"));
                param.setOp_cmd(res.getInt("op_cmd"));
                param.setId_card_set(res.getInt("id_card_set"));
                param.setLock_addr_set(res.getInt("lock_addr_set"));
@@ -148,7 +161,7 @@
    public static void updateElectLockControlCmd(MysqlConnPool pool, int lock_id, ElectLock_State state) {
        String sql_str = "UPDATE " + Sql_Mysql.Lock_Rt_Table + 
                " Set op_cmd =  " + state.getOp_cmd() +
                " WHERE lock_id = " + lock_id;
                " WHERE lock_id = " + state.getLock_id();
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
@@ -339,7 +352,7 @@
                state.setErr_tol_count(res.getInt("err_tol_count"));        //'总错误计数',
//                state.setErr_count(res.getInt("err_count"));                //'连续错误计数',
                state.setOp_cmd(res.getInt("op_cmd"));                        //'控制命令',
                state.setId_card_set(res.getInt("id_card_set"));            //'授权ID卡号',
                state.setId_card_set(res.getLong("id_card_set"));            //'授权ID卡号',
                state.setLock_addr_set(res.getInt("lock_addr_set"));;        //'设置设备地址[慎用]',
                
            }
@@ -446,4 +459,21 @@
            sql.close_con();
        }
    }
    /**
     *     设置当前锁具离线
     * @param pool
     * @param client_id
     */
    public static void updateLock_OffLineTable(MysqlConnPool pool, int client_id) {
        String sql_str = " UPDATE " + Sql_Mysql.Lock_Inf_Table + " SET lock_online = 0 WHERE FLOOR(lock_id/10000) = " + (client_id/10000);
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            sql.logger.error(e.toString(),e);
        } finally {
            sql.close_con();
        }
    }
}
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Array.java
@@ -25,7 +25,7 @@
    
    public boolean initEleLockData(MysqlConnPool pool) {
        String sql_str = " SELECT * FROM " + Sql_Mysql.Lock_Inf_Table;
        String sql_str = " SELECT * FROM " + Sql_Mysql.Lock_Inf_Table + " ORDER BY lock_id ";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        ResultSet res = null;
        boolean isChange = false;
@@ -35,7 +35,7 @@
            res = sql.sqlMysqlQuery(sql_str);
            while(res.next()) {
                int lock_id = res.getInt("lock_id");
                int area_id = res.getInt("area_id");                    //区域ID
                int station_id = res.getInt("station_id");                //机房ID
                String lock_name = res.getString("lock_name");            //锁名称
                String lock_type = res.getString("lock_type");            //锁类型(无源,蓝牙)
                int lock_state = res.getInt("lock_state");                //锁状态
@@ -63,7 +63,7 @@
                } else {
                    ElectLock_Inf tmp_lock = new ElectLock_Inf(pool);
                    tmp_lock.setLock_id(lock_id);
                    tmp_lock.setArea_id(area_id);                //'区域id',
                    tmp_lock.setStation_id(station_id);            //'区域id',
                    tmp_lock.setLock_name(lock_name);            //'锁名称',
                    tmp_lock.setLock_type(lock_type);            //'锁类型(无源,蓝牙)',
                    tmp_lock.setLock_state(lock_state);            //'锁状态',
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_ComBase.java
@@ -2,9 +2,13 @@
public class ElectLock_ComBase {
    
    public static final int Lock_MaxLineCount                = 254;        //一个串口服务器最大连接锁具个数
    
    public static final int Lock_Model_OffLine                = 0;        //离线模式
    public static final int Lock_Model_OnLine                = 1;        //在线模式
    public static final int Lock_Bluetooth_Close            = 0;        //蓝牙关闭
    public static final int Lock_Bluetooth_Open                = 1;        //蓝牙开启
    
    
    public static final int CMD_Fail                        = -1;        //失败
@@ -27,25 +31,32 @@
    public static final int CMD_RemoveIdCard                = 0x20;        //移除授权卡ID
    public static final int CMD_RemoveIdCard_Ack            = 0x21;        //移除授权卡ID成功
    
    public static final int CMD_OpenBluetooth                = 0x24;        //开启蓝牙
    public static final int CMD_OpenBluetooth_Ack            = 0x25;        //开启蓝牙成功
    
    public static final int Auth_Fail                        = 0;    //授权失败
    public static final int Auth_Success                    = 1;    //授权成功
    public static final int CMD_CloseBluetooth                = 0x26;        //关闭蓝牙
    public static final int CMD_CloseBluetooth_Ack            = 0x27;        //关闭蓝牙成功
    
    
    public static final int LOCK_REAL_ADDR                    = 0;    //实时数据地址
    public static final int LOCK_CLEAR_AUTH_ADDR            = 0;    //清空所有授权地址
    public static final int LOCK_REMOTE_OPEN_ADDR            = 1;    //远程开锁地址
    public static final int LOCK_RESTART_ADDR                = 2;    //远程重启地址
    public static final int LOCK_SET_ADDR_ADDR                = 0;    //设置设备地址
    public static final int LOCK_Add_ID_AUTH_ADDR            = 1;    //授权ID卡地址
    public static final int LOCK_Clear_ID_AUTH_ADDR            = 3;    //取消授权ID卡地址
    public static final int LOCK_SET_Model_ADDR                = 5;    //设置锁具工作模式
    public static final int Auth_Fail                        = 0;        //授权失败
    public static final int Auth_Success                    = 1;        //授权成功
    
    
    public static final int RegCount_Sigle                    = 1;    //单点控制时点位
    public static final int RegCount_Double                    = 2;    //ID卡控制时点位
    public static final int LOCK_REAL_ADDR                    = 0;        //实时数据地址
    public static final int LOCK_CLEAR_AUTH_ADDR            = 0;        //清空所有授权地址
    public static final int LOCK_REMOTE_OPEN_ADDR            = 1;        //远程开锁地址
    public static final int LOCK_RESTART_ADDR                = 2;        //远程重启地址
    public static final int LOCK_SET_ADDR_ADDR                = 0;        //设置设备地址
    public static final int LOCK_Add_ID_AUTH_ADDR            = 1;        //授权ID卡地址
    public static final int LOCK_Clear_ID_AUTH_ADDR            = 3;        //取消授权ID卡地址
    public static final int LOCK_SET_Model_ADDR                = 5;        //设置锁具工作模式
    public static final int LOCK_SET_Bluetooth_ADDR            = 6;        //设置蓝牙开关地址
    public static final int RegCount_Sigle                    = 1;        //单点控制时点位
    public static final int RegCount_Double                    = 2;        //ID卡控制时点位
    
    public static final int Control_Value                    = 0xFF00;    //控制时写入值
    
@@ -59,6 +70,8 @@
    public static final int CtlType_RemoveIdCard            = 6;        //移除授权卡ID
    public static final int CtlType_Bluetooth                = 7;        //蓝牙开锁
    public static final int CtlType_IDCardOpen                = 8;        //ID开锁
    public static final int CtlType_BluetoothOpen            = 9;        //蓝牙开启
    public static final int CtlType_BluetoothClose            = 10;        //蓝牙关闭
    /************************************************************************************/
    
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Ctl_Log.java
@@ -8,7 +8,7 @@
    public int ctl_type;            //'操作类型[1-清空所有授权ID卡 2-远程开锁  3-远程重启 4-设置锁具地址 5-添加授权ID 6-移除授权ID]',
    public boolean ctl_result;        //'操作结果[0-失败  1-成功]',
    public Date ctl_time;            //'操作时间',
    public int ctl_id_card;            //'添加或者移除的授权ID卡号',
    public long ctl_id_card;        //'添加或者移除的授权ID卡号',
    public String ctl_uname = "";    //操作用户名
    
    public ElectLock_Ctl_Log() {
@@ -30,7 +30,7 @@
//        this.ctl_time = new Date();
//    }
    public ElectLock_Ctl_Log(int lock_id,int ctl_type,boolean ctl_result,int ctl_id_card,String ctl_uname) {
    public ElectLock_Ctl_Log(int lock_id,int ctl_type,boolean ctl_result,long ctl_id_card,String ctl_uname) {
        this.lock_id = lock_id;
        this.ctl_type = ctl_type;
        this.ctl_result = ctl_result;
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Inf.java
@@ -9,7 +9,7 @@
    
    private boolean StoreDataBusy = false;
    
    private int area_id;            //'区域id',
    private int station_id;            //'区域id',
    private String lock_name;        //'锁名称',
    private String lock_type;        //'锁类型(无源,蓝牙)',
    private int lock_state;            //'锁状态',
@@ -47,9 +47,16 @@
        return store_state;
    }
    
    public int getArea_id() {
        return area_id;
    public boolean isStoreDataBusy() {
        return StoreDataBusy;
    }
    public void setStoreDataBusy(boolean storeDataBusy) {
        StoreDataBusy = storeDataBusy;
    }
    public String getLock_name() {
        return lock_name;
    }
@@ -68,12 +75,17 @@
    public String getLock_ip() {
        return lock_ip;
    }
    public void setArea_id(int area_id) {
        this.area_id = area_id;
    }
    public void setLock_name(String lock_name) {
        this.lock_name = lock_name;
    }
    public int getStation_id() {
        return station_id;
    }
    public void setStation_id(int station_id) {
        this.station_id = station_id;
    }
    public void setLock_type(String lock_type) {
        this.lock_type = lock_type;
    }
@@ -101,6 +113,7 @@
    public void setLock_id(int lock_id) {
        this.lock_id = lock_id;
        lockReport.lock_id = lock_id;
        lockState.setLock_id(lock_id);
    }
    public void setLockState(ElectLock_State lockState) {
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_State.java
@@ -15,8 +15,11 @@
    
//    public static int Reg_Count_Real = 8;        //寄存器数量
//    public static int Reg_Count_Real = 11;        //寄存器数量
    public static int Reg_Count_Real = 12;        //寄存器数量
//    public static int Reg_Count_Real = 12;        //寄存器数量
    public static int Reg_Count_Real = 14;        //寄存器数量
    
    private int lock_id;                //锁具ID[当前需要操作的锁具ID号]
    private Date record_time = new Date(0);            //'更新时间',
    private String gprs_sn;                //'gprs模块SN码',
    private String client_ip;            //'设备IP地址',
@@ -31,7 +34,7 @@
    private int err_tol_count;            //'总错误计数',
    private int err_count;                //'连续错误计数',
    private int op_cmd;                    //'控制命令',
    private int id_card_set;            //'授权ID卡号',
    private long id_card_set;            //'授权ID卡号',
    private int lock_addr_set;            //'设置设备地址[慎用]',
    private int workmodel;                //工作模式【0-离线模式   1-在线模式】
    
@@ -45,9 +48,12 @@
    private String ctl_uname = "";        //操作用户名
    
    private int bluetooth_st_state;        //蓝牙开关:0-关闭蓝牙  1-开启蓝牙
    private int bluetooth_state;        //蓝牙状态:0:蓝牙已关闭,1:蓝牙已开启
    
    private int lock_open_count;    //'锁具总开启次数'
    private Date last_update_time;    //上一次锁具开启或关闭时间
    private Date last_update_time = new Date(0);    //上一次锁具开启或关闭时间
    
    public ElectLock_State() {
        
@@ -78,9 +84,15 @@
        for(int k =0;k<mac_addr.length;k++) {
            mac_addr[k] = ComBase.changeByteToInt(buffer.get());
        }
        workmodel  = ComBase.changeShortToInt(buffer.getShort());
        workmodel  = ComBase.changeShortToInt(buffer.getShort());
        
        System.out.println("工作模式:" + workmodel);
        bluetooth_st_state  = ComBase.changeShortToInt(buffer.getShort());
        bluetooth_state  = ComBase.changeShortToInt(buffer.getShort());
//        System.out.println("工作模式:" + workmodel);
//        System.out.println("BlutoothMAC:" + getLockMacAddr());
//        System.out.println("bluetooth_st_state:" + getBluetooth_st_state());
//        System.out.println("bluetooth_state:" + getBluetooth_state());
//        System.out.println("BlutoothMAC:" + getLockMacAddr());
        
        //System.out.println("this.lock_state:"+tmp_lock_state+"********lock_state:"+lock_state);
@@ -113,6 +125,26 @@
        }
    }
    
    public int getBluetooth_st_state() {
        return bluetooth_st_state;
    }
    public int getBluetooth_state() {
        return bluetooth_state;
    }
    public void setBluetooth_st_state(int bluetooth_st_state) {
        this.bluetooth_st_state = bluetooth_st_state;
    }
    public void setBluetooth_state(int bluetooth_state) {
        this.bluetooth_state = bluetooth_state;
    }
    public int getLockDevId() {
        return 10000000 + this.lock_addr;
    }
@@ -217,7 +249,7 @@
        return op_cmd;
    }
    public int getId_card_set() {
    public long getId_card_set() {
        return id_card_set;
    }
@@ -281,7 +313,7 @@
        this.op_cmd = op_cmd;
    }
    public void setId_card_set(int id_card_set) {
    public void setId_card_set(long id_card_set) {
        this.id_card_set = id_card_set;
    }
@@ -319,6 +351,19 @@
    }
    public int getLock_id() {
        return lock_id;
    }
    public int getLockAddr() {
        return lock_id%1000;
    }
    public void setLock_id(int lock_id) {
        this.lock_id = lock_id;
    }
    public void addCommCount() {
        this.comm_count ++ ;
        if(this.comm_count > 999990000) {
ElectLock_Monitor/src/com/dev/modbus/MyModBusRtu.java
@@ -57,6 +57,13 @@
        this.reg_count = reg_count;
    }
    
    public void mkBusRtu(int addr,int Cmd,int reg_addr,int reg_count) {
        this.addr = addr;
        this.Cmd = Cmd;
        this.reg_addr = reg_addr;
        this.reg_count = reg_count;
    }
    public void clear() {
        this.addr = 0;              //设备地址
        this.Cmd = 0;                //功能码
ElectLock_Monitor/src/com/sql/Sql_Mysql.java
@@ -10,36 +10,41 @@
import org.apache.logging.log4j.Logger;
public class Sql_Mysql {
    public static final String DB_AREA                     = "`db_area`";
    public static final String DB_LOCK_RAM                 = "`db_lock_ram`";
    public static final String DB_USER                     = "`db_user`";
    public static final String DB_LOCK_HIS                 = "`db_lock_his`";      //锁具历史状态库
    public static final String DB_LOCK_ALARM             = "`db_lock_alarm`";    //锁具告警库
    public static final String PLUS_INF                 = "`plus_inf`";
    public static final String PLUS_LOCK_RAM             = "`plus_lock_ram`";
    public static final String PLUS_USER                 = "`plus_user`";
    public static final String PLUS_LOCK_HIS             = "`plus_lock_his`";                      //锁具历史状态库
    public static final String PLUS_LOCK_ALARM             = "`plus_lock_alarm`";                    //锁具告警库
//    public static final String DB_AREA                     = "`db_area`";
//    public static final String DB_LOCK_RAM                 = "`db_lock_ram`";
//    public static final String DB_USER                     = "`db_user`";
//    public static final String DB_LOCK_HIS                 = "`db_lock_his`";                      //锁具历史状态库
//    public static final String DB_LOCK_ALARM             = "`db_lock_alarm`";                    //锁具告警库
    /*********************************************************/
    public static final String Lock_Rt_Table             = DB_LOCK_RAM + ".tb_lock_rt";
    public static final String Lock_Ctl_Log_Table         = DB_LOCK_RAM + ".tb_lock_ctl_log";
    public static final String Lock_Report_Table         = DB_LOCK_RAM + ".tb_lock_report";        //锁具开锁次数统计表
    public static final String Plate_Info_Table         = DB_LOCK_RAM + ".tb_plate_info";        //平台锁具模式设定表
    public static final String Lock_Rt_Table             = PLUS_LOCK_RAM + ".tb_lock_rt";
    public static final String Lock_Ctl_Log_Table         = PLUS_LOCK_RAM + ".tb_lock_ctl_log";
    public static final String Lock_Report_Table         = PLUS_LOCK_RAM + ".tb_lock_report";    //锁具开锁次数统计表
    public static final String Plate_Info_Table         = PLUS_LOCK_RAM + ".tb_plate_info";        //平台锁具模式设定表
    /*********************************************************/
    /***************  ************ db_area  ******************************/
    public static final String Lock_Inf_Table             = DB_AREA + ".tb_lock_inf";
    public static final String Key_Inf_Table             = DB_AREA + ".tb_key_inf";
    public static final String Auth_Idcard_Table         = DB_AREA + ".tb_auth_idcard";            //批量添加授权和取消授权表
    public static final String Auth_Idcard_His_Table     = DB_AREA + ".tb_auth_idcard_his";        //批量添加授权和取消授权历史表
    public static final String Lock_Inf_Table             = PLUS_INF + ".tb_lock_inf";
    public static final String Key_Inf_Table             = PLUS_INF + ".tb_key_inf";
    public static final String Auth_Idcard_Table         = PLUS_INF + ".tb_auth_idcard";            //批量添加授权和取消授权表
    public static final String Auth_Idcard_His_Table     = PLUS_INF + ".tb_auth_idcard_his";        //批量添加授权和取消授权历史表
    /*********************************************************/
    /***************************** db_lock_his ****************************/
    public static final String Lock_His_Table             = DB_LOCK_HIS + ".tb_lock_his_";        //锁具开锁次数统计表
    public static final String Lock_His_Table             = PLUS_LOCK_HIS + ".tb_lock_his_";        //锁具开锁次数统计表
    
    /*********************************************************/
    /***************************** db_user ****************************/
    public static final String Process_Survey_Table     = DB_USER + ".tb_process_survey";        //线程管理表
    public static final String Process_Survey_Table     = PLUS_USER + ".tb_process_survey";        //线程管理表
    
    /***************************** db_lock_alarm ****************************/
    public static final String Lock_Alarm_Table     = DB_LOCK_ALARM + ".tb_lock_alarm";        //实时告警
    public static final String Lock_Alm_Temp_Table     = DB_LOCK_ALARM + ".tb_lock_alm_temp";    //告警临时表
    public static final String Lock_Alarm_His_Table = DB_LOCK_ALARM + ".tb_lock_alarm_";    //历史告警表
    public static final String Lock_Alarm_Table     = PLUS_LOCK_ALARM + ".tb_lock_alarm";        //实时告警
    public static final String Lock_Alm_Temp_Table     = PLUS_LOCK_ALARM + ".tb_lock_alm_temp";    //告警临时表
    public static final String Lock_Alarm_His_Table = PLUS_LOCK_ALARM + ".tb_lock_alarm_";        //历史告警表
    
    /*********************************************************/
    
ElectLock_Monitor/src/com/version_inf/version_inf.txt
@@ -7,6 +7,10 @@
        
    设备ID:10000001
    
V1.113 edit by lijun 2025-03-15
    1.新增远程开启以及关闭蓝牙功能
    2.修复锁具开启之后记录bug
V1.112 edit by lijun 2025-03-15
    1.新增设置锁具模式后最多重启3次锁具,锁具蓝牙读取的锁具模式需重启后生效    
    2.屏蔽平台远程设置锁具ID逻辑
ElectLock_Monitor/src/main/main_ElectLock_Monitor.java
@@ -60,11 +60,14 @@
//        } finally {
//            sql_ck.close_con();
//        }
        Lock_ServerSocket_Thread server_thread = new Lock_ServerSocket_Thread(GB_MysqlConnPool,GB_ElLock_Array, m_AppConfig);
        server_thread.start();
        /******************************* 锁具实时通信线程 ***********************************************/
        {
            Lock_ServerSocket_Thread server_thread = new Lock_ServerSocket_Thread(GB_MysqlConnPool,GB_ElLock_Array, m_AppConfig);
            server_thread.start();
        }
        
        /******************************* 锁具历史状态实时通信线程 ***********************************************/
        {
            ElectLock_HistoryData_Record_Thread record_thread = new ElectLock_HistoryData_Record_Thread(GB_ElLock_Array, GB_MysqlConnPool);
            record_thread.start();
@@ -78,7 +81,7 @@
                Thread.sleep(3000L);
                
                Date now = new Date();
                long timelong = (now.getTime()-last_time.getTime())/1000;
                long timelong = (now.getTime() - last_time.getTime())/1000;
                if(timelong > 24*3600) {
                    //每天删除一次临时文件e4j
                    TmpFileUtil.delTmpFile();