Java實現控制網口印表機並完成丟單重打機制

來源:互聯網
上載者:User

在餐飲行業中普遍使用的點菜等系統中,列印單子是一項最基本的功能。在餐飲中,一般採用的都是POS印表機。但是,在很多點菜系統中,丟單是一件很頭痛的事情。本文就如何用java實現繞過驅動控制列印並實現丟單處理,給出一種解決辦法。

本文面對的需求是,一個單據同時由多個印表機列印,當一個單據沒有列印成功,則需要重新列印(補單)。將印表機串連到路由器並確定印表機正常後,便可以進行測試。

本文的實現思路是:採用隊列和線程操作來完成。

本文建立幾個對象:

1、印表機對象Printer:印表機編號,印表機IP,印表機連接埠,預設紙張寬度等

2、列印對象PrintableObject:封裝需要列印的資訊

3、列印工作對象PrintJob:封裝一個PrintableObject對象,同時包含一個狀態位,可能的狀態有“等待列印”,“正在列印”,“完成列印”。同時含有一個print方法。

4、列印佇列PrintQueue:單一實例,類比一個隊列,其中的方法是安全執行緒的。每個元素是PrintJob對象,先進先出,列印失敗,重新回到隊列的尾部。

5、列印抓取對象PrintableTracker:該對象是一個線程,並且是單一實例。不停地從PrintQueue中取PrintJob,列印成功,繼續列印下一個;否則,將當前的移到隊列的尾部,繼續列印下一個。如果隊列中沒有PrintJob了,則結束。當再次添加PrintJob到PrintQueue中的時候,會啟動線程繼續列印。

6、PrintUtils:參考印表機內建的命令手冊,封裝列印命令,在PrintJob中的print方法中調用PrintUtils封裝的命令進行列印。在print方法中,建立Socket串連,和印表機通訊。

以上實現,在佳博熱敏網口印表機下測試通過。解決因為網路問題或者印表機卻紙等問題造成的丟單問題。但是,當列印命令已經傳送到出去,而此時,印表機斷電了,那麼這個當來電時沒法重新列印。因為在程式中,該操作實際上已經完成,但是這些命令是存在於網路或者印表機緩衝中,斷電後這些資訊就不存在了。這是因為印表機無法判斷印表機到底有沒有出紙。至少從佳博的印表機命令手冊上沒有找到。但是,如果其他的印表機可以,那麼就可以在Socket中,接收此狀態來判斷列印是否成功。這樣,丟單的機率就更小了。

思路就是如此,僅供參考!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.