391 lines
13 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/blue/io_type.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateTool.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
import '../../../../blue/io_protocol/io_checkingCardStatus.dart';
import '../../../../blue/io_protocol/io_checkingUserInfoCount.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/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import '../../fingerprint/fingerprintList/fingerprintListData_entity.dart';
import 'cardList_state.dart';
class CardListLogic extends BaseGetXController {
CardListState state = CardListState();
// 获取解析后的数据
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
// 添加卡片开始(重置锁里面所有卡)
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply);
}
// if(reply is SenderCheckingCardStatusReply) {
// _replyReferEventRecordNumber(reply);
// }
//
// if(reply is SenderCheckingUserInfoCountReply){
// _replyCheckingUserInfoCount(reply);
// }
});
}
// 添加卡片开始(此处用作删除卡片)
Future<void> _replyAddICCardBegin(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
cancelBlueConnetctToastTimer();
deletICCardData();
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 publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.deletKeyID,
userID:(await Storage.getUid())!,
cardNo:state.deletCardNo,
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<void> _replyReferEventRecordNumber(Reply reply) async {
// int status = reply.data[2];
// switch(status){
// case 0x00:
// //成功
// // _getLockStatus();
// break;
// case 0x06:
// //无权限
// break;
// default:
// //失败
// break;
// }
// }
//
// // 查询用户、指纹、密码、卡片数量(用于判断是否同步)
// Future<void> _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<void> senderCheckingCardStatus() async {
// BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
// if (state == 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 publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderCheckingCardStatusCommand(
// keyID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// role:0xff,
// cardCount:20,
// cardNo:1,
// token:getTokenList,
// needAuthor:1,
// publicKey:getPublicKeyList,
// privateKey:getPrivateKeyList,
// );
// }
// });
// }
//
// // 查询用户、指纹、密码、卡片数量(用于判断是否同步)
// Future<void> senderCheckingUserInfoCount() async {
// BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
// if (state == 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 publicKey = await Storage.getStringList(saveBluePublicKey);
// 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> senderAddICCard() 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!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.deletKeyID,
userID:(await Storage.getUid())!,
cardNo:state.deletCardNo,
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();
}
}
});
}
// 获取IC卡列表
Future<FingerprintListDataEntity> getICCardListData() async{
FingerprintListDataEntity entity = await ApiRepository.to.getICCardListData(
lockId: state.lockId.value.toString(),
pageNo: pageNo.toString(),
pageSize: pageSize,
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;
}
// 删除所有IC卡
void deletICCardData() async{
var cardId = "";
var type = "1";
if(state.isDeletAll == false){
cardId = state.deletKeyID;
type = "0";
}
var entity = await ApiRepository.to.deletIcCardData(
cardId: cardId,
lockId: state.lockId.value.toString(),
type: type,
deleteType:"1"
);
if(entity.errorCode!.codeIsSuccessful){
if(state.isDeletAll == false){
showToast("删除成功".tr, something: (){
pageNo = 1;
getICCardListData();
});
}else{
showToast("重置成功".tr, something: (){
pageNo = 1;
getICCardListData();
});
}
}
}
// 监听修改完详情之后刷新列表
late StreamSubscription _teamEvent;
void _initRefreshAction() {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((event) {
pageNo = 1;
getICCardListData();
});
}
String getKeyType(FingerprintItemData fingerprintItemData){
var keyTypeStr = "";//
if(fingerprintItemData.cardStatus == 1){
if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){
keyTypeStr = "未生效".tr;
}
}else if(fingerprintItemData.cardStatus == 2){
keyTypeStr = "已失效".tr;
}
return keyTypeStr;
}
String getKeyDateType(FingerprintItemData fingerprintItemData){
var keyDateTypeStr = "";// 永久:1;限时2单次3循环:4
if(fingerprintItemData.cardType! == 1){
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久";
}else if(fingerprintItemData.cardType! == 2){
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时";
}else if(fingerprintItemData.cardType! == 4){
keyDateTypeStr = "${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环";
}
return keyDateTypeStr;
}
@override
Future<void> onReady() async {
// TODO: implement onReady
super.onReady();
// 获取是否是演示模式 演示模式不获取接口
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if(isDemoMode == false){
_initReplySubscription();
_initRefreshAction();
}
}
@override
Future<void> onInit() async {
// TODO: implement onInit
super.onInit();
}
@override
Future<void> onClose() async {
// TODO: implement onClose
super.onClose();
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if(isDemoMode == false) {
_replySubscription.cancel();
_teamEvent.cancel();
}
}
}