133 lines
3.9 KiB
Dart
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|");
|
|
}
|
|
}
|
|
}
|