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 addTask({ required String orderId, required String androidOrderId, required String historyId, required String pic, }) async { final appC = Get.find(); 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 doCheckPrint() async { if (_isPrint) { logger.i("|$_tag|检查打印,正在打印中"); return; } final appC = Get.find(); 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 doCheckSync() async { if (_isSync) { logger.i("|$_tag|检查打印,正在打印中"); return; } final app = Get.find(); 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 doPrint(PrintHistoryEntity v) async { final app = Get.find(); 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|"); } } }