企微短剧业务系统

MaiBuAppListSync.php 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Log;
  4. use App\Models\PlatformApp;
  5. use App\RedisModel;
  6. use App\Service\MaiBuService;
  7. use App\Support\EmailQueue;
  8. use Illuminate\Console\Command;
  9. class MaiBuAppListSync extends Command
  10. {
  11. protected $signature = 'MaiBuAppListSync';
  12. protected $description = '迈步应用列表同步';
  13. private $pageSize = 500;
  14. private $page = 1;
  15. public function handle()
  16. {
  17. \DB::connection()->disableQueryLog();
  18. $beginTime = time();
  19. $this->info(date('m-d H:i:s') . ' 开始更新');
  20. while(true) {
  21. $this->page = 1;
  22. $result = $this->taskDeal();
  23. if(!$result) sleep(1);
  24. $now = time();
  25. // 超过10分钟,主动停止循环
  26. if ($now - $beginTime > 600) {
  27. break;
  28. }
  29. sleep(1);
  30. }
  31. $this->info(date('Y-m-d H:i:s') . ' 更新结束');
  32. }
  33. private function taskDeal()
  34. {
  35. $lLen = RedisModel::lLen(PlatformApp::MAI_BU_APP_LIST_SYNC_RDS);
  36. if ($lLen > 50)
  37. EmailQueue::rPush('迈步待同步应用列表队列堆积', '队列长度:'.$lLen, ['xiaohua.hou@kuxuan-inc.com'], '迈步待同步应用列表队列堆积');
  38. # 取出数据
  39. $dataJson = RedisModel::rPop(PlatformApp::MAI_BU_APP_LIST_SYNC_RDS);
  40. if(empty($dataJson))
  41. return false;
  42. $this->info('取出的数据:'.$dataJson);
  43. try{
  44. $taskInfo = json_decode($dataJson, true);
  45. $partnerId = $taskInfo['partnerId'] ?? '';
  46. $platformId = $taskInfo['platformId'] ?? '';
  47. $this->info('渠道商ID:'.$partnerId);
  48. if(empty($partnerId) || empty($platformId)) {
  49. Log::logError('异常任务信息', [
  50. 'param' => $taskInfo
  51. ], 'MaiBuAppListSync');
  52. return true;
  53. }
  54. # 获取token
  55. $token = MaiBuService::getAccessToken($partnerId);
  56. if(!$token) { // token获取失败
  57. // EmailQueue::rPush('迈步同步应用列表过程token获取失败', $partnerId, ['xiaohua.hou@kuxuan-inc.com'], '迈步同步应用列表过程token获取失败');
  58. return false;
  59. }
  60. $this->deal($partnerId, $platformId, $token);
  61. } catch (\Exception $e) {
  62. EmailQueue::rPush('迈步同步应用列表过程发生异常', $e->getTraceAsString(), ['xiaohua.hou@kuxuan-inc.com'], '迈步同步应用列表过程发生异常');
  63. Log::logError('迈步同步应用列表过程发生异常', [
  64. 'line' => $e->getLine(),
  65. 'msg' => $e->getMessage(),
  66. 'param' => $dataJson
  67. ], 'MaiBuAppListSync');
  68. return false;
  69. }
  70. return true;
  71. }
  72. private function deal($partnerId, $platformId, $token)
  73. {
  74. do{
  75. $this->info('当前页码数:'.$this->page);
  76. $responseData = MaiBuService::getAppList($partnerId, $this->page, $this->pageSize, $token);
  77. $code = $responseData['code'] ?? 1;
  78. if($code) {
  79. if(!empty($responseData)) {
  80. EmailQueue::rPush('迈步同步应用列表失败', json_encode($responseData), ['xiaohua.hou@kuxuan-inc.com'], '迈步同步应用列表失败');
  81. }
  82. Log::logError('迈步同步应用列表失败', [
  83. 'response' => $responseData,
  84. 'partnerId' => $partnerId,
  85. 'token' => $token
  86. ], 'MaiBuAppListSync');
  87. return false;
  88. }
  89. $appList = $responseData['data']['items'] ?? [];
  90. foreach ($appList as $app) {
  91. $platformAppId = $app['id'] ?? null;
  92. if(empty($platformAppId)) {
  93. Log::logInfo('应用账号数据异常-无账号id', [
  94. 'app_info' => $app
  95. ], 'MaiBuAppListSync');
  96. continue;
  97. }
  98. $insertData = [
  99. 'partner_id' => $partnerId,
  100. 'app_id' => $app['wxAppId'] ?? null,
  101. 'mini_app_id' => $app['wxMiniAppId'] ?? null,
  102. 'name' => $app['name'] ?? null,
  103. ];
  104. PlatformApp::updateOrCreate([
  105. 'platform_app_id' => $platformAppId, 'platform_id' => $platformId
  106. ], $insertData);
  107. }
  108. $count = count($appList);
  109. $this->info('本次获取的应用条数:'.$count);
  110. $this->page++;
  111. } while ($count == $this->pageSize);
  112. return true;
  113. }
  114. }