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

fix(作业执行)
- 修复作业执行时,点位状态判断错误导致钥匙获取失败的问题
- 修复蓝牙上传数据时,开锁操作挂锁NFC为空导致上传失败的问题
- 修复统计可操作隔离点时,未排除异常上报的作业票

refactor(作业执行)
- 优化蓝牙上传数据时,更新隔离点信息的逻辑,仅在上锁操作时校验挂锁NFC

周文健 3 сар өмнө
parent
commit
3c9f98456b

+ 1 - 3
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt

@@ -267,9 +267,7 @@ class JobExecuteViewModel @Inject constructor(
                 return@liveData
             }
             ModbusBusinessManager.checkEquipCount(ticketId, ticketPoints.count {
-                it.groupId == groupId && (it.pointStatus == "0" || (it.pointStatus == "2" && workflowRepository.isUnlockBeforeLock(
-                    ticketData?.ticketId!!
-                )))
+                it.groupId == groupId && (it.pointStatus == "0" || (it.pointStatus == "2" && isUnlockFirst))
             }, true) { keyMap, lockMap ->
                 if (lockMap.isEmpty()) {
                     TipDialog.show(

+ 2 - 0
data/src/main/java/com/grkj/data/dao/JobTicketDao.kt

@@ -545,6 +545,7 @@ interface JobTicketDao {
               ON p2.ticket_id = t2.ticket_id
             WHERE p2.point_id      = p.point_id
               AND t2.ticket_status = 5
+              AND t2.ex_status is null
           )
           -- 2) 最新那条的状态必须是“上锁”
           AND p.point_status  = 1
@@ -556,6 +557,7 @@ interface JobTicketDao {
               ON p3.ticket_id = t3.ticket_id
             WHERE p3.point_id      = p.point_id
               AND t3.ticket_status <> 5
+              AND t3.ex_status is null
           )
     """
     )

+ 13 - 7
data/src/main/java/com/grkj/data/repository/impl/standard/JobTicketRepository.kt

@@ -1048,6 +1048,7 @@ class JobTicketRepository @Inject constructor(
         callback: (Boolean, String, Int) -> Unit
     ) {
         var checkResult = ""
+        val isLock = lockPointsUpdateReq.any { it.target == 0 }
         ticketId?.let { ticketId ->
             val isTicketPoints = jobTicketDao.getJobTicketPointsDataByTicketId(ticketId)
             if (lockPointsUpdateReq.isNotEmpty()) {
@@ -1056,7 +1057,7 @@ class JobTicketRepository @Inject constructor(
                         callback(false, "钥匙nfc丢失", 500)
                         return
                     }
-                    if (updateReq.lockNfc == null) {
+                    if (updateReq.lockNfc.isNullOrEmpty() && isLock) {
                         callback(false, "挂锁nfc丢失", 500)
                         return
                     }
@@ -1065,18 +1066,22 @@ class JobTicketRepository @Inject constructor(
                         callback(false, "钥匙信息丢失", 500)
                         return
                     }
-                    val lockData = hardwareDao.getLockDataByLockRfid(updateReq.lockNfc)
-                    if (lockData == null) {
-                        callback(false, "挂锁信息丢失", 500)
-                        return
-                    }
+
                     val pointId = hardwareDao.getPointIdByPointNfc(updateReq.pointNfc)
                     val isTicketPoint = isTicketPoints.firstOrNull { it.pointId == pointId }
                     if (isTicketPoint == null) {
                         callback(false, "隔离点信息丢失", 500)
                         return
                     }
-                    isTicketPoint.lockId = lockData.lockId
+
+                    if (isLock) {
+                        val lockData = hardwareDao.getLockDataByLockRfid(updateReq.lockNfc!!)
+                        if (lockData == null) {
+                            callback(false, "挂锁信息丢失", 500)
+                            return
+                        }
+                        isTicketPoint.lockId = lockData.lockId
+                    }
                     if (updateReq.target == 0) {
                         checkResult = ICheckDataMode.getCheckDataMode()
                             .checkUpdatePointData(updateReq, isTicketPoints)
@@ -1088,6 +1093,7 @@ class JobTicketRepository @Inject constructor(
                         isTicketPoint.lockTime =
                             TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
                     } else {
+                        isTicketPoint.lockId = null
                         isTicketPoint.unlockedByKeyId = keyData.keyId
                         isTicketPoint.pointStatus = "2"
                         isTicketPoint.unlockTime =

+ 3 - 2
ui-base/src/main/java/com/grkj/ui_base/business/BleBusinessManager.kt

@@ -645,7 +645,7 @@ object BleBusinessManager {
                         }
                         val updateVO = LockPointUpdateReq(
                             data.taskCode?.toLong(),
-                            dataListDTO.infoRfidNo,
+                            if (dataListDTO.target == 0) dataListDTO.infoRfidNo else "",
                             dataListDTO.equipRfidNo,
                             keyNfc!!,
                             dataListDTO.target,
@@ -960,6 +960,7 @@ object BleBusinessManager {
     ): String {
         logger.info("generateTicketSendJson : $lockList")
         val groupId = MainDomainData.deviceTakeTicketGroupBound[vo.ticketId]
+        val isUnlockFirst = RepositoryManager.jobTicketRepo.isUnLockBeforeLock(vo.ticketId)
         logger.info("当前作业票分组数据:${vo.ticketId}-${groupId}")
         val bo = WorkTicketSend(
             cardNo = MainDomainData.userCardList.getOrNull(0)?.cardNfc ?: "123456",
@@ -973,7 +974,7 @@ object BleBusinessManager {
             taskCode = vo.ticketId.toString(), codeId = 1
         )
         val taskList = ArrayList<WorkTicketSend.DataBO.DataListBO>()
-        vo.ticketPointsVOList?.filter { it.groupId == groupId && it.pointStatus == if (isLock) "0" else "1" }
+        vo.ticketPointsVOList?.filter { it.groupId == groupId && it.pointStatus == if (isLock && isUnlockFirst) "2" else if (isLock) "0" else "1" }
             ?.let { itList ->
                 itList.forEach { pointVO ->
                     if (vo.noUnlockTicketPointsVOSet?.any { it.pointId == pointVO.pointId } == true) {