Merge branch 'master_hyx'

This commit is contained in:
anfe 2024-05-09 17:07:08 +08:00
commit 996c85ac0a
5 changed files with 140 additions and 151 deletions

View File

@ -477,7 +477,7 @@ class BlueManage {
// //
// //
dataLen = data[8] * 256 + data[9]; // 16 dataLen = data[8] * 256 + data[9]; // 16
AppLog.log("dataLen1111:$dataLen getDataLength:${data.length} data:$data"); // AppLog.log("dataLen1111:$dataLen getDataLength:${data.length} data:$data");
if (dataLen! + 14 > data.length) { if (dataLen! + 14 > data.length) {
// //
allData.addAll(data); allData.addAll(data);
@ -493,8 +493,8 @@ class BlueManage {
// //
allData.addAll(data); allData.addAll(data);
// var len = allData[8] * 256 + allData[9]; // var len = allData[8] * 256 + allData[9];
AppLog.log( // AppLog.log(
"dataLen3333:$dataLen allData.length:${allData.length} allData:$allData"); // "dataLen3333:$dataLen allData.length:${allData.length} allData:$allData");
if (((dataLen ?? 0) + 14) <= allData.length) { if (((dataLen ?? 0) + 14) <= allData.length) {
// //
CommandReciverManager.appDataReceive(allData); CommandReciverManager.appDataReceive(allData);

View File

@ -12,121 +12,124 @@ abstract class Reply{
//command key flag //command key flag
int status = 0; int status = 0;
List<int> data = []; List<int> data = [];
static String logTag= '锁 -> App指令订阅类型 :';
Reply.parseData(this.commandType, List<int> dataDetail); Reply.parseData(this.commandType, List<int> dataDetail);
void errorWithStstus(int status){ void errorWithStstus(int status){
switch(status){ switch(status){
case 0x00: case 0x00:
// //
AppLog.log("$logTag ${commandType?.typeName} 0x00 成功");
break; break;
case 0x01: case 0x01:
// //
AppLog.log("${commandType!.typeName} 0x01 包格式错误"); AppLog.log("$logTag ${commandType!.typeName} 0x01 包格式错误");
showErrorMessage("包格式错误"); showErrorMessage("包格式错误");
break; break;
case 0x02: case 0x02:
// //
AppLog.log("${commandType!.typeName} 0x02 密码错误"); AppLog.log("$logTag ${commandType!.typeName} 0x02 密码错误");
showErrorMessage("密码错误"); showErrorMessage("密码错误");
break; break;
case 0x03: case 0x03:
// //
AppLog.log("${commandType!.typeName} 0x03 网络中断"); AppLog.log("$logTag ${commandType!.typeName} 0x03 网络中断");
showErrorMessage("网络中断"); showErrorMessage("网络中断");
break; break;
case 0x04: case 0x04:
// //
AppLog.log("${commandType!.typeName} 0x04 用户未登记"); AppLog.log("$logTag ${commandType!.typeName} 0x04 用户未登记");
showErrorMessage("用户未登记"); showErrorMessage("用户未登记");
break; break;
case 0x05: case 0x05:
// //
AppLog.log("${commandType!.typeName} 0x05 参数错误"); AppLog.log("$logTag ${commandType!.typeName} 0x05 参数错误");
showErrorMessage("参数错误"); showErrorMessage("参数错误");
break; break;
case 0x06: case 0x06:
// //
AppLog.log("${commandType!.typeName} 0x06 需要鉴权"); AppLog.log("$logTag ${commandType!.typeName} 0x06 需要鉴权");
// showErrorMessage("需要鉴权"); // showErrorMessage("需要鉴权");
break; break;
case 0x07: case 0x07:
// //
AppLog.log("${commandType!.typeName} 0x07 无权限"); AppLog.log("$logTag ${commandType!.typeName} 0x07 无权限");
// showErrorMessage("无权限"); // showErrorMessage("无权限");
break; break;
case 0x08: case 0x08:
// //
AppLog.log("${commandType!.typeName} 0x08 应答超时"); AppLog.log("$logTag ${commandType!.typeName} 0x08 应答超时");
showErrorMessage("应答超时"); showErrorMessage("应答超时");
break; break;
case 0x09: case 0x09:
// //
AppLog.log("${commandType!.typeName} 0x09 权限校验错误"); AppLog.log("$logTag ${commandType!.typeName} 0x09 权限校验错误");
showErrorMessage("权限校验错误"); showErrorMessage("权限校验错误");
break; break;
case 0x0a: case 0x0a:
// //
showErrorMessage("钥匙不存在"); showErrorMessage("钥匙不存在");
AppLog.log("${commandType!.typeName} 0x0a 钥匙不存在"); AppLog.log("$logTag ${commandType!.typeName} 0x0a 钥匙不存在");
break; break;
case 0x0b: case 0x0b:
// //
showErrorMessage("钥匙过期"); showErrorMessage("钥匙过期");
AppLog.log("${commandType!.typeName} 0x0b 钥匙过期"); AppLog.log("$logTag ${commandType!.typeName} 0x0b 钥匙过期");
break; break;
case 0x0c: case 0x0c:
// //
showErrorMessage("钥匙数量已到上限"); showErrorMessage("钥匙数量已到上限");
AppLog.log("${commandType!.typeName} 0x0c 钥匙数量已到上限"); AppLog.log("$logTag ${commandType!.typeName} 0x0c 钥匙数量已到上限");
break; break;
case 0x0d: case 0x0d:
// //
showErrorMessage("钥匙无效"); showErrorMessage("钥匙无效");
AppLog.log("${commandType!.typeName} 0x0d 钥匙无效"); AppLog.log("$logTag ${commandType!.typeName} 0x0d 钥匙无效");
break; break;
case 0x0e: case 0x0e:
// //
showErrorMessage("钥匙已存在"); showErrorMessage("钥匙已存在");
AppLog.log("${commandType!.typeName} 0x0e 钥匙无效"); AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙无效");
break; break;
case 0x0f: case 0x0f:
// //
AppLog.log("${commandType!.typeName} 0x0f 用户已存在"); AppLog.log("$logTag ${commandType!.typeName} 0x0f 用户已存在");
showErrorMessage("用户已存在"); showErrorMessage("用户已存在");
break; break;
case 0x10: case 0x10:
// //
AppLog.log("${commandType!.typeName} 0x11 密码失效"); AppLog.log("$logTag ${commandType!.typeName} 0x11 密码失效");
showErrorMessage("密码失效"); showErrorMessage("密码失效");
break; break;
case 0x11: case 0x11:
// //
AppLog.log("${commandType!.typeName} 0x11 无效指令"); AppLog.log("$logTag ${commandType!.typeName} 0x11 无效指令");
showErrorMessage("无效指令"); showErrorMessage("无效指令");
break; break;
case 0x12: case 0x12:
// //
AppLog.log("${commandType!.typeName} 0x12 门锁时间异常"); AppLog.log("$logTag ${commandType!.typeName} 0x12 门锁时间异常");
showErrorMessage("门锁时间异常"); showErrorMessage("门锁时间异常");
break; break;
case 0x15: case 0x15:
// APP() // APP()
AppLog.log("${commandType!.typeName} 0x15 APP(手机)未联网"); AppLog.log("$logTag ${commandType!.typeName} 0x15 APP(手机)未联网");
showErrorMessage("APP(手机)未联网"); showErrorMessage("APP(手机)未联网");
break; break;
case 0x16: case 0x16:
// ... // ...
AppLog.log("${commandType!.typeName}正在开锁中..."); AppLog.log("$logTag ${commandType!.typeName}正在开锁中...");
// showErrorMessage("正在开锁中..."); // showErrorMessage("正在开锁中...");
break; break;
case 0xff: case 0xff:
// //
AppLog.log("${commandType!.typeName} 0xff"); AppLog.log("$logTag ${commandType!.typeName} 0xff");
showErrorMessage("异常,未知错误"); showErrorMessage("异常,未知错误");
break; break;
default: default:
// //
AppLog.log("蓝牙返回其他错误问题"); AppLog.log("$logTag ${commandType!.typeName} 蓝牙返回其他错误问题");
break; break;
} }
} }

View File

@ -110,9 +110,6 @@ class CommandReciverManager {
} }
parseData(oriDataList).then((Reply? value) async { parseData(oriDataList).then((Reply? value) async {
EasyLoading.dismiss(); EasyLoading.dismiss();
if (value != null) {
AppLog.log("锁 -> App指令订阅类型 :${value.commandType?.typeName} \n $value");
}
await EventBusManager().eventBusFir(value); await EventBusManager().eventBusFir(value);
}).catchError((error) { }).catchError((error) {
AppLog.log("APP解析数据时发生错误: $error"); AppLog.log("APP解析数据时发生错误: $error");

View File

@ -44,6 +44,7 @@ class SenderBeforeDataManage {
// //
StreamSubscription<Reply>? _replySubscription; StreamSubscription<Reply>? _replySubscription;
//
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription ??= _replySubscription ??=
EventBusManager().eventBus!.on<Reply>().listen((reply) async { EventBusManager().eventBus!.on<Reply>().listen((reply) async {
@ -52,128 +53,36 @@ class SenderBeforeDataManage {
_replyAddUserKey(reply); _replyAddUserKey(reply);
} }
if(reply is CleanUpUsersReply){ if (reply is CleanUpUsersReply) {
_cleanUpUsersReply(reply); _cleanUpUsersReply(reply);
} }
}); });
} }
// //
Future<void> _replyAddUserKey(Reply reply) async { Future<void> _replyAddUserKey(Reply reply) async {
int status = reply.data[46]; int status = reply.data[46];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
CommonDataManage().currentLockUserNo = listChangInt(reply.data.sublist(47, 49)); CommonDataManage().currentLockUserNo =
CommonDataManage().currentKeyInfo.lockUserNo = CommonDataManage().currentLockUserNo; listChangInt(reply.data.sublist(47, 49));
CommonDataManage().currentKeyInfo.lockUserNo =
CommonDataManage().currentLockUserNo;
_updateLockUserNo(); _updateLockUserNo();
break; break;
case 0x06: case 0x06:
// //
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(42, 46); var token = reply.data.sublist(42, 46);
List<String> strTokenList = changeIntListToStringList(token); List<String> strTokenList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, strTokenList); Storage.setStringList(saveBlueToken, strTokenList);
var addUserData = await getAddUserKeyData(tokenList: token);
// IoSenderManage.senderAddUser( eventBus.fire(LockAddUserSucceedEvent(addUserData, 1));
// lockID: BlueManage().connectDeviceName,
// authUserID: CommonDataManage().currentKeyInfo.senderUserId!.toString(),
// keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
// userID: await Storage.getUid(),
// openMode: 1,
// keyType: 0,
// startDate: CommonDataManage().currentKeyInfo.startDate!~/10000,
// expireDate: CommonDataManage().currentKeyInfo.endDate!~/10000,
// role: CommonDataManage().currentKeyInfo.keyRight == 1 ? 1 : 0,
// password: "123456",
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: token);
LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo;
AppLog.log(
"startDate111:${currentKeyInfo.startDate} endDate:${currentKeyInfo.endDate}");
DateTime startTime = DateTime.fromMillisecondsSinceEpoch(
currentKeyInfo.startDate! ~/ 1000);
DateTime endTime = DateTime.fromMillisecondsSinceEpoch(
currentKeyInfo.endDate! ~/ 1000);
bool isRound = currentKeyInfo.keyType == 2;
var addUserData = AddUserCommand(
lockID: BlueManage().connectDeviceName,
authUserID: currentKeyInfo.senderUserId!.toString(),
keyID: currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
openMode: 1,
keyType: currentKeyInfo.keyType,
startDate: currentKeyInfo.startDate! ~/ 1000,
expireDate: currentKeyInfo.endDate! ~/ 1000,
useCountLimit: 0xFFFF,
// useCountLimit: 1,
isRound: isRound ? 1 : 0,
weekRound: isRound
? DateTool().accordingTheCycleIntoTheCorrespondingNumber(
currentKeyInfo.weekDays!)
: 0,
startHour: isRound ? startTime.hour : 0,
startMin: isRound ? startTime.minute : 0,
endHour: isRound ? endTime.hour : 0,
endMin: isRound ? endTime.minute : 0,
role: currentKeyInfo.keyRight == 1 ? 1 : 0,
password: "123456",
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: token);
eventBus.fire(LockAddUserSucceedEvent(addUserData.packageData(), 1));
break; break;
case 0x0c: case 0x0c:
// 32 // 32
var entity = await ApiRepository.to.getLockUserNoList( var addUserData = await getCleanUpUsers();
lockId: CommonDataManage().currentKeyInfo.lockId!); CommandSenderManager().sendNormalData(addUserData);
if (!entity.errorCode!.codeIsSuccessful &&
(entity.data?.userNos ?? []).isNotEmpty) {
return;
}
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var tokenKey = await Storage.getStringList(saveBlueToken);
List<int> tokenList = changeStringListToIntList(tokenKey!);
AppLog.log('---> ${entity.data?.userNos}');
var cleanUpUsersData = CleanUpUsersCommand(
lockID: BlueManage().connectDeviceName,
authUserID: CommonDataManage().currentKeyInfo.senderUserId!.toString(),
keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
userNoList: entity.data!.userNos!,
token: tokenList,
).packageData();
CommandSenderManager().sendNormalData(cleanUpUsersData);
// IoSenderManage.senderCleanUpUsersCommand(
// lockID: BlueManage().connectDeviceName,
// authUserID:
// CommonDataManage().currentKeyInfo.senderUserId!.toString(),
// keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
// userID: await Storage.getUid(),
// userNoList: entity.data!.userNos!,
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: tokenList);
break; break;
default: default:
// //
@ -181,47 +90,81 @@ class SenderBeforeDataManage {
} }
} }
// //
Future<void> _cleanUpUsersReply(Reply reply) async { Future<void> _cleanUpUsersReply(Reply reply) async {
int status = reply.data[6]; int status = reply.data[6];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
//
var addUserData = await getAddUserKeyData();
CommandSenderManager().sendNormalData(addUserData);
break; break;
case 0x06: case 0x06:
// //
var privateKey = await Storage.getStringList(saveBluePrivateKey); var token = reply.data.sublist(2, 6);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(42, 46);
List<String> strTokenList = changeIntListToStringList(token); List<String> strTokenList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, strTokenList); Storage.setStringList(saveBlueToken, strTokenList);
var addUserData = await getCleanUpUsers(tokenList: token);
CommandSenderManager().sendNormalData(addUserData);
break; break;
default: default:
// //
break; break;
} }
} }
Future<List<int>> getAddUserKeyData() async { //
Future<List<int>> getCleanUpUsers({List<int>? tokenList}) async {
var entity = await ApiRepository.to
.getLockUserNoList(lockId: CommonDataManage().currentKeyInfo.lockId!);
if (!entity.errorCode!.codeIsSuccessful ||
(entity.data?.userNos ?? []).isEmpty) {
throw Exception('ApiRepository.to.getLockUserNoList 访问失败');
}
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey); var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!); List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken); if (tokenList == null) {
List<int> getTokenList = changeStringListToIntList(token!); var tokenKey = await Storage.getStringList(saveBlueToken);
tokenList = changeStringListToIntList(tokenKey!);
}
var cleanUpUsersData = CleanUpUsersCommand(
lockID: BlueManage().connectDeviceName,
authUserID: CommonDataManage().currentKeyInfo.senderUserId!.toString(),
keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
userNoList: entity.data!.userNos!,
token: tokenList,
);
return cleanUpUsersData.packageData();
}
//
Future<List<int>> getAddUserKeyData({List<int>? tokenList}) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
if (tokenList == null) {
var token = await Storage.getStringList(saveBlueToken);
tokenList = changeStringListToIntList(token!);
}
LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo; LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo;
DateTime startTime = DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.startDate! ~/ 1000); DateTime startTime =
DateTime endTime = DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.endDate! ~/ 1000); DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.startDate! ~/ 1000);
DateTime endTime =
DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.endDate! ~/ 1000);
bool isRound = currentKeyInfo.keyType == 2; bool isRound = currentKeyInfo.keyType == 2;
var addUserData = AddUserCommand( var addUserData = AddUserCommand(
@ -234,7 +177,6 @@ class SenderBeforeDataManage {
startDate: currentKeyInfo.startDate! ~/ 1000, startDate: currentKeyInfo.startDate! ~/ 1000,
expireDate: currentKeyInfo.endDate! ~/ 1000, expireDate: currentKeyInfo.endDate! ~/ 1000,
useCountLimit: 0xFFFF, useCountLimit: 0xFFFF,
// useCountLimit: 1,
isRound: isRound ? 1 : 0, isRound: isRound ? 1 : 0,
weekRound: isRound weekRound: isRound
? DateTool().accordingTheCycleIntoTheCorrespondingNumber( ? DateTool().accordingTheCycleIntoTheCorrespondingNumber(
@ -249,7 +191,7 @@ class SenderBeforeDataManage {
needAuthor: 1, needAuthor: 1,
publicKey: publicKeyDataList, publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
token: getTokenList); token: tokenList);
return addUserData.packageData(); return addUserData.packageData();
} }

View File

@ -9,11 +9,16 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/blue/io_protocol/io_cleanUpUsers.dart';
import 'package:star_lock/blue/io_tool/io_tool.dart'; import 'package:star_lock/blue/io_tool/io_tool.dart';
import 'package:star_lock/blue/sender_data.dart';
import 'package:star_lock/blue/sender_manage.dart'; import 'package:star_lock/blue/sender_manage.dart';
import 'package:star_lock/debug/log.dart'; import 'package:star_lock/debug/log.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
@ -85,6 +90,14 @@ class DebugConsoleController {
.catchError(EasyLoading.dismiss); .catchError(EasyLoading.dismiss);
}, },
child: const Text('给锁设备创建 32个用户')), child: const Text('给锁设备创建 32个用户')),
ElevatedButton(
onPressed: () {
EasyLoading.show();
sendCleanUpUsers()
.then((value) => EasyLoading.dismiss())
.catchError(EasyLoading.dismiss);
},
child: const Text('清除用户,只保留超级管理员')),
], ],
), ),
), ),
@ -141,9 +154,11 @@ class DebugConsoleController {
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
token: tokenList); token: tokenList);
} }
AppLog.log('--> 添加第$count 用户');
}); });
await Future.delayed(const Duration(seconds: 2)); await Future.delayed(const Duration(seconds: 3));
count++; count++;
await randomlyCreate32Users(count, max); await randomlyCreate32Users(count, max);
} }
@ -155,4 +170,36 @@ class DebugConsoleController {
return List.generate(length, (index) => chars[random.nextInt(chars.length)]) return List.generate(length, (index) => chars[random.nextInt(chars.length)])
.join(); .join();
} }
//
Future<void> sendCleanUpUsers({List<int>? tokenList}) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
if (tokenList == null) {
var tokenKey = await Storage.getStringList(saveBlueToken);
tokenList = changeStringListToIntList(tokenKey!);
}
BlueManage().bludSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
IoSenderManage.senderCleanUpUsersCommand(
lockID: BlueManage().connectDeviceName,
authUserID:
CommonDataManage().currentKeyInfo.senderUserId!.toString(),
keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
userNoList: [1],
token: tokenList,
);
}
});
}
} }