229 lines
7.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateTool.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/storage.dart';
class FaceDetailLogic extends BaseGetXController {
FaceDetailState state = FaceDetailState();
// 获取解析后的数据
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) {
// 添加人脸开始(此处用作删除人脸)
if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFaceBegin(reply);
}
});
}
// 添加人脸开始
Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2];
switch (status) {
case 0x00:
//成功
state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
if(state.isDeletFace.value == true){
deletFaceData();
}else{
editFaceData();
}
deletFaceData();
break;
case 0x06:
//无权限
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFaceCommand(
keyID:state.keyId.value.toString(),
userID:await Storage.getUid(),
faceNo:int.parse(state.typeNumber.value),
useCountLimit:0xffff,
operate:state.isDeletFace.value ? 2 : 1, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFace.value == true ? 1 : 0, // 是否是胁迫
isRound:state.keyType.value == 4 ? 1: 0, // 是否是循环
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000,
startTime:DateTool().dateToHNString(state.startTime.value),
endTime:DateTool().dateToHNString(state.endTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
);
break;
default:
//失败
break;
}
}
// 删除/修改人脸信息
Future<void> senderAddFace() async {
if (state.sureBtnState.value == 1) {
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().bludSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.senderAddFaceCommand(
keyID:state.keyId.value.toString(),
userID:await Storage.getUid(),
faceNo:int.parse(state.typeNumber.value),
useCountLimit:0xffff,
operate:state.isDeletFace.value ? 2 : 1, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFace.value == true ? 1 : 0, // 是否是胁迫
isRound:state.keyType.value == 4 ? 1: 0, // 是否是循环
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000,
startTime:DateTool().dateToHNString(state.startTime.value),
endTime:DateTool().dateToHNString(state.endTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
// 删除人脸
void deletFaceData() async {
var entity = await ApiRepository.to.deleteFaceData(
faceId: state.faceItemData.value.faceId!,
lockId: state.faceItemData.value.lockId!,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功", something: () {
Get.back(result: "addScuess");
});
}
}
// 修改人脸名称
void updateFaceNameData() async {
var entity = await ApiRepository.to.updateFaceName(
lockId: state.faceItemData.value.lockId!,
faceId: state.faceItemData.value.faceId!,
faceName: state.changeNameController.text,
);
if (entity.errorCode!.codeIsSuccessful) {
state.typeName.value = state.changeNameController.text;
showToast("修改成功", something: () {
Get.back(result: "addScuess");
});
}
}
// 修改人脸有效期
void editFaceData() async {
var entity = await ApiRepository.to.updateFaceValidity(
lockId: state.faceItemData.value.lockId!,
faceId: state.faceItemData.value.faceId!,
startDate: int.parse(state.startDate.value),
endDate: int.parse(state.endDate.value),
startTime: int.parse(state.startTime.value),
endTime: int.parse(state.endTime.value),
faceType: state.keyType.value,
weekDay: state.weekDay.value,
faceName: state.changeNameController.text,
addType: "1",
isCoerced: state.isStressFace.value ? 2 : 1,
faceRight: state.isAdministrator.value ? 1 : 0,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () {
Get.back(result: "addScuess");
});
}
}
String getKeyTypeShowDateTime() {
String useDateStr = '';
if (state.keyType.value == 1) {
useDateStr = "永久";
} else if (state.keyType.value == 2) {
useDateStr =
"${DateTool().dateToYMDHNString(state.startDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}";
} else if (state.keyType.value == 4) {
useDateStr =
"${DateTool().dateToYMDString(state.startDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}";
}
return useDateStr;
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();
}
}