Преглед изворни кода

refactor(更新) :
- 软件打开时打开所有钥匙仓位,然后再核对锁定,后端没有录入的钥匙不锁定

周文健 пре 5 месеци
родитељ
комит
a23f9b2e42

+ 5 - 6
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -402,6 +402,9 @@ object BusinessManager {
                                                 } else {
                                                     LogUtil.e("Get key info fail : $rfid")
                                                     ToastUtils.tip(R.string.get_key_info_fail)
+                                                    ModBusController.controlKeyBuckle(
+                                                        true, keyBean.isLeft, dockBean.addr
+                                                    )
                                                 }
                                             }
                                         }
@@ -1448,7 +1451,7 @@ object BusinessManager {
                                                     bleDevice.mac
                                                 )
                                             }
-                                    }else{
+                                    } else {
                                         val dock = ModBusController.getDockByKeyMac(bleDevice.mac)
                                         val keyBean =
                                             dock?.getKeyList()?.find { it.mac == bleDevice.mac }
@@ -1810,12 +1813,8 @@ object BusinessManager {
                         ModBusController.updateKeyReadyStatus(
                             currentModeMsg.bleBean.bleDevice.mac, true, 4
                         )
-                        ModBusController.controlKeyBuckle(
-                            false, currentModeMsg.bleBean.bleDevice.mac
-                        )
                         sendLoadingEventMsg(null, false)
-                        //连上之后没有工作票要下发就断开 todo不断开,还钥匙的时候断开全部
-//                        BleManager.getInstance().disconnect(currentModeMsg.bleBean.bleDevice)
+                        //连上之后没有工作票要下发就断开 todo不断开,还钥匙的时候有可能断开全部,原本要锁定仓位,但是会出现快速取出钥匙锁定
                     }
                 }
             }

+ 17 - 0
app/src/main/java/com/grkj/iscs/modbus/ModBusCMDHelper.kt

@@ -1,5 +1,7 @@
 package com.grkj.iscs.modbus
 
+import com.grkj.iscs.model.DeviceConst
+
 /**
  * 通信指令帮助工具
  */
@@ -118,6 +120,21 @@ object ModBusCMDHelper {
         )
     }
 
+    /**
+     * 操作钥匙/便携式底座钥匙卡扣 打开,所有
+     */
+    fun generateAllKeyBuckleOpenCmd(type: Byte): MBFrame {
+        return MBFrame(
+            FRAME_TYPE_WRITE,
+            byteArrayOf(
+                0x00,
+                0x11,
+                (if (type == DeviceConst.DOCK_TYPE_PORTABLE) 0b00110000 else 0xff).toByte(),
+                0x00
+            )
+        )
+    }
+
     /**
      * 操作钥匙/便携式底座钥匙充电,一次只操作一个卡扣
      *

+ 23 - 15
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -2,16 +2,12 @@ package com.grkj.iscs.modbus
 
 import android.content.Context
 import com.clj.fastble.BleManager
-import com.clj.fastble.exception.BleException
 import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.BusinessManager.CAN_RETURN
 import com.grkj.iscs.R
-import com.grkj.iscs.ble.BleCmdManager
 import com.grkj.iscs.ble.BleConnectionManager
-import com.grkj.iscs.ble.CustomBleWriteCallback
 import com.grkj.iscs.extentions.removeLeadingZeros
 import com.grkj.iscs.extentions.toHexStrings
-import com.grkj.iscs.model.DeviceConst
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
@@ -21,7 +17,6 @@ import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_ELEC_LOCK_BOARD
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
-import com.grkj.iscs.model.ISCSDomainData
 import com.grkj.iscs.model.vo.hardware.CabinetSlotsRecord
 import com.grkj.iscs.util.CommonUtils
 import com.grkj.iscs.util.Executor
@@ -29,15 +24,8 @@ import com.grkj.iscs.util.NetApi
 import com.grkj.iscs.util.ToastUtils
 import com.grkj.iscs.util.log.LogUtil
 import com.sik.sikcore.thread.ThreadUtils
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlinx.coroutines.withContext
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.stream.Collectors
-import kotlin.coroutines.resume
-import kotlin.coroutines.suspendCoroutine
 
 
 /**
@@ -164,6 +152,8 @@ object ModBusController {
                 }
                 LogUtil.i("initDevicesStatus 设备(${bytes[0].toInt()})类型:$type")
             }
+            //先打开所有钥匙仓位,再进行初始化,防止一开始锁仓没有钥匙,但是锁定状态下会出现状态锁定
+            controlAllKeyBuckleOpen()
             // TODO 待完善
             Executor.repeatOnMain({
                 if (isInitReady) {
@@ -241,8 +231,9 @@ object ModBusController {
                                             BleConnectionManager.tryConnectWithOptionalCharge(
                                                 keyInfo.macAddress
                                             )
-                                        if (isConnect){
-                                            val bleBean = BusinessManager.getBleDeviceByMac(keyInfo.macAddress)
+                                        if (isConnect) {
+                                            val bleBean =
+                                                BusinessManager.getBleDeviceByMac(keyInfo.macAddress)
                                             bleBean?.let {
                                                 Executor.delayOnMain(500) {
                                                     BusinessManager.getCurrentStatus(
@@ -253,12 +244,13 @@ object ModBusController {
                                             }
                                         }
                                     }
+                                    controlKeyBuckle(false, key.isLeft, dockBean.addr)
                                 } else {
                                     ToastUtils.tip(R.string.get_key_info_fail)
+                                    controlKeyBuckle(true, key.isLeft, dockBean.addr)
                                 }
                             }
                         }
-                        controlKeyBuckle(false, key.isLeft, dockBean.addr)
                     } else {
                         controlKeyBuckle(true, key.isLeft, dockBean.addr)
                     }
@@ -711,6 +703,22 @@ object ModBusController {
         }
     }
 
+    /**
+     * 打开所有钥匙锁仓
+     */
+    fun controlAllKeyBuckleOpen() {
+        dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
+            .forEach { dock ->
+                dock.type?.let { dockType ->
+                    ModBusCMDHelper.generateAllKeyBuckleOpenCmd(dockType).let { cmd ->
+                        LogUtil.i("硬件:打开所有钥匙锁仓,${dock.addr},${cmd.data}")
+                        modBusManager?.sendTo(dock.addr, cmd) { res ->
+                        }
+                    }
+                }
+            }
+    }
+
     /**
      * 控制钥匙充电
      */