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

133 lines
3.9 KiB
Dart

import 'dart:convert';
import 'package:common_utils/common_utils.dart';
import 'package:get/get.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
abstract class SyncPrintTool {
static const _tag = "sync打印工具";
static bool _isPrint = false;
static bool _isSync = false;
static Future<void> addTask({
required String orderId,
required String androidOrderId,
required String historyId,
required String pic,
}) async {
final appC = Get.find<AppControl>();
final printHistoryDao = appC.dataBase.getPrintHistoryDao;
final saveObj = PrintHistoryEntity(
orderId: androidOrderId,
serviceOrderId: orderId,
servicePrintId: historyId,
invoiceUrl: pic,
status: PrintStatus.NONE,
createTime: DateTime.now(),
);
await printHistoryDao.save(saveObj);
logger.i("|$_tag|添加到打印记录到本地数据库,json:|${saveObj.toJson()}|");
await SyncPrintTool.doCheckPrint();
}
// 检查打印
static Future<void> doCheckPrint() async {
if (_isPrint) {
logger.i("|$_tag|检查打印,正在打印中");
return;
}
final appC = Get.find<AppControl>();
final printHistoryDao = appC.dataBase.getPrintHistoryDao;
final printFacility = appC.printManage;
try {
// 检查有没有需要打印的
final list = await printHistoryDao.getAll(PrintStatus.NONE.name);
if (ObjectUtil.isEmptyList(list)) {
_isPrint = false;
logger.i("|$_tag|检查打印,没有需要打印的发票");
return;
}
final isOpen = await printFacility.open();
if (!isOpen) {
_isPrint = false;
logger.e("|$_tag|检查打印,打开打印机失败");
return;
}
for (final v in list) {
await doPrint(v);
}
} catch (e) {
logger.e("|$_tag|检查打印,打印错误,error:|$e|");
} finally {
_isPrint = false;
}
}
// 检查同步
static Future<void> doCheckSync() async {
if (_isSync) {
logger.i("|$_tag|检查打印,正在打印中");
return;
}
final app = Get.find<AppControl>();
final printHistoryDao = app.dataBase.getPrintHistoryDao;
final list = await printHistoryDao.getAll(PrintStatus.SUCCESS.name);
if (ObjectUtil.isEmptyList(list)) {
_isSync = false;
return;
}
for (final v in list) {
final printPa = {
"orderId": v.serviceOrderId,
"historyId": v.servicePrintId,
};
try {
final flag = await HardApi.printInvoice(printPa);
if (!flag) Exception("|$_tag|同步失败api错误params|${v.toJson()}|");
v.status = PrintStatus.SYNC;
v.syncTime = DateTime.now();
await printHistoryDao.edit(v);
} catch (e) {
logger.e("|$_tag|检查同步,打印错误,error:|$e|");
v.status = PrintStatus.ERROR;
await printHistoryDao.edit(v);
} finally {
_isSync = false;
}
}
}
// 执行打印
static Future<void> doPrint(PrintHistoryEntity v) async {
final app = Get.find<AppControl>();
final printHistoryDao = app.dataBase.getPrintHistoryDao;
final printFacility = app.printManage;
try {
final isPrint = await printFacility.printImg(v.invoiceUrl);
if (!isPrint) {
v.status = PrintStatus.ERROR;
await printHistoryDao.edit(v);
throw Exception("|$_tag|打印失败params|${v.toJson()}|");
}
// 更新本地数据库
v.status = PrintStatus.SUCCESS;
v.printTime = DateUtil.formatDate(DateTime.now());
await printHistoryDao.edit(v);
// 同步到服务端
final printPa = {
"orderId": v.serviceOrderId,
"historyId": v.servicePrintId,
};
await HardApi.printInvoice(printPa);
v.status = PrintStatus.SYNC;
v.syncTime = DateTime.now();
await printHistoryDao.edit(v);
} catch (e) {
logger.i("|$_tag|执行打印,打印错误,error:|$e|");
}
}
}