فهرست منبع

refactor(硬件):
- 优化异常管理中数据源文本的国际化处理
- 调整钥匙和锁数据获取逻辑,新增`getDockData`接口及实现
- 优化初始化设备注册流程中对新硬件的过滤和仓位数据生成逻辑
- `DockData`基类增加addr、row、col、type属性

周文健 2 ماه پیش
والد
کامیت
4d25da17aa

+ 22 - 12
app/src/main/java/com/grkj/iscs/features/init/viewmodel/InitDeviceRegistrationKeyAndLockViewModel.kt

@@ -58,7 +58,12 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
                     }
                     ThreadUtils.runOnIO {
                         checkNewHardwareKey(
-                            HardwareMode.getCurrentHardwareMode().getKeyDockData().toMutableList()
+                            HardwareMode.getCurrentHardwareMode().getKeyDockData().apply {
+                                forEach {
+                                    it.keyData = it.keyData.filter { it.isExist && it.newHardware }
+                                        .toMutableList()
+                                }
+                            }.toMutableList()
                         )
                         emit(true)
                     }
@@ -206,15 +211,15 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
      */
     private fun deviceInputSlotsSuspend(
         dockIndex: Int,
-        dockBean: DockBean,
+        dockBean: DockData,
         startIndex: Int = 0
     ): Int {
         var lastIndex = startIndex
-        when (dockBean.type) {
-            DeviceConst.DOCK_TYPE_KEY -> {
-                val slots = dockBean.deviceList.mapIndexed { index, device ->
+        when (dockBean) {
+            is DockData.KeyDock -> {
+                val slots = dockBean.keyData.mapIndexed { index, device ->
                     lastIndex++
-                    var isLockCabinetSlots = IsLockCabinetSlots()
+                    val isLockCabinetSlots = IsLockCabinetSlots()
                     isLockCabinetSlots.slotCode = "CABINET_SLOTS_${lastIndex}"
                     isLockCabinetSlots.cabinetId = MMKVConstants.KEY_LOCK_CABINET_ID.getMMKVData(0)
                     isLockCabinetSlots.slotType = DeviceConst.DEVICE_TYPE_KEY.toString()
@@ -225,8 +230,8 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
                 hardwareRepository.saveCabinetSlots(slots)
             }
 
-            DeviceConst.DOCK_TYPE_LOCK -> {
-                val slots = dockBean.deviceList.mapIndexed { index, device ->
+            is DockData.LockDock -> {
+                val slots = dockBean.lockData.mapIndexed { index, device ->
                     lastIndex++
                     var isLockCabinetSlots = IsLockCabinetSlots()
                     isLockCabinetSlots.slotCode = "CABINET_SLOTS_${lastIndex}"
@@ -239,17 +244,17 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
                 hardwareRepository.saveCabinetSlots(slots)
             }
 
-            DeviceConst.DOCK_TYPE_PORTABLE -> {
-                val slots = dockBean.deviceList.mapIndexed { index, device ->
+            is DockData.PortableDock -> {
+                val slots = dockBean.deviceData.mapIndexed { index, device ->
                     lastIndex++
                     var isLockCabinetSlots = IsLockCabinetSlots()
                     isLockCabinetSlots.slotCode = "CABINET_SLOTS_${lastIndex}"
                     isLockCabinetSlots.cabinetId = MMKVConstants.KEY_LOCK_CABINET_ID.getMMKVData(0)
                     isLockCabinetSlots.row = dockBean.row.toString()
                     isLockCabinetSlots.col = (index + 1).toString()
-                    if (device is DockBean.KeyBean) {
+                    if (device is DockData.KeyDock.KeyBean) {
                         isLockCabinetSlots.slotType = DeviceConst.DEVICE_TYPE_KEY.toString()
-                    } else if (device is DockBean.LockBean) {
+                    } else if (device is DockData.LockDock.LockBean) {
                         isLockCabinetSlots.slotType = DeviceConst.DEVICE_TYPE_LOCK.toString()
                     }
                     isLockCabinetSlots
@@ -265,6 +270,11 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
      */
     fun deviceRegistrationData(): LiveData<Triple<Boolean, Int, Int>> {
         return liveData(Dispatchers.IO) {
+            val dockList = HardwareMode.getCurrentHardwareMode().getDockData()
+            var startIndex = 0
+            dockList.sortedBy { it.type }.forEachIndexed { index, dock ->
+                startIndex = deviceInputSlotsSuspend(index, dock, startIndex)
+            }
             val lockDevice = HardwareMode.getCurrentHardwareMode().getLockDockData()
                 .flatMap { it.lockData }
                 .filter { it.newHardware && it.rfid.isNotEmpty() }

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionViewModel.kt

@@ -243,16 +243,16 @@ class ExceptionViewModel @Inject constructor(
                 ?.sourceData
                 ?.joinToString(separator = ",") { src ->
                     when (src.sourceDataType) {
-                        0 -> "钥匙:${hardwareRepository.getKeyInfoByKeyId(src.sourceDataId)?.keyNfc.orEmpty()}"
-                        1 -> "挂锁:${hardwareRepository.getLockInfoByLockId(src.sourceDataId)?.lockNfc.orEmpty()}"
+                        0 -> "${CommonUtils.getStr("key")}:${hardwareRepository.getKeyInfoByKeyId(src.sourceDataId)?.keyNfc.orEmpty()}"
+                        1 -> "${CommonUtils.getStr("lock")}:${hardwareRepository.getLockInfoByLockId(src.sourceDataId)?.lockNfc.orEmpty()}"
                         2 -> {
                             hardwareRepository
                                 .getIsLockCabinetSlotBySlotId(src.sourceDataId)
-                                ?.let { slot -> "仓位:${slot.row}-${slot.col}" }
+                                ?.let { slot -> "${CommonUtils.getStr("slot")}:${slot.row}-${slot.col}" }
                                 .orEmpty()
                         }
 
-                        3 -> "作业:${
+                        3 -> "${CommonUtils.getStr("job")}:${
                             jobTicketRepository.getTicketDataByTicketId(src.sourceDataId)
                                 ?.ticketName.orEmpty()
                         }"
@@ -286,7 +286,7 @@ class ExceptionViewModel @Inject constructor(
                         val exceptionSourceDataEntity =
                             ExceptionSourceDataEntity(itemGroupPosition = 1)
                         exceptionSourceDataEntity.sourceDataText =
-                            "钥匙${it.keyNfc}(${HardwareBusinessManager.getKeySlotPosition(it.keyNfc ?: "")})"
+                            "${CommonUtils.getStr("key")}:${it.keyNfc}(${HardwareBusinessManager.getKeySlotPosition(it.keyNfc ?: "")})"
                         exceptionSourceDataEntity.sourceDataId = it.keyId
                         exceptionSourceDataEntity.sourceDataType =
                             exceptionSourceDataType.find { I18nManager.t(it.dictLabel) == I18nManager.t("key") }?.dictValue?.toInt()
@@ -314,7 +314,7 @@ class ExceptionViewModel @Inject constructor(
                         val exceptionSourceDataEntity =
                             ExceptionSourceDataEntity(itemGroupPosition = 1)
                         exceptionSourceDataEntity.sourceDataText =
-                            "挂锁${it.lockNfc}(${HardwareBusinessManager.getLockSlotPosition(it.lockNfc ?: "")})"
+                            "${CommonUtils.getStr("lock")}:${it.lockNfc}(${HardwareBusinessManager.getLockSlotPosition(it.lockNfc ?: "")})"
                         exceptionSourceDataEntity.sourceDataId = it.lockId
                         exceptionSourceDataEntity.sourceDataType =
                             exceptionSourceDataType.find { I18nManager.t(it.dictLabel) ==  I18nManager.t("lock")  }?.dictValue?.toInt()
@@ -342,7 +342,7 @@ class ExceptionViewModel @Inject constructor(
                         val exceptionSourceDataEntity =
                             ExceptionSourceDataEntity(itemGroupPosition = 1)
                         exceptionSourceDataEntity.sourceDataText =
-                            "仓位${it.row?.toInt()?.plus(1)}-${it.col}"
+                            "${CommonUtils.getStr("slot")}:${it.row?.toInt()?.plus(1)}-${it.col}"
                         exceptionSourceDataEntity.sourceDataId = it.slotId
                         exceptionSourceDataEntity.sourceDataType =
                             exceptionSourceDataType.find { I18nManager.t(it.dictLabel) == I18nManager.t("slot") }?.dictValue?.toInt()

+ 10 - 5
data/src/main/java/com/grkj/data/hardware/DockData.kt

@@ -3,7 +3,12 @@ package com.grkj.data.hardware
 /**
  * Dock数据
  */
-interface DockData {
+open class DockData {
+    var addr: Int = 0
+    var row: Int = 0
+    var col: Int = 0
+    var type: Int = -1
+
     /**
      * 设备数据
      */
@@ -21,8 +26,8 @@ interface DockData {
     /**
      * 钥匙Dock
      */
-    class KeyDock : DockData {
-        val keyData: MutableList<KeyBean> = mutableListOf()
+    class KeyDock : DockData() {
+        var keyData: MutableList<KeyBean> = mutableListOf()
 
         class KeyBean : DeviceBean() {
             var mac: String = ""
@@ -32,7 +37,7 @@ interface DockData {
     /**
      * 挂锁Dock
      */
-    class LockDock : DockData {
+    class LockDock : DockData() {
         val lockData: MutableList<LockBean> = mutableListOf()
 
         class LockBean : DeviceBean() {
@@ -42,7 +47,7 @@ interface DockData {
     /**
      * 便携Dock
      */
-    class PortableDock : DockData {
+    class PortableDock : DockData() {
         val deviceData: MutableList<DeviceBean> = mutableListOf()
     }
 }

+ 5 - 0
data/src/main/java/com/grkj/data/hardware/IHardwareHelper.kt

@@ -167,4 +167,9 @@ interface IHardwareHelper {
      * 更新就绪状态
      */
     fun updateKeyReadyStatus(mac: String, isReady: Boolean, from: Int)
+
+    /**
+     * 获取基座数据
+     */
+    fun getDockData(): List<DockData>
 }

+ 5 - 2
data/src/main/java/com/grkj/data/hardware/can/CanHardwareHelper.kt

@@ -49,8 +49,7 @@ class CanHardwareHelper : IHardwareHelper {
         val keyDock = deviceData.map {
             DockData.KeyDock().apply {
                 keyData.addAll(
-                    it.value.filterIsInstance<DeviceModel.DeviceKey>()
-                        .filter { it.isExist && it.newHardware }.map {
+                    it.value.filterIsInstance<DeviceModel.DeviceKey>().map {
                         DockData.KeyDock.KeyBean().apply {
                             this.addr = it.nodeId
                             this.idx = it.id
@@ -67,6 +66,10 @@ class CanHardwareHelper : IHardwareHelper {
         return keyDock
     }
 
+    override fun getDockData(): List<DockData> {
+        return getKeyDockData() + getLockDockData()
+    }
+
     override fun controlKeyBuckle(
         isOpen: Boolean,
         mac: String,

+ 97 - 13
data/src/main/java/com/grkj/data/hardware/modbus/ModBusHardwareHelper.kt

@@ -67,19 +67,103 @@ class ModBusHardwareHelper : IHardwareHelper {
         return dockData.filter { it.type == DeviceConst.DOCK_TYPE_KEY }.map {
             DockData.KeyDock().apply {
                 keyData.addAll(
-                    it.deviceList.filterIsInstance<DockBean.KeyBean>()
-                        .filter { it.isExist && it.newHardware }.map {
-                            DockData.KeyDock.KeyBean().apply {
-                                this.addr = it.addr.toInt()
-                                this.idx = it.idx
-                                this.row = it.row
-                                this.rfid = it.rfid ?: ""
-                                this.mac = it.mac ?: ""
-                                this.isExist = it.isExist
-                                this.type = it.type
-                                this.newHardware = it.newHardware
-                            }
-                        })
+                    it.deviceList.filterIsInstance<DockBean.KeyBean>().map {
+                        DockData.KeyDock.KeyBean().apply {
+                            this.addr = it.addr.toInt()
+                            this.idx = it.idx
+                            this.row = it.row
+                            this.rfid = it.rfid ?: ""
+                            this.mac = it.mac ?: ""
+                            this.isExist = it.isExist
+                            this.type = it.type
+                            this.newHardware = it.newHardware
+                        }
+                    })
+            }
+        }
+    }
+
+    override fun getDockData(): List<DockData> {
+        return ModBusController.dockList.mapNotNull { dock ->
+            when (dock.type) {
+                DeviceConst.DOCK_TYPE_KEY -> {
+                    DockData.KeyDock().apply {
+                        keyData.addAll(
+                            dock.deviceList
+                                .filterIsInstance<DockBean.KeyBean>()
+                                .map { bean ->
+                                    DockData.KeyDock.KeyBean().apply {
+                                        addr = bean.addr.toInt()
+                                        idx = bean.idx
+                                        row = bean.row
+                                        rfid = bean.rfid ?: ""
+                                        mac = bean.mac ?: ""
+                                        isExist = bean.isExist
+                                        type = bean.type
+                                        newHardware = bean.newHardware
+                                    }
+                                }
+                        )
+                    }
+                }
+
+                DeviceConst.DOCK_TYPE_LOCK -> {
+                    DockData.LockDock().apply {
+                        lockData.addAll(
+                            dock.deviceList
+                                .filterIsInstance<DockBean.LockBean>()
+                                .map { bean ->
+                                    DockData.LockDock.LockBean().apply {
+                                        addr = bean.addr.toInt()
+                                        idx = bean.idx
+                                        row = bean.row
+                                        rfid = bean.rfid ?: ""
+                                        isExist = bean.isExist
+                                        type = bean.type
+                                        newHardware = bean.newHardware
+                                    }
+                                }
+                        )
+                    }
+                }
+
+                DeviceConst.DOCK_TYPE_PORTABLE -> {
+                    DockData.PortableDock().apply {
+                        deviceData.addAll(
+                            dock.deviceList
+                                .filterIsInstance<DockBean.LockBean>()
+                                .map { bean ->
+                                    DockData.LockDock.LockBean().apply {
+                                        addr = bean.addr.toInt()
+                                        idx = bean.idx
+                                        row = bean.row
+                                        rfid = bean.rfid ?: ""
+                                        isExist = bean.isExist
+                                        type = bean.type
+                                        newHardware = bean.newHardware
+                                    }
+                                }
+                        )
+                        deviceData.addAll(
+                            dock.deviceList
+                                .filterIsInstance<DockBean.KeyBean>()
+                                .map { bean ->
+                                    DockData.KeyDock.KeyBean().apply {
+                                        addr = bean.addr.toInt()
+                                        idx = bean.idx
+                                        row = bean.row
+                                        rfid = bean.rfid ?: ""
+                                        mac = bean.mac ?: ""
+                                        isExist = bean.isExist
+                                        type = bean.type
+                                        newHardware = bean.newHardware
+                                    }
+                                }
+                        )
+                    }
+                }
+
+                else -> null  // 👈 不匹配的类型直接跳过
             }
         }
     }