Selaa lähdekoodia

修复底座数据分发机制;修复开锁卡扣地址错误

Frankensteinly 10 kuukautta sitten
vanhempi
sitoutus
360961f493

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

@@ -75,7 +75,7 @@ object BusinessManager {
         ModBusController.setSlaveCount(3)
         ModBusController.interruptReadTrashBinStatus(false)
         ModBusController.start(MyApplication.instance!!.applicationContext)
-        ModBusController.unregisterListener(MyApplication.instance!!.applicationContext)
+//        ModBusController.unregisterListener(MyApplication.instance!!.applicationContext)
 
         if (isNeedInit) {
             ModBusController.initDevicesStatus()
@@ -86,11 +86,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
@@ -200,7 +219,7 @@ object BusinessManager {
                         }
                     }
                 }
-                callBack.invoke(dockBean)
+                listeners.forEach { it.callBack(dockBean) }
             }
         }
     }
@@ -718,7 +737,7 @@ object BusinessManager {
             } 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/ModbusActivity.kt

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

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

@@ -13,10 +13,7 @@ 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)

+ 13 - 5
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
             }
@@ -220,7 +220,11 @@ class DockBean(
         var type: Int,
         var idx: Int,
         var isExist: Boolean
-    )
+    ) {
+        override fun toString(): String {
+            return "DeviceBean(type=$type, idx=$idx, isExist=$isExist)"
+        }
+    }
 
     /**
      * 钥匙
@@ -248,7 +252,11 @@ class DockBean(
         idx: Int,
         isExist: Boolean,
         var rfid: String?
-    ) : DeviceBean(DEVICE_TYPE_LOCK, idx, isExist)
+    ) : DeviceBean(DEVICE_TYPE_LOCK, idx, isExist) {
+        override fun toString(): String {
+            return "LockBean(rfid=$rfid, isExist=$isExist, idx=$idx)"
+        }
+    }
 
     /**
      * 卡

+ 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/presentation/PresentationManager.kt

@@ -386,7 +386,7 @@ object PresentationManager {
                 // TODO 更新锁具配对
                 lockMap.forEach { (addr, lockList) ->
                     // 开锁卡扣
-                    ModBusController.controlLockBuckle(true, addr.toInt(), lockList.map { it.idx }.toMutableList())
+                    ModBusController.controlLockBuckle(true, addr.toInt() - 1, lockList.map { it.idx }.toMutableList())
                     for (i in lockList.indices) {
                         val lockListDTO = WorkTicketBean.LockListDTO()
                         lockListDTO.lockId = "${i + 1}"

+ 1 - 3
app/src/main/java/com/grkj/iscs/presentation/simple/SimpleLoginActivity.kt

@@ -60,9 +60,7 @@ class SimpleLoginActivity : BaseActivity<ActivitySimpleLoginBinding>() {
 
 
 
-        BusinessManager.registerStatusListener(this) {
-
-        }
+        BusinessManager.registerMainListener()
         handleLoading(true, getString(R.string.simple_device_is_initializing))
         Executor.delayOnMain(2000) {
             BusinessManager.connectDock(true)

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

@@ -82,7 +82,7 @@ class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
 
     override fun onStop() {
         super.onStop()
-        ModBusController.unregisterListener(this)
+        BusinessManager.unregisterListener(this)
     }
     
     fun changeStep(step: Int) {

+ 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)
     }
 }