Ver código fonte

refactor(还钥匙) :
- 还设备时检查设备和锁仓是否异常

周文健 5 meses atrás
pai
commit
c955e61d8e

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

@@ -340,11 +340,11 @@ object BusinessManager {
             tipStr += addressList
             ToastUtils.tip(tipStr)
         }
-        res.forEach { bytes ->
-            val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
+        res.forEachIndexed { index, bytes ->
+            val dockBean = ModBusController.updateStatus(bytes) ?: return@forEachIndexed
             ModBusController.isInitReady = true
             if (!CAN_RETURN) {
-                return@forEach
+                return@forEachIndexed
             }
             when (dockBean.type) {
                 DOCK_TYPE_KEY -> {
@@ -361,32 +361,73 @@ object BusinessManager {
                                 }
                                 val rfid = res.copyOfRange(3, 11).toHexStrings(false)
                                     .removeLeadingZeros()
-                                ModBusController.updateKeyRfid(
-                                    dockBean.addr,
-                                    keyBean.isLeft,
-                                    rfid
-                                )
-                                // 放回钥匙,上锁
-                                ModBusController.controlKeyBuckle(
-                                    false,
-                                    keyBean.isLeft,
-                                    dockBean.addr
-                                ) {
-                                    NetApi.getKeyInfo(rfid) {
-                                        if (it != null && !it.macAddress.isNullOrEmpty()) {
-                                            ModBusController.updateKeyMac(
-                                                dockBean.addr,
-                                                keyBean.isLeft,
-                                                it.macAddress
+                                ThreadUtils.runOnIO {
+                                    val slotStatus =
+                                        async { fetchDict<CommonDictRespVO>(DictConstants.KEY_SLOT_STATUS) }
+                                    val slotType =
+                                        async { fetchDict<CommonDictRespVO>(DictConstants.KEY_SLOT_TYPE) }
+                                    val slotsPageReq =
+                                        async { getSlotsPage() }
+                                    val keyStatusReq =
+                                        async { fetchDict<CommonDictRespVO>(DictConstants.KEY_KEY_STATUS) }
+                                    val keyPageReq =
+                                        async { getKeyPage() }
+                                    var keyStatus = keyStatusReq.await()
+                                    var keyData = keyPageReq.await()
+                                    val slotsPage = slotsPageReq.await()
+                                    val slotStatusList = slotStatus.await()
+                                    val slotTypeList = slotType.await()
+                                    //锁钥匙未异常正常请求锁数据,关锁
+                                    if (rfid in (keyData?.records?.filter { it.exStatus == keyStatus.find { it.dictLabel == "异常" }?.dictValue }
+                                            ?.map { it.keyNfc }?.toMutableList()
+                                            ?: mutableListOf())
+                                    ) {
+                                        ToastUtils.tip(
+                                            MyApplication.instance?.applicationContext!!.getString(
+                                                R.string.key_exception_tag
                                             )
-                                            ModBusController.updateKeyReadyStatus(
-                                                it.macAddress,
-                                                false,
-                                                5
+                                        )
+                                    } else if (slotsPage?.records
+                                            ?.filter {
+                                                it.slotType == slotTypeList.find { d -> d.dictLabel == "钥匙" }?.dictValue &&
+                                                        it.status == slotStatusList.find { d -> d.dictLabel == "异常" }?.dictValue
+                                            }
+                                            ?.find { it.row?.toInt() == dockBean.row && it.col?.toInt() == (dockBean.col + (if (keyBean.isLeft) 0 else 1) * 2) } != null
+                                    ) {
+                                        ToastUtils.tip(
+                                            MyApplication.instance?.applicationContext!!.getString(
+                                                R.string.slot_exception_tag
                                             )
-                                        } else {
-                                            LogUtil.e("Get key info fail : $rfid")
-                                            ToastUtils.tip(R.string.get_key_info_fail)
+                                        )
+                                    } else {
+                                        ModBusController.updateKeyRfid(
+                                            dockBean.addr,
+                                            keyBean.isLeft,
+                                            rfid
+                                        )
+                                        // 放回钥匙,上锁
+                                        ModBusController.controlKeyBuckle(
+                                            false,
+                                            keyBean.isLeft,
+                                            dockBean.addr
+                                        ) {
+                                            NetApi.getKeyInfo(rfid) {
+                                                if (it != null && !it.macAddress.isNullOrEmpty()) {
+                                                    ModBusController.updateKeyMac(
+                                                        dockBean.addr,
+                                                        keyBean.isLeft,
+                                                        it.macAddress
+                                                    )
+                                                    ModBusController.updateKeyReadyStatus(
+                                                        it.macAddress,
+                                                        false,
+                                                        5
+                                                    )
+                                                } else {
+                                                    LogUtil.e("Get key info fail : $rfid")
+                                                    ToastUtils.tip(R.string.get_key_info_fail)
+                                                }
+                                            }
                                         }
                                     }
                                 }
@@ -421,20 +462,60 @@ object BusinessManager {
                                     lockBean.idx,
                                     rfid
                                 )
-                                NetApi.getLockInfo(rfid) {
-                                    if (it != null) {
-                                        // TODO 考虑快速拿取
-                                        ModBusController.controlLockBuckle(
-                                            false,
-                                            dockBean.addr,
-                                            lockBean.idx
-                                        ) { itRst ->
-                                            if (itRst.isNotEmpty()) {
-                                                // 上报锁具信息
-                                                NetApi.updateLockReturn(
-                                                    rfid,
-                                                    MyApplication.instance!!.serialNo()
-                                                ) {}
+                                ThreadUtils.runOnIO {
+                                    val lockStatusReq =
+                                        async { fetchDict<CommonDictRespVO>(DictConstants.KEY_PAD_LOCK_STATUS) }
+                                    val slotStatus =
+                                        async { fetchDict<CommonDictRespVO>(DictConstants.KEY_SLOT_STATUS) }
+                                    val slotType =
+                                        async { fetchDict<CommonDictRespVO>(DictConstants.KEY_SLOT_TYPE) }
+                                    val slotsPageReq =
+                                        async { getSlotsPage() }
+                                    var lockStatus = lockStatusReq.await()
+                                    val slotsPage = slotsPageReq.await()
+                                    val slotStatusList = slotStatus.await()
+                                    val slotTypeList = slotType.await()
+                                    NetApi.getIsLockPage { lockData ->
+                                        //锁rfid未异常正常请求锁数据,关锁
+                                        if (rfid in (lockData?.records?.filter { it.exStatus == lockStatus.find { it.dictLabel == "异常" }?.dictValue }
+                                                ?.map { it.lockNfc }?.toMutableList()
+                                                ?: mutableListOf())
+                                        ) {
+                                            ToastUtils.tip(
+                                                MyApplication.instance?.applicationContext!!.getString(
+                                                    R.string.lock_exception_tag
+                                                )
+                                            )
+                                        } else if (slotsPage?.records
+                                                ?.filter {
+                                                    it.slotType == slotTypeList.find { d -> d.dictLabel == "锁" }?.dictValue &&
+                                                            it.status == slotStatusList.find { d -> d.dictLabel == "异常" }?.dictValue
+                                                }
+                                                ?.find { it.row?.toInt() == dockBean.row &&(lockBean.idx+1) == it.col?.toInt() } != null
+                                        ) {
+                                            ToastUtils.tip(
+                                                MyApplication.instance?.applicationContext!!.getString(
+                                                    R.string.slot_exception_tag
+                                                )
+                                            )
+                                        } else {
+                                            NetApi.getLockInfo(rfid) {
+                                                if (it != null) {
+                                                    // TODO 考虑快速拿取
+                                                    ModBusController.controlLockBuckle(
+                                                        false,
+                                                        dockBean.addr,
+                                                        lockBean.idx
+                                                    ) { itRst ->
+                                                        if (itRst.isNotEmpty()) {
+                                                            // 上报锁具信息
+                                                            NetApi.updateLockReturn(
+                                                                rfid,
+                                                                MyApplication.instance!!.serialNo()
+                                                            ) {}
+                                                        }
+                                                    }
+                                                }
                                             }
                                         }
                                     }
@@ -506,22 +587,36 @@ object BusinessManager {
                                         ModBusController.updateLockRfid(
                                             dockBean.addr, deviceBean.idx, rfid
                                         )
-
-                                        NetApi.getLockInfo(rfid) {
-                                            ModBusController.updateLockNewHardware(
-                                                dockBean.addr, deviceBean.idx, it == null
-                                            )
-                                            if (it != null) {
-                                                // TODO 考虑快速拿取
-                                                ModBusController.controlLockBuckle(
-                                                    false, dockBean.addr, deviceBean.idx
-                                                ) { itRst ->
-                                                    if (itRst.isNotEmpty()) {
-                                                        // 上报锁具信息
-                                                        NetApi.updateLockReturn(
-                                                            rfid,
-                                                            MyApplication.instance!!.serialNo()
-                                                        ) {}
+                                        ThreadUtils.runOnIO {
+                                            val lockStatusReq =
+                                                async { fetchDict<CommonDictRespVO>(DictConstants.KEY_PAD_LOCK_STATUS) }
+                                            var lockStatus = lockStatusReq.await()
+                                            NetApi.getIsLockPage { lockData ->
+                                                //锁rfid未异常正常请求锁数据,关锁
+                                                if (rfid !in (lockData?.records?.filter { it.exStatus == lockStatus.find { it.dictLabel == "异常" }?.dictValue }
+                                                        ?.map { it.lockNfc }?.toMutableList()
+                                                        ?: mutableListOf())
+                                                ) {
+                                                    NetApi.getLockInfo(rfid) {
+                                                        ModBusController.updateLockNewHardware(
+                                                            dockBean.addr,
+                                                            deviceBean.idx,
+                                                            it == null
+                                                        )
+                                                        if (it != null) {
+                                                            // TODO 考虑快速拿取
+                                                            ModBusController.controlLockBuckle(
+                                                                false, dockBean.addr, deviceBean.idx
+                                                            ) { itRst ->
+                                                                if (itRst.isNotEmpty()) {
+                                                                    // 上报锁具信息
+                                                                    NetApi.updateLockReturn(
+                                                                        rfid,
+                                                                        MyApplication.instance!!.serialNo()
+                                                                    ) {}
+                                                                }
+                                                            }
+                                                        }
                                                     }
                                                 }
                                             }
@@ -693,14 +788,14 @@ object BusinessManager {
                     async { fetchDict<CommonDictRespVO>(DictConstants.KEY_PAD_LOCK_STATUS) }
                 val slotStatus =
                     async { fetchDict<CommonDictRespVO>(DictConstants.KEY_SLOT_STATUS) }
-                val keyStatus = async { fetchDict<CommonDictRespVO>(DictConstants.KEY_KEY_STATUS) }
                 val slotType = async { fetchDict<CommonDictRespVO>(DictConstants.KEY_SLOT_TYPE) }
+                val keyStatus = async { fetchDict<CommonDictRespVO>(DictConstants.KEY_KEY_STATUS) }
 
                 // 等待字典加载完成
                 val lockStatusList = lockStatus.await()
                 val slotStatusList = slotStatus.await()
-                val keyStatusList = keyStatus.await()
                 val slotTypeList = slotType.await()
+                val keyStatusList = keyStatus.await()
 
                 // —— 在 Default 线程做计算密集操作 ——
                 val lockMap = withContext(Dispatchers.Default) {
@@ -1264,7 +1359,6 @@ object BusinessManager {
             } else {
                 // 当前策略:作业票未完成禁止归还钥匙
                 showKeyReturnDialog {
-//                    handleKeyReturn(bleDevice, workTicketGetBO)
                     sendLoadingEventMsg(null, false)
                     ToastUtils.tip(R.string.continue_the_ticket)
                     BleManager.getInstance().disconnect(bleDevice)
@@ -1285,7 +1379,6 @@ object BusinessManager {
         keyBean?.let {
             ModBusController.controlKeyBuckle(false, keyBean.isLeft, dock.addr)
         }
-
         // 上报隔离点状态
         val keyNfc = ModBusController.getKeyByMac(bleDevice.mac)?.rfid
         workTicketGetBO?.data?.forEach { data ->
@@ -1309,8 +1402,11 @@ object BusinessManager {
             ToastUtils.tip(R.string.key_return_success)
             if (CAN_RETURN) {
                 // 上报点位钥匙绑定
-                NetApi.updateLockPointBatch(updateList) { isSuccess ->
-                    if (isSuccess) {
+                NetApi.updateLockPointBatch(updateList) { isSuccess, msg ->
+                    if (isSuccess || msg == MyApplication.instance?.applicationContext!!.getString(
+                            R.string.ticket_lost
+                        )
+                    ) {
                         data.taskCode?.toLong()?.let {
                             sendEventMsg(
                                 MsgEvent(
@@ -1320,7 +1416,7 @@ object BusinessManager {
                         }
                         // 确认归还,切换为待机模式
                         switchReadyMode(bleDevice)
-                    } else {
+                    } else if (msg != MyApplication.instance?.applicationContext!!.getString(R.string.lock_nfc_lost)) {
                         SPUtils.saveUpdateLockPoint(MyApplication.instance!!, updateList)
                     }
                 }
@@ -1689,8 +1785,11 @@ object BusinessManager {
         if (!CAN_RETURN) return
         val updateList = SPUtils.getUpdateLockPoint(context)
         if (updateList.isNotEmpty()) {
-            NetApi.updateLockPointBatch(updateList) { isSuccess ->
-                if (isSuccess) {
+            NetApi.updateLockPointBatch(updateList) { isSuccess, msg ->
+                if (isSuccess || msg == MyApplication.instance?.applicationContext!!.getString(
+                        R.string.ticket_lost
+                    )
+                ) {
                     SPUtils.clearUpdateLockPoint(context)
                 }
             }

+ 96 - 11
app/src/main/java/com/grkj/iscs/modbus/DockBean.kt

@@ -1,6 +1,9 @@
 package com.grkj.iscs.modbus
 
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
 import com.grkj.iscs.BusinessManager
+import com.grkj.iscs.MyApplication
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
@@ -13,7 +16,9 @@ import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
 import com.grkj.iscs.model.eventmsg.MsgEvent
 import com.grkj.iscs.model.eventmsg.MsgEventConstants.MSG_EVENT_SWITCH_COLLECTION_UPDATE
+import com.grkj.iscs.util.SPUtils
 import com.grkj.iscs.util.log.LogUtil
+import com.grkj.iscs.view.fragment.DockTestFragment
 import java.util.concurrent.atomic.AtomicInteger
 
 /**
@@ -25,10 +30,21 @@ import java.util.concurrent.atomic.AtomicInteger
  */
 class DockBean(
     var addr: Byte,
+    var row: Int,
+    var col: Int,
     var type: Byte?,
     var isWorking: Boolean = true,
     var deviceList: MutableList<DeviceBean>
 ) {
+    companion object {
+        val dockConfig: List<DockTestFragment.DockTestBean> by lazy {
+            val json =
+                SPUtils.getDockConfig(MyApplication.instance?.applicationContext!!)
+            val type = object : TypeToken<List<DockTestFragment.DockTestBean>>() {}.type
+            return@lazy Gson().fromJson(json, type)
+        }
+    }
+
     /**
      * 转换状态
      */
@@ -90,8 +106,14 @@ class DockBean(
                             }
                         }
                     }
-
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 DOCK_TYPE_LOCK -> {
@@ -123,7 +145,14 @@ class DockBean(
                     }
 
                     LogUtil.i("锁具刷新状态 : $changeList")
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 DOCK_TYPE_ELEC_LOCK_BOARD -> {
@@ -202,13 +231,27 @@ class DockBean(
                         changeList.add(getFingerPrintList()[0])
                     }
                     LogUtil.i("便携式刷新状态 : $changeList")
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 DOCK_TYPE_COLLECT -> {
                     val working = (byteArray[4].toInt() shr 0) and 0x1 == 1
                     LogUtil.i("开关量采集板是否工作 : $working")
-                    return DockBean(addr, it, working, mutableListOf())
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        working,
+                        mutableListOf()
+                    )
                 }
 
                 else -> return null
@@ -242,7 +285,14 @@ class DockBean(
                         }
                     }
 
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 DOCK_TYPE_LOCK -> {
@@ -261,7 +311,14 @@ class DockBean(
                     }
 
                     LogUtil.i("锁具刷新状态 : $changeList")
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 DOCK_TYPE_ELEC_LOCK_BOARD -> {
@@ -282,7 +339,14 @@ class DockBean(
                     }
 
                     LogUtil.i("电磁锁具刷新状态 : $changeList")
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 DOCK_TYPE_PORTABLE -> {
@@ -303,7 +367,14 @@ class DockBean(
                         getKeyList()[0].lockEnabled = keyLockEnabled
                     }
                     LogUtil.i("便携式刷新状态 : $changeList")
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 else -> return null
@@ -361,7 +432,14 @@ class DockBean(
                             }
                         }
                     }
-                    return DockBean(addr, type, isWorking, deviceList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        type,
+                        isWorking,
+                        deviceList
+                    )
                 }
 
                 else -> return null
@@ -394,7 +472,14 @@ class DockBean(
                     }
 
                     LogUtil.i("锁具刷新状态 : $changeList")
-                    return DockBean(addr, it, true, changeList)
+                    return DockBean(
+                        addr,
+                        dockConfig.find { it.address == addr }?.row?.toInt() ?: 0,
+                        dockConfig.find { it.address == addr }?.column?.toInt() ?: 0,
+                        it,
+                        true,
+                        changeList
+                    )
                 }
 
                 else -> return null

+ 7 - 1
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -494,7 +494,13 @@ object ModBusController {
         dock?.let {
             it.type = type
         } ?: let {
-            dockList.add(DockBean(idx, type, true, mutableListOf()))
+            dockList.add(
+                DockBean(
+                    idx, DockBean.dockConfig.find { it.address == idx }?.row?.toInt() ?: 0,
+                    DockBean.dockConfig.find { it.address == idx }?.column?.toInt() ?: 0,
+                    type, true, mutableListOf()
+                )
+            )
         }
     }
 

+ 11 - 2
app/src/main/java/com/grkj/iscs/util/BitmapUtil.kt

@@ -26,7 +26,8 @@ object BitmapUtil {
 
     fun bitmapToFile(bitmap: Bitmap, fileName: String): File? {
         // 创建一个临时文件
-        val storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
+        val storageDir =
+            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
         if (!storageDir.exists()) {
             storageDir.mkdirs()
         }
@@ -51,7 +52,11 @@ object BitmapUtil {
         }
     }
 
-    fun bitmapToByteArray(bitmap: Bitmap, format: Bitmap.CompressFormat = Bitmap.CompressFormat.PNG, quality: Int = 100): ByteArray {
+    fun bitmapToByteArray(
+        bitmap: Bitmap,
+        format: Bitmap.CompressFormat = Bitmap.CompressFormat.PNG,
+        quality: Int = 100
+    ): ByteArray {
         val stream = ByteArrayOutputStream()
 
         // 将 Bitmap 压缩并写入到 ByteArrayOutputStream 中
@@ -69,6 +74,10 @@ object BitmapUtil {
         reqHeight: Int? = null,
         callback: (Bitmap?) -> Unit
     ) {
+        if (url?.isEmpty() == true) {
+            callback(null)
+            return
+        }
         try {
             val builder = Glide.with(ctx)
                 .asBitmap()

+ 4 - 4
app/src/main/java/com/grkj/iscs/util/NetApi.kt

@@ -549,7 +549,7 @@ object NetApi {
     fun updateLockPointBatch(
         list: MutableList<LockPointUpdateReqVO>,
         retryCount: Int = 3,
-        callBack: (Boolean) -> Unit
+        callBack: (Boolean, String) -> Unit
     ) {
         NetHttpManager.getInstance().doRequestNet(
             UrlConsts.LOCK_POINT_UPDATE_BATCH,
@@ -557,16 +557,16 @@ object NetApi {
             mapOf(
                 "list" to list
             ),
-            { res, _, _ ->
+            { res, msg, _ ->
                 res?.let {
-                    callBack(true)
+                    callBack(true, msg.toString())
                 } ?: let {
                     if (retryCount > 0) {
                         Executor.delayOnIO(500) {
                             updateLockPointBatch(list, retryCount - 1, callBack)
                         }
                     } else {
-                        callBack.invoke(false)
+                        callBack.invoke(false, msg.toString())
                     }
                 }
             }, isGet = false, isAuth = true

+ 14 - 12
app/src/main/java/com/grkj/iscs/view/fragment/JobProgressFragment.kt

@@ -10,6 +10,7 @@ import com.grkj.iscs.databinding.FragmentJobProgressBinding
 import com.grkj.iscs.extentions.debounce
 import com.grkj.iscs.model.bo.PageChangeBO
 import com.grkj.iscs.model.eventmsg.MsgEvent
+import com.grkj.iscs.model.eventmsg.MsgEventConstants
 import com.grkj.iscs.model.eventmsg.MsgEventConstants.MSG_EVENT_UPDATE_TICKET_PROGRESS
 import com.grkj.iscs.model.eventmsg.UpdateTicketProgressMsg
 import com.grkj.iscs.model.vo.ticket.TicketDetailMonitorRespVO
@@ -179,18 +180,19 @@ class JobProgressFragment(val goBack: () -> Unit) :
         }
 
         observer = Observer { newData ->
-            if (newData.code != MSG_EVENT_UPDATE_TICKET_PROGRESS) {
-                return@Observer
-            }
-            LogUtil.i("Update progress msg, isVisible : $isVisible")
-            if (!isVisible) {
-                return@Observer
-            }
-            val ticketId = (newData.data as UpdateTicketProgressMsg).ticketId
-            LogUtil.i("Update progress msg, ticketId : $ticketId")
-            if (ticketId == mPageChangeBO?.ticketId) {
-                mPageChangeBO?.let {
-                    refreshPage(it)
+            when (newData.code) {
+                MSG_EVENT_UPDATE_TICKET_PROGRESS -> {
+                    LogUtil.i("Update progress msg, isVisible : $isVisible")
+                    if (!isVisible) {
+                        return@Observer
+                    }
+                    val ticketId = (newData.data as UpdateTicketProgressMsg).ticketId
+                    LogUtil.i("Update progress msg, ticketId : $ticketId")
+                    if (ticketId == mPageChangeBO?.ticketId) {
+                        mPageChangeBO?.let {
+                            refreshPage(it)
+                        }
+                    }
                 }
             }
         }

+ 60 - 14
app/src/main/java/com/grkj/iscs/view/fragment/WorkshopFragment.kt

@@ -44,11 +44,16 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
             JobStatistics(Constants.SOP_CLEAN, 0),
             JobStatistics(Constants.SOP_SWITCH_PRODUCT, 0)
         )
-        
-        mBinding?.rvStatistics?.adapter = object : CommonAdapter<JobStatistics>(requireActivity(), R.layout.item_rv_job_management, jobStatisticList) {
+
+        mBinding?.rvStatistics?.adapter = object : CommonAdapter<JobStatistics>(
+            requireActivity(),
+            R.layout.item_rv_job_management,
+            jobStatisticList
+        ) {
             override fun convert(holder: ViewHolder, statistic: JobStatistics, position: Int) {
                 holder.getView<ImageView>(R.id.iv).setImageResource(statistic.sopType.icon)
-                holder.setText(R.id.tv_name,
+                holder.setText(
+                    R.id.tv_name,
                     if (statistic.count == 0) statistic.sopType.title
                     else "${statistic.sopType.title}(${statistic.count})"
                 )
@@ -61,49 +66,84 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
 
     fun refreshPage() {
         presenter?.getMapInfo {
+            LogUtil.i("开始加载地图工作区域:${it?.imageUrl}")
             BitmapUtil.loadBitmapFromUrl(requireContext(), it?.imageUrl!!) {
                 if (it == null) {
                     LogUtil.e("Map pic is null")
                     return@loadBitmapFromUrl
                 }
                 mMapPicWidth = it.width
+                LogUtil.i("地图大小:${it.width}")
                 mBinding?.mapview?.loadMap(it)
-                
+
                 presenter?.getMapPointPage {
                     mPointList.clear()
                     it?.records?.forEach { itPoint ->
-                        mPointList.add(CustomPoint(PointF(itPoint.x!!.toFloat() + 100, itPoint.y!!.toFloat()), itPoint.entityName!!, itPoint.entityId!!, mutableListOf()))
+                        mPointList.add(
+                            CustomPoint(
+                                PointF(
+                                    itPoint.x!!.toFloat() + 100,
+                                    itPoint.y!!.toFloat()
+                                ), itPoint.entityName!!, itPoint.entityId!!, mutableListOf()
+                            )
+                        )
                     }
                     presenter?.getWorkstationTicketList {
                         if (it == null) {
                             return@getWorkstationTicketList
                         }
                         jobStatisticList.forEach { itJob ->
-                            itJob.count = it.count { it.ticketType == itJob.sopType.type.toString() }
+                            itJob.count =
+                                it.count { it.ticketType == itJob.sopType.type.toString() }
                         }
                         mPointList.forEach { itPoint ->
-                            itPoint.ticketList = it.filter { it.workstationId == itPoint.workstationId }.toMutableList()
+                            itPoint.ticketList =
+                                it.filter { it.workstationId == itPoint.workstationId }
+                                    .toMutableList()
                             itPoint.ticketList.take(4).forEachIndexed { index, itTicket ->
                                 if (itPoint.ticketList.size > 3 && index == 3) {
                                     BitmapUtil.loadBitmapFromUrl(
                                         requireContext(),
-                                        SPUtils.getAttributeValue(requireContext(), Constants.getTicketKey(5)),
+                                        SPUtils.getAttributeValue(
+                                            requireContext(),
+                                            Constants.getTicketKey(5)
+                                        ),
                                         R.mipmap.ticket_type_placeholder,
                                         60, 60
                                     ) { itBitmap ->
-                                        itTicket.bitmap = itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(requireContext(), R.mipmap.ticket_type_placeholder, 60, 60)
+                                        itTicket.bitmap =
+                                            itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(
+                                                requireContext(),
+                                                R.mipmap.ticket_type_placeholder,
+                                                60,
+                                                60
+                                            )
                                     }
                                 } else {
                                     if (itTicket.ticketType == null) {
-                                        itTicket.bitmap = BitmapUtil.getResizedBitmapFromMipmap(requireContext(), R.mipmap.ticket_type_placeholder, 60, 60)
+                                        itTicket.bitmap = BitmapUtil.getResizedBitmapFromMipmap(
+                                            requireContext(),
+                                            R.mipmap.ticket_type_placeholder,
+                                            60,
+                                            60
+                                        )
                                     } else {
                                         BitmapUtil.loadBitmapFromUrl(
                                             requireContext(),
-                                            SPUtils.getAttributeValue(requireContext(), Constants.getTicketKey(itTicket.ticketType.toInt())),
+                                            SPUtils.getAttributeValue(
+                                                requireContext(),
+                                                Constants.getTicketKey(itTicket.ticketType.toInt())
+                                            ),
                                             R.mipmap.ticket_type_placeholder,
                                             60, 60
                                         ) { itBitmap ->
-                                            itTicket.bitmap = itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(requireContext(), R.mipmap.ticket_type_placeholder, 60, 60)
+                                            itTicket.bitmap =
+                                                itBitmap ?: BitmapUtil.getResizedBitmapFromMipmap(
+                                                    requireContext(),
+                                                    R.mipmap.ticket_type_placeholder,
+                                                    60,
+                                                    60
+                                                )
                                         }
                                     }
                                 }
@@ -112,7 +152,8 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
                         mBinding?.rvStatistics?.adapter?.notifyDataSetChanged()
 
                         Executor.repeatOnMain({
-                            val isAllBitmapLoaded = mPointList.all { it.ticketList.take(4).all { it.bitmap != null } }
+                            val isAllBitmapLoaded =
+                                mPointList.all { it.ticketList.take(4).all { it.bitmap != null } }
                             if (isAllBitmapLoaded) {
                                 mBinding?.mapview?.refresh()
                             }
@@ -188,5 +229,10 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
 
     data class JobStatistics(var sopType: Constants.SopType, var count: Int)
 
-    data class CustomPoint(val pos: PointF, val name: String, val workstationId: Long, var ticketList: MutableList<WorkstationTicketListRespVO>)
+    data class CustomPoint(
+        val pos: PointF,
+        val name: String,
+        val workstationId: Long,
+        var ticketList: MutableList<WorkstationTicketListRespVO>
+    )
 }

+ 4 - 0
app/src/main/res/values-en/strings.xml

@@ -354,4 +354,8 @@
     <string name="exception_select_hardware_tip">Please select hardware</string>
     <string name="check_key_and_lock">check key and lock</string>
     <string name="turn_read">read</string>
+    <string name="lock_nfc_lost">{\"msg\":\"挂锁nfc缺失!\",\"code\":500}</string>
+    <string name="key_exception_tag">Key is tag for exception</string>
+    <string name="slot_exception_tag">Slot is tag for exception</string>
+    <string name="lock_exception_tag">Lock is tag for exception</string>
 </resources>

+ 4 - 0
app/src/main/res/values-zh/strings.xml

@@ -354,4 +354,8 @@
     <string name="exception_select_hardware_tip">请选择硬件</string>
     <string name="check_key_and_lock">正在检查钥匙和挂锁</string>
     <string name="turn_read">读</string>
+    <string name="lock_nfc_lost">{\"msg\":\"挂锁nfc缺失!\",\"code\":500}</string>
+    <string name="key_exception_tag">该钥匙已被标记异常</string>
+    <string name="slot_exception_tag">该锁仓已被标记异常</string>
+    <string name="lock_exception_tag">该挂锁已被标记异常</string>
 </resources>

+ 4 - 0
app/src/main/res/values/strings.xml

@@ -354,4 +354,8 @@
     <string name="exception_select_hardware_tip">请选择硬件</string>
     <string name="check_key_and_lock">正在检查钥匙和挂锁</string>
     <string name="turn_read">读</string>
+    <string name="lock_nfc_lost">{\"msg\":\"挂锁nfc缺失!\",\"code\":500}</string>
+    <string name="key_exception_tag">该钥匙已被标记异常</string>
+    <string name="slot_exception_tag">该锁仓已被标记异常</string>
+    <string name="lock_exception_tag">该挂锁已被标记异常</string>
 </resources>