ComPrintManager.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.doverfuelingsolutions.issp.driver.printer;
  2. import android.text.TextUtils;
  3. import com.doverfuelingsolutions.issp.api.dto.ResultPayment;
  4. import com.doverfuelingsolutions.issp.data.GlobalData;
  5. import com.doverfuelingsolutions.issp.utils.log.DFSLog;
  6. import com.printsdk.cmd.PrintCmd;
  7. import com.doverfuelingsolutions.issp.driver.scan.ScanValueListener;
  8. import com.doverfuelingsolutions.issp.driver.serialPort.DataReceivedListener;
  9. import com.doverfuelingsolutions.issp.driver.serialPort.SerialControl;
  10. import com.doverfuelingsolutions.issp.driver.serialPort.SerialHelper;
  11. import com.wayne.www.waynelib.fdc.message.DeviceClass;
  12. import com.wayne.www.waynelib.webservice.entity.PosTrxItem;
  13. import java.util.concurrent.Executors;
  14. import java.util.concurrent.TimeUnit;
  15. public class ComPrintManager implements PrintManager, DataReceivedListener {
  16. public SerialControl serialControl;
  17. private int getStatus_flag; // 检查状态1或者状态2
  18. private boolean isReceived = false;
  19. private int status_1 = 0;
  20. private int status_2 = 0;
  21. private PrintStatusListen printStatusListen;
  22. public ComPrintManager(String port, int rate, PrintStatusListen psl) throws Exception {
  23. // serialControl = new SerialControl("/dev/ttyS3", 115200); // 串口号和波特率
  24. serialControl = new SerialControl(port, rate, this, psl); // 串口号和波特率
  25. serialControl.setbLoopData(PrintCmd.GetStatus4());
  26. OpenComPort(serialControl); // 打开串口
  27. }
  28. /**
  29. * 打印最后部分
  30. */
  31. private void printEnd() throws Exception {
  32. if (serialControl == null) return;
  33. serialControl.send(PrintCmd.PrintChargeRow());
  34. serialControl.send(PrintCmd.PrintString("感谢您使用,请妥善保管交易凭条", 0));
  35. serialControl.send(PrintCmd.PrintString("欢迎下次光临", 0));
  36. serialControl.send(PrintCmd.PrintFeedline(3));
  37. serialControl.send(PrintCmd.PrintFeedline(3));
  38. serialControl.send(PrintCmd.PrintCutpaper(1)); // 半切纸
  39. }
  40. /**
  41. * 支付成功后的小票打印
  42. */
  43. public void printOrderOkBillHs(DeviceClass dc, ResultPayment.PosTrxBean ptb, String operator) throws Exception {
  44. if (serialControl == null) return;
  45. if (ptb == null || dc == null) return;
  46. getStatus1();
  47. serialControl.send(PrintCmd.SetAlignment(1));
  48. serialControl.send(PrintCmd.PrintString("自助机加油支付小票", 0));
  49. serialControl.send(PrintCmd.PrintFeedline(2));
  50. serialControl.send(PrintCmd.SetAlignment(0));
  51. if (!TextUtils.isEmpty(GlobalData.INSTANCE.getBusinessName().get())) {
  52. serialControl.send(PrintCmd.PrintString("加油站名称:" + GlobalData.INSTANCE.getBelongName().get() + " " + GlobalData.INSTANCE.getBusinessName().get(), 0));
  53. }
  54. if (!GlobalData.INSTANCE.getStationTel().get().isEmpty()) {
  55. serialControl.send(PrintCmd.PrintString("联系电话:" + GlobalData.INSTANCE.getStationTel().get(), 0));
  56. }
  57. serialControl.send(PrintCmd.SetBold(1));
  58. serialControl.send(PrintCmd.PrintString("油枪号:" + dc.getNozzleNo() + "号枪", 0));
  59. serialControl.send(PrintCmd.PrintString("加油金额:" + dc.getMyAmount() + "元", 0));
  60. serialControl.send(PrintCmd.SetBold(0));
  61. serialControl.send(PrintCmd.PrintString("优惠金额:" + ptb.getDiscount() + "元", 0));
  62. serialControl.send(PrintCmd.PrintString("支付金额:" + ptb.getNetAmount() + "元", 0));
  63. serialControl.send(PrintCmd.PrintString("加油升数:" + dc.getVolume() + "升", 0));
  64. serialControl.send(PrintCmd.PrintString("油品名称:" + dc.getProductName(), 0));
  65. if (!ptb.getItems().isEmpty()) {
  66. PosTrxItem ib = ptb.getItems().get(0);
  67. if (null != ib.getPosItem()) {
  68. serialControl.send(PrintCmd.PrintString("油品单价:" + ib.getPosItem().getPrice() + "/升", 0));
  69. }
  70. if (ib.isHaveTagId())
  71. serialControl.send(PrintCmd.PrintString("员工卡号:" + ib.getCardNo(), 0));
  72. }
  73. if (!operator.isEmpty())
  74. serialControl.send(PrintCmd.PrintString("员工姓名:" + operator, 0));
  75. // serialControl.send(PrintCmd.PrintString("加油时间:" + ib.getItem().getCreatedDateTime(), 0));
  76. serialControl.send(PrintCmd.PrintFeedline(1));
  77. // serialControl.send(PrintCmd.PrintString("支付方式:" + payResult.getMyPayType(), 0));
  78. // serialControl.send(PrintCmd.PrintString("订单号:" + ptb.getId(), 0));
  79. // serialControl.send(PrintCmd.PrintString("支付ID:" + o.getMyId(), 0));
  80. String rawTime = ptb.getTransactionInitTimeInPos();
  81. serialControl.send(PrintCmd.PrintString("支付时间:" + rawTime.substring(0, Math.min(19, rawTime.length())), 0));
  82. serialControl.send(PrintCmd.PrintFeedline(1));
  83. serialControl.send(PrintCmd.SetAlignment(1));
  84. serialControl.send(PrintCmd.PrintString("感谢您使用,请妥善保管交易凭条", 0));
  85. serialControl.send(PrintCmd.PrintString("欢迎下次光临", 0));
  86. serialControl.send(PrintCmd.PrintFeedline(3));
  87. serialControl.send(PrintCmd.PrintFeedline(3));
  88. serialControl.send(PrintCmd.PrintCutpaper(1)); // 半切纸
  89. getStatus2Latter(2500);
  90. }
  91. @Override
  92. public void getStatus2() throws Exception {
  93. status_2 = 0;
  94. getStatus_flag = PrintStatusContants.GETSTATUS_2;
  95. isReceived = false;
  96. if (null != PrintCmd.GetStatus2() && null != serialControl)
  97. serialControl.send(PrintCmd.GetStatus2());// 获取状态2
  98. // LogHelper.i(TAG, "getStatus2");
  99. }
  100. public void getStatus2Latter(int waittime) {
  101. Executors.newSingleThreadScheduledExecutor().schedule(new Runnable() {
  102. @Override
  103. public void run() {
  104. try {
  105. getStatus2();
  106. checkReceived();
  107. } catch (Exception e) {
  108. // Utils.postException(e);
  109. e.printStackTrace();
  110. }
  111. }
  112. }, waittime, TimeUnit.MILLISECONDS);
  113. }
  114. public void checkReceived() {
  115. try {
  116. Thread.sleep(500);
  117. if (getStatus_flag == 2 && !isReceived) {
  118. if (printStatusListen != null) {
  119. printStatusListen.receivePrintStatus(PrintStatusContants.ERROR_CONNECT_FAIL);
  120. }
  121. }
  122. } catch (Exception e) {
  123. DFSLog.Companion.e(e);
  124. }
  125. }
  126. @Override
  127. public void getStatus1() throws Exception {
  128. status_1 = 0;
  129. getStatus_flag = PrintStatusContants.GETSTATUS_1;
  130. serialControl.send(PrintCmd.GetStatus1()); // 获取状态1
  131. }
  132. private void OpenComPort(SerialHelper ComPort) throws Exception {
  133. try {
  134. ComPort.open();
  135. } catch (Exception e) {
  136. DFSLog.Companion.e(e);
  137. e.printStackTrace();
  138. // LogHelper.i(TAG, "failed to open com port");
  139. throw e;
  140. }
  141. }
  142. @Override
  143. public void onDataReceived(byte[] data, PrintStatusListen printStatusListen) {
  144. if (data == null) return;
  145. if (this.printStatusListen == null)
  146. this.printStatusListen = printStatusListen;
  147. switch (getStatus_flag) {
  148. case PrintStatusContants.GETSTATUS_2:
  149. isReceived = true;
  150. if ((data[0] & 0x20) == 0x20) {
  151. status_2 = PrintStatusContants.ERROR_STATE2_PRINTINGPAPER_USEDUP; //打印纸用完,停止打
  152. if (null != printStatusListen) {
  153. printStatusListen.receivePrintStatus(status_2);
  154. return;
  155. }
  156. }
  157. if ((data[0] & 0x40) == 0x40) {
  158. status_2 = PrintStatusContants.ERROR_STATE2;//发生错误
  159. if (null != printStatusListen) {
  160. printStatusListen.receivePrintStatus(status_2);
  161. return;
  162. }
  163. }
  164. if (null != printStatusListen) {
  165. //先判断 status_1状态 再判断status_2状态
  166. if (status_1 != PrintStatusContants.DEFAULT) {
  167. printStatusListen.receivePrintStatus(status_1);
  168. } else if (status_2 != PrintStatusContants.DEFAULT) {
  169. printStatusListen.receivePrintStatus(status_2);
  170. } else {
  171. printStatusListen.receivePrintStatus(PrintStatusContants.DEFAULT);
  172. }
  173. }
  174. break;
  175. case PrintStatusContants.GETSTATUS_1:
  176. if ((data[0] & 0x8) == 0x8) {
  177. status_1 = PrintStatusContants.ERROR_STATE1_OFFLINE; //脱机
  178. if (null != printStatusListen)
  179. printStatusListen.receivePrintStatus(status_1);
  180. }
  181. break;
  182. }
  183. }
  184. /**
  185. * @desc 摧毁界面后
  186. * @info Created by LzPeng on 2020/3/11 9:52
  187. */
  188. public void destroy() {
  189. if (null != printStatusListen) printStatusListen = null;
  190. if (null != serialControl) {
  191. serialControl.close();
  192. serialControl = null;
  193. }
  194. }
  195. @Override
  196. public void onDataReceived(byte[] data) {
  197. }
  198. @Override
  199. public void onDataReceived(byte[] data, ScanValueListener scanValueListener) {
  200. }
  201. }