import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; import 'package:star_lock/blue/io_type.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart'; import '../../../../blue/io_protocol/io_checkingUserInfoCount.dart'; import '../../../../blue/io_protocol/io_queryingFingerprintStatus.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) { // 添加指纹开始(此处用作删除指纹) 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 { int status = reply.data[2]; switch(status){ case 0x00: //成功 cancelBlueConnetctToastTimer(); dismissEasyLoading(); deletAllFingerprintsData(); break; case 0x06: //无权限 var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); var signKey = await Storage.getStringList(saveBlueSignKey); List signKeyDataList = changeStringListToIntList(signKey!); var token = reply.data.sublist(5, 9); var 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, ); break; default: //失败 break; } } // 获取指纹状态 Future _replyQueryingFingerprintStatus(Reply reply) async { int status = reply.data[2]; switch(status){ case 0x00: //成功 break; case 0x06: //需要鉴权 break; default: //失败 break; } } // 获取卡片状态 Future _replyReferEventRecordNumber(Reply reply) async { 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 { int status = reply.data[2]; // 用户数量 int userNum = reply.data[5]; // 指纹数量 int fingerNum = reply.data[6]; // 密码数量 int pwdNum = reply.data[7]; // 卡片数量 int cardNum = reply.data[8]; // 记录数量 int logsNum = reply.data[9]; // 版本 int verNo = reply.data[10]; // 最大管理员指纹数量 int maxAdminFingerNum = reply.data[11]; // 最大用户指纹数量 int maxUserFingerNum = reply.data[12]; // 最大管理员密码数量 int maxAdminPassNum = reply.data[13]; // 最大用户密码数量 int maxUserPassNum = reply.data[14]; // 最大管理员卡片数量 int maxAdminCardNum = reply.data[15]; // 最大用户卡片数量 int maxUserCardNum = reply.data[16]; // 序列号 var 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) { var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); var token = await Storage.getStringList(saveBlueToken); List getTokenList = changeStringListToIntList(token!); var publicKey = await Storage.getStringList(saveBluePublicKey); 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) { var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); var token = await Storage.getStringList(saveBlueToken); List getTokenList = changeStringListToIntList(token!); var publicKey = await Storage.getStringList(saveBluePublicKey); 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!); var signKey = await Storage.getStringList(saveBlueSignKey); List signKeyDataList = changeStringListToIntList(signKey!); var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); var token = await Storage.getStringList(saveBlueToken); 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, ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); cancelBlueConnetctToastTimer(); if(state.ifCurrentScreen.value == true){ showBlueConnetctToast(); } } }); } // 获取指纹列表 Future getFingerprintsListData() async{ // state.fingerprintItemListData.value.clear(); 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++; } } } return entity; } // 重置所有的指纹 void deletAllFingerprintsData() async{ var fingerprintId = ""; var type = "1"; if(state.isDeletAll == false){ fingerprintId = state.deletKeyID; type = "0"; } var 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:(){ pageNo = 1; getFingerprintsListData(); }); }else{ showToast("重置成功".tr, something:(){ pageNo = 1; getFingerprintsListData(); }); } } } // 监听修改完详情之后刷新列表 late StreamSubscription _teamEvent; void _initRefreshAction() { _teamEvent = eventBus.on().listen((event) { pageNo = 1; getFingerprintsListData(); }); } String getKeyType(FingerprintItemData fingerprintItemData){ // fingerprintStatus 1:正常 2:失效 var 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){ var 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())} 限时"; }else if(fingerprintItemData.fingerprintType! == 4){ keyDateTypeStr = "${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环"; } return keyDateTypeStr; } @override Future onReady() async { // TODO: implement onReady super.onReady(); // 获取是否是演示模式 演示模式不获取接口 var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if(isDemoMode == false){ _initReplySubscription(); _initRefreshAction(); } } @override Future onInit() async { // TODO: implement onInit super.onInit(); } @override Future onClose() async { // TODO: implement onClose super.onClose(); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if(isDemoMode == false) { _replySubscription.cancel(); _teamEvent.cancel(); } } }