ExportOrder.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. if(empty($data['logId'])) return true;
  40. $spreadsheet = new Spreadsheet();
  41. $title = ['店铺名称','下单人昵称','订单编号','订单状态','发货状态', '收件人', '手机号码', '收货地址', '创建时间'];
  42. $sheet = $spreadsheet->getActiveSheet();
  43. $titCol = 'A';
  44. foreach ($title as $key => $value) {
  45. // 单元格内容写入
  46. $sheet->setCellValue($titCol . '1', $value);
  47. $titCol++;
  48. }
  49. $row = 2; // 从第二行开始
  50. $searchKey = (new OrderService)->searchFilter($data['param']);
  51. $orderData = (new SaasOrder)->where($searchKey)->with(['address','poi','user'])->select();
  52. if ($orderData->isEmpty()) {
  53. (new SystemExport)->where("id",$data['logId'])->update(['status' => 2]);
  54. return true;
  55. }
  56. foreach ($orderData as $item) {
  57. $dataCol = 'A';
  58. $address = "-";
  59. if (!empty($item['address'])) {
  60. $address = $item['address']['city_text'].$item['address']['address'];
  61. }
  62. $newData = [
  63. "shop" => $item['poi']['poi_name']??'-', // 店铺名称
  64. "nickname" => $item['user']['nickname']??'-', // 下单人昵称
  65. "order" => $item['order_sn']??'-', // 订单编号
  66. "status" => $this->status[$item['status']], // 订单状态
  67. "express" => $this->express[$item['express_status']], // 订单状态
  68. "user" => $item['address']['nickname']??'-',
  69. "mobile" => $item['address']['mobile']??'-',
  70. "address" => $address,
  71. "create_at" => $item['create_at'],
  72. ];
  73. foreach ($newData as $value) {
  74. $sheet->setCellValue($dataCol . $row, ' '.$value);
  75. $dataCol++;
  76. }
  77. $row++;
  78. }
  79. $write = new Xlsx($spreadsheet);
  80. $pathName = public_path().DIRECTORY_SEPARATOR."download".DIRECTORY_SEPARATOR.$data['param']['fileName'];
  81. (new SystemExport)->where("id",$data['logId'])->update([
  82. "down_url" => "https://tran.jsshuita.cn/download/".$data['param']['fileName'],
  83. "status" => 1
  84. ]);
  85. $write->save($pathName);
  86. return true;
  87. }
  88. }