DELL
2025-01-10 d8ebb73be7e75f4c995827e30edc76dcc823cc36
3.新增控制时新增当前操作用户名,并且监控ID开锁状态
1个文件已添加
13个文件已修改
173 ■■■■ 已修改文件
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_ComBase.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_Ctl_Log.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/dev/lock/data/ElectLock_State.class 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/bin/com/version_inf/version_inf.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/electlock_dev_x64_logs/info-20250106-1.log.gz 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/comm/Lock_SocketClient_Thread.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/comm/Lock_Task_SQL.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_AuthIdcard.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_ComBase.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Ctl_Log.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_State.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectLock_Monitor/src/com/version_inf/version_inf.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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_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_State.class
Binary files differ
ElectLock_Monitor/bin/com/version_inf/version_inf.txt
@@ -11,6 +11,7 @@
V1.108 edit by lijun 2025-01-06
    1.新增批量授权逻辑,批量授权或取消时同时记录操作日志
    2.新增锁具的在离线状态,方便平台统计
    3.新增控制时新增当前操作用户名,并且监控ID开锁状态
    
ElectLock_Monitor/electlock_dev_x64_logs/info-20250106-1.log.gz
Binary files differ
ElectLock_Monitor/src/com/dev/lock/comm/Lock_SocketClient_Thread.java
@@ -85,33 +85,33 @@
                        mRtu_Tx.mkBusRtu(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);
                            tmp_log = new ElectLock_Ctl_Log(client_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);
                            tmp_log = new ElectLock_Ctl_Log(client_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);
                        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);
                            tmp_log = new ElectLock_Ctl_Log(client_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);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_REMOTE_OPEN_Lock, 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_ReStart) {
                        mRtu_Tx.mkBusRtu(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);
                            tmp_log = new ElectLock_Ctl_Log(client_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);
                            tmp_log = new ElectLock_Ctl_Log(client_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) {
@@ -119,11 +119,11 @@
                        if(SocketComm(mRtu_Tx, ComBase.mkUInt16Buffer(mLock_param.getLock_addr_set()))) {
                            mLock_param.setOp_cmd(ElectLock_ComBase.CMD_SetLockAddr_Ack);
                            
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_SetLockAddr, true);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_SetLockAddr, true,mLock_param.getLock_addr_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_SetLockAddr, false);
                            tmp_log = new ElectLock_Ctl_Log(client_id, ElectLock_ComBase.CtlType_SetLockAddr, false,mLock_param.getLock_addr_set(),mLock_param.getCtl_uname());
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                        }
                    }else if(mLock_param.getOp_cmd() == ElectLock_ComBase.CMD_AddIdCard) {
@@ -132,11 +132,11 @@
                        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());
                            tmp_log = new ElectLock_Ctl_Log(client_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());
                            tmp_log = new ElectLock_Ctl_Log(client_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) {
@@ -144,11 +144,11 @@
                        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(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());
                            tmp_log = new ElectLock_Ctl_Log(client_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());
                            tmp_log = new ElectLock_Ctl_Log(client_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);
                        }
                    }
@@ -165,6 +165,14 @@
                        Lock_Task_SQL.updateLock_Rt_Table(pool,client_id,mLock_State);
                        Lock_Task_SQL.updateLock_Inf_Table(pool,client_id,mLock_State);
                        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);
                            Lock_Task_SQL.insertLock_Ctl_Log_Table(pool, tmp_log);
                            mLock_State.setIDOpen(false);
                            tmp_log = null;
                        }
                    }
                }
                
@@ -181,10 +189,10 @@
                                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_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_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) {
@@ -192,10 +200,10 @@
                                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_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_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);
                                }
                            }
