ExportOrder.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace app\queue\redis\slow;
  3. use app\model\saas\SaasOrder;
  4. use app\model\system\SystemExport;
  5. use app\service\saas\OrderService;
  6. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  7. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  8. use Webman\RedisQueue\Consumer;
  9. class ExportOrder implements Consumer
  10. {
  11. /**
  12. * 订单导出
  13. * 更新云打印件
  14. * @var string
  15. */
  16. public string $queue = "export-order";
  17. /**
  18. * 连接配置
  19. * @var string
  20. */
  21. public string $connection = "default";
  22. protected array $status = [
  23. "0" => "待支付",
  24. "1" => "待使用",
  25. "2" => "已完成",
  26. "3" => "已退款",
  27. "4" => "退款中",
  28. "5" => "已关闭",
  29. "6" => "部分退款",
  30. ];
  31. protected array $express = [
  32. "0" => "待订单完成",
  33. "1" => "待发货",
  34. "2" => "已发货",
  35. "3" => "已签收",
  36. ];
  37. public function consume($data): bool
  38. {
  39. try {
  40. if(empty($data['logId'])) return true;
  41. $spreadsheet = new Spreadsheet();
  42. $title = ['店铺名称','下单人昵称','订单编号','订单状态','发货状态', '收件人', '手机号码', '收货地址', '创建时间'];
  43. $sheet = $spreadsheet->getActiveSheet();
  44. $titCol = 'A';
  45. foreach ($title as $key => $value) {
  46. // 单元格内容写入
  47. $sheet->setCellValue($titCol . '1', $value);
  48. $titCol++;
  49. }
  50. $row = 2; // 从第二行开始
  51. $searchKey = (new OrderService)->searchFilter($data['param']);
  52. $orderData = (new SaasOrder)->where($searchKey)->with(['address','poi','user'])->select();
  53. if ($orderData->isEmpty()) {
  54. (new SystemExport)->where("id",$data['logId'])->update(['status' => 2]);
  55. return true;
  56. }
  57. foreach ($orderData as $item) {
  58. $dataCol = 'A';
  59. $address = "-";
  60. if (!empty($item['address'])) {
  61. $address = $item['address']['city_text'].$item['address']['address'];
  62. }
  63. $newData = [
  64. "shop" => $item['poi']['poi_name']??'-', // 店铺名称
  65. "nickname" => $item['user']['nickname']??'-', // 下单人昵称
  66. "order" => $item['order_sn']??'-', // 订单编号
  67. "status" => $this->status[$item['status']], // 订单状态
  68. "express" => $this->express[$item['express_status']], // 订单状态
  69. "user" => $item['address']['nickname']??'-',
  70. "mobile" => $item['address']['mobile']??'-',
  71. "address" => $address,
  72. "create_at" => $item['create_at'],
  73. ];
  74. foreach ($newData as $value) {
  75. $sheet->setCellValue($dataCol . $row, ' '.$value);
  76. $dataCol++;
  77. }
  78. $row++;
  79. }
  80. $write = new Xlsx($spreadsheet);
  81. $pathName = public_path().DIRECTORY_SEPARATOR."download".DIRECTORY_SEPARATOR.$data['param']['fileName'];
  82. echo $pathName."\n";
  83. (new SystemExport)->where("id",$data['logId'])->update([
  84. "down_url" => "https://tran.jsshuita.cn/download/".$data['param']['fileName'],
  85. "status" => 1
  86. ]);
  87. $write->save($pathName);
  88. } catch (\Throwable $throwable) {
  89. echo getDateFull()."==导出订单报错===\n";
  90. echo $throwable->getFile()."\n";
  91. echo $throwable->getLine()."\n";
  92. echo $throwable->getMessage()."\n";
  93. }
  94. return true;
  95. }
  96. }