|
|
@@ -25,6 +25,7 @@ import com.grkj.iscs.extentions.toByteArray
|
|
|
import com.grkj.iscs.extentions.toHexStrings
|
|
|
import com.grkj.iscs.modbus.DockBean
|
|
|
import com.grkj.iscs.modbus.ModBusController
|
|
|
+import com.grkj.iscs.model.Constants
|
|
|
import com.grkj.iscs.model.Constants.PERMISSION_REQUEST_CODE
|
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
|
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
|
|
|
@@ -233,9 +234,6 @@ object BusinessManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /****************************************** 蓝牙 ******************************************/
|
|
|
-
|
|
|
/**
|
|
|
* 检查钥匙和锁具数量
|
|
|
*
|
|
|
@@ -272,18 +270,23 @@ object BusinessManager {
|
|
|
callBack.invoke(if (lockCount < needLockCount) null else key, lockMap)
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 下发工作票
|
|
|
- */
|
|
|
- fun sendTicketBusiness(mac: String, activity: AppCompatActivity, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
- isSendTicket = true
|
|
|
+
|
|
|
+ /****************************************** 蓝牙 ******************************************/
|
|
|
+ /******************************************蓝牙通用准备******************************************/
|
|
|
+
|
|
|
+ private fun prepareBle(
|
|
|
+ mac: String,
|
|
|
+ activity: AppCompatActivity,
|
|
|
+ loadingCallBack: (Boolean, String?) -> Unit,
|
|
|
+ prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ ) {
|
|
|
CommonUtils.checkBlePermission(activity) {
|
|
|
- doScanBle(mac, loadingCallBack)
|
|
|
+ doScanBle(mac, loadingCallBack, prepareDoneCallBack)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@AfterPermissionGranted(PERMISSION_REQUEST_CODE)
|
|
|
- fun doScanBle(mac: String, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ fun doScanBle(mac: String, loadingCallBack: (Boolean, String?) -> Unit, prepareDoneCallBack: (Boolean, BleBean?) -> Unit) {
|
|
|
LogUtil.d("扫描开始:$mac")
|
|
|
loadingCallBack(true, "正在扫描设备...")
|
|
|
BleUtil.instance?.scan(object : CustomBleScanCallback() {
|
|
|
@@ -318,13 +321,20 @@ object BusinessManager {
|
|
|
return
|
|
|
}
|
|
|
BleUtil.instance?.getBleDeviceByMac(mac)?.bleDevice?.let {
|
|
|
- doConnect(it, loadingCallBack)
|
|
|
+ doConnect(it, loadingCallBack, prepareDoneCallBack)
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- fun doConnect(bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ /**
|
|
|
+ * 连接蓝牙设备
|
|
|
+ */
|
|
|
+ fun doConnect(
|
|
|
+ bleDevice: BleDevice,
|
|
|
+ loadingCallBack: (Boolean, String?) -> Unit,
|
|
|
+ prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ ) {
|
|
|
loadingCallBack.invoke(true, CommonUtils.getStr(R.string.ble_connecting))
|
|
|
BleManager.getInstance().disconnect(bleDevice)
|
|
|
BleUtil.instance?.connectBySelect(bleDevice,
|
|
|
@@ -337,6 +347,7 @@ object BusinessManager {
|
|
|
|
|
|
override fun onConnectFail(bleDevice: BleDevice?, exception: BleException?) {
|
|
|
loadingCallBack.invoke(false, CommonUtils.getStr(R.string.ble_connect_fail))
|
|
|
+ prepareDoneCallBack.invoke(false, null)
|
|
|
}
|
|
|
|
|
|
override fun onConnectSuccess(bleDevice: BleDevice?, gatt: BluetoothGatt?, status: Int) {
|
|
|
@@ -352,7 +363,7 @@ object BusinessManager {
|
|
|
}
|
|
|
// 监听
|
|
|
Executor.delayOnMain(500) {
|
|
|
- indicate(bleBean, loadingCallBack)
|
|
|
+ indicate(bleBean, loadingCallBack, prepareDoneCallBack)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -367,7 +378,14 @@ object BusinessManager {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- fun indicate(bleBean: BleBean?, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ /**
|
|
|
+ * 监听蓝牙设备
|
|
|
+ */
|
|
|
+ private fun indicate(
|
|
|
+ bleBean: BleBean?,
|
|
|
+ loadingCallBack: (Boolean, String?) -> Unit,
|
|
|
+ prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ ) {
|
|
|
loadingCallBack.invoke(true, "开始监听...")
|
|
|
bleBean?.let {
|
|
|
BleUtil.instance?.indicate(it.bleDevice, indicateCallback = object : CustomBleIndicateCallback() {
|
|
|
@@ -387,15 +405,14 @@ object BusinessManager {
|
|
|
LogUtil.i("监听成功")
|
|
|
// 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) {
|
|
|
- getToken(bleBean, loadingCallBack)
|
|
|
- }
|
|
|
+ getToken(bleBean, loadingCallBack, prepareDoneCallBack)
|
|
|
}
|
|
|
|
|
|
override fun onIndicateFailure(exception: BleException?) {
|
|
|
loadingCallBack.invoke(false, null)
|
|
|
ToastUtils.tip("监听失败")
|
|
|
LogUtil.i("监听失败")
|
|
|
+ prepareDoneCallBack.invoke(false, null)
|
|
|
}
|
|
|
|
|
|
override fun onCharacteristicChanged(data: ByteArray?) {
|
|
|
@@ -408,35 +425,74 @@ object BusinessManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- fun getToken(bleBean: BleBean?, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ /**
|
|
|
+ * 获取蓝牙钥匙token
|
|
|
+ */
|
|
|
+ private fun getToken(
|
|
|
+ bleBean: BleBean?,
|
|
|
+ loadingCallBack: (Boolean, String?) -> Unit,
|
|
|
+ prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ ) {
|
|
|
loadingCallBack.invoke(true, "开始获取token...")
|
|
|
bleBean?.let {
|
|
|
BleCmdManager.getToken(it.bleDevice.mac, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
loadingCallBack.invoke(false, "token获取成功")
|
|
|
LogUtil.i("getToken success : ${bleBean.bleDevice.mac}")
|
|
|
- Executor.delayOnMain(500) {
|
|
|
- if (isSendTicket) {
|
|
|
- // TODO 要改成正式的json
|
|
|
- bleBean.ticketSend?.let { itJson ->
|
|
|
- sendTicket(itJson, it.bleDevice, loadingCallBack)
|
|
|
- }
|
|
|
-// sendTicket(PresentationManager.getTicketJson(), it.bleDevice, loadingCallBack)
|
|
|
- } else {
|
|
|
- getTicketStatus(it.bleDevice, loadingCallBack)
|
|
|
- }
|
|
|
- }
|
|
|
+ prepareDoneCallBack.invoke(true, bleBean)
|
|
|
}
|
|
|
|
|
|
override fun onWriteFailure(exception: BleException?) {
|
|
|
loadingCallBack.invoke(false, "token获取失败")
|
|
|
LogUtil.e("getToken fail : ${bleBean.bleDevice.mac}")
|
|
|
+ prepareDoneCallBack.invoke(false, null)
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ /******************************************蓝牙通用准备结束******************************************/
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下发工作票
|
|
|
+ */
|
|
|
+ fun sendTicketBusiness(
|
|
|
+ mac: String,
|
|
|
+ ticketDetail: TicketDetailRespVO,
|
|
|
+ activity: AppCompatActivity,
|
|
|
+ loadingCallBack: (Boolean, String?) -> Unit,
|
|
|
+ ) {
|
|
|
+ prepareBle(mac, activity, loadingCallBack) { done, bleBean ->
|
|
|
+ if (done) {
|
|
|
+ Executor.delayOnMain(500) {
|
|
|
+ // 单bleBean json赋值
|
|
|
+ bleBean?.ticketSend = generateTicketSendJson(ticketDetail)
|
|
|
+ bleBean?.ticketSend?.let { itJson ->
|
|
|
+ sendTicket(itJson, bleBean.bleDevice, loadingCallBack)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ loadingCallBack.invoke(false, null)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 读取工作票完成情况
|
|
|
+ */
|
|
|
+ fun getTicketStatusBusiness(mac: String, activity: AppCompatActivity, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ prepareBle(mac, activity, loadingCallBack) { done, bleBean ->
|
|
|
+ if (done) {
|
|
|
+ Executor.delayOnMain(500) {
|
|
|
+ getTicketStatus(bleBean!!.bleDevice, loadingCallBack)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ loadingCallBack.invoke(false, null)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
loadingCallBack.invoke(true, "开始下发工作票...")
|
|
|
BleCmdManager.sendWorkTicket(jsonStr, bleDevice = bleDevice, callback = object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
@@ -452,11 +508,13 @@ object BusinessManager {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * TODO 生成下发工作票Json
|
|
|
+ * 生成下发工作票Json
|
|
|
*
|
|
|
- * @param isLock true:上锁任务 false:解锁任务
|
|
|
+ * @param vo 工作票详情
|
|
|
*/
|
|
|
- fun generateTicketSendJson(isLock: Boolean, vo: TicketDetailRespVO): String {
|
|
|
+ private fun generateTicketSendJson(vo: TicketDetailRespVO): String {
|
|
|
+ // 用ticketStatus的"待上锁"进行判断
|
|
|
+ val isLock = vo.ticketStatus == Constants.TICKET_STATUS_READY_TO_LOCK
|
|
|
val bo = WorkTicketSendBO(
|
|
|
cardNo = SPUtils.getLoginUser(MyApplication.instance!!.applicationContext)?.cardNfc,
|
|
|
)
|
|
|
@@ -583,6 +641,15 @@ object BusinessManager {
|
|
|
override fun onWriteFailure(exception: BleException?) {
|
|
|
println("switch mode 1 fail")}
|
|
|
})
|
|
|
+ // 打开钥匙卡扣
|
|
|
+ val keyBean = ModBusController.getKeyByRfid(bleBean.bleDevice.mac)
|
|
|
+ if (keyBean == null) {
|
|
|
+ loadingCallBack.invoke(false, "未找到钥匙信息")
|
|
|
+ ToastUtils.tip(R.string.key_not_exists)
|
|
|
+ } else {
|
|
|
+ val dock = ModBusController.getDockByKeyMac(bleBean.bleDevice.mac)
|
|
|
+ ModBusController.controlKeyBuckle(true, keyBean.isLeft, dock?.addr?.toInt())
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -641,20 +708,10 @@ object BusinessManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 读取工作票完成情况
|
|
|
- */
|
|
|
- fun getTicketStatusBusiness(mac: String, activity: AppCompatActivity, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
- isSendTicket = false
|
|
|
- CommonUtils.checkBlePermission(activity) {
|
|
|
- doScanBle(mac, loadingCallBack)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取工作票完成情况
|
|
|
*/
|
|
|
- fun getTicketStatus(bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
+ private fun getTicketStatus(bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
loadingCallBack.invoke(true, "开始获取工作票")
|
|
|
BleCmdManager.getTicketStatus(bleDevice, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|