UserRobotExpIncreaseJob.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace App\Jobs;
  3. use App\Models\User\WxUser;
  4. use App\Wen\Utils\Settings;
  5. use App\Wen\Utils\UserUtils;
  6. use Illuminate\Bus\Queueable;
  7. use Illuminate\Contracts\Queue\ShouldBeUnique;
  8. use Illuminate\Contracts\Queue\ShouldQueue;
  9. use Illuminate\Foundation\Bus\Dispatchable;
  10. use Illuminate\Queue\InteractsWithQueue;
  11. use Illuminate\Queue\SerializesModels;
  12. use Illuminate\Support\Facades\Cache;
  13. use Illuminate\Support\Facades\Redis;
  14. class UserRobotExpIncreaseJob implements ShouldQueue
  15. {
  16. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  17. /**
  18. * Create a new job instance.
  19. *
  20. * @return void
  21. */
  22. public function __construct()
  23. {
  24. }
  25. /**
  26. * Execute the job.
  27. *
  28. * @return void
  29. */
  30. public function handle()
  31. {
  32. $robot_count = WxUser::where('is_robot', '>', 0)->count();
  33. if($robot_count > 0){
  34. $online_count = (int)($robot_count * 0.04);
  35. $ids = WxUser::where('is_robot', '>', 0)->inRandomOrder()->limit($online_count)->get('id');
  36. if($ids){
  37. $ids->map(function ($v){
  38. $id = $v->id;
  39. if($id){
  40. UserUtils::add_user_experience($id, 13, 20);
  41. }
  42. });
  43. }
  44. }
  45. // Redis::sadd('robot:timed:post:active', $v->id);
  46. $robot_action_like_rate = _between_(Settings::get('robot_action_like_rate', 100), 0, 100) / 100;
  47. if($robot_action_like_rate > 0){
  48. $post_todo_set = Redis::smembers('robot:timed:post:active');
  49. if($post_todo_set){
  50. shuffle($post_todo_set);
  51. $post_todo_set_count = count($post_todo_set);
  52. $post_todo_set_count_20_rate = (int)($post_todo_set_count * 0.05);
  53. if($post_todo_set_count_20_rate > 0){
  54. $last_time = now();
  55. for ($i = 0; $i < $post_todo_set_count_20_rate; $i++){
  56. $last_time = $last_time->addMinutes(mini_rand(1, 10) + $i * mini_rand(1, 5) );
  57. $post_id = $post_todo_set[$i];
  58. ImitatePostlikesStepJob::dispatch($post_id, mini_rand(1, 3))->delay($last_time);
  59. $i ++;
  60. }
  61. }
  62. }
  63. Cache::forget('robot:timed:post:active');
  64. }
  65. // Redis::sadd('robot:timed:comment:active', $v->id);
  66. $robot_action_comment_like_rate = _between_(Settings::get('robot_action_comment_like_rate', 100), 0, 100) / 100;
  67. if($robot_action_comment_like_rate > 0){
  68. $comment_todo_set = Redis::smembers('robot:timed:comment:active');
  69. if($comment_todo_set){
  70. shuffle($comment_todo_set);
  71. $comment_todo_set_count = count($comment_todo_set);
  72. $comment_todo_set_count_20_rate = (int)($comment_todo_set_count * 0.05);
  73. if($comment_todo_set_count_20_rate > 0){
  74. $last_time = now();
  75. for ($i = 0; $i < $comment_todo_set_count_20_rate; $i++){
  76. $last_time = $last_time->addMinutes(mini_rand(1, 10) + $i * mini_rand(1, 5) );
  77. $comment_id = $comment_todo_set[$i];
  78. ImitateCommentlikesStepJob::dispatch($comment_id, mini_rand(1, 3))->delay($last_time);
  79. }
  80. }
  81. }
  82. Cache::forget('robot:timed:comment:active');
  83. }
  84. // Redis::sadd('robot:timed:user:active', $user->id);
  85. $robot_action_comment_like_rate = _between_(Settings::get('robot_action_comment_like_rate', 100), 0, 100) / 100;
  86. if($robot_action_comment_like_rate > 0){
  87. $user_todo_set = Redis::smembers('robot:timed:user:active');
  88. if($user_todo_set){
  89. shuffle($user_todo_set);
  90. $user_todo_set_count = count($user_todo_set);
  91. $user_todo_set_count_count_20_rate = (int)($user_todo_set_count * 0.05);
  92. if($user_todo_set_count_count_20_rate > 0){
  93. $last_time = now();
  94. for ($i = 0; $i < $user_todo_set_count_count_20_rate; $i++){
  95. $last_time = $last_time->addMinutes(mini_rand(1, 10) + $i * mini_rand(1, 5) );
  96. $user_id = $user_todo_set[$i];
  97. $follow_rate = _between_(Settings::get('robot_action_follow_rate', 100), 0, 100) / 100;
  98. if($follow_rate != 0){
  99. ImitateUserFollowsStepJob::dispatch($user_id, mini_rand(1, 3))->delay($last_time);
  100. }
  101. }
  102. }
  103. }
  104. Cache::forget('robot:timed:user:active');
  105. }
  106. }
  107. }