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 _replySubscription; void _initReplySubscription() { _replySubscription = EventBusManager().eventBus!.on().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 _replyAddFingerprintBegin(Reply reply) async { final int status = reply.data[2]; switch (status) { case 0x00: //成功 cancelBlueConnetctToastTimer(); dismissEasyLoading(); deletAllFingerprintsData(); break; case 0x06: //无权限 final List? privateKey = await Storage.getStringList(saveBluePrivateKey); final List getPrivateKeyList = changeStringListToIntList(privateKey!); final List? signKey = await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); final List token = reply.data.sublist(5, 9); final List 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 _replyQueryingFingerprintStatus(Reply reply) async { // final int status = reply.data[2]; // switch(status){ // case 0x00: // //成功 // break; // case 0x06: // //需要鉴权 // break; // default: // //失败 // break; // } // } // 获取卡片状态 // Future _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 _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 serialNo = reply.data.sublist(17, 21); // // switch(status){ // case 0x00: // //成功 // // _getLockStatus(); // break; // case 0x06: // //无权限 // break; // default: // //失败 // break; // } // } // 获取指纹状态 // Future senderQueryingFingerprintStatus() async { // BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async { // if (state == BluetoothConnectionState.connected) { // final List? privateKey = await Storage.getStringList(saveBluePrivateKey); // final List getPrivateKeyList = changeStringListToIntList(privateKey!); // // final List? token = await Storage.getStringList(saveBlueToken); // final List getTokenList = changeStringListToIntList(token!); // // final List? publicKey = await Storage.getStringList(saveBluePublicKey); // final List 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 senderCheckingUserInfoCount() async { // BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async { // if (state == BluetoothConnectionState.connected) { // final List? privateKey = await Storage.getStringList(saveBluePrivateKey); // final List getPrivateKeyList = changeStringListToIntList(privateKey!); // // final List? token = await Storage.getStringList(saveBlueToken); // final List getTokenList = changeStringListToIntList(token!); // // final List? publicKey = await Storage.getStringList(saveBluePublicKey); // final List 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 senderAddFingerprint() async { showEasyLoading(); showBlueConnetctToastTimer(action: () { dismissEasyLoading(); }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { // var publicKey = await Storage.getStringList(saveBluePublicKey); // List publicKeyDataList = changeStringListToIntList(publicKey!); final List? signKey = await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); final List? privateKey = await Storage.getStringList(saveBluePrivateKey); final List getPrivateKeyList = changeStringListToIntList(privateKey!); final List? token = await Storage.getStringList(saveBlueToken); final List 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 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 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 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() .listen((OtherTypeRefreshListEvent event) { 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 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 onReady() async { super.onReady(); // 获取是否是演示模式 演示模式不获取接口 final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { _initReplySubscription(); _initRefreshAction(); } } @override Future onInit() async { super.onInit(); } @override Future onClose() async { super.onClose(); final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { _replySubscription.cancel(); _teamEvent.cancel(); } } }