283 lines
10 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_protocol/io_addPalmWithTimeCycleCoercion.dart';
import '../../../../../tools/baseGetXController.dart';
import '../../../../app_settings/app_settings.dart';
import '../../../../blue/blue_manage.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 '../../../../login/login/entity/LoginEntity.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import 'addPalm_entity.dart';
import 'addPalm_state.dart';
class AddPalmLogic extends BaseGetXController {
AddPalmState state = AddPalmState();
// 监听设备返回的数据
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// 添加掌静脉开始
if((reply is SenderAddPalmWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply);
}
// 添加掌静脉确认
if(reply is SenderAddPalmConfirmationReply) {
_replyAddICCardConfirmation(reply);
}
});
}
Future<void> _replyAddICCardBegin(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//成功
final List<int> cardNumberList = reply.data.sublist(reply.data.length - 2);
final String cardNumber = listChangInt(cardNumberList).toString();
// AppLog.log("添加卡号:$cardNumberList cardNumber:$cardNumber");
state.palmNumber.value = cardNumber.toString();
cancelBlueConnetctToastTimer();
state.ifAddState.value = true;
state.ifConnectScuess.value = true;
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!);
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddPalmWithTimeCycleCoercionCommand(
keyID:'1',
userID:await Storage.getUid(),
palmNo:0,
useCountLimit:0xffff,
operate:0, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == '2' ? 1 : 0,
isForce:state.isCoerced.value == '1' ? 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,
isBeforeAddUser: false
);
break;
default:
//失败
state.ifAddState.value = false;
break;
}
}
Future<void> _replyAddICCardConfirmation(Reply reply) async {
final int status = reply.data[2];
state.ifAddState.value = false;
switch(status){
case 0x00:
//成功
//成功
switch(reply.data[5]){
case 0xff:
// 注册指纹失败
showToast('退出添加'.tr);
Get.close(1);
break;
case 0xFE:
// 管理员已满
showToast('管理员已满'.tr);
Get.close(1);
break;
case 0xFD:
// 用户已满
showToast('用户已满'.tr);
Get.close(1);
break;
case 0xFC:
// 指纹已满
showToast('锁上面添加掌静脉已满'.tr);
Get.close(1);
break;
case 0xFB:
// 指纹已存在
showToast('掌静脉已存在'.tr);
break;
default:
// 添加指纹中
// 当前注册数
addICCardData();
break;
}
break;
default:
//失败
break;
}
}
// 添加掌静脉
Future<void> senderAddPalm() async {
showBlueConnetctToastTimer(action: (){
Get.close(1);
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
cancelBlueConnetctToastTimer();
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.senderAddPalmWithTimeCycleCoercionCommand(
keyID:'1',
userID:await Storage.getUid(),
palmNo:0,
useCountLimit:0xffff,
operate:0, // 0:注册 1修改 2:删除 3删除全部
isAdmin:state.isAdministrator.value == '2' ? 1 : 0,
isForce:state.isCoerced.value == '1' ? 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,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected){
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
cancelBlueConnetctToastTimer();
Get.close(1);
}
});
}
// 取消添加指纹
Future<void> senderCancelAddPalmCommand() async {
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
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<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderCancelAddPalmCommand(
keyID:'1',
userID:await Storage.getUid(),
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> addICCardData() async {
final AddPalmEntity entity = await ApiRepository.to.addPalmData(
lockId: state.lockId.value.toString(),
palmVeinName: state.palmName.value.toString(),
palmVeinNumber: state.palmNumber.value.toString(),
palmVeinType: int.parse(state.palmType.value),
startDate: int.parse(state.startDate.value),
endDate: int.parse(state.endDate.value),
addType: int.parse(state.addType.value),
weekDay: state.weekDay.value,
startTime: int.parse(state.effectiveDateTime.value),
endTime: int.parse(state.failureDateTime.value),
// remoteRight: state.isAdministrator.value == '2' ? 1 : 0,
palmVeinRight: 0,
);
if (entity.errorCode!.codeIsSuccessful) {
updateIdCardUserNoLoadData(entity.data!.palmVeinId ?? 0);
}
}
Future<void> updateIdCardUserNoLoadData(int palmVeinId) async{
final LoginEntity entity = await ApiRepository.to.updatePalmUserNoLoadData(
lockId: state.lockId.value,
palmVeinId: palmVeinId,
palmVeinUserNo: state.palmNumber.value,
);
if(entity.errorCode!.codeIsSuccessful){
showToast('添加成功'.tr, something:(){
if(state.fromType.value == 2){
// 回调指纹号
eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.palmNumber.value));
}else if(state.fromType.value == 1){
eventBus.fire(OtherTypeRefreshListEvent());
}
Get.close(2);
});
}
}
@override
void onReady() {
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
super.onInit();
senderAddPalm();
}
@override
void onClose() {
_replySubscription.cancel();
}
}