Selaa lähdekoodia

优化checkEquipCount,防止硬件异常导致的作业票异常;优化精简上锁流程

Frankensteinly 8 kuukautta sitten
vanhempi
sitoutus
11cddbb436

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

@@ -334,16 +334,15 @@ object BusinessManager {
      * 检查钥匙和锁具数量
      *
      * @param needLockCount 需要的锁具的数量(可能在别的机柜取过)
+     * @param isNeedKey 是否需要钥匙(可能存在前一次拿了部分锁和钥匙,有锁取出失败)
      */
-    fun checkEquipCount(needLockCount: Int, callBack: (Pair<Byte, DockBean.KeyBean?>?, MutableMap<Byte, MutableList<DockBean.LockBean>>) -> Unit) {
+    fun checkEquipCount(needLockCount: Int, isNeedKey: Boolean, callBack: (Pair<Byte, DockBean.KeyBean?>?, MutableMap<Byte, MutableList<DockBean.LockBean>>) -> Unit) {
         var lockCount = 0
         val lockMap = ModBusController.getLocks(needLockCount)
         lockMap.forEach { (_, rfidList) ->
             lockCount += rfidList.size
         }
 
-        val key = ModBusController.getOneKey()
-
         var tipStr = ""
         if (lockCount < needLockCount) {
             val msg = MyApplication.instance!!.applicationContext.resources.getString(R.string.lock_is_not_enough)
@@ -351,19 +350,24 @@ object BusinessManager {
             tipStr = msg
         }
 
-        if (key == null) {
-            val msg = MyApplication.instance!!.applicationContext.resources.getString(R.string.key_is_not_enough)
-            LogUtil.w(msg)
-            tipStr = if (tipStr.isEmpty()) {
-                msg
-            } else {
-                tipStr + "\n" + msg
+        var key: Pair<Byte, DockBean.KeyBean?>? = null
+        if (isNeedKey && lockCount >= needLockCount) {
+            key = ModBusController.getOneKey()
+            if (key == null) {
+                val msg = MyApplication.instance!!.applicationContext.resources.getString(R.string.key_is_not_enough)
+                LogUtil.w(msg)
+                tipStr = if (tipStr.isEmpty()) {
+                    msg
+                } else {
+                    tipStr + "\n" + msg
+                }
             }
         }
+
         if (tipStr.isNotEmpty()) {
             ToastUtils.tip(tipStr)
         }
-        callBack.invoke(if (lockCount < needLockCount) null else key, lockMap)
+        callBack.invoke(key, lockMap)
     }
 
 

+ 28 - 48
app/src/main/java/com/grkj/iscs/view/presenter/JobProgressPresenter.kt

@@ -76,67 +76,47 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
      */
     fun handleLockProcess(ticketId: Long) {
         getTicketDetail(ticketId) { ticketDetail ->
+            LogUtil.i("getTicketDetail : $ticketDetail")
             val role = ticketDetail?.jobTicketUserList?.find { it.userId == SPUtils.getLoginUser(mContext!!)?.userId && it.userType == USER_TYPE_LOCKER }
             if (role == null) {
                 ToastUtils.tip(R.string.you_are_not_locker_tip)
                 return@getTicketDetail
             }
 
-            when (role.jobStatus) {
-                JOB_STATUS_NOT_STARTED, JOB_STATUS_ACQUIRE_LOCK -> {
-                    NetApi.getTicketEquipDetail(ticketId) { equipDetail ->
-                        // 取锁具、取钥匙
-                        val needLockCount = equipDetail?.ticketLockVOList?.filter { it.lockId == null }?.size ?: 0
-                        BusinessManager.checkEquipCount(needLockCount) { keyPair, lockMap ->
-                            val lockList = mutableListOf<LockTakeUpdateReqVO>()
-                            lockMap.forEach { (_, list) ->
-                                lockList.addAll(list.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
-                            }
-                            NetApi.updateLockTake(lockList) {
-                                if (it == true) {
-                                    lockMap.forEach { (addr, lockList) ->
-                                        // 开锁卡扣
-                                        ModBusController.controlLockBuckle(true, addr, lockList.map { it.idx }.toMutableList())
-                                    }
-                                }
-                                // 更新锁具信息后再发,防止后台失败
-                                // null表示锁具数量不够,不给钥匙
-                                if (keyPair != null) {
-                                    // 更新钥匙信息
-                                    NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
-                                        if (it) {
-                                            // 下发工作票
-                                            BusinessManager.sendTicketBusiness(
-                                                keyPair.second?.mac!!,
-                                                ticketDetail,
-                                                lockList.map { it.lockNfc }.toMutableList(),
-                                                ActivityUtils.currentActivity() as BaseActivity<*>
-                                            ) { b, s, rst ->
-                                                
-                                            }
-                                        }
-                                    }
+            // 3个状态全检查锁和钥匙分配情况,防止第一次拿了钥匙和部分锁
+            if (role.jobStatus == JOB_STATUS_NOT_STARTED || role.jobStatus == JOB_STATUS_ACQUIRE_LOCK || role.jobStatus == JOB_STATUS_ACQUIRE_KEY) {
+                NetApi.getTicketEquipDetail(ticketId) { equipDetail ->
+                    // 取锁具、取钥匙
+                    val needLockCount = equipDetail?.ticketLockVOList?.filter { it.lockId == null }?.size ?: 0
+                    val isNeedKey = equipDetail?.ticketKeyVOList?.filter { it.keyId == null }?.size != 1
+                    BusinessManager.checkEquipCount(needLockCount, isNeedKey) { keyPair, lockMap ->
+                        val lockList = mutableListOf<LockTakeUpdateReqVO>()
+                        lockMap.forEach { (_, list) ->
+                            lockList.addAll(list.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
+                        }
+                        NetApi.updateLockTake(lockList) {
+                            if (it == true) {
+                                lockMap.forEach { (addr, lockList) ->
+                                    // 开锁卡扣
+                                    ModBusController.controlLockBuckle(true, addr, lockList.map { it.idx }.toMutableList())
                                 }
                             }
-                        }
-                    }
-                }
-                JOB_STATUS_ACQUIRE_KEY -> {
-                    // 这个时候锁具已经全了
-                    BusinessManager.checkEquipCount(0) { keyPair, _ ->
-                        // null表示锁具数量不够,不给钥匙
-                        if (keyPair != null) {
-                            // 更新钥匙信息
-                            NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
-                                if (it) {
-                                    NetApi.getTicketEquipDetail(ticketId) { equipDetail ->
+                            // 更新锁具信息后再发,防止后台失败
+                            // null表示锁具数量不够,不给钥匙
+                            if (keyPair != null) {
+                                // 更新钥匙信息
+                                NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
+                                    LogUtil.i("updateKeyTake : ${keyPair.second?.rfid}")
+                                    if (it) {
+                                        LogUtil.i("工作票挂锁list : $lockList")
                                         // 下发工作票
                                         BusinessManager.sendTicketBusiness(
                                             keyPair.second?.mac!!,
                                             ticketDetail,
-                                            equipDetail?.ticketLockVOList?.map { it.lockNfc }?.toMutableList(),
+                                            lockList.map { it.lockNfc }.toMutableList(),
                                             ActivityUtils.currentActivity() as BaseActivity<*>
                                         ) { b, s, rst ->
+                                            LogUtil.i("工作票下发 : $b - $s - $rst")
                                             (ActivityUtils.currentActivity() as BaseActivity<*>).handleLoading(b, s)
                                         }
                                     }
@@ -159,7 +139,7 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                 ToastUtils.tip(R.string.you_are_not_locker_tip)
                 return@getTicketDetail
             }
-            BusinessManager.checkEquipCount(0) { keyPair, _ ->
+            BusinessManager.checkEquipCount(0, true) { keyPair, _ ->
                 // null表示锁具数量不够,不给钥匙
                 if (keyPair != null) {
                     // 更新钥匙信息

+ 40 - 40
app/src/main/java/com/grkj/iscs/view/presenter/TicketDetailPresenter.kt

@@ -85,49 +85,49 @@ class TicketDetailPresenter : BasePresenter<ITicketDetailView>() {
             JOB_STATUS_NOT_STARTED, JOB_STATUS_ACQUIRE_LOCK -> {
                 // 取锁具、取钥匙
                 val needLockCount = equipDetail.ticketLockVOList?.filter { it.lockId == null }?.size ?: 0
-                BusinessManager.checkEquipCount(needLockCount) { keyPair, lockMap ->
-                    val list = mutableListOf<LockTakeUpdateReqVO>()
-                    lockMap.forEach { (_, lockList) ->
-                        list.addAll(lockList.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
-                    }
-                    NetApi.updateLockTake(list) {
-                        if (it == true) {
-                            lockMap.forEach { (addr, lockList) ->
-                                // 开锁卡扣
-                                ModBusController.controlLockBuckle(true, addr, lockList.map { it.idx }.toMutableList())
-                            }
-                        }
-                    }
-                    // null表示锁具数量不够,不给钥匙
-                    if (keyPair != null) {
-                        // 更新钥匙信息
-                        NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
-                            if (it) {
-                                // 下发工作票
-//                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
-//
-//                                }
-                            }
-                        }
-                    }
-                }
+//                BusinessManager.checkEquipCount(needLockCount) { keyPair, lockMap ->
+//                    val list = mutableListOf<LockTakeUpdateReqVO>()
+//                    lockMap.forEach { (_, lockList) ->
+//                        list.addAll(lockList.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
+//                    }
+//                    NetApi.updateLockTake(list) {
+//                        if (it == true) {
+//                            lockMap.forEach { (addr, lockList) ->
+//                                // 开锁卡扣
+//                                ModBusController.controlLockBuckle(true, addr, lockList.map { it.idx }.toMutableList())
+//                            }
+//                        }
+//                    }
+//                    // null表示锁具数量不够,不给钥匙
+//                    if (keyPair != null) {
+//                        // 更新钥匙信息
+//                        NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
+//                            if (it) {
+//                                // 下发工作票
+////                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
+////
+////                                }
+//                            }
+//                        }
+//                    }
+//                }
             }
             JOB_STATUS_ACQUIRE_KEY -> {
                 // 这个时候锁具已经全了
-                BusinessManager.checkEquipCount(0) { keyPair, _ ->
-                    // null表示锁具数量不够,不给钥匙
-                    if (keyPair != null) {
-                        // 更新钥匙信息
-                        NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
-                            if (it) {
-                                // 下发工作票
-//                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
-//                                    (mvpView as TicketDetailActivity).handleLoading(b, s)
-//                                }
-                            }
-                        }
-                    }
-                }
+//                BusinessManager.checkEquipCount(0) { keyPair, _ ->
+//                    // null表示锁具数量不够,不给钥匙
+//                    if (keyPair != null) {
+//                        // 更新钥匙信息
+//                        NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
+//                            if (it) {
+//                                // 下发工作票
+////                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
+////                                    (mvpView as TicketDetailActivity).handleLoading(b, s)
+////                                }
+//                            }
+//                        }
+//                    }
+//                }
             }
             JOB_STATUS_READY_TO_LOCK -> {
                 // TODO 不用做,由钥匙工作票自动更新