OfficialAccountUserTranser.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. 公众号用户迁移
  4. */
  5. namespace App\Console\Commands\Tool;
  6. use Log;
  7. use Illuminate\Console\Command;
  8. use App\Modules\User\Services\UserService;
  9. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  10. use DB;
  11. class OfficialAccountUserTranser extends Command
  12. {
  13. /**
  14. * 执行命令 Tool:OfficialAccountUserTranser {distribution_channel_id} {from_appid} {to_appid}
  15. *
  16. * The name and signature of the console command.
  17. *
  18. * @var string
  19. */
  20. protected $signature = 'Tool:OfficialAccountUserTranser {distribution_channel_id} {from_appid} {to_appid}';
  21. /**
  22. * The console command description.
  23. *
  24. * @var string
  25. */
  26. protected $description = '公众号用户数据迁移';
  27. /**
  28. * Execute the console command.
  29. *
  30. * @return mixed
  31. */
  32. public function handle()
  33. {
  34. ini_set('memory_limit', '1024M');
  35. print_r('memory_used:'.memory_get_usage()."\n");
  36. print_r("======公众号用户数据迁移【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  37. $distribution_channel_id = $this->argument('distribution_channel_id');
  38. $from_appid = $loop = $this->argument('from_appid');
  39. $to_appid = $this->argument('to_appid');
  40. \Log::info('OfficialAccountUserTranser_start:distribution_channel_id:'.$distribution_channel_id.' from_appid:'.$from_appid.' to_appid:'.$to_appid);
  41. $next_openid = '';
  42. $skip = $loop = 0;
  43. while ( $loop <= 50) {
  44. $loop++;
  45. $users = array();
  46. // 全服务号粉丝发,要记录next_openid
  47. if($loop > 1 && empty($next_openid)){
  48. \Log::info('OfficialAccountUserTranse_break,loop:'.$loop.' skip:'.$skip);
  49. break;
  50. }
  51. $user_res = ForceSubscribeService::getFullOfficialAccountUsers($to_appid,$next_openid);
  52. $users = $user_res['openids'];
  53. $next_openid = $user_res['next_openid'];
  54. \Log::info('loop'.$loop.' user_num:'.count($users).' next_openid:'.$next_openid);
  55. // \Log::info($users);
  56. $skip += count($users);
  57. if(count($users)>0){
  58. for ($i=0; $i < count($users); $i++) {
  59. $openid = isset($users[$i]['openid'])?$users[$i]['openid']:'';
  60. $userinfo = ForceSubscribeService::getUserInfo($to_appid, $openid);
  61. $nickname = isset($userinfo['nickname'])?$userinfo['nickname']:'';
  62. \Log::info('openid:'.$openid.' nickname:'.$nickname);
  63. //
  64. if(empty($nickname)) continue;
  65. $origin_user = UserService::getUserByNickAndChannelId($distribution_channel_id,$nickname);
  66. if(!empty($origin_user)){
  67. \Log::info('distribution_channel_id:'.$distribution_channel_id.' to_appid:'.$to_appid.' openid:'.$openid.' uid:'.$origin_user->id);
  68. ForceSubscribeService::updateSubscribeUserTransfer($distribution_channel_id,$origin_user->id,$from_appid,$to_appid,$openid);
  69. }
  70. }
  71. }
  72. }
  73. \Log::info('OfficialAccountUserTranser_end loop:'.$loop.' $skip:'.$skip);
  74. print_r("======公众号用户数据迁移 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  75. print_r('memory_used:'.memory_get_usage()."\n");
  76. }
  77. }