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']); } } }