ThirdPlatomUserTranser.php 7.0 KB

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