ImportOrder.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace app\queue\redis\slow;
  3. use app\model\saas\SaasChatMsg;
  4. use app\model\saas\SaasOrder;
  5. use app\model\saas\SaasOrderExpress;
  6. use app\model\system\SystemImport;
  7. use app\model\system\SystemUser;
  8. use PhpOffice\PhpSpreadsheet\IOFactory;
  9. use Webman\RedisQueue\Consumer;
  10. class ImportOrder implements Consumer
  11. {
  12. /**
  13. * 订单导入发货
  14. * 更新云打印件
  15. * @var string
  16. */
  17. public string $queue = "import-order";
  18. /**
  19. * 连接配置
  20. * @var string
  21. */
  22. public string $connection = "default";
  23. public function consume($data): bool
  24. {
  25. try {
  26. if(empty($data['logId'])) return true;
  27. if(empty($data['poi_id'])) return true;
  28. $path = public_path().$data['path'];
  29. $spreadsheet = IOFactory::load($path);
  30. $worksheet = $spreadsheet->getActiveSheet();
  31. $sheetData = $worksheet->toArray(null, true, true, true);
  32. // 5. 现在 $sheetData 就是一个二维数组,你可以遍历它处理每一行数据
  33. $orderMode = (new SaasOrder);
  34. $excelData= [];
  35. $expressData = [];
  36. foreach ($sheetData as $rowIndex => $row) {
  37. if ($rowIndex > 0 && !empty($row['A']) && !empty($row['C'])) {
  38. $excelData[$rowIndex] = $row;
  39. }
  40. }
  41. if (!empty($excelData)) {
  42. $successData = $errData = [];
  43. foreach (array_values(array_filter($excelData)) as $key=>$val) {
  44. if (!empty(trim($val['C'])) && !empty(trim($val['A']))) {
  45. $order = $orderMode->where("order_sn",trim($val['A']))->findOrEmpty();
  46. if ($order->isEmpty()) {
  47. continue;
  48. }
  49. $order->express_status = 2;
  50. $order->save();
  51. $express = (new SaasOrderExpress)->where("express_sn",trim($val['C']))->findOrEmpty();
  52. if ($express->isEmpty()) {
  53. // 发送一条发货消息给用户
  54. $lastMsg = (new SaasChatMsg)->where(['openid' => $order['openid'],'poi_id' => $order['poi_id']])->order("id desc")->findOrEmpty();
  55. if ($lastMsg->isEmpty()) {
  56. $serviceUser = (new SystemUser)->where(['store_id' => $order['poi_id'],"type" => 3])->order("last_msg_at","asc")->findOrEmpty();
  57. $lastServiceId = $serviceUser['id'];
  58. } else {
  59. $lastServiceId = $lastMsg['service_id'];
  60. }
  61. $expressName = "";
  62. if (isset($val['D'])) {
  63. $expressName = "({$val['D']})";
  64. }
  65. (new SaasChatMsg)->insertGetId([
  66. 'openid' => $order['openid'],
  67. 'poi_id' => $order['poi_id'],
  68. "source" => 2,
  69. "service_id" => $lastServiceId,
  70. "msgId" => md5($order['openid'].time()),
  71. "content" => "您的订单({$val['A']})预计3日内到你手中,快递单号:{$val['C']} {$expressName}",
  72. "type" => "text"
  73. ]);
  74. $expressData[$key] = [
  75. "order_sn" => trim($val['A']),
  76. "express_sn" => trim($val['C']),
  77. "mobile" => trim($val['B']),
  78. "express_name" => $val['D']?trim($val['D']):'',
  79. "last_at" => getDateFull()
  80. ];
  81. $successData[$key] = trim($val['A']);
  82. } else {
  83. $errData[$key] = trim($val['A']);
  84. }
  85. }
  86. }
  87. }
  88. if (!empty($expressData)) {
  89. (new SaasOrderExpress)->insertAll(array_values($expressData));
  90. }
  91. (new SystemImport)->where("id",$data['logId'])->update([
  92. 'status' => 1,
  93. "last_at" => getDateFull(),
  94. 'success_num' => (!empty($successData)) ? count(array_values($successData)) : 0,
  95. 'success_data' => (!empty($successData)) ? json_encode(array_values($successData)) : "",
  96. 'error_num' => (!empty($errData)) ? count(array_values($errData)) : 0,
  97. 'error_data' => (!empty($errData)) ? json_encode(array_values($errData)) : '',
  98. ]);
  99. return true;
  100. } catch (\Throwable $throwable) {
  101. echo getDateFull()."==导入订单报错===\n";
  102. echo $throwable->getFile()."\n";
  103. echo $throwable->getLine()."\n";
  104. echo $throwable->getMessage()."\n";
  105. }
  106. return true;
  107. }
  108. }