123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- namespace App\Console\Commands;
- use App\Log;
- use App\Models\PlatformApp;
- use App\RedisModel;
- use App\Service\MaiBuService;
- use App\Support\EmailQueue;
- use Illuminate\Console\Command;
- class MaiBuAppListSync extends Command
- {
- protected $signature = 'MaiBuAppListSync';
- protected $description = '迈步应用列表同步';
- private $pageSize = 500;
- private $page = 1;
- public function handle()
- {
- \DB::connection()->disableQueryLog();
- $beginTime = time();
- $this->info(date('m-d H:i:s') . ' 开始更新');
- while(true) {
- $this->page = 1;
- $result = $this->taskDeal();
- if(!$result) sleep(1);
- $now = time();
- // 超过10分钟,主动停止循环
- if ($now - $beginTime > 600) {
- break;
- }
- sleep(1);
- }
- $this->info(date('Y-m-d H:i:s') . ' 更新结束');
- }
- private function taskDeal()
- {
- $lLen = RedisModel::lLen(PlatformApp::MAI_BU_APP_LIST_SYNC_RDS);
- if ($lLen > 50)
- EmailQueue::rPush('迈步待同步应用列表队列堆积', '队列长度:'.$lLen, ['xiaohua.hou@kuxuan-inc.com'], '迈步待同步应用列表队列堆积');
- # 取出数据
- $dataJson = RedisModel::rPop(PlatformApp::MAI_BU_APP_LIST_SYNC_RDS);
- if(empty($dataJson))
- return false;
- $this->info('取出的数据:'.$dataJson);
- try{
- $taskInfo = json_decode($dataJson, true);
- $partnerId = $taskInfo['partnerId'] ?? '';
- $platformId = $taskInfo['platformId'] ?? '';
- $this->info('渠道商ID:'.$partnerId);
- if(empty($partnerId) || empty($platformId)) {
- Log::logError('异常任务信息', [
- 'param' => $taskInfo
- ], 'MaiBuAppListSync');
- return true;
- }
- # 获取token
- $token = MaiBuService::getAccessToken($partnerId);
- if(!$token) { // token获取失败
- // EmailQueue::rPush('迈步同步应用列表过程token获取失败', $partnerId, ['xiaohua.hou@kuxuan-inc.com'], '迈步同步应用列表过程token获取失败');
- return false;
- }
- $this->deal($partnerId, $platformId, $token);
- } catch (\Exception $e) {
- EmailQueue::rPush('迈步同步应用列表过程发生异常', $e->getTraceAsString(), ['xiaohua.hou@kuxuan-inc.com'], '迈步同步应用列表过程发生异常');
- Log::logError('迈步同步应用列表过程发生异常', [
- 'line' => $e->getLine(),
- 'msg' => $e->getMessage(),
- 'param' => $dataJson
- ], 'MaiBuAppListSync');
- return false;
- }
- return true;
- }
- private function deal($partnerId, $platformId, $token)
- {
- do{
- $this->info('当前页码数:'.$this->page);
- $responseData = MaiBuService::getAppList($partnerId, $this->page, $this->pageSize, $token);
- $code = $responseData['code'] ?? 1;
- if($code) {
- if(!empty($responseData)) {
- EmailQueue::rPush('迈步同步应用列表失败', json_encode($responseData), ['xiaohua.hou@kuxuan-inc.com'], '迈步同步应用列表失败');
- }
- Log::logError('迈步同步应用列表失败', [
- 'response' => $responseData,
- 'partnerId' => $partnerId,
- 'token' => $token
- ], 'MaiBuAppListSync');
- return false;
- }
- $appList = $responseData['data']['items'] ?? [];
- foreach ($appList as $app) {
- $platformAppId = $app['id'] ?? null;
- if(empty($platformAppId)) {
- Log::logInfo('应用账号数据异常-无账号id', [
- 'app_info' => $app
- ], 'MaiBuAppListSync');
- continue;
- }
- $insertData = [
- 'partner_id' => $partnerId,
- 'app_id' => $app['wxAppId'] ?? null,
- 'mini_app_id' => $app['wxMiniAppId'] ?? null,
- 'name' => $app['name'] ?? null,
- ];
- PlatformApp::updateOrCreate([
- 'platform_app_id' => $platformAppId, 'platform_id' => $platformId
- ], $insertData);
- }
- $count = count($appList);
- $this->info('本次获取的应用条数:'.$count);
- $this->page++;
- } while ($count == $this->pageSize);
- return true;
- }
- }
|