| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- declare(strict_types=1);
- namespace App\Command;
- use App\Model\CollectionsModel;
- use App\Model\Mongo\StatUserModel;
- use App\Model\UserModel;
- use Carbon\Carbon;
- use Hyperf\Command\Command as HyperfCommand;
- use Hyperf\Command\Annotation\Command;
- /**
- * @Command
- */
- class AnalyzeUserCommand extends HyperfCommand
- {
- /**
- * 执行的命令行
- *
- * @var string
- */
- protected $name = 'analyze:user';
- public function handle()
- {
- $startDate = Carbon::parse('-1 days')->toDateString();
- $endDate = Carbon::parse('0 days')->toDateString();
- if ($endDate < $startDate) {
- throw new \Exception('结束日期不能小于开始日期.');
- }
- $date = $startDate;
- while (1) {
- if ($date > $endDate) {
- break;
- }
- $this->handleDB($date);
- $date = Carbon::parse($date)->addDay(1)->toDateString();
- }
- $this->info('success');
- }
- /**
- * @param $date
- */
- public function handleDB($date)
- {
- $data = [
- 'register_normal_count' => 0,
- 'register_visitor_count' => 0,
- 'ios_active_count' => 0,
- 'android_active_count' => 0,
- 'date' => Carbon::parse($date)->toDateString()
- ];
- $data['register_visitor_count'] = UserModel::query()->whereBetween(
- 'created_at',
- [
- Carbon::parse($date)->startOfDay()->toDateTimeString(),
- Carbon::parse($date)->endOfDay()->toDateTimeString(),
- ]
- )->where('mobile', '')->count();
- $data['register_mobile_count'] = UserModel::query()->whereBetween(
- 'created_at',
- [
- Carbon::parse($date)->startOfDay()->toDateTimeString(),
- Carbon::parse($date)->endOfDay()->toDateTimeString(),
- ]
- )->where('mobile', '!=', '')->count();
- $data['price'] = CollectionsModel::query()->whereBetween(
- 'created_at',
- [
- Carbon::parse($date)->startOfDay()->toDateTimeString(),
- Carbon::parse($date)->endOfDay()->toDateTimeString(),
- ]
- )->sum('order_amount');
- $data['true_price'] = CollectionsModel::query()->whereBetween(
- 'paid_at',
- [
- Carbon::parse($date)->startOfDay()->toDateTimeString(),
- Carbon::parse($date)->endOfDay()->toDateTimeString(),
- ]
- )->sum('real_amount');
- $count = make(StatUserModel::class)->db()
- ->countDocuments(['date' => $data['date']]);
- if ($count) {
- make(StatUserModel::class)->db()->updateOne(
- ['date'=>Carbon::parse($date)->toDateString()],
- ['$set' =>
- [
- 'price' => $data['android_active_count'],
- 'true_price' => $data['android_active_count'],
- 'register_mobile_count' => $data['register_mobile_count'],
- 'register_visitor_count' => $data['register_visitor_count'],
- 'ios_active_count' => $data['ios_active_count'],
- 'android_active_count' => $data['android_active_count'],
- ]
- ]
- );
- $this->info('update --> ' . $data['date']);
- } else {
- make(StatUserModel::class)->db()->insertOne($data);
- $this->info('insert --> ' . $data['date']);
- }
- }
- }
|