486 lines
16 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/main/lockDetail/fingerprint/fingerprintList/fingerprint_entity.dart';
import 'package:star_lock/tools/baseGetXController.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 'fingerprintListData_entity.dart';
import 'fingerprintList_state.dart';
class FingerprintListLogic extends BaseGetXController {
FingerprintListState state = FingerprintListState();
// 获取解析后的数据
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// 添加指纹开始(此处用作删除指纹)
if ((reply is SenderAddFingerprintWithTimeCycleCoercionReply) &&
(state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply);
}
// if(reply is SenderQueryingFingerprintStatusReply) {
// // 获取指纹状态
// _replyQueryingFingerprintStatus(reply);
// }
//
// if(reply is SenderCheckingUserInfoCountReply){
// _replyCheckingUserInfoCount(reply);
// }
});
}
// 添加指纹开始---这里用作删除指纹
Future<void> _replyAddFingerprintBegin(Reply reply) async {
final int status = reply.data[2];
switch (status) {
case 0x00:
//成功
cancelBlueConnetctToastTimer();
dismissEasyLoading();
deletAllFingerprintsData();
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.deletKeyID,
userID: (await Storage.getUid())!,
fingerNo: state.deletFingerNo,
useCountLimit: 0xffff,
operate: state.isDeletAll == true ? 3 : 2,
// 0:注册 1修改 2:删除 3删除全部
isAdmin: 0,
isForce: 0,
// 是否是胁迫
isRound: 0,
// 是否是循环
weekRound: 0,
// 周循环
startDate: 0x11223344,
endDate: 0x11223344,
startTime: '0',
endTime: '0',
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: token,
isBeforeAddUser: false);
break;
default:
//失败
break;
}
}
// 获取指纹状态
// Future<void> _replyQueryingFingerprintStatus(Reply reply) async {
// final int status = reply.data[2];
// switch(status){
// case 0x00:
// //成功
// break;
// case 0x06:
// //需要鉴权
// break;
// default:
// //失败
// break;
// }
// }
// 获取卡片状态
// Future<void> _replyReferEventRecordNumber(Reply reply) async {
// final int status = reply.data[2];
// switch(status){
// case 0x00:
// //成功
// // _getLockStatus();
// break;
// case 0x06:
// //无权限
// break;
// case 0x07:
// //无权限
// break;
// case 0x09:
// // 权限校验错误
// break;
// default:
// //失败
// break;
// }
// }
// 查询用户、指纹、密码、卡片数量(用于判断是否同步)
// Future<void> _replyCheckingUserInfoCount(Reply reply) async {
// final int status = reply.data[2];
//
// // 用户数量
// final int userNum = reply.data[5];
//
// // 指纹数量
// final int fingerNum = reply.data[6];
//
// // 密码数量
// final int pwdNum = reply.data[7];
//
// // 卡片数量
// final int cardNum = reply.data[8];
//
// // 记录数量
// final int logsNum = reply.data[9];
//
// // 版本
// final int verNo = reply.data[10];
//
// // 最大管理员指纹数量
// final int maxAdminFingerNum = reply.data[11];
//
// // 最大用户指纹数量
// final int maxUserFingerNum = reply.data[12];
//
// // 最大管理员密码数量
// final int maxAdminPassNum = reply.data[13];
//
// // 最大用户密码数量
// final int maxUserPassNum = reply.data[14];
//
// // 最大管理员卡片数量
// final int maxAdminCardNum = reply.data[15];
//
// // 最大用户卡片数量
// final int maxUserCardNum = reply.data[16];
//
// // 序列号
// final List<int> serialNo = reply.data.sublist(17, 21);
//
// switch(status){
// case 0x00:
// //成功
// // _getLockStatus();
// break;
// case 0x06:
// //无权限
// break;
// default:
// //失败
// break;
// }
// }
// 获取指纹状态
// Future<void> senderQueryingFingerprintStatus() async {
// BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async {
// if (state == BluetoothConnectionState.connected) {
// 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!);
//
// final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
// final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderQueryingFingerprintStatusCommand(
// keyID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// role:0xff,
// fingerCount:20,
// fingerNo:1,
// token:getTokenList,
// needAuthor:1,
// publicKey:getPublicKeyList,
// privateKey:getPrivateKeyList,
// );
// }
// });
// }
// 查询用户、指纹、密码、卡片数量(用于判断是否同步)
// Future<void> senderCheckingUserInfoCount() async {
// BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
// if (state == BluetoothConnectionState.connected) {
// 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!);
//
// final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
// final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderCheckingUserInfoCountCommand(
// keyID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// role:0xff,
// nowTime:DateTime.now().millisecondsSinceEpoch~/1000,
// token:getTokenList,
// needAuthor:1,
// publicKey:getPublicKeyList,
// privateKey:getPrivateKeyList,
// );
// }
// });
// }
// 删除指纹
Future<void> senderAddFingerprint() async {
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
});
BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
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.deletKeyID,
userID: (await Storage.getUid())!,
fingerNo: state.deletFingerNo,
useCountLimit: 0xffff,
operate: state.isDeletAll == true ? 3 : 2,
// 0:注册 1修改 2:删除 3删除全部
isAdmin: 0,
isForce: 0,
// 是否是胁迫
isRound: 0,
// 是否是循环
weekRound: 0,
// 周循环
startDate: 0x11223344,
endDate: 0x11223344,
startTime: '0',
endTime: '0',
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
/**
* //请求密码钥匙列表
Future<PasswordKeyListEntity> mockNetworkDataRequest(
{required bool isRefresh}) async {
// 如果是下拉刷新,清空已有数据
if (isRefresh) {
state.itemDataList.clear();
pageNo = 1;
}
final PasswordKeyListEntity entity = await ApiRepository.to.passwordKeyList(
state.keyInfo.value.keyStatus.toString(),
state.keyInfo.value.lockId.toString(),
pageNo.toString(),
pageSize.toString(),
state.searchController.text);
if (entity.errorCode!.codeIsSuccessful) {
// 更新数据列表
state.itemDataList.addAll(entity.data!.itemList!);
// 更新页码
pageNo++;
}
return entity;
}
*/
// 获取指纹列表
Future<FingerprintListDataEntity> getFingerprintsListData(
{required bool isRefresh}) async {
// 如果是下拉刷新,清空已有数据
// if (isRefresh) {
state.fingerprintItemListData.clear();
pageNo = 1;
final FingerprintListDataEntity entity =
await ApiRepository.to.getFingerprintsListData(
lockId: state.lockId.value.toString(),
pageNo: pageNo.toString(),
pageSize: pageSize.toString(),
searchStr: state.searchController.text,
);
// if (entity.errorCode!.codeIsSuccessful) {
// if (pageNo == 1) {
// state.fingerprintItemListData.value = entity.data!.list!;
// pageNo++;
// } else {
// if (entity.data!.list!.isNotEmpty) {
// state.fingerprintItemListData.value.addAll(entity.data!.list!);
// pageNo++;
// }
// }
// }
if (entity.errorCode!.codeIsSuccessful) {
// 更新数据列表
state.fingerprintItemListData.addAll(entity.data!.list!);
// 更新页码
pageNo++;
}
return entity;
}
// 重置所有的指纹
Future<void> deletAllFingerprintsData() async {
String fingerprintId = '';
String type = '1';
if (state.isDeletAll == false) {
fingerprintId = state.deletKeyID;
type = '0';
}
final LoginEntity entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: fingerprintId,
lockId: state.lockId.value.toString(),
type: type,
deleteType: '1');
if (entity.errorCode!.codeIsSuccessful) {
if (state.isDeletAll == false) {
showToast('删除成功'.tr, something: () {
getFingerprintsListData(isRefresh: true);
});
} else {
showToast('重置成功'.tr, something: () {
getFingerprintsListData(isRefresh: true);
});
}
}
}
// 监听修改完详情之后刷新列表
late StreamSubscription _teamEvent;
void _initRefreshAction() {
_teamEvent = eventBus
.on<OtherTypeRefreshListEvent>()
.listen((OtherTypeRefreshListEvent event) async {
// 立即刷新数据
await getFingerprintsListData(isRefresh: true);
});
}
String getKeyType(FingerprintItemData fingerprintItemData) {
// fingerprintStatus 1:正常 2:失效
String keyTypeStr = ''; //
// (fingerprintItemData.fingerprintType! != 1) ? (fingerprintItemData.endDate! < DateTime.now().millisecondsSinceEpoch ? "已失效" : "") : ""
if (fingerprintItemData.fingerprintStatus == 1) {
if (fingerprintItemData.startDate! >
DateTime.now().millisecondsSinceEpoch) {
keyTypeStr = '未生效'.tr;
}
} else if (fingerprintItemData.fingerprintStatus == 2) {
keyTypeStr = '已失效'.tr;
}
return keyTypeStr;
}
String getKeyDateType(FingerprintItemData fingerprintItemData) {
String keyDateTypeStr = ''; // 永久:1;限时2单次3循环:4
if (fingerprintItemData.fingerprintType! == 1) {
keyDateTypeStr =
"${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} ${"永久".tr}";
} else if (fingerprintItemData.fingerprintType! == 2) {
keyDateTypeStr =
'${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} ${'限时'.tr}';
} else if (fingerprintItemData.fingerprintType! == 4) {
keyDateTypeStr =
'${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} ${'循环'.tr}';
}
return keyDateTypeStr;
}
//刷新单条信息
Future<void> refreshIndividualKeys({required int fingerprintId}) async {
final FingerprintEntity entity =
await ApiRepository.to.getFingerprintsData(fingerprintId);
if (entity.errorCode!.codeIsSuccessful) {
final int index = state.fingerprintItemListData.indexWhere(
(FingerprintItemData item) => item.fingerprintId == fingerprintId);
state.fingerprintItemListData.removeAt(index);
state.fingerprintItemListData.insert(index, entity.data!);
}
}
@override
Future<void> onReady() async {
super.onReady();
// 获取是否是演示模式 演示模式不获取接口
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_initReplySubscription();
_initRefreshAction();
// 初始加载数据
await getFingerprintsListData(isRefresh: true);
}
}
@override
Future<void> onInit() async {
super.onInit();
}
@override
Future<void> onClose() async {
super.onClose();
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_replySubscription.cancel();
_teamEvent.cancel();
}
}
}