AsyncUserSign.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use App\Modules\OfficialAccount\Services\OfficialAccountService;
  5. use App\Modules\Finance\Services\WithdrawCashService;
  6. use App\Modules\User\Models\UserSign;
  7. use App\Modules\User\Models\TempsUserSign;
  8. use App\Modules\User\Models\SmartPushUserSign;
  9. use App\Modules\OfficialAccount\Models\DistributionSelfDefineConfig;
  10. use App\Modules\Finance\Services\FinancialStatService;
  11. use Redis;
  12. /**
  13. * 签到user_sign异步批量插入
  14. * @author zhoulingjie
  15. *
  16. */
  17. class AsyncUserSign extends Command
  18. {
  19. /**
  20. * The name and signature of the console command.
  21. *
  22. * @var string
  23. */
  24. protected $signature = 'AsyncUserSign';
  25. /**
  26. * The console command description.
  27. *
  28. * @var string
  29. */
  30. protected $description = '签到user_sign异步批量插入';
  31. /**
  32. * Create a new command instance.
  33. *
  34. * @return void
  35. */
  36. public function __construct()
  37. {
  38. parent::__construct();
  39. }
  40. /**
  41. * Execute the console command.
  42. *
  43. * @return mixed
  44. */
  45. public function handle()
  46. {
  47. $this->start();
  48. }
  49. public function start(){
  50. \Log::info('AsyncUserSign_start');
  51. // 获取redis里面的所有数据
  52. $uids = Redis::smembers('user_sign:uid');
  53. $loop_num = 100;
  54. $loop_current = 0;
  55. if(!empty($uids)){
  56. //\Log::info('AsyncUserSign_start_count:'.count($uids));
  57. $batch_insert_data = [];
  58. foreach($uids as $uid){
  59. try{
  60. $loop_current ++;
  61. $insert_data = [];
  62. $sign_data = Redis::hget('user_sign:uid:info',$uid);
  63. $sign_data = object_to_array(json_decode($sign_data));
  64. //\Log::info('AsyncUserSign_loop_current:'.$loop_current.' uid:'.$uid.' data:'.json_encode($sign_data));
  65. if(!empty($sign_data)){
  66. $batch_insert_data[] = $sign_data;
  67. Redis::srem('user_sign:uid',$uid);
  68. Redis::hdel('user_sign:uid:info',$uid);
  69. }
  70. if($loop_current == $loop_num){
  71. // \Log::info('$batch_insert_data');
  72. // \Log::info($batch_insert_data);
  73. self::batch_sign_insert($batch_insert_data);
  74. $batch_insert_data = [];
  75. $loop_current = 0;
  76. }
  77. }catch(\Exception $e){
  78. \Log::info('AsyncUserSign_ept:'.$e->getMessage());
  79. }
  80. }
  81. // last
  82. \Log::info('$last_batch_insert_data');
  83. \Log::info($batch_insert_data);
  84. self::batch_sign_insert($batch_insert_data);
  85. }
  86. \Log::info('AsyncUserSign_end:'.count($uids));
  87. }
  88. public static function batch_sign_insert($batch_insert_data){
  89. if(!empty($batch_insert_data)){
  90. $model = new UserSign();
  91. $model->setCurrentTable(date('Ym'));
  92. $model->insert($batch_insert_data);
  93. $model->setCurrentTable( date('Ym',strtotime('next Month')) );
  94. $model->insert($batch_insert_data);
  95. //UserSign::insert($batch_insert_data);
  96. // 中间表,保留2个月数据
  97. // TempsUserSign::insert($batch_insert_data);
  98. // 智能推送表,保留2天数据
  99. SmartPushUserSign::insert($batch_insert_data);
  100. }
  101. }
  102. }