CMessagePush.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "../pch/pch.h"
  2. #include "CMessagePush.h"
  3. #include "../tool/CPosPrinter.h"
  4. CMessagePush::~CMessagePush()
  5. {
  6. }
  7. void CMessagePush::Start()
  8. {
  9. m_is_work = true;
  10. m_nStopNum = 0;
  11. //处理打印
  12. std::thread(&CMessagePush::HandlePrinter, this).detach();
  13. }
  14. void CMessagePush::Stop()
  15. {
  16. m_is_work = false;
  17. }
  18. void CMessagePush::AddPrinter(std::string out_order_no, int print_type)
  19. {
  20. m_printer_mutex.lock();
  21. ShouyinPinterInfo newPrinter;
  22. newPrinter.out_order_no = out_order_no;
  23. newPrinter.print_type = print_type;
  24. m_printer_queue.push(newPrinter);
  25. m_printer_mutex.unlock();
  26. }
  27. void CMessagePush::AddPrinter(CJiaobanMessage message)
  28. {
  29. m_printer_mutex.lock();
  30. ShouyinPinterInfo newPrinter;
  31. newPrinter.print_type = 4;
  32. newPrinter.message = message;
  33. m_printer_queue.push(newPrinter);
  34. m_printer_mutex.unlock();
  35. }
  36. void CMessagePush::HandlePrinter()
  37. {
  38. while(m_is_work)
  39. {
  40. m_printer_mutex.lock();
  41. if(m_printer_queue.empty())
  42. {
  43. m_printer_mutex.unlock();
  44. CSystem::my_sleep(1);
  45. continue;
  46. }
  47. ShouyinPinterInfo printerInfo = m_printer_queue.front();
  48. std::string out_order_no = printerInfo.out_order_no;
  49. int print_type = printerInfo.print_type;
  50. m_printer_queue.pop();
  51. m_printer_mutex.unlock();
  52. if(print_type == 1)
  53. {
  54. //支付成功订单
  55. CShouyinOrder order;
  56. bool ret = order.InitData(out_order_no);
  57. CPosPrinter printer;
  58. printer.PrintZhifu(order);
  59. }
  60. else if (print_type == 2)
  61. {
  62. //退款成功订单
  63. CShouyinOrder order;
  64. bool ret = order.InitData(out_order_no);
  65. CPosPrinter printer;
  66. printer.PrintTuikuan(order);
  67. }
  68. else if (print_type == 3)
  69. {
  70. //打印测试的订单
  71. CPosPrinter printer;
  72. printer.PrintTest();
  73. }
  74. else if (print_type == 4)
  75. {
  76. //打印交班单
  77. CPosPrinter printer;
  78. printer.PrintJiaoban(printerInfo.message);
  79. }
  80. }
  81. AddStopNum();
  82. }
  83. void CMessagePush::AddStopNum()
  84. {
  85. m_nStopNumMutex.lock();
  86. m_nStopNum++;
  87. m_nStopNumMutex.unlock();
  88. if(m_nStopNum == 1)
  89. {
  90. //确认所有子线程都退出了,再删除自己
  91. delete this;
  92. }
  93. }