获取星锁状态添加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? userID;
int? utcTimeStamp;
int? unixTimeStamp;
List<int>? privateKey;
GetStarLockStatuInfoCommand({
this.lockID,
this.userID,
this.utcTimeStamp,
this.unixTimeStamp,
this.privateKey
}) : super(CommandType.readStarLockStatusInfo);
@override
String toString() {
return 'GetStarLockStatuInfoCommand{lockID: $lockID, '
'utcTimeStamp: $utcTimeStamp, unixTimeStamp: $unixTimeStamp, '
'userID: $userID, privateKey: $privateKey}';
}
@ -48,6 +52,18 @@ class GetStarLockStatuInfoCommand extends SenderProtocol {
data.addAll(utf8.encode(userID!));
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) {
int add = (16 - data.length % 16);
for (int i = 0; i < add; i++) {

View File

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

View File

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

View File

@ -58,6 +58,8 @@ class UploadElectricQuantityLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: false,
privateKey: getPrivateKeyList,
);
@ -113,6 +115,8 @@ class UploadElectricQuantityLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: false,
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
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
getServerDatetime();
}
@override

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@ import '../lockSet/lockSetInfo_entity.dart';
class LockTimeState{
var lockSetInfoData = LockSetInfoData().obs;
var dateTime = "".obs;
var dateTimestamp = 0.obs;
int differentialTime = 0;
var ifCurrentScreen = true.obs; // ,
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/manager_event_bus.dart';
import '../../../blue/sender_manage.dart';
import '../../../network/api_repository.dart';
import '../../../tools/storage.dart';
import 'nearbyLock_state.dart';
@ -338,10 +339,11 @@ class NearbyLockLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: true,
privateKey: getPrivateKeyList,
);
break;
default:
//
@ -360,14 +362,12 @@ class NearbyLockLogic extends BaseGetXController {
AppLog.log("开始获取锁状态");
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
// IoSenderManage.senderGetLockStatu(
// lockID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// privateKey:getPrivateKeyList,
// );
IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
utcTimeStamp: getUTCNetTime(),
unixTimeStamp: getLocalNetTime(),
isBeforeAddUser: true,
privateKey: getPrivateKeyList,
);
@ -610,11 +610,36 @@ class NearbyLockLogic extends BaseGetXController {
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
void onReady() {
super.onReady();
_initReplySubscription();
state.ifCurrentScreen.value = true;
getServerDatetime();
startScanBlueList();
}

View File

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

View File

@ -8,9 +8,7 @@ class SelectLockTypeLogic extends BaseGetXController {
SelectLockTypeState state = SelectLockTypeState();
void getServerDatetime() async{
var entity = await ApiRepository.to.getServerDatetimeData(
lockId: CommonDataManage().currentKeyInfo.lockId.toString(),
);
var entity = await ApiRepository.to.getServerDatetimeData();
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,
jsonEncode({
'lockId': lockId,
}),
jsonEncode({}),
isUnShowLoading: true);
//

View File

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