获取星锁状态添加UTC时间戳跟本地时间戳
This commit is contained in:
parent
4c61209cfb
commit
d2d22edc3c
@ -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++) {
|
||||
|
||||
@ -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!,
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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不可用
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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连接中(不可用)
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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){
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
// 锁诊断
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user