335 lines
12 KiB
Dart
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/app_settings/app_settings.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_addICCardWithTimeCycleCoercion.dart';
// import '../../../../blue/io_protocol/io_addStressICCard.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 'addICCard_state.dart';
class AddICCardLogic extends BaseGetXController{
AddICCardState state = AddICCardState();
// 监听设备返回的数据
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// 添加IC卡开始
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply);
}
// 添加卡确认
if(reply is SenderAddICCardConfirmationReply) {
_replyAddICCardConfirmation(reply);
}
// 添加胁迫卡
// if(reply is SenderAddStressICCardReply) {
// _replyAddICStressCard(reply);
// }
});
}
Future<void> _replyAddICCardBegin(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
var cardNumberList = reply.data.sublist(reply.data.length - 2);
var cardNumber = listChangInt(cardNumberList).toString();
// AppLog.log("添加卡号:$cardNumberList cardNumber:$cardNumber");
state.cardNumber.value = cardNumber.toString();
cancelBlueConnetctToastTimer();
state.ifConnectScuess.value = true;
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);
AppLog.log("添加卡token:$token");
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:"1",
userID:await Storage.getUid(),
cardNo:0,
useCountLimit:0xffff,
operate:0, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == "2" ? 1 : 0,
isForce:state.isCoerced.value == "2" ? 1 : 0, // 是否是胁迫
isRound:state.selectType.value == "2" ? 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.effectiveDateTime.value),
endTime:DateTool().dateToHNString(state.failureDateTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
);
break;
default:
//失败
break;
}
}
Future<void> _replyAddICCardConfirmation(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
// if(state.cardNumber.value == (reply.data[6]).toString()){
// return;
// }else{
// state.cardNumber.value = (reply.data[6]).toString();
// }
// if(state.isCoerced.value == "1"){
// 非胁迫
int addResultStatus = reply.data[5];
if(addResultStatus == 0){
// 成功更新序列号
addICCardData();
}else if(addResultStatus == 255){
// 255 自动退出
Get.close(2);
}
// }else{
// // 如果是胁迫指纹在 添加完之后以后再调用添加胁迫指纹的
// addICCardData();
// }
break;
default:
//失败
break;
}
}
// Future<void> _replyAddICStressCard(Reply reply) async {
// int status = reply.data[2];
//
// switch(status){
// case 0x00:
// //成功
// AppLog.log("${reply.commandType!.typeValue} 数据解析成功");
// addICCardData();
// break;
// case 0x06:
// //无权限
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
//
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
// var signKey = await Storage.getStringList(saveBlueSignKey);
// List<int> getSignKeyList = changeStringListToIntList(signKey!);
//
// var token = reply.data.sublist(5, 9);
// var saveStrList = changeIntListToStringList(token);
// Storage.setStringList(saveBlueToken, saveStrList);
//
// AppLog.log("state.isAdministrator.value:${state.isAdministrator.value}");
// IoSenderManage.senderAddStressICCardCommand(
// keyID:"1",
// userID:await Storage.getUid(),
// icCardNo:state.isAdministrator.value == "2" ? 254 : 1,
// cardType:1,
// useCountLimit:1,
// startTime:int.parse(state.startDate.value)~/1000,
// endTime:int.parse(state.endDate.value)~/1000,
// needAuthor:1,
// publicKey:publicKeyDataList,
// privateKey:getPrivateKeyList,
// token: token,
// signKey: getSignKeyList,
// );
// break;
// case 0x07:
// //无权限
// AppLog.log("${reply.commandType!.typeValue} 用户无权限");
//
// break;
// case 0x09:
// // 权限校验错误
// AppLog.log("${reply.commandType!.typeValue} 权限校验错误");
//
// break;
// default:
// //失败
// AppLog.log("${reply.commandType!.typeValue} 失败");
// break;
// }
// }
// 添加卡片
Future<void> senderAddICCard() async {
showBlueConnetctToastTimer(action: (){
Get.close(1);
});
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
cancelBlueConnetctToastTimer();
// 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:"1",
userID:await Storage.getUid(),
cardNo:0,
useCountLimit:0xffff,
operate:0, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == "2" ? 1 : 0,
isForce:state.isCoerced.value == "2" ? 1 : 0, // 是否是胁迫
isRound:state.selectType.value == "2" ? 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.effectiveDateTime.value),
endTime:DateTool().dateToHNString(state.failureDateTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected){
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
cancelBlueConnetctToastTimer();
Get.close(1);
}
});
}
// 添加胁迫卡片
// Future<void> senderAddStressICCard() async {
// BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
// if (deviceConnectionState == BluetoothConnectionState.connected){
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
//
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
// var signKey = await Storage.getStringList(saveBlueSignKey);
// List<int> getSignKeyList = changeStringListToIntList(signKey!);
//
// var token = await Storage.getStringList(saveBlueToken);
// List<int> getTokenList = changeStringListToIntList(token!);
//
// IoSenderManage.senderAddStressICCardCommand(
// keyID:"1",
// userID:await Storage.getUid(),
// icCardNo:state.isAdministrator.value == "2" ? 254 : 1,
// cardType:1,
// useCountLimit:1,
// startTime:int.parse(state.startDate.value)~/1000,
// endTime:int.parse(state.endDate.value)~/1000,
// needAuthor:1,
// publicKey:publicKeyDataList,
// privateKey:getPrivateKeyList,
// token: getTokenList,
// signKey: getSignKeyList,
// );
// }
// });
// }
void addICCardData() async {
var entity = await ApiRepository.to.addICCardData(
lockId: state.lockId.value.toString(),
endDate: state.endDate.value,
cardName: state.cardName.value.toString(),
cardNumber: state.cardNumber.value.toString(),
cardType: int.parse(state.cardType.value),
addType: state.addType.value.toString(),
startDate: state.startDate.value,
isCoerced: state.isCoerced.value.toString(),
weekDay: state.weekDay.value,
startTime: int.parse(state.effectiveDateTime.value),
endTime: int.parse(state.failureDateTime.value),
cardRight: state.isAdministrator.value == "2" ? 1 : 0,
);
if (entity.errorCode!.codeIsSuccessful) {
updateIdCardUserNoLoadData(entity.data!.cardId.toString());
}
}
void updateIdCardUserNoLoadData(String cardId) async{
var entity = await ApiRepository.to.updateIdCardUserNoLoadData(
lockId: state.lockId.value.toString(),
cardId: cardId,
cardUserNo: state.cardNumber.value,
);
if(entity.errorCode!.codeIsSuccessful){
showToast("添加成功".tr, something:(){
if(state.fromType.value == 2){
// 回调指纹号
eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.cardNumber.value));
}else if(state.fromType.value == 1){
eventBus.fire(OtherTypeRefreshListEvent());
}
Get.close(2);
});
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
senderAddICCard();
}
@override
void onClose() {
// TODO: implement onClose
_replySubscription.cancel();
}
}