CalculateDailyListenCommand.php 5.76 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
<?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();

    }
}