SyncOrder.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace app\queue\redis;
  3. use app\extra\douyin\Client;
  4. use app\extra\life\OrderLife;
  5. use app\model\saas\SaasOrderLife;
  6. use app\model\saas\SaasOrderLog;
  7. use app\model\saas\SaasStore;
  8. use Webman\RedisQueue\Consumer;
  9. use Webman\RedisQueue\Redis;
  10. class SyncOrder implements Consumer
  11. {
  12. public $queue = "sync-order";
  13. public $connection = "default";
  14. public function consume($data): bool
  15. {
  16. if (empty($data['order'])) return true;
  17. if (empty($data['openid'])) return true;
  18. $order = (new SaasOrderLife)->where("order_id",$data['order'])->findOrEmpty();
  19. if (!$order->isEmpty()) return true;
  20. $resp = (new Client)->config($this->getDyConfig())->token()->queryOrderStore($data['order']);
  21. if (empty($resp['data']['data'])) return true;
  22. $lifeOrder = $resp['data']['data'];
  23. $orderData = [];
  24. foreach ($lifeOrder['certificates'] as $key=>$val) {
  25. $orderEx = (new SaasOrderLife)->where("order_id",$lifeOrder['order_id'])->where("certificate_id",$val['certificate_id'])->findOrEmpty();
  26. if ($orderEx->isEmpty()) {
  27. $store = (new SaasStore)->where("store_id",$val['sku_info']['account_id'])->findOrEmpty();
  28. $orderData[$key] = [
  29. "open_id" => $data['openid'],
  30. "agent_id" => $store['agent_id']??'',
  31. "store_id" => $store['store_id']??'',
  32. "order_id" => $lifeOrder['order_id'],
  33. "pay_amount" => $val['amount']['pay_amount'],
  34. "order_amount" => $val['amount']['original_amount'],
  35. "expire_at" => date("Y-m-d H:i:s",$val['expire_time']),
  36. "out_id" => $val['sku_info']['sku_id'],
  37. "product_name" => $val['sku_info']['title'],
  38. "groupon_type" => $val['sku_info']['groupon_type'],
  39. "certificate_id" => $val['certificate_id']??'',
  40. "status" => 1,
  41. "start_time" => date("Y-m-d H:i:s",$val['start_time']),
  42. ];
  43. } else {
  44. $orderEx->save([
  45. "expire_at" => date("Y-m-d H:i:s",$val['expire_time']),
  46. "out_id" => $val['sku_info']['sku_id'],
  47. "product_name" => $val['sku_info']['title'],
  48. "groupon_type" => $val['sku_info']['groupon_type'],
  49. "certificate_id" => $val['certificate_id']??'',
  50. "start_time" => date("Y-m-d H:i:s",$val['start_time']),
  51. ]);
  52. }
  53. }
  54. if (!empty($orderData)) {
  55. (new SaasOrderLife)->insertAll(array_values($orderData));
  56. }
  57. return true;
  58. }
  59. protected function getDyConfig(): array
  60. {
  61. return ["appid" => sConf('dy.appid'),'secret' => sConf('dy.secret')];
  62. }
  63. }