shtrih-m / javapos_shtrih

Реализация JavaPOS драйвера принтера фискального регистратора для устройств Штрих-М
http://www.shtrih-m.ru
MIT License
33 stars 16 forks source link

При печати фискального документа не отправляется StatusUpdateEvent об открытии крышки. #106

Closed ildar-x5 closed 4 years ago

ildar-x5 commented 4 years ago

Ситуация: 1) Печатаем чек продажи, вызываем метод com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl#endFiscalReceipt 2) Открываем крышку в середине печати чека, но аккуратно, чтобы чековая лента не отошла от датчика бумаги. 3) StatusUpdateEvent об открытии крышки не приходит, программа не понимает почему так долго печатается чек. 4) Отводим чековую ленту от датчика бумаги. Только после этого метод com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl#endFiscalReceipt завершается. Приходит StatusUpdateEvent об открытии крышки.

Аналогичная ситуация с печатью Z-отчета.

Причина: При печати чека (метод com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl#endFiscalReceipt) или Z-отчета (метод com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl#printZReport) мы в конце концов оказываемся в методе com.shtrih.fiscalprinter.SMFiscalPrinterImpl#waitForPrinting получив эксклюзивный доступ к устройству synchronized (printer) {...} Метод waitForPrinting опрашивает устройство в цикле, имея при этом эксклюзивный доступ к устройству.

StatusUpdateEvent генерируются в другом потоке(создается в методе com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl#startPoll). Данный потоке в методе com.shtrih.jpos.fiscalprinter.FiscalPrinterImpl#checkDeviceStatus не может получить эксклюзивный доступ к устройству и, как следствие, отправить StatusUpdateEvent об открытии крышки.

Возможное решение В методе com.shtrih.fiscalprinter.SMFiscalPrinterImpl#waitForPrinting проверять не только статус бумаги, но и статус крышки. То есть создать метод checkCoverаналогично методу com.shtrih.fiscalprinter.SMFiscalPrinterImpl#checkPaper. При открытой крышке возвращать JposException с ErrorCodeExtended= jpos.FiscalPrinterConst#JPOS_EFPTR_COVER_OPEN

VitalyKravtsov2016 commented 4 years ago

Поправил: https://github.com/shtrih-m/javapos_shtrih/releases/tag/589