CalculateDailyListenCommand.php 5.76 KB
<?php

namespace App\Console\Commands;

use App\Models\Crontjob;
use App\Repositories\TrackRepository;
use Carbon\Carbon;
use Illuminate\Console\Command;

class CalculateDailyListenCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'calculate:daily-listen';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Di chuyển lượt nghe sang ngày hôm qua trước khi cập nhật lượt nghe ngày mới';

    protected $trackRepository;

    /**
     * Create a new command instance.
     *
     * CalculateDailyListenCommand constructor.
     * @param TrackRepository $trackRepository
     */
    public function __construct(TrackRepository $trackRepository)
    {
        parent::__construct();
        ini_set('max_execution_time', -1);
        $this->trackRepository = $trackRepository;
    }

    /**
     * Xử lý di chuyển dựa vào cờ date_moved_at
     * Mỗi lần di chuyển 1k bản ghi trong crawler_listens
     * Di chuyển xong thì cập nhật ngày trong crawler_listens.date_moved_at và cho lượt nghe hôm nay=0
     * Trong lần sau sẽ ko lấy những bản ghi có date_moved_at = ngày hiện tại
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // Ghi log xem có gọi không
        Crontjob::create(['message' => 'CalculateDailyListenCommand is called at ' . Carbon::now()]);

        // Xử lý di chuyển
        echo "\n Bắt đầu xử lý lấy lượt nghe ngày hôm qua";

        $crawlered = $this->trackRepository->getCrawlerListenNotYetMoved();

        if ($crawlered) {
            echo "\n Số lượng cần tính toán lượt nghe: " . $crawlered->count();

            foreach ($crawlered as $key => $listen) {
                // Xử lý lượt nghe từ zing -----------------------------------------------------------------------------
                if ($listen->yesterday_zing == 0) {
                    if ($listen->today_zing > 0) {
                        $listen->yesterday_zing = $listen->today_zing;
                        $listen->today_zing = 0;
                    }
                } else if ($listen->yesterday_zing > 0) {
                    if ($listen->today_zing > 0) {
                        $difference = $listen->today_zing - $listen->yesterday_zing;
                        if ($difference >= 0) {
                            $listen->yesterday_zing = $listen->today_zing;
                            $listen->today_zing = 0;
                            $listen->date_zing = $difference;
                            $listen->increment('week_zing', $difference);
                            $listen->increment('month_zing', $difference);
                            $listen->increment('year_zing', $difference);
                            $listen->increment('alltime_zing', $difference);
                        }
                    }
                }

                // Xử lý lượt nghe từ NCT ------------------------------------------------------------------------------
                if ($listen->yesterday_nct == 0) {
                    if ($listen->today_nct > 0) {
                        $listen->yesterday_nct = $listen->today_nct;
                        $listen->today_nct = 0;
                    }
                } else if ($listen->yesterday_nct > 0) {
                    if ($listen->today_nct > 0) {
                        $difference = $listen->today_nct - $listen->yesterday_nct;
                        if ($difference >= 0) {
                            $listen->yesterday_nct = $listen->today_nct;
                            $listen->today_nct = 0;
                            $listen->date_nct = $difference;
                            $listen->increment('week_nct', $difference);
                            $listen->increment('month_nct', $difference);
                            $listen->increment('year_nct', $difference);
                            $listen->increment('alltime_nct', $difference);
                        }

                    }
                }

                // Xử lý lượt nghe từ nhacvn ---------------------------------------------------------------------------
                if ($listen->yesterday_keeng == 0) {
                    if ($listen->today_keeng > 0) {
                        $listen->yesterday_keeng = $listen->today_keeng;
                        $listen->today_keeng = 0;
                    }
                } else if ($listen->yesterday_keeng > 0) {
                    if ($listen->today_keeng > 0) {
                        $difference = $listen->today_keeng - $listen->yesterday_keeng;
                        if ($difference >= 0) {
                            $listen->yesterday_keeng = $listen->today_keeng;
                            $listen->today_keeng = 0;
                            $listen->date_keeng = $difference;
                            $listen->increment('week_keeng', $difference);
                            $listen->increment('month_keeng', $difference);
                            $listen->increment('year_keeng', $difference);
                            $listen->increment('alltime_keeng', $difference);
                        }
                    }
                }

                // Lưu lại giá trị -------------------------------------------------------------------------------------
                $listen->date_moved_at = Carbon::now();
                $listen->save();

                echo "\n Đã tính toán lượt nghe bản ghi có ID= " . $listen->id . ' (Track ID: ' . $listen->track_id . ')';
            }
        }

        echo "\n Tính toán kết thúc kết thúc: " . $crawlered->count();

    }
}