PushPrint.php 5.3 KB

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