|
@@ -38,23 +38,14 @@ object ModBusController {
|
|
|
var modBusManager: ModBusManager? = null
|
|
var modBusManager: ModBusManager? = null
|
|
|
private var slaveCount: Int = 0
|
|
private var slaveCount: Int = 0
|
|
|
|
|
|
|
|
- private val threadPool = Executors.newScheduledThreadPool(4)
|
|
|
|
|
-
|
|
|
|
|
private val listeners = ArrayList<StatusListener>()
|
|
private val listeners = ArrayList<StatusListener>()
|
|
|
|
|
|
|
|
// 是否中断读取状态
|
|
// 是否中断读取状态
|
|
|
private var interruptReadStatus: ArrayList<Boolean> = ArrayList()
|
|
private var interruptReadStatus: ArrayList<Boolean> = ArrayList()
|
|
|
|
|
|
|
|
- var shouldStopUpgrade = false
|
|
|
|
|
-
|
|
|
|
|
// TODO 临时改成5s
|
|
// TODO 临时改成5s
|
|
|
const val REPEAT_FREQUENCY = 800L
|
|
const val REPEAT_FREQUENCY = 800L
|
|
|
|
|
|
|
|
- fun setSlaveCount(count: Int) {
|
|
|
|
|
- modBusManager?.slaveCount = count
|
|
|
|
|
- slaveCount = count
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
class StatusListener(
|
|
class StatusListener(
|
|
|
val key: Any,
|
|
val key: Any,
|
|
|
val listener: (Any) -> Unit,
|
|
val listener: (Any) -> Unit,
|
|
@@ -81,8 +72,6 @@ object ModBusController {
|
|
|
LogUtil.i("****************************************************************************")
|
|
LogUtil.i("****************************************************************************")
|
|
|
// 过滤非空的数据,重置slaveCount
|
|
// 过滤非空的数据,重置slaveCount
|
|
|
// 不再使用slaveCount,改用地址池
|
|
// 不再使用slaveCount,改用地址池
|
|
|
-// val onlineCount = res.filter { it.isNotEmpty() }.size
|
|
|
|
|
-// setSlaveCount(onlineCount)
|
|
|
|
|
for (l in listeners) {
|
|
for (l in listeners) {
|
|
|
if (l.type == LISTENER_TYPE_STATUS) {
|
|
if (l.type == LISTENER_TYPE_STATUS) {
|
|
|
l.listener(res)
|
|
l.listener(res)
|
|
@@ -91,9 +80,6 @@ object ModBusController {
|
|
|
}, REPEAT_FREQUENCY)
|
|
}, REPEAT_FREQUENCY)
|
|
|
?.also {
|
|
?.also {
|
|
|
modBusManager = it
|
|
modBusManager = it
|
|
|
- Executor.runOnIO {
|
|
|
|
|
-// refreshAllowOpenDoorUnidentified(ctx, it)
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
?.start()
|
|
?.start()
|
|
|
}
|
|
}
|
|
@@ -157,24 +143,27 @@ object ModBusController {
|
|
|
*/
|
|
*/
|
|
|
private fun initLock() {
|
|
private fun initLock() {
|
|
|
LogUtil.i("initLock : $dockList")
|
|
LogUtil.i("initLock : $dockList")
|
|
|
- dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }.forEach { dockBean ->
|
|
|
|
|
- val hasLockIdxList = dockBean.getLockList().filter { it.isExist }.map { it.idx } as MutableList<Int>
|
|
|
|
|
- val noLockIdxList = dockBean.getLockList().filter { !it.isExist }.map { it.idx } as MutableList<Int>
|
|
|
|
|
-
|
|
|
|
|
- hasLockIdxList.forEach { idx ->
|
|
|
|
|
- readLockRfid(dockBean.addr, idx) { res ->
|
|
|
|
|
- if (res.size < 11) {
|
|
|
|
|
- LogUtil.e("Lock rfid error")
|
|
|
|
|
- return@readLockRfid
|
|
|
|
|
|
|
+ dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ .forEach { dockBean ->
|
|
|
|
|
+ val hasLockIdxList =
|
|
|
|
|
+ dockBean.getLockList().filter { it.isExist }.map { it.idx } as MutableList<Int>
|
|
|
|
|
+ val noLockIdxList =
|
|
|
|
|
+ dockBean.getLockList().filter { !it.isExist }.map { it.idx } as MutableList<Int>
|
|
|
|
|
+
|
|
|
|
|
+ hasLockIdxList.forEach { idx ->
|
|
|
|
|
+ readLockRfid(dockBean.addr, idx) { res ->
|
|
|
|
|
+ if (res.size < 11) {
|
|
|
|
|
+ LogUtil.e("Lock rfid error")
|
|
|
|
|
+ return@readLockRfid
|
|
|
|
|
+ }
|
|
|
|
|
+ val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
|
|
|
|
|
+ LogUtil.i("初始化锁具 RFID : $rfid")
|
|
|
|
|
+ updateLockRfid(dockBean.addr, idx, rfid)
|
|
|
}
|
|
}
|
|
|
- val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
|
|
|
|
|
- LogUtil.i("初始化锁具 RFID : $rfid")
|
|
|
|
|
- updateLockRfid(dockBean.addr, idx, rfid)
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ controlLockBuckle(false, dockBean.addr, hasLockIdxList)
|
|
|
|
|
+ controlLockBuckle(true, dockBean.addr, noLockIdxList)
|
|
|
}
|
|
}
|
|
|
- controlLockBuckle(false, dockBean.addr, hasLockIdxList)
|
|
|
|
|
- controlLockBuckle(true, dockBean.addr, noLockIdxList)
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -182,43 +171,48 @@ object ModBusController {
|
|
|
*/
|
|
*/
|
|
|
private fun initKey() {
|
|
private fun initKey() {
|
|
|
LogUtil.i("initKey : $dockList")
|
|
LogUtil.i("initKey : $dockList")
|
|
|
- dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }.forEach { dockBean ->
|
|
|
|
|
- dockBean.getKeyList().forEach { key ->
|
|
|
|
|
- if (key.isExist) {
|
|
|
|
|
- LogUtil.i("initKey : ${dockBean.addr} : ${key.isLeft}")
|
|
|
|
|
- readKeyRfid(dockBean.addr, if (key.isLeft) 0 else 1) { isLeft, res ->
|
|
|
|
|
- if (res.size < 11) {
|
|
|
|
|
- LogUtil.e("Key rfid error")
|
|
|
|
|
- return@readKeyRfid
|
|
|
|
|
- }
|
|
|
|
|
- val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
|
|
|
|
|
- LogUtil.i("初始化钥匙 RFID : $rfid")
|
|
|
|
|
- // 更新rfid
|
|
|
|
|
- updateKeyRfid(dockBean.addr, isLeft, rfid)
|
|
|
|
|
- // 蓝牙准备操作
|
|
|
|
|
- NetApi.getKeyInfo(rfid) {
|
|
|
|
|
- LogUtil.i("getKeyInfo : $rfid - ${it?.macAddress}")
|
|
|
|
|
- if (it != null && !it.macAddress.isNullOrEmpty()) {
|
|
|
|
|
- // 更新mac
|
|
|
|
|
- updateKeyMac(dockBean.addr, key.isLeft, it.macAddress)
|
|
|
|
|
- BusinessManager.registerConnectListener(it.macAddress) { isDone, bleBean ->
|
|
|
|
|
- if (isDone && bleBean?.bleDevice != null) {
|
|
|
|
|
- Executor.delayOnMain(500) {
|
|
|
|
|
- BusinessManager.getCurrentStatus(3, bleBean.bleDevice)
|
|
|
|
|
|
|
+ dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ .forEach { dockBean ->
|
|
|
|
|
+ dockBean.getKeyList().forEach { key ->
|
|
|
|
|
+ if (key.isExist) {
|
|
|
|
|
+ LogUtil.i("initKey : ${dockBean.addr} : ${key.isLeft}")
|
|
|
|
|
+ readKeyRfid(dockBean.addr, if (key.isLeft) 0 else 1) { isLeft, res ->
|
|
|
|
|
+ if (res.size < 11) {
|
|
|
|
|
+ LogUtil.e("Key rfid error")
|
|
|
|
|
+ return@readKeyRfid
|
|
|
|
|
+ }
|
|
|
|
|
+ val rfid =
|
|
|
|
|
+ res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
|
|
|
|
|
+ LogUtil.i("初始化钥匙 RFID : $rfid")
|
|
|
|
|
+ // 更新rfid
|
|
|
|
|
+ updateKeyRfid(dockBean.addr, isLeft, rfid)
|
|
|
|
|
+ // 蓝牙准备操作
|
|
|
|
|
+ NetApi.getKeyInfo(rfid) {
|
|
|
|
|
+ LogUtil.i("getKeyInfo : $rfid - ${it?.macAddress}")
|
|
|
|
|
+ if (it != null && !it.macAddress.isNullOrEmpty()) {
|
|
|
|
|
+ // 更新mac
|
|
|
|
|
+ updateKeyMac(dockBean.addr, key.isLeft, it.macAddress)
|
|
|
|
|
+ BusinessManager.registerConnectListener(it.macAddress) { isDone, bleBean ->
|
|
|
|
|
+ if (isDone && bleBean?.bleDevice != null) {
|
|
|
|
|
+ Executor.delayOnMain(500) {
|
|
|
|
|
+ BusinessManager.getCurrentStatus(
|
|
|
|
|
+ 3,
|
|
|
|
|
+ bleBean.bleDevice
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ToastUtils.tip(R.string.get_key_info_fail)
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- ToastUtils.tip(R.string.get_key_info_fail)
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ controlKeyBuckle(false, key.isLeft, dockBean.addr)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ controlKeyBuckle(true, key.isLeft, dockBean.addr)
|
|
|
}
|
|
}
|
|
|
- controlKeyBuckle(false, key.isLeft, dockBean.addr)
|
|
|
|
|
- } else {
|
|
|
|
|
- controlKeyBuckle(true, key.isLeft, dockBean.addr)
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -259,7 +253,11 @@ object ModBusController {
|
|
|
* @param isLock true:读锁具底座 false:读钥匙底座
|
|
* @param isLock true:读锁具底座 false:读钥匙底座
|
|
|
* @param type 0:钥匙底座 1:锁具底座1-8 2:锁具底座9、10
|
|
* @param type 0:钥匙底座 1:锁具底座1-8 2:锁具底座9、10
|
|
|
*/
|
|
*/
|
|
|
- fun readBuckleStatus(isLock: Boolean, slaveAddress: Byte?, doneSingle: ((type: Int, res: ByteArray) -> Unit)? = null) {
|
|
|
|
|
|
|
+ fun readBuckleStatus(
|
|
|
|
|
+ isLock: Boolean,
|
|
|
|
|
+ slaveAddress: Byte?,
|
|
|
|
|
+ doneSingle: ((type: Int, res: ByteArray) -> Unit)? = null
|
|
|
|
|
+ ) {
|
|
|
// TODO 电磁锁控制板可能不是,并且锁和钥匙的读取不一样
|
|
// TODO 电磁锁控制板可能不是,并且锁和钥匙的读取不一样
|
|
|
slaveAddress?.let {
|
|
slaveAddress?.let {
|
|
|
modBusManager?.sendTo(it, MBFrame.READ_BUCKLE_STATUS) { res ->
|
|
modBusManager?.sendTo(it, MBFrame.READ_BUCKLE_STATUS) { res ->
|
|
@@ -276,7 +274,12 @@ object ModBusController {
|
|
|
/**
|
|
/**
|
|
|
* 开/关锁具卡扣
|
|
* 开/关锁具卡扣
|
|
|
*/
|
|
*/
|
|
|
- fun controlLockBuckle(isOpen: Boolean, slaveAddress: Byte?, lockIdx: Int, done: ((res: ByteArray) -> Unit)? = null) {
|
|
|
|
|
|
|
+ fun controlLockBuckle(
|
|
|
|
|
+ isOpen: Boolean,
|
|
|
|
|
+ slaveAddress: Byte?,
|
|
|
|
|
+ lockIdx: Int,
|
|
|
|
|
+ done: ((res: ByteArray) -> Unit)? = null
|
|
|
|
|
+ ) {
|
|
|
slaveAddress?.let {
|
|
slaveAddress?.let {
|
|
|
modBusManager?.generateLockBuckleCmd(isOpen, lockIdx)?.let { cmd ->
|
|
modBusManager?.generateLockBuckleCmd(isOpen, lockIdx)?.let { cmd ->
|
|
|
modBusManager?.sendTo(it, cmd) { res ->
|
|
modBusManager?.sendTo(it, cmd) { res ->
|
|
@@ -286,7 +289,12 @@ object ModBusController {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fun controlLockBuckle(isOpen: Boolean, slaveAddress: Byte?, lockIdxList: MutableList<Int>, done: ((res: ByteArray) -> Unit)? = null) {
|
|
|
|
|
|
|
+ fun controlLockBuckle(
|
|
|
|
|
+ isOpen: Boolean,
|
|
|
|
|
+ slaveAddress: Byte?,
|
|
|
|
|
+ lockIdxList: MutableList<Int>,
|
|
|
|
|
+ done: ((res: ByteArray) -> Unit)? = null
|
|
|
|
|
+ ) {
|
|
|
slaveAddress?.let {
|
|
slaveAddress?.let {
|
|
|
modBusManager?.generateLockBuckleCmd(isOpen, lockIdxList)?.let { cmdList ->
|
|
modBusManager?.generateLockBuckleCmd(isOpen, lockIdxList)?.let { cmdList ->
|
|
|
cmdList.forEach { cmd ->
|
|
cmdList.forEach { cmd ->
|
|
@@ -301,7 +309,11 @@ object ModBusController {
|
|
|
/**
|
|
/**
|
|
|
* 读取钥匙RFID
|
|
* 读取钥匙RFID
|
|
|
*/
|
|
*/
|
|
|
- fun readKeyRfid(slaveAddress: Byte?, idx: Int, done: ((isLeft: Boolean, res: ByteArray) -> Unit)? = null) {
|
|
|
|
|
|
|
+ fun readKeyRfid(
|
|
|
|
|
+ slaveAddress: Byte?,
|
|
|
|
|
+ idx: Int,
|
|
|
|
|
+ done: ((isLeft: Boolean, res: ByteArray) -> Unit)? = null
|
|
|
|
|
+ ) {
|
|
|
slaveAddress?.let {
|
|
slaveAddress?.let {
|
|
|
modBusManager?.generateRfidCmd(idx)?.let { cmd ->
|
|
modBusManager?.generateRfidCmd(idx)?.let { cmd ->
|
|
|
modBusManager?.sendTo(it, cmd) {
|
|
modBusManager?.sendTo(it, cmd) {
|
|
@@ -341,28 +353,32 @@ object ModBusController {
|
|
|
* 更新钥匙RFID
|
|
* 更新钥匙RFID
|
|
|
*/
|
|
*/
|
|
|
fun updateKeyRfid(slaveAddress: Byte, isLeft: Boolean, rfid: String) {
|
|
fun updateKeyRfid(slaveAddress: Byte, isLeft: Boolean, rfid: String) {
|
|
|
- dockList.find { it.addr == slaveAddress }?.getKeyList()?.find { it.isLeft == isLeft }?.rfid = rfid
|
|
|
|
|
|
|
+ dockList.find { it.addr == slaveAddress }?.getKeyList()
|
|
|
|
|
+ ?.find { it.isLeft == isLeft }?.rfid = rfid
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 更新钥匙MAC
|
|
* 更新钥匙MAC
|
|
|
*/
|
|
*/
|
|
|
fun updateKeyMac(slaveAddress: Byte, isLeft: Boolean, mac: String) {
|
|
fun updateKeyMac(slaveAddress: Byte, isLeft: Boolean, mac: String) {
|
|
|
- dockList.find { it.addr == slaveAddress }?.getKeyList()?.find { it.isLeft == isLeft }?.mac = mac
|
|
|
|
|
|
|
+ dockList.find { it.addr == slaveAddress }?.getKeyList()?.find { it.isLeft == isLeft }?.mac =
|
|
|
|
|
+ mac
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 通过RFID更新对应的Mac
|
|
* 通过RFID更新对应的Mac
|
|
|
*/
|
|
*/
|
|
|
fun updateKeyMacByRfid(rfid: String, mac: String) {
|
|
fun updateKeyMacByRfid(rfid: String, mac: String) {
|
|
|
- dockList.find { it.type == DOCK_TYPE_KEY }?.getKeyList()?.find { it.rfid == rfid }?.mac = mac
|
|
|
|
|
|
|
+ dockList.find { it.type == DOCK_TYPE_KEY }?.getKeyList()?.find { it.rfid == rfid }?.mac =
|
|
|
|
|
+ mac
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 更新锁具RFID
|
|
* 更新锁具RFID
|
|
|
*/
|
|
*/
|
|
|
fun updateLockRfid(slaveAddress: Byte, lockIdx: Int, rfid: String) {
|
|
fun updateLockRfid(slaveAddress: Byte, lockIdx: Int, rfid: String) {
|
|
|
- dockList.find { it.addr == slaveAddress }?.getLockList()?.find { it.idx == lockIdx }?.rfid = rfid
|
|
|
|
|
|
|
+ dockList.find { it.addr == slaveAddress }?.getLockList()?.find { it.idx == lockIdx }?.rfid =
|
|
|
|
|
+ rfid
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -370,14 +386,18 @@ object ModBusController {
|
|
|
*
|
|
*
|
|
|
* @param deviceType {@link [com.grkj.iscs.model.bo.DeviceTakeUpdateBO]<class>#[deviceType]}
|
|
* @param deviceType {@link [com.grkj.iscs.model.bo.DeviceTakeUpdateBO]<class>#[deviceType]}
|
|
|
*/
|
|
*/
|
|
|
- fun isDeviceExist(rfid: String, deviceType: Int) : Boolean {
|
|
|
|
|
|
|
+ fun isDeviceExist(rfid: String, deviceType: Int): Boolean {
|
|
|
return when (deviceType) {
|
|
return when (deviceType) {
|
|
|
DEVICE_TYPE_KEY -> {
|
|
DEVICE_TYPE_KEY -> {
|
|
|
- dockList.find { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }?.getKeyList()?.find { it.rfid == rfid } != null
|
|
|
|
|
|
|
+ dockList.find { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ ?.getKeyList()?.find { it.rfid == rfid } != null
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
DEVICE_TYPE_LOCK -> {
|
|
DEVICE_TYPE_LOCK -> {
|
|
|
- dockList.find { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }?.getLockList()?.find { it.rfid == rfid } != null
|
|
|
|
|
|
|
+ dockList.find { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ ?.getLockList()?.find { it.rfid == rfid } != null
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
else -> {
|
|
else -> {
|
|
|
false
|
|
false
|
|
|
}
|
|
}
|
|
@@ -389,7 +409,12 @@ object ModBusController {
|
|
|
*
|
|
*
|
|
|
* @param leftAction、rightAction 0:保持当前状态 1:点亮 2:熄灭 默认0
|
|
* @param leftAction、rightAction 0:保持当前状态 1:点亮 2:熄灭 默认0
|
|
|
*/
|
|
*/
|
|
|
- fun controlKeyLight(slaveAddress: Byte?, leftAction: Int = 0, rightAction: Int = 0, done: ((res: ByteArray) -> Unit)? = null) {
|
|
|
|
|
|
|
+ fun controlKeyLight(
|
|
|
|
|
+ slaveAddress: Byte?,
|
|
|
|
|
+ leftAction: Int = 0,
|
|
|
|
|
+ rightAction: Int = 0,
|
|
|
|
|
+ done: ((res: ByteArray) -> Unit)? = null
|
|
|
|
|
+ ) {
|
|
|
slaveAddress?.let {
|
|
slaveAddress?.let {
|
|
|
modBusManager?.generateKeyLightCmd(leftAction, rightAction)?.let { cmd ->
|
|
modBusManager?.generateKeyLightCmd(leftAction, rightAction)?.let { cmd ->
|
|
|
modBusManager?.sendTo(it, cmd) {
|
|
modBusManager?.sendTo(it, cmd) {
|
|
@@ -416,7 +441,12 @@ object ModBusController {
|
|
|
* @param isOpen true:开操作 false:关操作
|
|
* @param isOpen true:开操作 false:关操作
|
|
|
* @param isLeft true:左卡扣 false:右卡扣
|
|
* @param isLeft true:左卡扣 false:右卡扣
|
|
|
*/
|
|
*/
|
|
|
- fun controlKeyBuckle(isOpen: Boolean, isLeft: Boolean, slaveAddress: Byte?, done: ((res: ByteArray) -> Unit)? = null) {
|
|
|
|
|
|
|
+ fun controlKeyBuckle(
|
|
|
|
|
+ isOpen: Boolean,
|
|
|
|
|
+ isLeft: Boolean,
|
|
|
|
|
+ slaveAddress: Byte?,
|
|
|
|
|
+ done: ((res: ByteArray) -> Unit)? = null
|
|
|
|
|
+ ) {
|
|
|
slaveAddress?.let {
|
|
slaveAddress?.let {
|
|
|
modBusManager?.generateKeyBuckleCmd(isOpen, if (isLeft) 0 else 1)?.let { cmd ->
|
|
modBusManager?.generateKeyBuckleCmd(isOpen, if (isLeft) 0 else 1)?.let { cmd ->
|
|
|
modBusManager?.sendTo(it, cmd) { res ->
|
|
modBusManager?.sendTo(it, cmd) { res ->
|
|
@@ -430,14 +460,16 @@ object ModBusController {
|
|
|
* 根据RFID找钥匙
|
|
* 根据RFID找钥匙
|
|
|
*/
|
|
*/
|
|
|
fun getKeyByRfid(rfid: String): DockBean.KeyBean? {
|
|
fun getKeyByRfid(rfid: String): DockBean.KeyBean? {
|
|
|
- return dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }.flatMap { it.getKeyList() }.find { it.rfid == rfid }
|
|
|
|
|
|
|
+ return dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ .flatMap { it.getKeyList() }.find { it.rfid == rfid }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 根据Mac找钥匙
|
|
* 根据Mac找钥匙
|
|
|
*/
|
|
*/
|
|
|
fun getKeyByMac(mac: String): DockBean.KeyBean? {
|
|
fun getKeyByMac(mac: String): DockBean.KeyBean? {
|
|
|
- return dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }.flatMap { it.getKeyList() }.find { it.mac == mac }
|
|
|
|
|
|
|
+ return dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ .flatMap { it.getKeyList() }.find { it.mac == mac }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun getKeyByDock(dockAddr: Byte?, isLeft: Boolean): DockBean.KeyBean? {
|
|
fun getKeyByDock(dockAddr: Byte?, isLeft: Boolean): DockBean.KeyBean? {
|
|
@@ -449,7 +481,8 @@ object ModBusController {
|
|
|
* 根据RFID找锁具
|
|
* 根据RFID找锁具
|
|
|
*/
|
|
*/
|
|
|
fun getLockByRfid(rfid: String): DockBean.LockBean? {
|
|
fun getLockByRfid(rfid: String): DockBean.LockBean? {
|
|
|
- return dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }.flatMap { it.getLockList() }.find { it.rfid == rfid }
|
|
|
|
|
|
|
+ return dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ .flatMap { it.getLockList() }.find { it.rfid == rfid }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun isKeyExist(dockAddr: Byte?, isLeft: Boolean): Boolean {
|
|
fun isKeyExist(dockAddr: Byte?, isLeft: Boolean): Boolean {
|
|
@@ -490,7 +523,9 @@ object ModBusController {
|
|
|
} else {
|
|
} else {
|
|
|
return status
|
|
return status
|
|
|
}
|
|
}
|
|
|
- if (BleManager.getInstance().isConnected(BusinessManager.getBleDeviceByMac(key.mac)?.bleDevice)) {
|
|
|
|
|
|
|
+ if (BleManager.getInstance()
|
|
|
|
|
+ .isConnected(BusinessManager.getBleDeviceByMac(key.mac)?.bleDevice)
|
|
|
|
|
+ ) {
|
|
|
status = 4
|
|
status = 4
|
|
|
} else {
|
|
} else {
|
|
|
return status
|
|
return status
|
|
@@ -548,17 +583,19 @@ object ModBusController {
|
|
|
|
|
|
|
|
fun getKeyByDockType(type: Byte): MutableList<DockBean.KeyBean>? {
|
|
fun getKeyByDockType(type: Byte): MutableList<DockBean.KeyBean>? {
|
|
|
return dockList.find { it.type == type }?.let {
|
|
return dockList.find { it.type == type }?.let {
|
|
|
- it.getKeyList()
|
|
|
|
|
|
|
+ it.getKeyList()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun controlAllLockBuckles(isOpen: Boolean) {
|
|
fun controlAllLockBuckles(isOpen: Boolean) {
|
|
|
- dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }.forEach { dockBean ->
|
|
|
|
|
- val list = dockBean.getLockList().stream().map { it.idx }.collect(Collectors.toList())
|
|
|
|
|
- controlLockBuckle(isOpen, dockBean.addr, list) {
|
|
|
|
|
- LogUtil.i("${if (isOpen) "开启" else "关闭"}所有锁卡扣 : ${it.toHexStrings()}")
|
|
|
|
|
|
|
+ dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
+ .forEach { dockBean ->
|
|
|
|
|
+ val list =
|
|
|
|
|
+ dockBean.getLockList().stream().map { it.idx }.collect(Collectors.toList())
|
|
|
|
|
+ controlLockBuckle(isOpen, dockBean.addr, list) {
|
|
|
|
|
+ LogUtil.i("${if (isOpen) "开启" else "关闭"}所有锁卡扣 : ${it.toHexStrings()}")
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fun printDockInfo() {
|
|
fun printDockInfo() {
|
|
@@ -570,11 +607,13 @@ object ModBusController {
|
|
|
LogUtil.i("${dockBean.addr}锁${lockBean.idx} : ${lockBean.rfid}")
|
|
LogUtil.i("${dockBean.addr}锁${lockBean.idx} : ${lockBean.rfid}")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
DOCK_TYPE_KEY -> {
|
|
DOCK_TYPE_KEY -> {
|
|
|
dockBean.getKeyList().forEach { keyBean ->
|
|
dockBean.getKeyList().forEach { keyBean ->
|
|
|
LogUtil.i("${dockBean.addr}钥${keyBean.idx} : ${keyBean.rfid}")
|
|
LogUtil.i("${dockBean.addr}钥${keyBean.idx} : ${keyBean.rfid}")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
DOCK_TYPE_PORTABLE -> {
|
|
DOCK_TYPE_PORTABLE -> {
|
|
|
dockBean.getLockList().forEach { lockBean ->
|
|
dockBean.getLockList().forEach { lockBean ->
|
|
|
LogUtil.i("${dockBean.addr}柜锁${lockBean.idx} : ${lockBean.rfid}")
|
|
LogUtil.i("${dockBean.addr}柜锁${lockBean.idx} : ${lockBean.rfid}")
|
|
@@ -591,7 +630,7 @@ object ModBusController {
|
|
|
LogUtil.i("____________________________________")
|
|
LogUtil.i("____________________________________")
|
|
|
readDeviceType { res ->
|
|
readDeviceType { res ->
|
|
|
LogUtil.i("设备类型数量 : ${res.size}")
|
|
LogUtil.i("设备类型数量 : ${res.size}")
|
|
|
- LogUtil.i("设备类型 : ${res.map { it.toHexStrings()}}")
|
|
|
|
|
|
|
+ LogUtil.i("设备类型 : ${res.map { it.toHexStrings() }}")
|
|
|
res.forEach { bytes ->
|
|
res.forEach { bytes ->
|
|
|
if (bytes.size < 5) return@forEach
|
|
if (bytes.size < 5) return@forEach
|
|
|
// 设备具体数据由0x0011寄存器提供
|
|
// 设备具体数据由0x0011寄存器提供
|
|
@@ -615,7 +654,8 @@ object ModBusController {
|
|
|
* @return 底座地址,钥匙
|
|
* @return 底座地址,钥匙
|
|
|
*/
|
|
*/
|
|
|
fun getOneKey(): Pair<Byte, DockBean.KeyBean?>? {
|
|
fun getOneKey(): Pair<Byte, DockBean.KeyBean?>? {
|
|
|
- val keyDockList = dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
|
|
+ val keyDockList =
|
|
|
|
|
+ dockList.filter { it.type == DOCK_TYPE_KEY || it.type == DOCK_TYPE_PORTABLE }
|
|
|
val keyList = keyDockList.flatMap { it.getKeyList() }.filter { it.isExist }
|
|
val keyList = keyDockList.flatMap { it.getKeyList() }.filter { it.isExist }
|
|
|
LogUtil.i("keyList : $keyList")
|
|
LogUtil.i("keyList : $keyList")
|
|
|
if (keyList.isEmpty()) {
|
|
if (keyList.isEmpty()) {
|
|
@@ -624,14 +664,22 @@ object ModBusController {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
keyList.forEach {
|
|
keyList.forEach {
|
|
|
- LogUtil.i("keyStatus : ${it.isExist} - ${it.rfid} - ${it.mac} - ${it.isReady} - " +
|
|
|
|
|
- "${BusinessManager.getBleDeviceByMac(it.mac)?.bleDevice != null} - " +
|
|
|
|
|
- "${BleManager.getInstance().isConnected(BusinessManager.getBleDeviceByMac(it.mac)?.bleDevice)} - " +
|
|
|
|
|
- "${!BusinessManager.mExceptionKeyList.contains(it.rfid)}")
|
|
|
|
|
- }
|
|
|
|
|
- val key = keyList.filter { it.isExist && it.rfid != null && it.mac != null && it.isReady
|
|
|
|
|
- && BleManager.getInstance().isConnected(BusinessManager.getBleDeviceByMac(it.mac)?.bleDevice)
|
|
|
|
|
- && !BusinessManager.mExceptionKeyList.contains(it.rfid) }
|
|
|
|
|
|
|
+ LogUtil.i(
|
|
|
|
|
+ "keyStatus : ${it.isExist} - ${it.rfid} - ${it.mac} - ${it.isReady} - " +
|
|
|
|
|
+ "${BusinessManager.getBleDeviceByMac(it.mac)?.bleDevice != null} - " +
|
|
|
|
|
+ "${
|
|
|
|
|
+ BleManager.getInstance()
|
|
|
|
|
+ .isConnected(BusinessManager.getBleDeviceByMac(it.mac)?.bleDevice)
|
|
|
|
|
+ } - " +
|
|
|
|
|
+ "${!BusinessManager.mExceptionKeyList.contains(it.rfid)}"
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+ val key = keyList.filter {
|
|
|
|
|
+ it.isExist && it.rfid != null && it.mac != null && it.isReady
|
|
|
|
|
+ && BleManager.getInstance()
|
|
|
|
|
+ .isConnected(BusinessManager.getBleDeviceByMac(it.mac)?.bleDevice)
|
|
|
|
|
+ && !BusinessManager.mExceptionKeyList.contains(it.rfid)
|
|
|
|
|
+ }
|
|
|
.shuffled().firstOrNull()
|
|
.shuffled().firstOrNull()
|
|
|
if (key == null) {
|
|
if (key == null) {
|
|
|
LogUtil.e("getOneKey : no key match")
|
|
LogUtil.e("getOneKey : no key match")
|
|
@@ -658,41 +706,20 @@ object ModBusController {
|
|
|
if (needLockCount == 0) {
|
|
if (needLockCount == 0) {
|
|
|
return map
|
|
return map
|
|
|
}
|
|
}
|
|
|
- val lockDockList = dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
|
|
+ val lockDockList =
|
|
|
|
|
+ dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
|
|
|
var provideCount = 0
|
|
var provideCount = 0
|
|
|
- lockDockList.forEach loop@ { lockDock ->
|
|
|
|
|
- val lockList = lockDock.getLockList().filter { it.isExist }.toMutableList()
|
|
|
|
|
- if (lockList.size < (needLockCount - provideCount)) {
|
|
|
|
|
- provideCount += lockList.size
|
|
|
|
|
- map[lockDock.addr] = lockList
|
|
|
|
|
- } else {
|
|
|
|
|
- val rfidList = lockList.subList(0, needLockCount - provideCount)
|
|
|
|
|
- map[lockDock.addr] = rfidList
|
|
|
|
|
- return@loop
|
|
|
|
|
|
|
+ for (lockDock in lockDockList) {
|
|
|
|
|
+ if (provideCount >= needLockCount) break
|
|
|
|
|
+
|
|
|
|
|
+ val validLocks = lockDock.getLockList().filter { it.isExist }
|
|
|
|
|
+ val toTake = (needLockCount - provideCount).coerceAtMost(validLocks.size)
|
|
|
|
|
+ if (toTake > 0) {
|
|
|
|
|
+ map[lockDock.addr] = validLocks.take(toTake).toMutableList()
|
|
|
|
|
+ provideCount += toTake
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return map
|
|
return map
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-// fun getLocks(needLockCount: Int): MutableMap<Byte, MutableList<DockBean.LockBean>> {
|
|
|
|
|
-// val map = mutableMapOf<Byte, MutableList<DockBean.LockBean>>()
|
|
|
|
|
-// if (needLockCount == 0) {
|
|
|
|
|
-// return map
|
|
|
|
|
-// }
|
|
|
|
|
-//
|
|
|
|
|
-// val lockList =
|
|
|
|
|
-// dockList.filter { it.type == DOCK_TYPE_LOCK || it.type == DOCK_TYPE_PORTABLE }
|
|
|
|
|
-// .flatMap { it.getLockList() }.filter { it.isExist }.shuffled().take(needLockCount)
|
|
|
|
|
-// lockList.forEach loop@{ lock ->
|
|
|
|
|
-// lock.rfid ?: return@loop
|
|
|
|
|
-// val dock = getDockByLockNfc(lock.rfid!!)
|
|
|
|
|
-// dock ?: return@loop
|
|
|
|
|
-// if (map[dock.addr] == null) {
|
|
|
|
|
-// map[dock.addr] = mutableListOf()
|
|
|
|
|
-// }
|
|
|
|
|
-// map[dock.addr]!!.add(lock)
|
|
|
|
|
-// }
|
|
|
|
|
-// return map
|
|
|
|
|
-// }
|
|
|
|
|
}
|
|
}
|