|
|
@@ -4,12 +4,19 @@ import com.grkj.data.hardware.DockData
|
|
|
import com.grkj.data.hardware.IHardwareHelper
|
|
|
import com.grkj.data.hardware.modbus.DeviceConst
|
|
|
import com.grkj.data.model.res.CabinetSlotsRecord
|
|
|
+import com.grkj.shared.utils.extension.toHexFromLe
|
|
|
+import com.grkj.shared.utils.face.arcsoft.CameraHelper
|
|
|
import com.grkj.shared.utils.i18n.I18nManager
|
|
|
+import com.sik.comm.impl_can.toCommMessage
|
|
|
+import org.slf4j.Logger
|
|
|
+import org.slf4j.LoggerFactory
|
|
|
+import kotlin.math.log
|
|
|
|
|
|
/**
|
|
|
* Can硬件读写帮助类
|
|
|
*/
|
|
|
class CanHardwareHelper : IHardwareHelper {
|
|
|
+ private val logger: Logger = LoggerFactory.getLogger(CanHardwareHelper::class.java)
|
|
|
override fun getKeyMacByRfid(rfid: String): String? {
|
|
|
return CanHelper.getKeyByRfid(rfid)?.mac
|
|
|
}
|
|
|
@@ -63,7 +70,14 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
mac: String,
|
|
|
done: ((ByteArray) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ val keyDevice = CanHelper.getKeyDeviceByMac(mac)
|
|
|
+ keyDevice?.let {
|
|
|
+ val req = CanCommands.forDevice(keyDevice.nodeId)
|
|
|
+ .controlLatch(keyDevice.id, if (isOpen) 0 else 1)
|
|
|
+ CanHelper.writeTo(req) {
|
|
|
+ done?.invoke(it.toCommMessage().payload)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun controlLockBuckle(
|
|
|
@@ -72,7 +86,15 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
lockIdxList: MutableList<Int>,
|
|
|
done: ((ByteArray) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ slaveAddress?.let {
|
|
|
+ val target = lockIdxList.fold(1) { acc, i ->
|
|
|
+ acc or (1 shl i)
|
|
|
+ }
|
|
|
+ val req = CanCommands.forDevice(slaveAddress).setLatchBits_1to5(target, !isOpen)
|
|
|
+ CanHelper.writeTo(req) {
|
|
|
+ done?.invoke(it.toCommMessage().payload)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun controlKeyCharge(
|
|
|
@@ -81,11 +103,44 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
slaveAddress: Int?,
|
|
|
done: ((ByteArray) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ slaveAddress?.let {
|
|
|
+ val leftOn = if (idx == 0 && isOpen) true else if (idx == 0) false else null
|
|
|
+ val rightOn = if (idx == 1 && isOpen) true else if (idx == 1) false else null
|
|
|
+ val req = CanCommands.forDevice(slaveAddress)
|
|
|
+ .setCharge(leftOn, rightOn)
|
|
|
+ CanHelper.writeTo(req) {
|
|
|
+ done?.invoke(it.toCommMessage().payload)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun controlKeyCharge(
|
|
|
+ isOpen: Boolean,
|
|
|
+ mac: String,
|
|
|
+ done: ((ByteArray) -> Unit)?
|
|
|
+ ) {
|
|
|
+ val keyDevice = CanHelper.getKeyDeviceByMac(mac)
|
|
|
+ keyDevice?.let {
|
|
|
+ val leftOn = if (it.id == 0 && isOpen) true else if (it.id == 0) false else null
|
|
|
+ val rightOn = if (it.id == 1 && isOpen) true else if (it.id == 1) false else null
|
|
|
+ val req = CanCommands.forDevice(it.nodeId)
|
|
|
+ .setCharge(leftOn, rightOn)
|
|
|
+ CanHelper.writeTo(req) {
|
|
|
+ done?.invoke(it.toCommMessage().payload)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun controlAllKeyBuckleOpen(complete: () -> Unit) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ val keys = CanHelper.getDeviceByDeviceType(CanDeviceConst.DEVICE_KEY_DOCK)
|
|
|
+ keys.forEach {
|
|
|
+ val req = CanCommands.forDevice(it.key).setLatch(false, false)
|
|
|
+ CanHelper.writeTo(req)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun checkDock(): Boolean {
|
|
|
+ return true
|
|
|
}
|
|
|
|
|
|
override fun interruptReadTrashBinStatus(interrupt: Boolean) {
|
|
|
@@ -93,15 +148,43 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
}
|
|
|
|
|
|
override fun controlAllKeyChargeDown() {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ val keys = CanHelper.getDeviceByDeviceType(CanDeviceConst.DEVICE_KEY_DOCK)
|
|
|
+ keys.forEach {
|
|
|
+ val req = CanCommands.forDevice(it.key).setCharge(false, false)
|
|
|
+ CanHelper.writeTo(req)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun getKeyBeanByMac(mac: String): DockData.KeyDock.KeyBean? {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ val deviceKey = CanHelper.getKeyDeviceByMac(mac)
|
|
|
+ return deviceKey?.let {
|
|
|
+ DockData.KeyDock.KeyBean().apply {
|
|
|
+ this.addr = it.nodeId
|
|
|
+ this.idx = it.id
|
|
|
+ this.row = it.nodeId
|
|
|
+ this.rfid = it.rfid
|
|
|
+ this.mac = it.mac
|
|
|
+ this.isExist = it.isExist
|
|
|
+ this.type = it.deviceType
|
|
|
+ this.isReady = it.isReady
|
|
|
+ this.newHardware = it.newHardware
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun updateKeyReadyStatus(
|
|
|
+ mac: String,
|
|
|
+ isReady: Boolean,
|
|
|
+ from: Int
|
|
|
+ ) {
|
|
|
+ logger.info("updateKeyReadyStatus mac:$mac isReady:$isReady from:$from")
|
|
|
+ val deviceKey = CanHelper.getKeyDeviceByMac(mac)
|
|
|
+ deviceKey?.isReady = isReady
|
|
|
}
|
|
|
|
|
|
override fun updateKeyPower(power: Int, mac: String) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ val deviceKey = CanHelper.getKeyDeviceByMac(mac)
|
|
|
+ deviceKey?.power = power
|
|
|
}
|
|
|
|
|
|
override fun controlLockBuckle(
|
|
|
@@ -110,7 +193,13 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
lockIdxList: Int,
|
|
|
done: ((ByteArray) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ slaveAddress?.let {
|
|
|
+ val target = lockIdxList
|
|
|
+ val req = CanCommands.forDevice(slaveAddress).setLatchBits_1to5(target, !isOpen)
|
|
|
+ CanHelper.writeTo(req) {
|
|
|
+ done?.invoke(it.toCommMessage().payload)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun readKeyRfidStr(
|
|
|
@@ -118,7 +207,21 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
idx: Int,
|
|
|
done: ((Int, String) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ slaveAddress?.let {
|
|
|
+ val req = CanCommands.forDevice(slaveAddress).let {
|
|
|
+ if (idx == 0) {
|
|
|
+ it.getLeftRfid()
|
|
|
+ } else {
|
|
|
+ it.getRightRfid()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ CanHelper.readFrom(req) {
|
|
|
+ it?.let {
|
|
|
+ logger.info("返回的数据:${it.toCommMessage().payload}")
|
|
|
+ done?.invoke(idx, it.toCommMessage().payload.toHexFromLe())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun readLockRfidStr(
|
|
|
@@ -126,7 +229,17 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
lockIdx: Int,
|
|
|
done: ((String) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ slaveAddress?.let {
|
|
|
+ val req = CanCommands.forDevice(slaveAddress).let {
|
|
|
+ it.getSlotRfid_1to5(lockIdx)
|
|
|
+ }
|
|
|
+ CanHelper.readFrom(req) {
|
|
|
+ it?.let {
|
|
|
+ logger.info("返回的数据:${it.toCommMessage().payload}")
|
|
|
+ done?.invoke(it.toCommMessage().payload.toHexFromLe())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun getPortableDock(): List<DockData.PortableDock> {
|
|
|
@@ -139,7 +252,12 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
slaveAddress: Int?,
|
|
|
done: ((ByteArray) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ slaveAddress?.let {
|
|
|
+ val req = CanCommands.forDevice(slaveAddress).controlLatch(idx, if (isOpen) 0 else 1)
|
|
|
+ CanHelper.writeTo(req) {
|
|
|
+ done?.invoke(it.toCommMessage().payload)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun getLockDockData(): List<DockData.LockDock> {
|
|
|
@@ -168,7 +286,9 @@ class CanHardwareHelper : IHardwareHelper {
|
|
|
slaveAddress: Int?,
|
|
|
done: ((ByteArray) -> Unit)?
|
|
|
) {
|
|
|
- TODO("Not yet implemented")
|
|
|
+ controlKeyBuckle(!isOpen, idx, slaveAddress) {
|
|
|
+ controlKeyCharge(isOpen, idx, slaveAddress, done)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun getLockSlotPosition(lockNfc: String): String {
|