Pārlūkot izejas kodu

修复蓝牙指令发送异常(未配置token)

Frankensteinly 1 gadu atpakaļ
vecāks
revīzija
4dfef7b0a6

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

@@ -320,7 +320,7 @@ object BusinessManager {
                     val testStr = "{\"cardNo\":\"80A8C0F4EA\",\"password\":\"12345678\",\"effectiveTime\":24,\"data\":[{\"taskCode\":\"202401020001\",\"taskId\":\"71b49baa49b343bc84d7e6b829ac1bdc\",\"codeId\":1,\"dataList\":[{\"dataId\":1,\"equipRfidNo\":\"049648B2E31690\",\"infoRfidNo\":\"04E3BCCA201290\",\"target\":1},{\"dataId\":2,\"equipRfidNo\":\"0405982414C563\",\"target\":0,\"prevId\":1}]},{\"taskCode\":\"202401020002\",\"taskId\":\"145b5a4cc38c41e19943f4c8b48d12b0\",\"codeId\":2,\"dataList\":[{\"dataId\":1,\"equipRfidNo\":\"045460F7F4F438\",\"infoRfidNo\":\"04BC6584C65009\",\"target\":1},{\"dataId\":2,\"equipRfidNo\":\"042B99E449E795\",\"target\":0,\"prevId\":1},{\"dataId\":3,\"equipRfidNo\":\"04A312EE848B62\",\"infoRfidNo\":\"04220E86831289\",\"target\":1,\"prevId\":2}]}],\"lockList\":[{\"lockId\":\"1\",\"rfid\":\"040E21443010E9\"},{\"lockId\":\"2\",\"rfid\":\"0457505E5861C2\"}]}"
 //                    sendTicket(testStr, it.bleDevice, loadingCallBack)
                     Executor.delayOnMain(200) {
-                        sendTicket(ticketJson!!, it.bleDevice, loadingCallBack)
+                        getToken(bleBean, loadingCallBack)
                     }
                 }
 
@@ -340,6 +340,33 @@ object BusinessManager {
         }
     }
 
