ThirdPlatomUserTranser.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. /**
  3. 其他平台公众号用户迁移到我们平台
  4. */
  5. namespace App\Console\Commands\Tool;
  6. use App\Modules\OfficialAccount\Services\OfficialAccountService;
  7. use App\Modules\OfficialAccount\Models\OfficialAccount;
  8. use App\Modules\OfficialAccount\Models\ForceSubscribeUsers;
  9. use App\Modules\OfficialAccount\Models\TempForceSubscribeUsers;
  10. use Log;
  11. use Illuminate\Console\Command;
  12. use App\Modules\User\Services\UserService;
  13. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  14. use DB;
  15. class ThirdPlatomUserTranser extends Command
  16. {
  17. /**
  18. * 执行命令 Tool:ThirdPlatomUserTranser {appid}
  19. *
  20. * The name and signature of the console command.
  21. *
  22. * @var string
  23. */
  24. protected $signature = 'Tool:ThirdPlatomUserTranser {--appid=} {--next_openid=}';
  25. /**
  26. * The console command description.
  27. *
  28. * @var string
  29. */
  30. protected $description = '其他平台公众号用户迁移到我们平台';
  31. /**
  32. * Execute the console command.
  33. *
  34. * @return mixed
  35. */
  36. public function handle()
  37. {
  38. ini_set('memory_limit', '1024M');
  39. print_r('memory_used:'.memory_get_usage()."\n");
  40. print_r("======其他平台公众号用户迁移到我们平台【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  41. $appid = $this->option('appid');
  42. $next_openid = $this->option('next_openid');
  43. if(empty($appid) || empty($next_openid)){
  44. \Log::info('ThirdPlatomUserTranser_appid_is_null:'.$appid);
  45. exit();
  46. }
  47. \Log::info('ThirdPlatomUserTranser_start:$appid:'.$appid.' $next_openid:'.$next_openid);
  48. // 检查appid是否存在
  49. $param_official_account = ['appid'=>$appid];
  50. $official_account = OfficialAccountService::officialAccountByAppid($param_official_account);
  51. $distribution_channel_id = isset($official_account->distribution_channel_id)?$official_account->distribution_channel_id:'';
  52. if(empty($official_account) || empty($distribution_channel_id)){
  53. \Log::info('ThirdPlatomUserTranser_official_account_is_null:'.$appid.' $distribution_channel_id:'.$distribution_channel_id);
  54. exit();
  55. }
  56. \Log::info('ThirdPlatomUserTranser_exist:'.$appid.' official_account:'.json_encode($official_account));
  57. if($next_openid == '-1'){
  58. $next_openid = '';
  59. }
  60. $skip = $loop = 0;
  61. while ( $loop <= 100) {
  62. $loop++;
  63. $users = array();
  64. // 全服务号粉丝发,要记录next_openid
  65. if($loop > 1 && empty($next_openid)){
  66. \Log::info('OfficialAccountUserTranse_break,loop:'.$loop.' skip:'.$skip);
  67. break;
  68. }
  69. $user_res = ForceSubscribeService::getFullOfficialAccountUsers($appid,$next_openid);
  70. $users = $user_res['openids'];
  71. $next_openid = $user_res['next_openid'];
  72. \Log::info('loop'.$loop.' user_num:'.count($users).' next_openid:'.$next_openid);
  73. // \Log::info($users);
  74. $skip += count($users);
  75. if(count($users)>0){
  76. for ($i=0; $i < count($users); $i++) {
  77. \Log::info('loop:'.$loop.' i:'.$i);
  78. try{
  79. $openid = isset($users[$i]['openid'])?$users[$i]['openid']:'';
  80. $unionid = $openid;
  81. $userinfo = ForceSubscribeService::getUserInfoAll($appid, $openid);
  82. $nickname = isset($userinfo['nickname'])?$userinfo['nickname']:'';
  83. $province = isset($userinfo['province'])?$userinfo['province']:'';
  84. $city = isset($userinfo['city'])?$userinfo['city']:'';
  85. $country = isset($userinfo['country'])?$userinfo['country']:'';
  86. $headimgurl = isset($userinfo['headimgurl'])?$userinfo['headimgurl']:'';
  87. $sex = isset($userinfo['sex'])?$userinfo['sex']:'0';
  88. \Log::info('openid:'.$openid.' nickname:'.$nickname);
  89. // 先用openid 判断强关表是否存在
  90. $forceSubscribeUsers = ForceSubscribeUsers::forceSubscribeUsersByOpenidAndAC($openid,$appid,$distribution_channel_id);
  91. if(!empty($forceSubscribeUsers)){
  92. \Log::info('user_exist:'.$openid);
  93. continue;
  94. }
  95. // user表
  96. $user = [
  97. 'openid'=>$openid,
  98. 'unionid'=>$unionid,
  99. 'nickname'=>$nickname,
  100. 'distribution_channel_id'=>$distribution_channel_id,
  101. 'province'=>$province,
  102. 'city'=>$city,
  103. 'country'=>$country,
  104. 'headimgurl'=>$headimgurl,
  105. 'sex'=>$sex,
  106. ];
  107. // 实际是根据union_id和distribution_channel_id做更新
  108. $added_user = UserService::addUser($user);
  109. $uid = $added_user->id;
  110. \Log::info('add_user_id:'.$uid);
  111. if(!empty($uid)){
  112. // force_subsribe_users
  113. $add_forceSubscribeUsers = [
  114. 'uid'=>$uid,
  115. 'openid'=>$openid,
  116. 'appid'=>$appid,
  117. 'is_subscribed'=>1,
  118. 'subscribe_time'=>date('Y-m-d H:i:s'),
  119. 'distribution_channel_id'=>$distribution_channel_id,
  120. 'last_interactive_time'=>date('Y-m-d H:i:s'),
  121. ];
  122. \Log::info('create_force_subscribe_user:'.$openid);
  123. ForceSubscribeUsers::firstOrCreate($add_forceSubscribeUsers);
  124. // temp_force_subsribe_users
  125. $add_tempForceSubscribeUsers = [
  126. 'uid'=>$uid,
  127. 'openid'=>$openid,
  128. 'appid'=>$appid,
  129. 'is_subscribed'=>1,
  130. 'subscribe_time'=>date('Y-m-d H:i:s'),
  131. 'distribution_channel_id'=>$distribution_channel_id,
  132. 'last_interactive_time'=>date('Y-m-d H:i:s'),
  133. ];
  134. \Log::info('create_temp_force_subscribe_user:'.$openid);
  135. TempForceSubscribeUsers::firstOrCreate($add_tempForceSubscribeUsers);
  136. }
  137. }catch(\Exception $e){
  138. \Log::info('auto_subscribe_ept:'.$e->getMessage());
  139. }
  140. }
  141. }
  142. }
  143. \Log::info('ThirdPlatomUserTranser_end loop:'.$loop.' $skip:'.$skip);
  144. print_r("======其他平台公众号用户迁移到我们平台 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  145. print_r('memory_used:'.memory_get_usage()."\n");
  146. }
  147. }