|
|
@@ -1,5 +1,6 @@
|
|
|
package com.grkj.ui_base.business
|
|
|
|
|
|
+import android.annotation.SuppressLint
|
|
|
import android.bluetooth.BluetoothGattCharacteristic
|
|
|
import com.google.gson.Gson
|
|
|
import com.grkj.data.data.DictConstants
|
|
|
@@ -362,6 +363,7 @@ object BleBusinessManager {
|
|
|
/**
|
|
|
* 根据当前模式进行处理
|
|
|
*/
|
|
|
+ @SuppressLint("MissingPermission")
|
|
|
private fun handleCurrentMode(currentModeEvent: CurrentModeEvent) {
|
|
|
when (currentModeEvent.mode) {
|
|
|
// 工作模式
|
|
|
@@ -386,62 +388,17 @@ object BleBusinessManager {
|
|
|
return
|
|
|
}
|
|
|
updateBo?.let { itBO ->
|
|
|
- ThreadUtils.runOnIO {
|
|
|
- val jobTicketData =
|
|
|
- LogicManager.jobTicketLogic.getJobTicketDataByTicketId(itBO.ticketId)
|
|
|
- if (jobTicketData == null) {
|
|
|
- ModBusController.updateKeyReadyStatus(
|
|
|
- currentModeEvent.bleBean.bleDevice.mac, true, 4
|
|
|
- )
|
|
|
- ModBusController.controlKeyBuckle(
|
|
|
- false, currentModeEvent.bleBean.bleDevice.mac
|
|
|
- )
|
|
|
- LoadingEvent.sendLoadingEvent()
|
|
|
- logger.info("作业票数据为空")
|
|
|
- return@runOnIO
|
|
|
- }
|
|
|
- LogicManager.jobTicketLogic.getStepDetail(itBO.ticketId) {
|
|
|
- logger.info("步骤数据:${it.toJson()}")
|
|
|
- val step = it?.firstOrNull { it.stepStatus == "0" }
|
|
|
- logger.info("当前步骤:${step.toJson()}")
|
|
|
- LogicManager.jobTicketLogic.getTicketDetail(itBO.ticketId) { ticketDetail ->
|
|
|
- logger.info("步骤详情:${ticketDetail.toJson()}")
|
|
|
- val role =
|
|
|
- ticketDetail?.ticketUserVOList?.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
|
|
|
- ?.find {
|
|
|
- it.userId == MainDomainData.userInfo?.userId
|
|
|
- }
|
|
|
- if (role == null) {
|
|
|
- ThreadUtils.runOnMain {
|
|
|
- PopTip.build()
|
|
|
- .tip(CommonUtils.getStr(R.string.you_are_not_locker_tip))
|
|
|
- }
|
|
|
- return@getTicketDetail
|
|
|
- }
|
|
|
- if (step?.enableLock == true) { // 上锁工作票
|
|
|
- sendTicketBusiness(
|
|
|
- true,
|
|
|
- currentModeEvent.bleBean.bleDevice.mac,
|
|
|
- ticketDetail,
|
|
|
- ticketDetail.ticketLockVOList?.filter {
|
|
|
- it.groupId == MainDomainData.deviceTakeTicketGroupBound[itBO.ticketId] &&
|
|
|
- ticketDetail.ticketPointsVOList?.filter { it.groupId == MainDomainData.deviceTakeTicketGroupBound[itBO.ticketId] }
|
|
|
- ?.mapNotNull { it.lockId }
|
|
|
- ?.contains(it.lockId) != true
|
|
|
- }
|
|
|
- ?.map { it.lockNfc }?.toMutableList(),
|
|
|
- true
|
|
|
- )
|
|
|
- } else if (step?.enableUnlock == true) { // 解锁工作票
|
|
|
- sendTicketBusiness(
|
|
|
- false,
|
|
|
- currentModeEvent.bleBean.bleDevice.mac,
|
|
|
- ticketDetail,
|
|
|
- null,
|
|
|
- true
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
+ if (BleReturnDispatcher.isConnected(currentModeEvent.bleBean.bleDevice.mac)) {
|
|
|
+ logger.info("当前钥匙在归还队列,断开连接")
|
|
|
+ BleReturnDispatcher.scheduleDisconnect(currentModeEvent.bleBean.bleDevice.mac)
|
|
|
+ }
|
|
|
+ if (BleSendDispatcher.isConnected(currentModeEvent.bleBean.bleDevice.mac)) {
|
|
|
+ logger.info("当前钥匙已在发送队列连接")
|
|
|
+ checkAndSendTicket(currentModeEvent, itBO)
|
|
|
+ } else {
|
|
|
+ logger.info("当前钥匙未加入发送队列,连接后发送")
|
|
|
+ BleSendDispatcher.submit(currentModeEvent.bleBean.bleDevice.mac) {
|
|
|
+ checkAndSendTicket(currentModeEvent, itBO)
|
|
|
}
|
|
|
}
|
|
|
} ?: let {
|
|
|
@@ -453,12 +410,22 @@ object BleBusinessManager {
|
|
|
)
|
|
|
LoadingEvent.sendLoadingEvent()
|
|
|
ThreadUtils.runOnIO {
|
|
|
- if (BleReturnDispatcher.isConnected(currentModeEvent.bleBean.bleDevice.mac)) {
|
|
|
- BleReturnDispatcher.scheduleDisconnect(currentModeEvent.bleBean.bleDevice.mac)
|
|
|
- }
|
|
|
+ BleReturnDispatcher.scheduleDisconnect(currentModeEvent.bleBean.bleDevice.mac)
|
|
|
DataBusiness.checkMyTodoForHandleKey(currentModeEvent.bleBean.bleDevice.mac)
|
|
|
}
|
|
|
}
|
|
|
+ } ?: let {
|
|
|
+ ModBusController.updateKeyReadyStatus(
|
|
|
+ currentModeEvent.bleBean.bleDevice.mac, true, 4
|
|
|
+ )
|
|
|
+ ModBusController.controlKeyBuckle(
|
|
|
+ false, currentModeEvent.bleBean.bleDevice.mac
|
|
|
+ )
|
|
|
+ LoadingEvent.sendLoadingEvent()
|
|
|
+ ThreadUtils.runOnIO {
|
|
|
+ BleReturnDispatcher.scheduleDisconnect(currentModeEvent.bleBean.bleDevice.mac)
|
|
|
+ DataBusiness.checkMyTodoForHandleKey(currentModeEvent.bleBean.bleDevice.mac)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
// 故障模式
|
|
|
@@ -471,20 +438,85 @@ object BleBusinessManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 检查并下发作业票
|
|
|
+ */
|
|
|
+ private fun checkAndSendTicket(currentModeEvent: CurrentModeEvent, itBO: DeviceTakeUpdate) {
|
|
|
+ ThreadUtils.runOnIO {
|
|
|
+ val jobTicketData =
|
|
|
+ LogicManager.jobTicketLogic.getJobTicketDataByTicketId(itBO.ticketId)
|
|
|
+ if (jobTicketData == null) {
|
|
|
+ ModBusController.updateKeyReadyStatus(
|
|
|
+ currentModeEvent.bleBean.bleDevice.mac, true, 4
|
|
|
+ )
|
|
|
+ ModBusController.controlKeyBuckle(
|
|
|
+ false, currentModeEvent.bleBean.bleDevice.mac
|
|
|
+ )
|
|
|
+ LoadingEvent.sendLoadingEvent()
|
|
|
+ logger.info("作业票数据为空")
|
|
|
+ return@runOnIO
|
|
|
+ }
|
|
|
+ LogicManager.jobTicketLogic.getStepDetail(itBO.ticketId) {
|
|
|
+ logger.info("步骤数据:${it.toJson()}")
|
|
|
+ val step = it?.firstOrNull { it.stepStatus == "0" }
|
|
|
+ logger.info("当前步骤:${step.toJson()}")
|
|
|
+ LogicManager.jobTicketLogic.getTicketDetail(itBO.ticketId) { ticketDetail ->
|
|
|
+ logger.info("步骤详情:${ticketDetail.toJson()}")
|
|
|
+ val role =
|
|
|
+ ticketDetail?.ticketUserVOList?.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
|
|
|
+ ?.find {
|
|
|
+ it.userId == MainDomainData.userInfo?.userId
|
|
|
+ }
|
|
|
+ if (role == null) {
|
|
|
+ ThreadUtils.runOnMain {
|
|
|
+ PopTip.build()
|
|
|
+ .tip(CommonUtils.getStr(R.string.you_are_not_locker_tip))
|
|
|
+ }
|
|
|
+ return@getTicketDetail
|
|
|
+ }
|
|
|
+ if (step?.enableLock == true) { // 上锁工作票
|
|
|
+ sendTicketBusiness(
|
|
|
+ true,
|
|
|
+ currentModeEvent.bleBean.bleDevice.mac,
|
|
|
+ ticketDetail,
|
|
|
+ ticketDetail.ticketLockVOList?.filter {
|
|
|
+ it.groupId == MainDomainData.deviceTakeTicketGroupBound[itBO.ticketId] &&
|
|
|
+ ticketDetail.ticketPointsVOList?.filter { it.groupId == MainDomainData.deviceTakeTicketGroupBound[itBO.ticketId] }
|
|
|
+ ?.mapNotNull { it.lockId }
|
|
|
+ ?.contains(it.lockId) != true
|
|
|
+ }
|
|
|
+ ?.map { it.lockNfc }?.toMutableList(),
|
|
|
+ true
|
|
|
+ )
|
|
|
+ } else if (step?.enableUnlock == true) { // 解锁工作票
|
|
|
+ sendTicketBusiness(
|
|
|
+ false,
|
|
|
+ currentModeEvent.bleBean.bleDevice.mac,
|
|
|
+ ticketDetail,
|
|
|
+ null,
|
|
|
+ true
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 读取工作票完成情况
|
|
|
*/
|
|
|
+ @SuppressLint("MissingPermission")
|
|
|
private fun getTicketStatusBusiness(
|
|
|
mac: String, isNeedLoading: Boolean = false
|
|
|
) {
|
|
|
- BleConnectionManager.registerConnectListener(mac, isSend = false) { isDone, bleBean ->
|
|
|
- if (isDone) {
|
|
|
- Executor.delayOnMain(500) {
|
|
|
- getTicketStatusWithRetry(bleBean!!.bleDevice, isNeedLoading)
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (isNeedLoading) LoadingEvent.sendLoadingEvent()
|
|
|
+ logger.info("检查钥匙连接情况")
|
|
|
+ if (BleReturnDispatcher.isConnected(mac)) {
|
|
|
+ BleConnectionManager.getBleDeviceByMac(mac)?.bleDevice?.let {
|
|
|
+ logger.info("开始读取作业票")
|
|
|
+ getTicketStatusWithRetry(it, isNeedLoading)
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if (isNeedLoading) LoadingEvent.sendLoadingEvent()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -520,6 +552,7 @@ object BleBusinessManager {
|
|
|
isNeedLoading: Boolean = false,
|
|
|
processCallback: ((Boolean) -> Unit)? = null
|
|
|
) {
|
|
|
+ logger.info("发送获取作业票指令")
|
|
|
if (isNeedLoading) LoadingEvent.sendLoadingEvent("开始获取工作票", true)
|
|
|
BleCmdManager.getTicketStatus(bleDevice, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(
|
|
|
@@ -1005,6 +1038,7 @@ object BleBusinessManager {
|
|
|
/**
|
|
|
* 下发工作票
|
|
|
*/
|
|
|
+ @SuppressLint("MissingPermission")
|
|
|
private fun sendTicketBusiness(
|
|
|
isLock: Boolean,
|
|
|
mac: String,
|
|
|
@@ -1012,15 +1046,11 @@ object BleBusinessManager {
|
|
|
lockList: MutableList<String?>?,
|
|
|
isNeedLoading: Boolean = false,
|
|
|
) {
|
|
|
- BleConnectionManager.registerConnectListener(mac) { isDone, bleBean ->
|
|
|
- if (!isDone) {
|
|
|
- sendTicketBusiness(isLock, mac, ticketDetail, lockList, isNeedLoading)
|
|
|
- return@registerConnectListener
|
|
|
- }
|
|
|
+ if (BleSendDispatcher.isConnected(mac)) {
|
|
|
+ val bleBean = BleConnectionManager.getBleDeviceByMac(mac)
|
|
|
if (bleBean == null) {
|
|
|
-// ToastUtils.tip(R.string.simple_key_is_not_connected)
|
|
|
logger.error("sendTicketBusiness fail : $mac, bleBean is null")
|
|
|
- return@registerConnectListener
|
|
|
+ return
|
|
|
}
|
|
|
// 单bleBean json赋值
|
|
|
bleBean.retryCount = 0
|
|
|
@@ -1028,6 +1058,10 @@ object BleBusinessManager {
|
|
|
bleBean.ticketSend?.let { itJson ->
|
|
|
sendTicketWithRetry(itJson, bleBean.bleDevice, isNeedLoading)
|
|
|
}
|
|
|
+ } else {
|
|
|
+ ThreadUtils.runOnIODelayed(1000) {
|
|
|
+ sendTicketBusiness(isLock, mac, ticketDetail, lockList, isNeedLoading)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|