213 lines
8.3 KiB
Dart
Executable File
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/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.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/dateTool.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import 'fingerprintDetail_state.dart';
class FingerprintDetailLogic extends BaseGetXController{
FingerprintDetailState state = FingerprintDetailState();
List<dynamic> get weekDayStr {
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
}
// 获取解析后的数据
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// 添加指纹开始(此处用作修改或者删除指纹)
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply);
}
});
}
// 添加指纹开始
Future<void> _replyAddFingerprintBegin(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//成功
state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
if(state.isDeletFingerprint.value == true){
deletFingerprintsData();
}else{
editFingerprintsData();
}
break;
case 0x06:
//无权限
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.keyId.value.toString(),
userID:await Storage.getUid(),
fingerNo:int.parse(state.typeNumber.value),
useCountLimit:0xffff,
operate:state.isDeletFingerprint.value ? 2 : 1, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFingerprint.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.startDate.value),
endTime:DateTool().dateToHNString(state.endTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
//失败
state.sureBtnState.value = 0;
break;
}
}
// 删除指纹
Future<void> senderAddFingerprint() async {
if(state.sureBtnState.value == 1){
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.keyId.value.toString(),
userID:await Storage.getUid(),
fingerNo:int.parse(state.typeNumber.value),
useCountLimit:0xffff,
operate:state.isDeletFingerprint.value ? 2 : 1, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFingerprint.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.startDate.value),
endTime:DateTool().dateToHNString(state.endTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
// 删除指纹
Future<void> deletFingerprintsData() async{
final LoginEntity entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
type: '0',
deleteType:'1'
);
if(entity.errorCode!.codeIsSuccessful){
showToast('删除成功'.tr, something: (){
Get.back(result: 'deletScuess');
});
}
}
// 编辑指纹
Future<void> editFingerprintsData() async{
final LoginEntity entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.keyId.value.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.starDate.value,
endDate: state.endDate.value,
isCoerced: state.isStressFingerprint.value ? '1' : '2',
fingerprintName: state.changeNameController.text,
changeType: '1',
startTime: int.parse(state.startDate.value),
endTime: int.parse(state.endTime.value),
fingerprintType: state.keyType.value,
fingerRight: state.isAdministrator.value ? 1 : 0,
);
if(entity.errorCode!.codeIsSuccessful){
state.fingerprintItemData.value.fingerprintName = state.changeNameController.text;
state.fingerprintItemData.value.isCoerced = state.isStressFingerprint.value ? 1 : 2;
state.fingerprintItemData.value.fingerRight = state.isAdministrator.value ? 1 : 0;
showToast('修改成功'.tr, something: (){
eventBus.fire(OtherTypeRefreshListEvent());
});
}
}
String getKeyTypeShowDateTime(){
String useDateStr = '';
if(state.keyType.value == 1){
useDateStr = '永久'.tr;
}else if(state.keyType.value == 2){
useDateStr = '${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}';
} else if(state.keyType.value == 4){
useDateStr = '${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}';
}return useDateStr;
}
@override
void onReady() {
super.onReady();
_initReplySubscription();
}
@override
void onClose() {
super.onClose();
_replySubscription.cancel();
}
}