+    fun getToken(bleBean: BleBean?, loadingCallBack: (Boolean, String?) -> Unit) {
+        loadingCallBack.invoke(true, "开始获取token...")
+        bleBean?.let {
+            BleCmdManager.getToken(it.bleDevice.mac, object : CustomBleWriteCallback() {
+                override fun onPrompt(promptStr: String?) {}
+
+                override fun onConnectPrompt(promptStr: String?) {}
+
+                override fun onDisConnectPrompt(promptStr: String?) {}
+
+                override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
+                    loadingCallBack.invoke(false, "token获取成功")
+                    println("getToken success")
+                    Executor.delayOnMain(500) {
+                        println("haha : $ticketJson")
+                        sendTicket(ticketJson!!, it.bleDevice, loadingCallBack)
+                    }
+                }
+
+                override fun onWriteFailure(exception: BleException?) {
+                    loadingCallBack.invoke(false, "token获取失败")
+                    println("getToken fail")
+                }
+            })
+        }
+    }
+
     fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
         loadingCallBack.invoke(true, "开始下发工作票...")
         BleCmdManager.sendWorkTicket(jsonStr, bleDevice = bleDevice, callback = object : CustomBleWriteCallback() {
@@ -370,6 +397,8 @@ object BusinessManager {
             LogUtil.e("Token is wrong")
         }
         when {
+            // 获取令牌
+            byteArray.startsWith(BleConst.RSP_GET_TOKEN) -> handleToken(bleBean.bleDevice, byteArray)
             // 工作模式切换
             byteArray.startsWith(BleConst.RSP_SWITCH_MODE) -> handleSwitchModeResult(byteArray, loadingCallBack)
             // 工作票下发
@@ -380,6 +409,18 @@ object BusinessManager {
         }
     }
 
+    /**
+     * 令牌处理
+     */
+    private fun handleToken(bleDevice: BleDevice, byteArray: ByteArray) {
+        LogUtil.i("handleToken : ${byteArray.toHexStrings()}")
+        BleUtil.instance?.getBleDeviceByMac(bleDevice.mac)?.let {
+            it.token = byteArrayOf(byteArray[11], byteArray[12], byteArray[13], byteArray[14])
+
+            println("Token 赋值 ${it.token?.toHexStrings()} : ${bleDevice.mac}")
+        }
+    }
+
     /**
      * 工作模式切换结果
      * job : 0x01:工作模式 0x02:待机模式
@@ -391,7 +432,7 @@ object BusinessManager {
         val res = byteArray[5]
         loadingCallBack.invoke(false, null)
         if (res == 0x01.toByte() && job == 0x01.toByte()) {
-
+            loadingCallBack.invoke(false, "切换工作模式成功")
         }
     }
 

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

@@ -231,7 +231,7 @@ class BleActivity : BaseActivity<ActivityBleBinding>() {
                     holder.setOnClickListener(R.id.sendTicket) {
 //                        val testStr = "{\"cardNo\":\"ACB13E0B\",\"data\":[{\"taskCode\":\"87654321110\",\"taskId\":\"587aa6cfcce940778836e512a10c330e\",\"dataList\":[{\"dataId\":1,\"target\":0,\"status\":0,\"closed\":1,\"equipRfidNo\":\"1DA0C66D031080\",\"infoRfidNo\":\"206BD295\"},{\"dataId\":2,\"target\":0,\"status\":0,\"closed\":1,\"equipRfidNo\":\"1DCAD26D031080\",\"infoRfidNo\":\"D074D295\"}],\"closed\":1}]}"
 //                        val testStr = "{\"cardNo\":\"80A8C0F4EA\",\"password\":\"12345678\",\"effectiveTime\":24,\"data\":[{\"taskCode\":\"202401020001\",\"taskId\":\"71b49baa49b343bc84d7e6b829ac1bdc\",\"codeId\":1,\"dataList\":[{\"dataId\":1,\"equipRfidNo\":\"049648B2E31690\",\"infoRfidNo\":\"04E3BCCA201290\",\"target\":1},{\"dataId\":2,\"equipRfidNo\":\"0405982414C563\",\"target\":0,\"prevId\":1}]},{\"taskCode\":\"202401020002\",\"taskId\":\"145b5a4cc38c41e19943f4c8b48d12b0\",\"codeId\":2,\"dataList\":[{\"dataId\":1,\"equipRfidNo\":\"045460F7F4F438\",\"infoRfidNo\":\"04BC6584C65009\",\"target\":1},{\"dataId\":2,\"equipRfidNo\":\"042B99E449E795\",\"target\":0,\"prevId\":1},{\"dataId\":3,\"equipRfidNo\":\"04A312EE848B62\",\"infoRfidNo\":\"04220E86831289\",\"target\":1,\"prevId\":2}]}],\"lockList\":[{\"lockId\":\"1\",\"rfid\":\"040E21443010E9\"},{\"lockId\":\"2\",\"rfid\":\"0457505E5861C2\"}]}"
-                        val testStr = "{\"cardNo\":\"267747D5\",\"data\":[{\"codeId\":1,\"dataList\":[{\"dataId\":0,\"equipRfidNo\":\"1DA0C66D031080\",\"target\":0},{\"dataId\":1,\"equipRfidNo\":\"1DCAD26D031080\",\"prevId\":0,\"target\":0}],\"taskCode\":\"202410290918\"}],\"effectiveTime\":24,\"lockList\":[{\"lockId\":\"1\",\"rfid\":\"706BD295\"},{\"lockId\":\"2\",\"rfid\":\"6CD295\"}]}"
+                        val testStr = "{\"cardNo\":\"267747D5\",\"data\":[{\"codeId\":1,\"dataList\":[{\"dataId\":0,\"equipRfidNo\":\"1DA0C66D031080\",\"target\":0},{\"dataId\":1,\"equipRfidNo\":\"1DCAD26D031080\",\"prevId\":0,\"target\":0}],\"taskCode\":\"202410290918\",\"taskId\":\"123456\"}],\"effectiveTime\":24,\"lockList\":[{\"lockId\":\"1\",\"rfid\":\"706BD295\"},{\"lockId\":\"2\",\"rfid\":\"6CD295\"}]}"
                         BleCmdManager.sendWorkTicket(testStr, bleDevice = item?.bleDevice!!, callback = object : CustomBleWriteCallback() {
                             override fun onPrompt(promptStr: String?) {}
 

+ 10 - 2
app/src/main/java/com/grkj/iscs/presentation/PresentationActivity.kt

@@ -3,6 +3,7 @@ package com.grkj.iscs.presentation
 import android.view.Gravity
 import android.widget.CheckBox
 import androidx.recyclerview.widget.LinearLayoutManager
+import com.clj.fastble.BleManager
 import com.google.gson.Gson
 import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.R
@@ -127,6 +128,7 @@ class PresentationActivity :
             return
         }
         val keyMac = "64:E8:33:47:59:7A"
+//        val keyMac = "64:E8:33:47:59:42"
 
         // 创建工单
         if (mBinding?.siPersonLock?.mSelectIdx == null) {
@@ -134,7 +136,6 @@ class PresentationActivity :
             return
         }
         BusinessManager.ticketJson = createWorkTicket(lockList)
-        println("haha : ${BusinessManager.ticketJson}")
 
         // 操作设备
         ModBusController.controlLockBuckle(true, dockList[0].addr.toInt() - 1, lockIdxList) { res ->
@@ -142,6 +143,9 @@ class PresentationActivity :
         }
         BusinessManager.sendTicketBusiness(keyMac, this) { b, s ->
             handleLoading(b, s)
+            if (s.equals("切换工作模式成功")) {
+                ModBusController.controlKeyBuckle(true, isLeft = true, dockList[0].addr.toInt() - 1)
+            }
         }
     }
 
@@ -158,6 +162,7 @@ class PresentationActivity :
 
         val dataDTO = WorkTicketBean.DataDTO()
         dataDTO.taskCode = SimpleDateFormat("yyyyMMddHHmm").format(Date(System.currentTimeMillis()))
+        dataDTO.taskId = "123456"
         dataDTO.codeId = PresentationManager.workTicketList.size + 1
         dataDTO.dataList = mutableListOf()
 
@@ -202,7 +207,10 @@ class PresentationActivity :
     }
 
 
-
+    override fun onDestroy() {
+        super.onDestroy()
+        BleManager.getInstance().disconnectAllDevice()
+    }
 
 
     override fun initPresenter(): PresentationPresenter {