212 lines
7.0 KiB
Dart
Raw Normal View History

import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
2023-08-29 17:39:35 +08:00
import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
2023-08-29 17:39:35 +08:00
import '../../../../appRouters.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_manager.dart';
import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
2023-08-29 17:39:35 +08:00
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
2023-09-07 18:36:16 +08:00
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import '../../../../tools/toast.dart';
import 'CheckingInInfoDataEntity.dart';
import 'lockSet_state.dart';
2023-09-07 18:36:16 +08:00
typedef BlockSetStateCallback = void Function();
typedef BlockSetCheckInCallback = void Function(
CheckingInInfoDataEntity checkingInInfoDataEntity);
class LockSetLogic extends BaseGetXController {
final LockSetState state = LockSetState();
2023-09-07 18:36:16 +08:00
// 删除锁调用后台接口
void deletLockInfoData() async {
2023-08-29 17:39:35 +08:00
var entity = await ApiRepository.to.deletLockData(
lockId: state.getKeyInfosData.value.lockId.toString(),
2023-08-29 17:39:35 +08:00
);
if (entity.errorCode!.codeIsSuccessful) {
2023-08-29 17:39:35 +08:00
Get.offAllNamed(Routers.starLockMain);
}
}
// 开启考勤获取是否有公司
void openCheckingInData(
BlockSetCheckInCallback blockSetCheckInCallback) async {
var entity = await ApiRepository.to.openCheckingInData(
lockId: state.getKeyInfosData.value.lockId.toString(),
);
if (entity.errorCode!.codeIsSuccessful) {
blockSetCheckInCallback(entity);
}
}
// 设置是否打开考勤
void setLockSetGeneralSetting(String isOn) async {
var entity = await ApiRepository.to.setLockSetGeneralSettingData(
lockId: state.getKeyInfosData.value.lockId.toString(),
changeType: "1",
isOn: isOn,
type: "1",
);
if (entity.errorCode!.codeIsSuccessful) {
eventBus.fire(RefreshLockListInfoDataEvent());
state.getKeyInfosData.value.isAttendance = int.parse(isOn);
eventBus
.fire(PassCurrentLockInformationEvent(state.getKeyInfosData.value));
Toast.show(msg: "设置成功");
} else {}
}
// 设置是否打开开锁提醒
void setLockPickingReminder() async {
var entity = await ApiRepository.to.setLockPickingReminderData(
lockId: state.getKeyInfosData.value.lockId.toString(),
keyId: state.getKeyInfosData.value.keyId.toString(),
monitorFlag:
state.isLockPickingReminder.value == 1 ? "1" : "2", // 1开启2关闭
);
if (entity.errorCode!.codeIsSuccessful) {
eventBus.fire(RefreshLockListInfoDataEvent());
state.getKeyInfosData.value.monitorFlag =
state.isLockPickingReminder.value;
eventBus
.fire(PassCurrentLockInformationEvent(state.getKeyInfosData.value));
Toast.show(msg: "设置成功");
} else {}
}
2023-09-07 18:36:16 +08:00
// 下级界面修改成功后传递数据
StreamSubscription? _passCurrentLockInformationEvent;
void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) {
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
_passCurrentLockInformationEvent =
eventBus.on<PassCurrentLockInformationEvent>().listen((event) {
2023-09-07 18:36:16 +08:00
state.getKeyInfosData.value = event.keyInfo;
blockSetStateCallback();
});
}
// 监听蓝牙协议返回结果
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) async {
if (reply is DeletUserReply) {
var tokenData = reply.data.sublist(2, 6);
var saveStrList = changeIntListToStringList(tokenData);
print("openDoorToken:$tokenData");
Storage.setStringList(saveBlueToken, saveStrList);
int status = reply.data[6];
2023-08-30 10:56:18 +08:00
print("status:$status");
switch (status) {
case 0x00:
//成功
print("${reply.commandType}解析成功");
2023-08-29 17:39:35 +08:00
deletLockInfoData();
break;
case 0x06:
//无权限
print("${reply.commandType}需要鉴权");
2023-08-29 17:39:35 +08:00
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
2023-08-29 17:39:35 +08:00
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
IoSenderManage.deletUser(
lockID:
state.getKeyInfosData.value.bluetooth!.bluetoothDeviceName,
authUserID: await Storage.getUid(),
keyID: "1",
delUserID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: tokenData);
break;
case 0x07:
//无权限
print("${reply.commandType}用户无权限");
break;
case 0x09:
// 权限校验错误
print("${reply.commandType}权限校验错误");
break;
default:
//失败
print("${reply.commandType}失败");
break;
}
}
});
}
2023-09-07 18:36:16 +08:00
// 删除用户蓝牙协议
Future<void> deletUserAction() async {
BlueManage().judgeReconnect(
BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName,
(DeviceConnectionState connectionState) async {
if (connectionState == DeviceConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
print("openDoorTokenPubToken:$getTokenList");
print(
"state.getKeyInfosData.value.bluetooth!.bluetoothDeviceName:${state.getKeyInfosData.value.bluetooth!.bluetoothDeviceName}");
IoSenderManage.deletUser(
lockID: state.getKeyInfosData.value.bluetooth!.bluetoothDeviceName,
authUserID: "100001",
keyID: "1",
delUserID: "100001",
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList);
}
});
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
print("onReady()");
2023-09-07 18:36:16 +08:00
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
print("onInit()");
}
@override
void onClose() {
// TODO: implement onClose
_replySubscription.cancel();
2023-09-07 18:36:16 +08:00
_passCurrentLockInformationEvent!.cancel();
}
}