説明なし

SupplementOrderCreate.php 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\JuxingAdAccount;
  4. use App\Models\JxStarVideoOrderList;
  5. use App\Models\SupplementOrderTask;
  6. use App\Models\SupplementOrderTaskRecord;
  7. use App\Support\EmailQueue;
  8. use App\Support\Log;
  9. use Illuminate\Console\Command;
  10. use kwaiSDK\JuXing;
  11. class SupplementOrderCreate extends Command
  12. {
  13. protected $signature = 'SupplementOrderCreate';
  14. protected $description = '批量创建流量助推订单';
  15. protected $limit = 10;
  16. public function handle()
  17. {
  18. $this->info(date('H:i') . ' 开始执行');
  19. $curTime = time();
  20. while (true) {
  21. if ((time() - $curTime) >= 600) break;
  22. try {
  23. $this->createOrder();
  24. } catch (\Exception $e) {
  25. EmailQueue::rPush('批量创建流量助推订单流程发生异常', $e->getTraceAsString(), ['xiaohua.hou@kuxuan-inc.com'], '聚星');
  26. Log::error('批量创建流量助推订单流程发生异常', [
  27. 'msg' => $e->getMessage(),
  28. 'line' => $e->getLine()
  29. ], 'SupplementOrderCreateException');
  30. break;
  31. }
  32. }
  33. }
  34. private function createOrder()
  35. {
  36. do {
  37. # 查询待处理的任务
  38. $taskList = SupplementOrderTask::where('enable', 1)->where('status', 1)
  39. ->where('exec_time', '<=', date('Y-m-d H:i:s'))
  40. ->orderBy('exec_time')->limit($this->limit)
  41. ->get();
  42. if(!$taskList->count()) sleep(10);
  43. if($taskList->isNotEmpty()) {
  44. foreach ($taskList as $task) {
  45. # 修改任务状态为正在执行
  46. SupplementOrderTask::where('id', $task->id)->update(['status' => 2]);
  47. # 通过查询条件查找需要生成流量助推订单的聚星订单id
  48. $filter = json_decode($task->filter, true);
  49. // $task->advertiser_id = explode(',', $task->advertiser_id);
  50. $orderData = JxStarVideoOrderList::getOrderData($task->advertiser_id, $filter);
  51. $orderIds = $orderData->pluck('order_id');
  52. Log::info('任务对应的订单信息为:', [
  53. 'order_ids' => $orderIds,
  54. 'advertiser_id' => $task->advertiser_id
  55. ], 'SupplementOrderCreate');
  56. # 开始创建流量助推订单
  57. foreach ($orderData as $datum) {
  58. for($i=1;$i<=$task->times;$i++) {
  59. $accessToken = JuxingAdAccount::getAccessToken($task->advertiser_id);
  60. $jxSDK = new JuXing($accessToken);
  61. $params = [
  62. 'advertiser_id' => $task->advertiser_id,
  63. 'order_id' => $datum->order_id,
  64. 'campaign_type' => $task->campaign_type,
  65. 'unit_charge_type' => $task->unit_charge_type,
  66. 'unit_price_type' => $task->unit_price_type,
  67. 'pay_method' => $task->pay_method,
  68. 'amount' => $task->amount,
  69. 'promotion_duration' => $task->promotion_duration,
  70. 'target_type' => $task->target_type,
  71. 'target_info' => json_decode($task->target_info, true),
  72. 'unit_price' => $task->unit_price
  73. ];
  74. $rst = $jxSDK->supplementOrderV2()->starVideoCreate($params);
  75. $errCode = $rst['code'] ?? -1;
  76. $message = $rst['message'] ?? json_encode($rst, 256);
  77. $status = $errCode ? 2 : 1;
  78. $supplementId = $rst['data']['supplement_order_id'] ?? '';
  79. if($errCode == -1) {
  80. EmailQueue::rPush('创建流量助推订单返回结果异常', json_encode($rst, 256), ['xiaohua.hou@kuxuan-inc.com'], '聚星');
  81. }
  82. Log::info('创建助推订单的返回结果:', [
  83. 'times' => $i,
  84. 'params' => $params,
  85. 'order_id' => $datum->order_id,
  86. 'response' => $rst
  87. ], 'SupplementOrderCreate');
  88. # 创建的助推订单信息入record表
  89. $result = SupplementOrderTaskRecord::saveRecord(
  90. $task->id, $task->advertiser_id, $datum->task_id, $datum->order_id,
  91. $status, $errCode, $message, $supplementId, $task->customer_id
  92. );
  93. Log::info('创建助推订单的返回结果:', [
  94. 'order_id' => $datum->order_id,
  95. 'result' => $result
  96. ], 'SupplementOrderCreate');
  97. }
  98. }
  99. # 任务完成,变更状态
  100. SupplementOrderTask::where('id', $task->id)->update(['status' => 3]);
  101. }
  102. }
  103. $count = $taskList->count();
  104. } while ($this->limit == $count);
  105. }
  106. }