ElectLock_Monitor/src/com/dev/lock/comm/Lock_Task_SQL.java
@@ -25,8 +25,12 @@
        try {
            res = sql.sqlMysqlQuery(sql_str_sel);
            if(res.next()) {
                state.setLock_state(res.getInt("lock_state"));
                state.setComm_count(res.getInt("comm_count"));                //'通信计数',
                state.setErr_tol_count(res.getInt("err_tol_count"));        //'总错误计数',
                System.out.println("lock_state:" +state.getLock_state());
            }else {
                sql.sqlMysqlExecute(sql_str_ins);
            }
@@ -101,7 +105,7 @@
     * @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 "
        String sql_str =  " SELECT op_cmd,id_card_set,lock_addr_set,ctl_uname "
                        + " FROM " + Sql_Mysql.Lock_Rt_Table + ""
                        + " WHERE lock_id = " + lock_id;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
@@ -112,6 +116,7 @@
                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"));
                param.setCtl_uname(res.getString("ctl_uname"));
                
            }
        } catch (SQLException e) {
@@ -158,12 +163,13 @@
     */
    public static void insertLock_Ctl_Log_Table(MysqlConnPool pool,ElectLock_Ctl_Log log) {
        String sql_str_ins = "INSERT INTO "  + Sql_Mysql.Lock_Ctl_Log_Table +  ""
                            + "    (lock_id,ctl_type,ctl_result,ctl_time,ctl_id_card) VALUES("
                            + "    (lock_id,ctl_type,ctl_result,ctl_time,ctl_id_card,ctl_uname) VALUES("
                            + "" + log.lock_id
                            + "," + log.ctl_type + ""
                            + "," + log.ctl_result + ""
                            + ",'" + Com.getDateTimeFormat(log.ctl_time, Com.DTF_YMDhms) + "'"
                            + "," + log.ctl_id_card + ""
                            + ",'" + log.ctl_uname + "'"
                            + ");";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
@@ -178,7 +184,7 @@
    public static List<ElectLock_AuthIdcard> queryAuth_Idcard_Table(MysqlConnPool pool, int client_id) {
        List<ElectLock_AuthIdcard> batch_auth = new ArrayList<>();
        String sql_str = "SELECT DISTINCT(tb_key_inf.key_id),lock_id,state,tb_auth_idcard.create_time,key_number " +
        String sql_str = "SELECT DISTINCT(tb_key_inf.key_id),lock_id,state,tb_auth_idcard.create_time,key_number,ctl_uname " +
                        " FROM " + Sql_Mysql.Key_Inf_Table + "," + Sql_Mysql.Auth_Idcard_Table +
                        " WHERE tb_key_inf.key_id = tb_auth_idcard.key_id AND lock_id = " + client_id + " AND key_type = 1 ";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
@@ -192,6 +198,8 @@
                auth.state = res.getInt("state");                    //'1:移除id卡,2添加id卡,3已处理',
                auth.create_time = res.getTimestamp("create_time");    //'创建时间'
                auth.key_number = res.getString("key_number");        //ID卡号
                auth.ctl_uname = res.getString("ctl_uname");        //操作人姓名
                
                batch_auth.add(auth);
            }
@@ -238,4 +246,40 @@
            sql.close_con();
        }
    }
    /**
     *     查询ID钥匙的归属人姓名
     * @param pool
     * @param client_id
     * @param last_unlock_id
     * @return
     */
    public static String queryKeyInfByKeyNumberTable(MysqlConnPool pool, int keyNumber) {
        String uname = "";
        String sql_str =  " SELECT * FROM " + Sql_Mysql.Key_Inf_Table
                        + " WHERE key_number = " + keyNumber;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        ResultSet res = null;
        try {
            System.out.println("====="+sql_str);
            res = sql.sqlMysqlQuery(sql_str);
            if(res.next()) {
                uname = res.getString("uname");
                System.out.println("uname:" + uname);
            }
        } catch (SQLException e) {
            sql.logger.error(e.toString(),e);
        } finally {
            if(null != res) {
                try {
                    res.close();
                } catch (SQLException e) {
                    sql.logger.error(e.toString(),e);
                }
            }
            sql.close_con();
        }
        return uname;
    }
}
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_AuthIdcard.java
@@ -19,5 +19,6 @@
    public Date create_time;    //'创建时间'
    public String key_number;    //ID卡号
    public int auth_result = ElectLock_ComBase.Auth_Success;        //授权结果[0-失败  1-成功]
    public String ctl_uname = "";  //操作人姓名
    
}
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_ComBase.java
@@ -51,6 +51,8 @@
    public static final int CtlType_SetLockAddr                = 4;        //设置锁具地址
    public static final int CtlType_AddIdCard                = 5;        //添加授权卡ID
    public static final int CtlType_RemoveIdCard            = 6;        //移除授权卡ID
    public static final int CtlType_Bluetooth                = 7;        //蓝牙开锁
    public static final int CtlType_IDCardOpen                = 8;        //ID开锁
    /************************************************************************************/
}
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_Ctl_Log.java
@@ -9,6 +9,7 @@
    public boolean ctl_result;        //'操作结果[0-失败  1-成功]',
    public Date ctl_time;            //'操作时间',
    public int ctl_id_card;            //'添加或者移除的授权ID卡号',
    public String ctl_uname = "";    //操作用户名
    
    public ElectLock_Ctl_Log() {
        this.ctl_time = new Date();
@@ -21,12 +22,21 @@
        this.ctl_time = new Date();
    }
    
    public ElectLock_Ctl_Log(int lock_id,int ctl_type,boolean ctl_result,int ctl_id_card) {
//    public ElectLock_Ctl_Log(int lock_id,int ctl_type,boolean ctl_result,int ctl_id_card) {
//        this.lock_id = lock_id;
//        this.ctl_type = ctl_type;
//        this.ctl_result = ctl_result;
//        this.ctl_id_card = ctl_id_card;
//        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) {
        this.lock_id = lock_id;
        this.ctl_type = ctl_type;
        this.ctl_result = ctl_result;
        this.ctl_id_card = ctl_id_card;
        this.ctl_time = new Date();
        this.ctl_uname = ctl_uname;
    }
    
}
ElectLock_Monitor/src/com/dev/lock/data/ElectLock_State.java
@@ -7,6 +7,12 @@
import com.base.ComBase;
public class ElectLock_State {
    public static final int Unlock_Type_485         = 0;    //485
    public static final int Unlock_Type_ID             = 1;    //ID卡
    public static final int Unlock_Type_Bluetooth     = 2;    //蓝牙
    public static final int Unlock_Type_DI             = 3;    //DI
    public static int Reg_Count_Real = 8;        //寄存器数量
    
