魏少阳 a8c57cc5b0 Merge branch 'release' of https://gitee.com/starlock-cn/app-starlock into release
# Conflicts:
#	lib/main/lockMian/lockList/lockList_page.dart
#	lib/network/api.dart
#	lib/network/api_provider.dart
#	lib/network/api_repository.dart
2024-05-23 10:51:32 +08:00

594 lines
20 KiB
Dart

import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_updataLockCardList.dart';
import '../../../../blue/io_protocol/io_updataLockFaceList.dart';
import '../../../../blue/io_protocol/io_updataLockFingerprintList.dart';
import '../../../../blue/io_protocol/io_updataLockPalmVeinList.dart';
import '../../../../blue/io_protocol/io_updataLockPasswordList.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/storage.dart';
import 'uploadData_state.dart';
class UploadDataLogic extends BaseGetXController{
UploadDataState state = UploadDataState();
// 监听蓝牙协议返回结果
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// 上传数据获取锁密码列表
if (reply is UpdataLockPasswordListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockPasswordListReply(reply);
}
// 上传数据获取锁卡列表
if (reply is UpdataLockCardListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockCardListReply(reply);
}
// 上传数据获取锁指纹列表
if (reply is UpdataLockFingerprintListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockFingerprintListReply(reply);
}
// 上传数据获取锁人脸列表
if (reply is UpdataLockFaceListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockFaceListReply(reply);
}
// 上传数据获取锁掌静脉列表
if (reply is UpdataLockPalmVeinListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockPalmVeinListReply(reply);
}
});
}
// 上传数据获取锁密码列表
Future<void> _replyupdataLockPasswordListReply(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
state.indexCount.value = state.indexCount.value + 1;
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
state.uploadPasswordDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 当数据是10的时候继续请求
var token = reply.data.sublist(3, 7);
updataLockPasswordList(token, state.uploadPasswordPage);
}else{
dismissEasyLoading();
// 当数据不是10的时候解析数据上传
if(state.uploadPasswordDataList.isEmpty){
// 如果是空的直接上传下一个
getUpdataLockCardList();
}else{
// 如果不是空的解析数据上传
_lockDataUpload(uploadType:2, recordType:2, records:state.uploadPasswordDataList);
}
}
break;
case 0x06:
//无权限
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockPasswordList(token, state.uploadPasswordPage);
break;
default:
dismissEasyLoading();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
cancelBlueConnetctToastTimer();
break;
}
}
// 上传数据获取锁卡列表
Future<void> _replyupdataLockCardListReply(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
state.indexCount.value = state.indexCount.value + 1;
dismissEasyLoading();
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
state.uploadCardDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 当数据是10的时候继续请求
var token = reply.data.sublist(3, 7);
updataLockCardList(token, state.uploadCardPage);
}else{
// 当数据不是10的时候解析数据上传
if(state.uploadCardDataList.isEmpty){
// 如果是空的直接上传下一个
getUpdataLockFingerprintList();
}else{
// 如果不是空的解析数据上传
_lockDataUpload(uploadType:2, recordType:3, records:state.uploadCardDataList);
}
}
break;
case 0x06:
//无权限
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockCardList(token, state.uploadCardPage);
break;
default:
dismissEasyLoading();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
cancelBlueConnetctToastTimer();
break;
}
}
// 上传数据获取锁指纹列表
Future<void> _replyupdataLockFingerprintListReply(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
state.indexCount.value = state.indexCount.value + 1;
dismissEasyLoading();
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
state.uploadFingerprintDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 当数据是10的时候继续请求
var token = reply.data.sublist(3, 7);
updataLockFingerprintList(token, state.uploadFingerprintPage);
}else{
// 当数据不是10的时候解析数据上传
if(state.uploadFingerprintDataList.isEmpty){
// 如果是空的直接上传下一个
getUpdataLockFaceList();
}else{
// 如果不是空的解析数据上传
_lockDataUpload(uploadType:2, recordType:4, records:state.uploadFingerprintDataList);
}
}
break;
case 0x06:
//无权限
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockFingerprintList(token, state.uploadFingerprintPage);
break;
default:
dismissEasyLoading();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
cancelBlueConnetctToastTimer();
break;
}
}
// 上传数据获取锁人脸列表解析
Future<void> _replyupdataLockFaceListReply(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
state.indexCount.value = state.indexCount.value + 1;
dismissEasyLoading();
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
state.uploadFaceDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 当数据是10的时候继续请求
var token = reply.data.sublist(3, 7);
updataLockFaceList(token, state.uploadFacePage);
}else{
// 当数据不是10的时候解析数据上传
if(state.uploadFaceDataList.isEmpty){
// 如果是空的直接上传下一个
getUpdataLockPalmVeinList();
}else{
// 如果不是空的解析数据上传
_lockDataUpload(uploadType:2, recordType:5, records:state.uploadFaceDataList);
}
}
break;
case 0x06:
//无权限
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockFaceList(token, state.uploadFacePage);
break;
default:
dismissEasyLoading();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
cancelBlueConnetctToastTimer();
break;
}
}
// 上传数据获取锁掌静脉列表解析
Future<void> _replyupdataLockPalmVeinListReply(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//成功
state.indexCount.value = state.indexCount.value + 1;
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
int dataLength = reply.data[8];
state.uploadPalmVeinDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 当数据是10的时候继续请求
var token = reply.data.sublist(3, 7);
updataLockPalmVeinList(token, state.uploadPalmVeinPage);
}else{
// 当数据不是10的时候解析数据上传
if(state.uploadPalmVeinDataList.isEmpty){
// 不需要上传 如果是空的直接上传下一个
showToast("上传成功");
}else{
// 如果不是空的解析数据上传
_lockDataUpload(uploadType:2, recordType:6, records:state.uploadPalmVeinDataList);
}
}
break;
case 0x06:
//无权限
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockPalmVeinList(token, state.uploadPalmVeinPage);
break;
default:
dismissEasyLoading();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
cancelBlueConnetctToastTimer();
break;
}
}
// 上传数据获取锁密码列表
Future<void> getUpdataLockPasswordList() async {
if(state.sureBtnState.value == 1){
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
updataLockPasswordList(getTokenList, state.uploadPasswordPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
// 公共的获取密码列表
Future<void> updataLockPasswordList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockPasswordListCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
page: page,
countReq: state.countReq,
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
// 上传数据获取锁Card列表
Future<void> getUpdataLockCardList() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.indexCount.value = 0;
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
updataLockCardList(getTokenList, state.uploadCardPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
// 公共的获取Card列表
Future<void> updataLockCardList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockCardListCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
page: page,
countReq: state.countReq,
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
// 上传数据获取锁指纹列表
Future<void> getUpdataLockFingerprintList() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.indexCount.value = 0;
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
updataLockFingerprintList(getTokenList, state.uploadFingerprintPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
// 公共的获取指纹列表
Future<void> updataLockFingerprintList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockFingerprintListCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
page: page,
countReq: state.countReq,
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
// 上传数据获取锁人脸列表
Future<void> getUpdataLockFaceList() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.indexCount.value = 0;
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
updataLockFaceList(getTokenList, state.uploadFacePage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
// 公共的获取人脸列表
Future<void> updataLockFaceList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockFaceListCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
page: page,
countReq: state.countReq,
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
// 上传数据获取锁掌静脉列表
Future<void> getUpdataLockPalmVeinList() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.indexCount.value = 0;
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
updataLockPalmVeinList(getTokenList, state.uploadPalmVeinPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
// 公共的获取掌静脉列表
Future<void> updataLockPalmVeinList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockPalmVeinListCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
page: page,
countReq: state.countReq,
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
// 锁数据上传服务器
Future<void> _lockDataUpload({
required int uploadType,
required int recordType,
required List records
}) async{
var entity = await ApiRepository.to.lockDataUpload(
lockId: CommonDataManage().currentKeyInfo.lockId!,
uploadType:uploadType,
recordType: recordType,
records:records
);
if(entity.errorCode!.codeIsSuccessful){
if(uploadType == 1){
// 1设置
}else{
// 2开门方式
switch(recordType){
// case 1:
// // 电子钥匙
//
// break;
case 2:
// 密码
getUpdataLockCardList();
break;
case 3:
// IC卡
getUpdataLockFingerprintList();
break;
case 4:
// 指纹
getUpdataLockFaceList();
break;
case 5:
// 人脸
getUpdataLockPalmVeinList();
break;
case 6:
// 掌静脉
state.indexCount.value = 0;
state.sureBtnState.value = 0;
showToast("上传成功");
break;
default:
break;
}
}
}else{
state.indexCount.value = 0;
state.sureBtnState.value = 0;
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
// getUpdataLockPalmVeinList();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();
}
}