فهرست منبع

补充下发流程逻辑

Frankensteinly 11 ماه پیش
والد
کامیت
09d25cf2c2

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

@@ -215,14 +215,14 @@ object BusinessManager {
      *
      * @param needLockCount 需要的锁具的数量(可能在别的机柜取过)
      */
-    fun checkEquipCount(needLockCount: Int, callBack: (String?, MutableMap<Byte, MutableList<String>>) -> Unit) {
+    fun checkEquipCount(needLockCount: Int, callBack: (Pair<Byte, Pair<Boolean, String>>?, MutableMap<Byte, MutableList<DockBean.LockBean>>) -> Unit) {
         var lockCount = 0
         val lockMap = ModBusController.getLocks(needLockCount)
         lockMap.forEach { (_, rfidList) ->
             lockCount += rfidList.size
         }
-        
-        val keyNfc = ModBusController.getOneKey()
+
+        val key = ModBusController.getOneKey()
 
         var tipStr = ""
         if (lockCount < needLockCount) {
@@ -231,7 +231,7 @@ object BusinessManager {
             tipStr = msg
         }
 
-        if (keyNfc == null) {
+        if (key == null) {
             val msg = MyApplication.instance!!.applicationContext.resources.getString(R.string.key_is_not_enough)
             LogUtil.w(msg)
             tipStr = if (tipStr.isEmpty()) {
@@ -243,7 +243,7 @@ object BusinessManager {
         if (tipStr.isNotEmpty()) {
             ToastUtils.tip(tipStr)
         }
-        callBack.invoke(keyNfc, lockMap)
+        callBack.invoke(if (lockCount < needLockCount) null else key, lockMap)
     }
 
     /**

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

@@ -450,17 +450,19 @@ object ModBusController {
 
     /**
      * 获取一个钥匙(基于钥匙柜和便携柜不存在接一起的情况)
-     *
-     * @return 获取的钥匙RFID,如果数量不足,返回null
      */
-    fun getOneKey(): String? {
+    fun getOneKey(): Pair<Byte, Pair<Boolean, String>>? {
         val keyDockList = dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
         val keyList = keyDockList.flatMap { it.getKeyList() }.filter { it.isExist }
         if (keyList.isEmpty()) {
             ToastUtils.tip(R.string.key_is_not_enough)
             return null
         }
-        return keyList[0].rfid
+        val key = getKeyByRfid(keyList[0].rfid!!)
+
+        val addr = keyDockList.find { it.getKeyList().contains(key) }?.addr
+
+        return Pair(addr!!, Pair(key!!.isLeft, key.rfid!!))
     }
 
     /**
@@ -470,18 +472,18 @@ object ModBusController {
      *
      * @return key: dock地址,value: 锁具RFID列表
      */
-    fun getLocks(needLockCount: Int): MutableMap<Byte, MutableList<String>> {
-        val map = mutableMapOf<Byte, MutableList<String>>()
+    fun getLocks(needLockCount: Int): MutableMap<Byte, MutableList<DockBean.LockBean>> {
+        val map = mutableMapOf<Byte, MutableList<DockBean.LockBean>>()
         val lockDockList = dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
 
         var provideCount = 0
         lockDockList.forEach loop@ { lockDock ->
-            val lockList = lockDock.getLockList().filter { it.isExist }
+            val lockList = lockDock.getLockList().filter { it.isExist }.toMutableList()
             if (lockList.size < (needLockCount - provideCount)) {
                 provideCount += lockList.size
-                map[lockDock.addr] = lockList.mapNotNull { it.rfid }.toMutableList()
+                map[lockDock.addr] = lockList
             } else {
-                val rfidList = lockList.subList(0, needLockCount - provideCount).mapNotNull { it.rfid }.toMutableList()
+                val rfidList = lockList.subList(0, needLockCount - provideCount)
                 map[lockDock.addr] = rfidList
                 return@loop
             }

+ 13 - 5
app/src/main/java/com/grkj/iscs/presenter/TicketListPresenter.kt

@@ -4,6 +4,7 @@ import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.R
 import com.grkj.iscs.base.BasePresenter
 import com.grkj.iscs.iview.ITicketListView
+import com.grkj.iscs.modbus.ModBusController
 import com.grkj.iscs.model.vo.ticket.TicketPageRespVO
 import com.grkj.iscs.model.vo.ticket.TicketTypeRespVO
 import com.grkj.iscs.util.Executor
@@ -58,12 +59,19 @@ class TicketListPresenter : BasePresenter<ITicketListView>() {
      * @param needLockCount 需要的锁具的数量(可能在别的机柜取过)
      */
     fun startTicket(needLockCount: Int) {
-        val equipCountPair = BusinessManager.checkEquipCount(needLockCount)
-        val lockCount = equipCountPair.first
-        val keyCount = equipCountPair.second
-
-        if (lockCount in 1..needLockCount) {
+        BusinessManager.checkEquipCount(needLockCount) { keyPair, lockMap ->
+            // TODO 下发工作票,上传钥匙信息更新作业票
+//            keyPair?.let {
+//                ModBusController.controlKeyBuckle(true, keyPair.second.first, keyPair.first.toInt()) {
+//
+//                }
+//            }
+            lockMap.forEach { dockAddr, lockList ->
+                // TODO 先上传锁具信息更新作业票,再下发锁具
+                ModBusController.controlLockBuckle(true, dockAddr.toInt(), lockList.map { it.idx }.toMutableList()) {
 
+                }
+            }
         }
     }
 }