    private Date record_time;            //'更新时间',
@@ -28,6 +34,12 @@
    
    private int lock_online;            //锁具在线状态[0-离线  1-在线]
    
    private boolean isIDOpen = false;    //是否是ID开锁
    private int last_unlock_type;        //'上一次开锁方式[0-485开锁 1-刷卡开锁 2-蓝牙开锁 3-DI开锁]',
    private int last_unlock_id;            //'上一次刷开开锁卡号[仅刷开开锁时有效]',
    private String ctl_uname = "";        //操作用户名
    public ElectLock_State() {
        
    }
@@ -44,14 +56,26 @@
        
        this.already_id_count = ComBase.changeShortToInt(buffer.getShort());        //'当前锁已授权卡数量',
        this.max_id_count = ComBase.changeShortToInt(buffer.getShort());            //'授权卡数量存储上限',
        int tmp_lock_state = lock_state;
        this.lock_state = ComBase.changeShortToInt(buffer.getShort());                //'电子锁状态[0-关 1-开]',
        int ver = ComBase.changeShortToInt(buffer.getShort());
        this.lock_version = " V"+ ver;                                                //'软件版本号',
        this.unlock_type = ComBase.changeShortToInt(buffer.getShort());                //'上一次开锁方式[0-485开锁 1-刷卡开锁 2-蓝牙开锁 3-DI开锁]',
        this.unlock_id = (buffer.getInt()&0xFFFFFFFF);                                //'上一次刷开开锁卡号[仅刷开开锁时有效]',
        this.lock_addr = ComBase.changeShortToInt(buffer.getShort());                //'设备地址',
        
        //System.out.println(this);
        //System.out.println("this.lock_state:"+tmp_lock_state+"********lock_state:"+lock_state);
        if(this.lock_state != tmp_lock_state && this.lock_state == 1) {
            //锁具状态变化;锁从关闭变为打开
            if(this.unlock_type == Unlock_Type_ID) {
                //ID最近ID卡开锁
                isIDOpen = true;
                last_unlock_type = unlock_type;        //'上一次开锁方式[0-485开锁 1-刷卡开锁 2-蓝牙开锁 3-DI开锁]',
                last_unlock_id = unlock_id;            //'上一次刷开开锁卡号[仅刷开开锁时有效]',
            }
        }
        
        buffer.compact();
        return true;
@@ -76,6 +100,16 @@
    public int getAlready_id_count() {
        return already_id_count;
    }
    public String getCtl_uname() {
        return ctl_uname;
    }
    public void setCtl_uname(String ctl_uname) {
        this.ctl_uname = ctl_uname;
    }
    public int getMax_id_count() {
        return max_id_count;
@@ -199,6 +233,36 @@
        this.lock_addr_set = lock_addr_set;
    }
    public boolean isIDOpen() {
        return isIDOpen;
    }
    public int getLast_unlock_type() {
        return last_unlock_type;
    }
    public int getLast_unlock_id() {
        return last_unlock_id;
    }
    public void setIDOpen(boolean isIDOpen) {
        this.isIDOpen = isIDOpen;
    }
    public void setLast_unlock_type(int last_unlock_type) {
        this.last_unlock_type = last_unlock_type;
    }
    public void setLast_unlock_id(int last_unlock_id) {
        this.last_unlock_id = last_unlock_id;
    }
    public void addCommCount() {
        this.comm_count ++ ;
        if(this.comm_count > 999990000) {
ElectLock_Monitor/src/com/version_inf/version_inf.txt
@@ -11,6 +11,7 @@
V1.108 edit by lijun 2025-01-06
    1.新增批量授权逻辑,批量授权或取消时同时记录操作日志
    2.新增锁具的在离线状态,方便平台统计
    3.新增控制时新增当前操作用户名,并且监控ID开锁状态