获取星锁状态添加UTC时间戳跟本地时间戳

This commit is contained in:
魏少阳 2024-05-09 10:40:30 +08:00
parent 4c61209cfb
commit d2d22edc3c
13 changed files with 142 additions and 74 deletions

View File

@ -11,17 +11,21 @@ class GetStarLockStatuInfoCommand extends SenderProtocol {
String? lockID; String? lockID;
String? userID; String? userID;
int? utcTimeStamp;
int? unixTimeStamp;
List<int>? privateKey; List<int>? privateKey;
GetStarLockStatuInfoCommand({ GetStarLockStatuInfoCommand({
this.lockID, this.lockID,
this.userID, this.userID,
this.utcTimeStamp,
this.unixTimeStamp,
this.privateKey this.privateKey
}) : super(CommandType.readStarLockStatusInfo); }) : super(CommandType.readStarLockStatusInfo);
@override @override
String toString() { String toString() {
return 'GetStarLockStatuInfoCommand{lockID: $lockID, ' return 'GetStarLockStatuInfoCommand{lockID: $lockID, '
'utcTimeStamp: $utcTimeStamp, unixTimeStamp: $unixTimeStamp, '
'userID: $userID, privateKey: $privateKey}'; 'userID: $userID, privateKey: $privateKey}';
} }
@ -48,6 +52,18 @@ class GetStarLockStatuInfoCommand extends SenderProtocol {
data.addAll(utf8.encode(userID!)); data.addAll(utf8.encode(userID!));
data = getFixedLengthList(data, 20 - userIDLength); data = getFixedLengthList(data, 20 - userIDLength);
// startDate 4
data.add((utcTimeStamp! & 0xff000000) >> 24);
data.add((utcTimeStamp! & 0xff0000) >> 16);
data.add((utcTimeStamp! & 0xff00) >> 8);
data.add((utcTimeStamp! & 0xff));
// endDate 4
data.add((unixTimeStamp! & 0xff000000) >> 24);
data.add((unixTimeStamp! & 0xff0000) >> 16);
data.add((unixTimeStamp! & 0xff00) >> 8);
data.add((unixTimeStamp! & 0xff));
if ((data.length % 16) != 0) { if ((data.length % 16) != 0) {
int add = (16 - data.length % 16); int add = (16 - data.length % 16);
for (int i = 0; i < add; i++) { for (int i = 0; i < add; i++) {

View File

@ -212,15 +212,19 @@ class IoSenderManage {
//todo: //todo:
static void senderGetStarLockStatuInfo( static void senderGetStarLockStatuInfo(
{String? lockID, {required String? lockID,
String? userID, required String? userID,
List<int>? privateKey, required int? utcTimeStamp,
bool? isBeforeAddUser, required int? unixTimeStamp,
CommandSendCallBack? callBack}) { required List<int>? privateKey,
required bool? isBeforeAddUser,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData( CommandSenderManager().managerSendData(
command: GetStarLockStatuInfoCommand( command: GetStarLockStatuInfoCommand(
lockID: lockID, lockID: lockID,
userID: userID, userID: userID,
utcTimeStamp: utcTimeStamp,
unixTimeStamp: unixTimeStamp,
privateKey: privateKey, privateKey: privateKey,
), ),
isBeforeAddUser: isBeforeAddUser!, isBeforeAddUser: isBeforeAddUser!,

View File

@ -116,7 +116,7 @@ class LockDetailLogic extends BaseGetXController {
keyID: BlueManage().connectDeviceName, keyID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
openMode: state.openDoorModel, openMode: state.openDoorModel,
openTime: getNetTime(), openTime: getUTCNetTime(),
onlineToken: state.lockNetToken, onlineToken: state.lockNetToken,
token: tokenData, token: tokenData,
needAuthor: 1, needAuthor: 1,
@ -357,7 +357,7 @@ class LockDetailLogic extends BaseGetXController {
keyID: BlueManage().connectDeviceName, keyID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
openMode: state.openDoorModel, openMode: state.openDoorModel,
openTime: getNetTime(), openTime: getUTCNetTime(),
onlineToken: state.lockNetToken, onlineToken: state.lockNetToken,
token: getTokenList, token: getTokenList,
needAuthor: 1, needAuthor: 1,
@ -411,16 +411,14 @@ class LockDetailLogic extends BaseGetXController {
// //
void getServerDatetime() async{ void getServerDatetime() async{
var entity = await ApiRepository.to.getServerDatetimeData( var entity = await ApiRepository.to.getServerDatetimeData();
lockId: state.keyInfos.value.lockId.toString(),
);
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000; state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000;
// AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}"); // AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
} }
} }
int getNetTime(){ int getUTCNetTime(){
return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime; return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime;
} }

View File

@ -58,6 +58,8 @@ class UploadElectricQuantityLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: false, isBeforeAddUser: false,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -113,6 +115,8 @@ class UploadElectricQuantityLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: false, isBeforeAddUser: false,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -123,12 +127,37 @@ class UploadElectricQuantityLogic extends BaseGetXController {
} }
} }
//
void getServerDatetime() async{
var entity = await ApiRepository.to.getServerDatetimeData();
if(entity.errorCode!.codeIsSuccessful){
state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000;
getLocalNetTime();
// AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
}
}
int getUTCNetTime(){
return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime;
}
int getLocalNetTime(){
DateTime utcTime = DateTime.fromMillisecondsSinceEpoch(getUTCNetTime()*1000, isUtc: true);
DateTime localTime = utcTime.toLocal();
// AppLog.log('getUTCNetTime: ${getUTCNetTime()}');
// AppLog.log('UTC time: $utcTime');
// AppLog.log('Local time: $localTime localTime.millisecondsSinceEpoch ~/ 1000:${localTime.millisecondsSinceEpoch ~/ 1000}');
return localTime.millisecondsSinceEpoch ~/ 1000;
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady
super.onReady(); super.onReady();
_initReplySubscription(); _initReplySubscription();
getServerDatetime();
} }
@override @override

View File

@ -7,6 +7,7 @@ class UploadElectricQuantityState {
var lockSetInfoData = LockSetInfoData().obs; var lockSetInfoData = LockSetInfoData().obs;
var lockBasicInfo = LockBasicInfo().obs; var lockBasicInfo = LockBasicInfo().obs;
var uploadElectricQuantityDate = 0.obs; var uploadElectricQuantityDate = 0.obs;
int differentialTime = 0;
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0 1 var sureBtnState = 0.obs;// 0 1

View File

@ -36,38 +36,38 @@ class LockTimeLogic extends BaseGetXController{
} }
// //
Future<void> _replyGetStarLockStatusInfo(Reply reply) async { // Future<void> _replyGetStarLockStatusInfo(Reply reply) async {
int status = reply.data[2]; // int status = reply.data[2];
switch (status) { // switch (status) {
case 0x00: // case 0x00:
// // //
cancelBlueConnetctToastTimer(); // cancelBlueConnetctToastTimer();
dismissEasyLoading(); // dismissEasyLoading();
//
// // //
var indate = reply.data.sublist(149, 153); // var indate = reply.data.sublist(149, 153);
int indateValue = ((0xff & indate[(0)]) << 24 | // int indateValue = ((0xff & indate[(0)]) << 24 |
(0xff & indate[1]) << 16 | // (0xff & indate[1]) << 16 |
(0xff & indate[2]) << 8 | // (0xff & indate[2]) << 8 |
(0xFF & indate[3])); // (0xFF & indate[3]));
state.dateTime.value = DateTool().dateToYMDHNString("$indateValue"); // state.dateTime.value = DateTool().dateToYMDHNString("$indateValue");
break; // break;
case 0x06: // case 0x06:
// // //
var privateKey = await Storage.getStringList(saveBluePrivateKey); // var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); // List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
IoSenderManage.senderGetStarLockStatuInfo( // IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, // lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), // userID: await Storage.getUid(),
isBeforeAddUser: false, // isBeforeAddUser: false,
privateKey: getPrivateKeyList, // privateKey: getPrivateKeyList,
); // );
break; // break;
default: // default:
// // //
break; // break;
} // }
} // }
// //
Future<void> _replyTiming(Reply reply) async { Future<void> _replyTiming(Reply reply) async {
@ -75,7 +75,7 @@ class LockTimeLogic extends BaseGetXController{
switch(status){ switch(status){
case 0x00: case 0x00:
// //
String dataEime = DateTool().dateToYMDHNString("${state.dateTimestamp.value}"); String dataEime = DateTool().dateToYMDHNString("${getUTCNetTime()}");
state.dateTime.value = dataEime; state.dateTime.value = dataEime;
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
@ -118,7 +118,7 @@ class LockTimeLogic extends BaseGetXController{
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUid(), userID:await Storage.getUid(),
// nowTime:DateTime.now().millisecondsSinceEpoch~/1000, // nowTime:DateTime.now().millisecondsSinceEpoch~/1000,
nowTime: state.dateTimestamp.value, nowTime: getUTCNetTime(),
token:getTokenList, token:getTokenList,
needAuthor:1, needAuthor:1,
signKey:getSignKeyList, signKey:getSignKeyList,
@ -173,19 +173,19 @@ class LockTimeLogic extends BaseGetXController{
} }
} }
// //
void getServerDatetime(bool isSendBlue) async{ void getServerDatetime() async{
var entity = await ApiRepository.to.getServerDatetimeData( var entity = await ApiRepository.to.getServerDatetimeData();
lockId: state.lockSetInfoData.value.lockId.toString(),
);
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
state.dateTimestamp.value = entity.data!.date!.toString().length > 10 ? entity.data!.date!~/ 1000 : entity.data!.date!; state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000;
if(isSendBlue){ // AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
sendTiming();
}
} }
} }
int getUTCNetTime(){
return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime;
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady

View File

@ -57,7 +57,7 @@ class _LockTimePageState extends State<LockTimePage> with RouteAware{
onClick: () { onClick: () {
// logic.sendTiming(); // logic.sendTiming();
// logic.getServerDatetime(); // logic.getServerDatetime();
logic.getServerDatetime(true); logic.getServerDatetime();
}), }),
SizedBox( SizedBox(
height: 40.h, height: 40.h,

View File

@ -5,7 +5,7 @@ import '../lockSet/lockSetInfo_entity.dart';
class LockTimeState{ class LockTimeState{
var lockSetInfoData = LockSetInfoData().obs; var lockSetInfoData = LockSetInfoData().obs;
var dateTime = "".obs; var dateTime = "".obs;
var dateTimestamp = 0.obs; int differentialTime = 0;
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1() var sureBtnState = 0.obs;// 0() 1()

View File

@ -25,6 +25,7 @@ import '../../../blue/io_reply.dart';
import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/io_tool.dart';
import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../blue/io_tool/manager_event_bus.dart';
import '../../../blue/sender_manage.dart'; import '../../../blue/sender_manage.dart';
import '../../../network/api_repository.dart';
import '../../../tools/storage.dart'; import '../../../tools/storage.dart';
import 'nearbyLock_state.dart'; import 'nearbyLock_state.dart';
@ -338,10 +339,11 @@ class NearbyLockLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: true, isBeforeAddUser: true,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
break; break;
default: default:
// //
@ -360,14 +362,12 @@ class NearbyLockLogic extends BaseGetXController {
AppLog.log("开始获取锁状态"); AppLog.log("开始获取锁状态");
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
// IoSenderManage.senderGetLockStatu(
// lockID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// privateKey:getPrivateKeyList,
// );
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: true, isBeforeAddUser: true,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -610,11 +610,36 @@ class NearbyLockLogic extends BaseGetXController {
return bin; return bin;
} }
//
void getServerDatetime() async{
var entity = await ApiRepository.to.getServerDatetimeData();
if(entity.errorCode!.codeIsSuccessful){
state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000;
getLocalNetTime();
// AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
}
}
int getUTCNetTime(){
return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime;
}
int getLocalNetTime(){
DateTime utcTime = DateTime.fromMillisecondsSinceEpoch(getUTCNetTime()*1000, isUtc: true);
DateTime localTime = utcTime.toLocal();
// AppLog.log('getUTCNetTime: ${getUTCNetTime()}');
// AppLog.log('UTC time: $utcTime');
// AppLog.log('Local time: $localTime localTime.millisecondsSinceEpoch ~/ 1000:${localTime.millisecondsSinceEpoch ~/ 1000}');
return localTime.millisecondsSinceEpoch ~/ 1000;
}
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();
_initReplySubscription(); _initReplySubscription();
state.ifCurrentScreen.value = true; state.ifCurrentScreen.value = true;
getServerDatetime();
startScanBlueList(); startScanBlueList();
} }

View File

@ -5,6 +5,7 @@ class NearbyLockState {
RxList<ScanResult> devices = <ScanResult>[].obs; RxList<ScanResult> devices = <ScanResult>[].obs;
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
// var sureBtnState = 0.obs;// 0 1 // var sureBtnState = 0.obs;// 0 1
int differentialTime = 0;
var selectLockName = "".obs; var selectLockName = "".obs;

View File

@ -8,9 +8,7 @@ class SelectLockTypeLogic extends BaseGetXController {
SelectLockTypeState state = SelectLockTypeState(); SelectLockTypeState state = SelectLockTypeState();
void getServerDatetime() async{ void getServerDatetime() async{
var entity = await ApiRepository.to.getServerDatetimeData( var entity = await ApiRepository.to.getServerDatetimeData();
lockId: CommonDataManage().currentKeyInfo.lockId.toString(),
);
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
} }
} }

View File

@ -790,11 +790,9 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> getServerDatetimeLoadData(String lockId) => post( Future<Response> getServerDatetimeLoadData() => post(
getServerDatetimeUrl.toUrl, getServerDatetimeUrl.toUrl,
jsonEncode({ jsonEncode({}),
'lockId': lockId,
}),
isUnShowLoading: true); isUnShowLoading: true);
// //

View File

@ -848,10 +848,8 @@ class ApiRepository {
} }
// //
Future<GetServerDatetimeEntity> getServerDatetimeData({ Future<GetServerDatetimeEntity> getServerDatetimeData() async {
required String lockId, final res = await apiProvider.getServerDatetimeLoadData();
}) async {
final res = await apiProvider.getServerDatetimeLoadData(lockId);
return GetServerDatetimeEntity.fromJson(res.body); return GetServerDatetimeEntity.fromJson(res.body);
} }