Răsfoiți Sursa

添加工作票下发失败重试机制;优化打印

Frankensteinly 9 luni în urmă
părinte
comite
a182a2082f

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

@@ -650,11 +650,39 @@ object BusinessManager {
             // 单bleBean json赋值
             bleBean.ticketSend = generateTicketSendJson(ticketDetail, lockList)
             bleBean.ticketSend?.let { itJson ->
-                sendTicket(itJson, bleBean.bleDevice, loadingCallBack)
+                sendTicketWithRetry(itJson, bleBean.bleDevice, loadingCallBack)
             }
         }
     }
 
+    /**
+     * 带重试的下发工作票,重试次数3,间隔500ms
+     */
+    private fun sendTicketWithRetry(
+        json: String,
+        bleDevice: BleDevice,
+        loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
+        maxRetries: Int = 3,
+        delayMillis: Long = 500
+    ) {
+        var retryCount = 0
+
+        fun attemptSend() {
+            sendTicket(json, bleDevice, loadingCallBack) { sendRst ->
+                if (!sendRst && retryCount < maxRetries) {
+                    retryCount++
+                    // 等待一段时间后再次尝试
+                    Executor.delayOnMain(delayMillis) {
+                        LogUtil.i("Retry attempt, mac : ${bleDevice.mac}, retryCount : $retryCount")
+                        attemptSend()
+                    }
+                }
+            }
+        }
+
+        attemptSend()
+    }
+
     /**
      * 读取工作票完成情况
      */
@@ -674,7 +702,7 @@ object BusinessManager {
         }
     }
 
-    private fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
+    private fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?, processCallback: ((Boolean) -> Unit)? = null) {
         loadingCallBack?.invoke(true, "开始下发工作票...", null)
         BleCmdManager.sendWorkTicket(jsonStr, bleDevice = bleDevice, callback = object : CustomBleWriteCallback() {
             override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
@@ -685,6 +713,7 @@ object BusinessManager {
             override fun onWriteFailure(exception: BleException?) {
                 LogUtil.e("sendTicket fail : ${bleDevice.mac}")
                 loadingCallBack?.invoke(false, "工作票下发失败", null)
+                processCallback?.invoke(false)
             }
         })
     }

+ 4 - 2
app/src/main/java/com/grkj/iscs/ble/BleCmdManager.kt

@@ -161,11 +161,13 @@ object BleCmdManager {
         }
 //        val jsonInfo = total + idx.toByteArray() + CRC16.crc16(data, 0, data.size - 1).toByteArray() + data.size.toByteArray() + data
         val jsonInfo = total + idx.toByteArray() + data.crc16(0, data.size) + data.size.toByteArray() + data
-        println("xixi1 : ${total.size} : ${idx.toByteArray().size} : ${data.crc16(0, data.size).size} : ${data.size.toByteArray().size} : ${data.size}")
-        println("xixi2 : ${(jsonInfo.size + 1).toByteArray(1).size} : ${0x02.toByteArray(1).size} : ${jsonInfo.size}")
+        LogUtil.d("debug1 : ${total.size} : ${idx.toByteArray().size} : ${data.crc16(0, data.size).size} : ${data.size.toByteArray().size} : ${data.size}")
+        LogUtil.d("debug2 : ${(jsonInfo.size + 1).toByteArray(1).size} : ${0x02.toByteArray(1).size} : ${jsonInfo.size}")
 
         val cmd = REQ_SEND_WORK_TICKET + (jsonInfo.size + 1).toByteArray(1) + 0x02.toByteArray(1) + jsonInfo
 
+        LogUtil.d("debug3 : ${cmd.toHexStrings()}")
+
         BusinessManager.getBleDeviceByMac(bleDevice.mac)?.let {
             BleUtil.instance?.write(it.bleDevice, cmd = assembleData(it, cmd), writeCallback = callback)
         }

+ 1 - 1
app/src/main/java/com/grkj/iscs/view/activity/test/BleActivity.kt

@@ -313,7 +313,7 @@ class BleActivity : BaseActivity<ActivityBleBinding>() {
                     status: Int
                 ) {
                     handleLoading(false)
-                    LogUtil.i("onConnectSuccess : $bleDevice")
+                    LogUtil.i("onConnectSuccess : ${bleDevice?.mac}")
                     bleDevice?.let {
                         mBinding?.rvBle?.adapter?.notifyItemChanged(position)
                         LogUtil.i("Add BleBean : $mBleList")