| | |
| | | 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地址
|
| | |
| | | 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;
|
| | |
|
| | |
| | | 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;
|
| | |
| | | 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
|
| | |
| | |
|
| | | 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);
|
| | |
| | | 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) {
|
| | |
| | | // }
|
| | | }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);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | }
|
| | |
|
| | |
|
| | | 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++) {
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | 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) {
|
| | |
| | | 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;
|
| | |
| | | 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 + "识别失败 !!!");
|
| | | }
|
| | |
| | | //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;
|
| | | }
|
| | | }
|
| | |
| | | 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;
|
| | | }
|
| | | }
|
| | |
| | | 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;
|
| | | }
|
| | | }
|
| | |
| | | //清空所有授权卡
|
| | | 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) {
|
| | |
| | | //设置锁具地址
|
| | | 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 + " 设置锁具关闭蓝牙成功");
|
| | | }
|
| | | }
|
| | | |
| | | |
| | | }
|
| | |
|
| | |
|
| | |
| | | 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));
|
| | | }
|
| | | }
|
| | | |
| | | }
|