PrintService.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace App\Services;
  3. use App\OracleDocOrderDeliveryInfo;
  4. use App\OracleDOCOrderHeader;
  5. use App\PrintTemplate;
  6. use App\Traits\ModelSearchWay;
  7. use App\Traits\ServiceAppAop;
  8. use Illuminate\Database\Eloquent\Builder;
  9. use Illuminate\Database\Eloquent\Collection;
  10. use Illuminate\Support\Facades\File;
  11. use Illuminate\Support\Facades\Storage;
  12. use Intervention\Image\Facades\Image;
  13. class PrintService
  14. {
  15. use ModelSearchWay;
  16. use ServiceAppAop;
  17. /**
  18. * 分列 订单号,快递单号,波次号
  19. * @param string $print
  20. * @return array[]
  21. */
  22. public function conversionPrintData(string $print): array
  23. {
  24. preg_match_all('/[\w]+/',$print,$nos);
  25. foreach ($nos[0] as $no){
  26. if(strstr($no,'SO')) $orderCodes[] = $no;
  27. elseif(strstr($no,'W')) $batchesCodes[] = $no;
  28. else $logistic_numbers[] = $no;
  29. }
  30. return [$batchesCodes ?? [],$orderCodes ?? [],$logistic_numbers ?? []];
  31. }
  32. /**
  33. * 返回WMS中对应的快递单号
  34. * @param array $batchCodes
  35. * @param array $orderCodes
  36. * @param array $logistic_numbers
  37. * @return array|mixed
  38. */
  39. public function getLogisticNumber($batchCodes=[],$orderCodes = [],$logistic_numbers = []): array
  40. {
  41. if($batchCodes){
  42. $orderHeaders = OracleDOCOrderHeader::query()->selectRaw('OrderNo')->whereIn('WaveNo',$batchCodes)->get()->map(function($item) {
  43. return $item->orderno;
  44. });
  45. $orderCodes = array_merge($orderHeaders, $orderCodes);
  46. }
  47. if($orderCodes) {
  48. $info = OracleDocOrderDeliveryInfo::query()->where('OrderNo',$orderCodes)->get()->map(function($item){
  49. return $item->tackingno;
  50. });
  51. $logistic_numbers = array_merge($info, $logistic_numbers);
  52. }
  53. return $logistic_numbers ?? [];
  54. }
  55. /**
  56. * 获取打印信息
  57. * @param string $print
  58. * @return Builder[]|Collection
  59. */
  60. public function getPrintData(string $print)
  61. {
  62. list($batchesCodes,$orderCodes,$logistic_numbers) = $this->conversionPrintData($print);
  63. $logistic_numbers = $this->getLogisticNumber($batchesCodes, $orderCodes, $logistic_numbers);
  64. $items = OracleDocOrderDeliveryInfo::query()->select(['TackingNo','OrderNO','UserDefine1'])->whereIn('tackingNo',$logistic_numbers)->get();
  65. return $this->disposesPrintInfo($items);
  66. }
  67. /**
  68. * 处理打印请求参数
  69. * @param $oracleDocOrderDeliveryInfos
  70. * @return array
  71. */
  72. public function disposesPrintInfo($oracleDocOrderDeliveryInfos): array
  73. {
  74. foreach ($oracleDocOrderDeliveryInfos as $key => $info){
  75. $data[] = [
  76. 'documentID' => $info->orderno ?? '',
  77. 'encryptedData' => $info->userDefine4->encryptedData ?? '',
  78. 'signature' => $info->userDefine4->signature ?? '',
  79. 'templateURL' => $info->userDefine4->templateURL ?? '',
  80. 'ver' => $info->userDefine4->ver ?? '',
  81. ];
  82. }
  83. return $data ?? [];
  84. }
  85. public function processingPrintData(array $params)
  86. {
  87. foreach ($params as $param) {
  88. // $owner_id = $param['owner_id'];
  89. // $logistic_id = $param['logistic_id'];
  90. $img_base64_code = $param['base64'];
  91. $img = Image::make($img_base64_code);
  92. $printTemplate = PrintTemplate::query()->where('name','123')->first();
  93. $img = $this->convertPrintImage($img,$printTemplate);
  94. return $img->response("jpg");
  95. }
  96. }
  97. public function convertPrintImage($image,$printTemplate,$order_package = null)
  98. {
  99. foreach ($printTemplate->value as $item) {
  100. }
  101. return $image;
  102. }
  103. }