PushPrint.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace app\queue\redis;
  3. use app\model\saas\SaasOrderDetail;
  4. use Webman\Push\Api;
  5. use Webman\RedisQueue\Consumer;
  6. class PushPrint implements Consumer
  7. {
  8. public $queue = "push-print";
  9. public $connection = "default";
  10. public function consume($data): bool
  11. {
  12. try {
  13. if (empty($data['order'])) return true;
  14. if (empty($data['type'])) return true;
  15. $api = new Api('http://127.0.0.1:3232', config('plugin.webman.push.app.app_key'),config('plugin.webman.push.app.app_secret'));
  16. $printData = [];
  17. if ($data['type'] == 'order') { // 按订单
  18. $detail = (new SaasOrderDetail)->where(["order_sn" => $data['order'],'status' => 1])->select();
  19. if ($detail->isEmpty()) return true;
  20. foreach ($detail as $key=>$printJob) {
  21. $range = Null;
  22. if ($printJob['end_page'] > $printJob['start_page']) {
  23. $range = $printJob['start_page']."-".$printJob['end_page'];
  24. }
  25. if ($printJob['end_page'] == $printJob['start_page']) {
  26. // $range = (string) $printJob['end_page'];
  27. $range = $printJob['start_page']."-".$printJob['end_page'];
  28. }
  29. $color_mode = ($printJob['color']==1?'color':'monochrome');
  30. $duplex = "simplex";
  31. if ($printJob['paper_size'] == 'A4' && $printJob['duplex'] == 2) {
  32. $duplex = 'shortedge'; // duplexlong longedge
  33. }
  34. if ($printJob['paper_size'] == 'A3' && $printJob['duplex'] == 2) {
  35. $duplex = 'longedge'; // duplexshort shortedge
  36. }
  37. $printData[$key] = [
  38. "printerName" => $printJob['print_name'],
  39. "copies" => $printJob['number'],
  40. "landscape" => false,
  41. "paperSize" => $printJob['paper_size'],
  42. "pageRange" => $range,
  43. "duplex" => $duplex,
  44. "monochrome" => $color_mode,
  45. "colorMode" => $color_mode,
  46. "jobId" => $printJob['id'],
  47. "dpi" => 300,
  48. "action" => 'create',
  49. "scaleMode" => 'fit',
  50. "remoteUrl" => "https://cdn-zhy.huiyinduo.cn/".$printJob['path'],
  51. "customFileName" => $printJob['order_sn']."_".$printJob['id'],
  52. ];
  53. (new SaasOrderDetail)->where("id",$printJob['id'])->update(['status' => 2]);
  54. }
  55. $printKey = "{$detail[0]['print_id']}-{$detail[0]['shop_id']}";
  56. } else { // 单笔打印
  57. $printJob = (new SaasOrderDetail)->where(["id" => $data['order'],'status' => 1])->findOrEmpty();
  58. if ($printJob->isEmpty()) return true;
  59. $range = Null;
  60. if ($printJob['end_page'] > $printJob['start_page']) {
  61. $range = $printJob['start_page']."-".$printJob['end_page'];
  62. }
  63. if ($printJob['end_page'] == $printJob['start_page']) {
  64. $range = (string) $printJob['end_page'];
  65. }
  66. $color_mode = ($printJob['color']==1?'color':'monochrome');
  67. $duplex = "simplex";
  68. if ($printJob['paper_size'] == 'A4' && $printJob['duplex'] == 2) {
  69. $duplex = 'duplexlong'; // duplexlong
  70. }
  71. if ($printJob['paper_size'] == 'A3' && $printJob['duplex'] == 2) {
  72. $duplex = 'duplexshort'; // duplexshort
  73. }
  74. $printData = [
  75. [
  76. "printerName" => $printJob['print_name'],
  77. "copies" => $printJob['number'],
  78. "landscape" => false,
  79. "paperSize" => $printJob['paper_size'],
  80. "pageRange" => $range,
  81. "duplex" => $duplex,
  82. "monochrome" => $color_mode,
  83. "colorMode" => $color_mode,
  84. "jobId" => $printJob['id'],
  85. "dpi" => 300,
  86. "action" => 'create',
  87. "scaleMode" => 'fit',
  88. "remoteUrl" => "https://cdn-zhy.huiyinduo.cn/".$printJob['path'],
  89. "customFileName" => $printJob['order_sn']."_".$printJob['id'],
  90. ]
  91. ];
  92. $printKey = "{$printJob['print_id']}-{$printJob['shop_id']}";
  93. (new SaasOrderDetail)->where("id",$printJob['id'])->update(['status' => 2]);
  94. }
  95. // echo getDateFull()."==={$printKey}==打印任务\n";
  96. // echo json_encode($printData)."\n";
  97. $api->trigger("client-{$printKey}",'message',[
  98. "type" => "print",
  99. "data" => $printData
  100. ]);
  101. return true;
  102. } catch (\Throwable $throwable) {
  103. return true;
  104. }
  105. }
  106. }