Files
biz_xfj_cloud/lib/common/utils/sync/sync_check_tool.dart
T

133 lines
3.9 KiB
Dart

import 'dart:async';
import 'package:get/get.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
class SyncCheckTool {
static const _tag = "自动检查任务";
SyncCheckTool._privateConstructor();
static final SyncCheckTool _instance = SyncCheckTool._privateConstructor();
static SyncCheckTool get instance => _instance;
bool _isRunning = false;
// **************************************************************************
// 定时器配置 start
// **************************************************************************
Duration mqInterval = const Duration(seconds: 60);
Duration printInterval = const Duration(seconds: 60 * 10);
Duration broadcastInterval = const Duration(seconds: 60 * 2);
Timer? mqTimer;
Timer? printTimer;
Timer? broadcastTimer;
// **************************************************************************
// 定时器配置 end
// **************************************************************************
startAll() {
if (_isRunning) return;
checkMq();
checkPrint();
checkBroadcast();
}
void dispose() {
_isRunning = false;
mqTimer?.cancel();
mqTimer = null;
}
// 检查mq是否可以连接,是否需要重新连接
checkMq() {
String logMsg = "检查mq是否可以连接,是否需要重新连接";
final inSeconds = mqInterval.inSeconds;
if (mqTimer != null && mqTimer!.isActive) {
mqTimer?.cancel();
mqTimer = null;
}
if (mqTimer != null) {
mqTimer?.cancel();
mqTimer = null;
}
mqTimer = Timer.periodic(mqInterval, (Timer timer) async {
final isNetwork = AppNetworkTool.isAutoNetwork();
if (!isNetwork) return;
logger.i("|$_tag|$logMsg,$inSeconds秒一次,开始执行");
if (MqManager.state == MqttConnectionState.connected) return;
try {
AppMqTool.mqRefresh();
} catch (e) {
logger.i("|$_tag|$logMsg,$inSeconds秒一次,执行失败,error:$e");
} finally {
logger.i("|$_tag|$logMsg,$inSeconds秒一次,执行完成");
}
});
}
// 定时检查需不要打印
checkPrint() {
String logMsg = "定时检查需不要打印";
final inSeconds = printInterval.inSeconds;
if (printTimer != null && printTimer!.isActive) {
printTimer?.cancel();
printTimer = null;
}
if (printTimer != null) {
printTimer?.cancel();
printTimer = null;
}
printTimer = Timer.periodic(printInterval, (Timer timer) async {
final isNetwork = AppNetworkTool.isAutoNetwork();
if (!isNetwork) return;
logger.i("|$_tag|$logMsg,$inSeconds秒一次,开始执行");
try {
await SyncPrintTool.doCheckPrint();
await SyncPrintTool.doCheckSync();
} catch (e) {
logger.i("|$_tag|$logMsg,$inSeconds秒一次,执行失败,error:$e");
} finally {
logger.i("|$_tag|$logMsg,$inSeconds秒一次,执行完成");
}
});
}
// 定时检查需不要广播
checkBroadcast() {
String logMsg = "定时检查需不要广播";
final inSeconds = broadcastInterval.inSeconds;
if (broadcastTimer != null && broadcastTimer!.isActive) {
broadcastTimer?.cancel();
broadcastTimer = null;
}
if (broadcastTimer != null) {
broadcastTimer?.cancel();
broadcastTimer = null;
}
broadcastTimer = Timer.periodic(broadcastInterval, (Timer timer) async {
final isNetwork = AppNetworkTool.isAutoNetwork();
if (!isNetwork) return;
logger.i("|$_tag|$logMsg,$inSeconds秒一次,开始执行");
try {
final setting = await AppSettingTool.getSysSetting();
await SyncTakeFoodBroadcastTool.doCheckBroadcast(
setting.hourType ?? ProductHourType.TOTAL,
);
} catch (e) {
logger.i("|$_tag|$logMsg,$inSeconds秒一次,执行失败,error:$e");
} finally {
logger.i("|$_tag|$logMsg,$inSeconds秒一次,执行完成");
}
});
}
}