Эх сурвалжийг харах

同步Simple Demo分支部分修改:1.修复逻辑错误 2.完善业务逻辑 3.修复底座数据分发机制 4.修复开锁卡扣地址错误

Frankensteinly 10 сар өмнө
parent
commit
cda8f1a1eb

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

@@ -84,11 +84,30 @@ object BusinessManager {
         ModBusController.stop()
     }
 
+    class DeviceListener(
+        val key: Any,
+        val callBack: (DockBean) -> Unit
+    )
+    private val listeners = ArrayList<DeviceListener>()
+
+    fun registerStatusListener(key: Any, listener: (DockBean) -> Unit) {
+        listeners.add(DeviceListener(key, listener))
+    }
+
+    fun unregisterListener(key: Any) {
+        val it = listeners.iterator()
+        while (it.hasNext()) {
+            if (it.next().key == key) {
+                it.remove()
+            }
+        }
+    }
+
     /**
-     * @param key 可null,null时用applicationContext做全局监听
+     * 总的监听,做预处理,其余的所有监听均使用本监听处理后的数据,只允许调用一次
      */
-    fun registerStatusListener(key: Any?, callBack: (DockBean) -> Unit) {
-        ModBusController.registerStatusListener(key ?: MyApplication.instance!!.applicationContext) { res ->
+    fun registerMainListener() {
+        ModBusController.registerStatusListener(MyApplication.instance!!.applicationContext) { res ->
             LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
             res.forEach { bytes ->
                 val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
@@ -194,7 +213,7 @@ object BusinessManager {
                         }
                     }
                 }
-                callBack.invoke(dockBean)
+                listeners.forEach { it.callBack(dockBean) }
             }
         }
     }
@@ -677,14 +696,14 @@ object BusinessManager {
                     println("switch mode 1 fail")}
             })
             // 打开钥匙卡扣
-            val keyBean = ModBusController.getKeyByRfid(bleBean.bleDevice.mac)
+            val keyBean = ModBusController.getKeyByMac(bleBean.bleDevice.mac)
             if (keyBean == null) {
                 loadingCallBack.invoke(false, "未找到钥匙信息", false)
                 ToastUtils.tip(R.string.key_not_exists)
             } else {
                 loadingCallBack.invoke(false, null, true)
                 val dock = ModBusController.getDockByKeyMac(bleBean.bleDevice.mac)
-                ModBusController.controlKeyBuckle(true, keyBean.isLeft, dock?.addr?.toInt())
+                ModBusController.controlKeyBuckle(true, keyBean.isLeft, dock?.addr!!.toInt() - 1)
             }
         }
     }

+ 1 - 1
app/src/main/java/com/grkj/iscs/activity/test/BleActivity.kt

@@ -42,7 +42,7 @@ class BleActivity : BaseActivity<ActivityBleBinding>() {
         get() = ActivityBleBinding.inflate(layoutInflater)
 
     override fun initView() {
-
+        BleManager.getInstance().disconnectAllDevice()
         mBinding?.srl?.setEnableRefresh(true)
         mBinding?.srl?.setEnableLoadMore(false)
         mBinding?.srl?.autoRefresh()

+ 1 - 1
app/src/main/java/com/grkj/iscs/activity/test/ModbusActivity.kt

@@ -137,7 +137,7 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
 
     override fun onDestroy() {
         super.onDestroy()
-        ModBusController.unregisterListener(this)
+        BusinessManager.unregisterListener(this)
         BusinessManager.disconnectDock()
     }
 }

+ 1 - 3
app/src/main/java/com/grkj/iscs/activity/test/WebSocketActivity.kt

@@ -13,10 +13,8 @@ class WebSocketActivity : BaseActivity<ActivityWebSocketBinding>() {
     override fun initView() {
         StompApi.refuseStomp(this) { stomp, destination ->
             stomp.topic(destination) {
-                LogUtil.i("haha3 : ${it.payload}")
+
             }
-            LogUtil.i("haha1 : $stomp")
-            LogUtil.i("haha2 : $destination")
         }
 
         mBinding?.page?.setTotalPage(10)

+ 3 - 3
app/src/main/java/com/grkj/iscs/modbus/DockBean.kt

@@ -70,7 +70,7 @@ class DockBean(
                         }
                     }
 
-                    return DockBean(addr, type, changeList)
+                    return DockBean(addr, it, changeList)
                 }
                 DOCK_TYPE_LOCK -> {
                     val tempList = mutableListOf<Boolean>()
@@ -99,7 +99,7 @@ class DockBean(
                     }
 
                     LogUtil.i("锁具刷新状态 : $changeList")
-                    return DockBean(addr, type, changeList)
+                    return DockBean(addr, it, changeList)
                 }
                 DOCK_TYPE_ELEC_LOCK_BOARD -> {
                     // TODO 临时占位
@@ -172,7 +172,7 @@ class DockBean(
                         changeList.add(getFingerPrintList()[0])
                     }
                     LogUtil.i("便携式刷新状态 : $changeList")
-                    return DockBean(addr, type, changeList)
+                    return DockBean(addr, it, changeList)
                 }
                 else -> return null
             }

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

@@ -361,21 +361,21 @@ object ModBusController {
      * 根据RFID找钥匙
      */
     fun getKeyByRfid(rfid: String): DockBean.KeyBean? {
-        return dockList.find { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }?.getKeyList()?.find { it.rfid == rfid }
+        return dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }.flatMap { it.getKeyList() }.find { it.rfid == rfid }
     }
 
     /**
      * 根据Mac找钥匙
      */
     fun getKeyByMac(mac: String): DockBean.KeyBean? {
-        return dockList.find { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }?.getKeyList()?.find { it.mac == mac }
+        return dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }.flatMap { it.getKeyList() }.find { it.mac == mac }
     }
 
     /**
      * 根据RFID找锁具
      */
     fun getLockByRfid(rfid: String): DockBean.LockBean? {
-        return dockList.find { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }?.getLockList()?.find { it.rfid == rfid }
+        return dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }.flatMap { it.getLockList() }.find { it.rfid == rfid }
     }
 
     /**

+ 1 - 1
app/src/main/java/com/grkj/iscs/presentation/PresentationLoginActivity.kt

@@ -136,6 +136,6 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
 
     override fun onDestroy() {
         super.onDestroy()
-        ModBusController.unregisterListener(this)
+        BusinessManager.unregisterListener(this)
     }
 }

+ 1 - 1
app/src/main/java/com/grkj/iscs/presenter/LoginPresenter.kt

@@ -111,6 +111,6 @@ class LoginPresenter : BasePresenter<ILoginView>() {
     }
 
     fun unregisterListener() {
-        ModBusController.unregisterListener(this)
+        BusinessManager.unregisterListener(this)
     }
 }