160 lines
4.8 KiB
Dart
160 lines
4.8 KiB
Dart
import 'dart:async';
|
|
|
|
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);
|
|
|
|
Duration deviceStatusInterval = const Duration(seconds: 60);
|
|
|
|
Timer? mqTimer;
|
|
|
|
Timer? printTimer;
|
|
|
|
Timer? broadcastTimer;
|
|
|
|
Timer? deviceStatusTimer;
|
|
|
|
// **************************************************************************
|
|
// 定时器配置 end
|
|
// **************************************************************************
|
|
|
|
void startAll() {
|
|
if (_isRunning) return;
|
|
_isRunning = true;
|
|
checkMq();
|
|
checkPrint();
|
|
checkBroadcast();
|
|
checkDeviceStatus();
|
|
}
|
|
|
|
void dispose() {
|
|
_isRunning = false;
|
|
mqTimer?.cancel();
|
|
mqTimer = null;
|
|
printTimer?.cancel();
|
|
printTimer = null;
|
|
broadcastTimer?.cancel();
|
|
broadcastTimer = null;
|
|
deviceStatusTimer?.cancel();
|
|
deviceStatusTimer = 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秒一次,执行完成");
|
|
}
|
|
});
|
|
}
|
|
|
|
/// 设备状态检查不依赖网络,也不会主动开关串口或连接打印机。
|
|
void checkDeviceStatus() {
|
|
final inSeconds = deviceStatusInterval.inSeconds;
|
|
deviceStatusTimer?.cancel();
|
|
deviceStatusTimer = Timer.periodic(deviceStatusInterval, (timer) async {
|
|
logger.i("|$_tag|检查终端设备状态,$inSeconds秒一次,开始执行");
|
|
try {
|
|
await AppDeviceStatusTool.refreshAll();
|
|
} catch (e) {
|
|
logger.i("|$_tag|检查终端设备状态执行失败,error:$e");
|
|
} finally {
|
|
logger.i("|$_tag|检查终端设备状态执行完成");
|
|
}
|
|
});
|
|
}
|
|
}
|