作者 lyh

gx

<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficStatistics;
use App\Models\CustomerVisit\CustomerVisit;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Throwable;
class Logic
{
/**
* @param int $type 统计类型
* @return array
*/
public function getMonths(int $type = TrafficStatistics::TYPE_SOURCE)
{
$date = getPreviousMonthsDate();
$TrafficStatistics = new TrafficStatistics();
$lists = $TrafficStatistics->getMonthsLists($type, $date);
if (!empty($lists)) {
$dd = [];
$lists->map(function ($item) use (&$dd) {
$dd[] = $item->year . '-' . str_pad($item->month, 2, '0', STR_PAD_LEFT);
});
$date = array_diff($date, $dd);
}
return $date;
}
/**
* @param array $column 统计数据
* @param int $type 统计类型
* @param string|null $date 日期 格式:Y-m
* @param string $message
* @return array
* @throws Throwable
*/
public function save(array $column, int $type = TrafficStatistics::TYPE_SOURCE, string $date = null, $message = '统计当月访问来源数据')
{
DB::beginTransaction();
// 获取当天的IP|PV数量
$customerVisit = new CustomerVisit();
$ip_count = $customerVisit->getMonthIPCount($date);
$pv_count = $customerVisit->getMonthPVCount($date);
$column['pvnum'] = $pv_count;
$column['ipnum'] = $ip_count;
$date = $date ?? date('Y-m');
// 统计数据并插入到数据库
$dd = explode('-', $date);
$year = $dd[0];
$month = $dd[1];
$column['year'] = $year;
$column['month'] = $month;
$trafficStatistics = new TrafficStatistics();
$isRes = $trafficStatistics->getMonth($type, $year, $month);
if ($isRes) {
$trafficStatistics = $isRes;
}
foreach ($column as $key => $value) {
$trafficStatistics->$key = $value;
}
$res = $trafficStatistics->save();
if ($res) {
DB::commit();
$meg = "{$date} - {$message}成功!";
} else {
DB::rollBack();
$meg = "{$date} - {$message}失败!";
}
return ['status' => $res, 'msg' => $meg];
}
}
<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficTrends;
use App\Models\CustomerVisit\CustomerVisit;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Throwable;
class StatisticsDayTrend extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'statistics_day_trend';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计当天流量趋势数据';
/**
* @return void
* @throws GuzzleException
* @throws Throwable
*/
public function handle()
{
$date = getPreviousDaysDate();
$trafficTrends = new TrafficTrends();
$lists = $trafficTrends->getDaysLists($date);
if (!empty($lists)) {
$date = array_diff($date, $lists->pluck('day')->all());
}
if (!empty($date)) {
foreach ($date as $value) {
echo $this->statistics_day_trend($value);
}
}
echo $this->statistics_day_trend();
}
/**
* 统计当天流量趋势数据PV|IP数量
* @return int|mixed
* @throws GuzzleException|Throwable
*/
protected function statistics_day_trend($date = null)
{
DB::beginTransaction();
$date = $date ?? date('Y-m-d');
// 获取当天的IP|PV数量
$customerVisit = new CustomerVisit();
$ip_count = $customerVisit->getDayIPCount($date);
$pv_count = $customerVisit->getDayPVCount($date);
// 统计数据并插入到数据库
$trafficTrends = new TrafficTrends();
$isRes = $trafficTrends->getDay($date);
if ($isRes) {
$trafficTrends = $isRes;
}
$trafficTrends->day = $date;
$trafficTrends->pvnum = $pv_count;
$trafficTrends->ipnum = $ip_count;
$res = $trafficTrends->save();
if ($res) {
DB::commit();
$this->info($date . ' - 统计当天流量趋势数据PV|IP数量成功');
} else {
DB::rollBack();
$this->error++;
$this->info($date . ' - 统计当天流量趋势数据PV|IP数量失败');
}
return $this->error;
}
}
<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficStatistics;
use App\Models\CustomerVisit\CustomerVisit;
use Illuminate\Console\Command;
use Throwable;
class StatisticsDistribution extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'statistics_distribution';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计当月地域分布数据';
public $logic;
public function __construct()
{
parent::__construct();
$this->logic = new Logic();
}
/**
* 定时执行
* @return void
* @throws Throwable
*/
public function handle()
{
$date = $this->logic->getMonths(TrafficStatistics::TYPE_DISTRIBUTION);
if (!empty($date)) {
foreach ($date as $value) {
echo $this->statistics_distribution($value);
}
}
echo $this->statistics_distribution();
}
/**
* 统计当天流量趋势数据PV|IP数量
* @param string|null $date
* @return int|mixed
* @throws Throwable
*/
protected function statistics_distribution(string $date = null)
{
$customerVisit = new CustomerVisit();
$type = TrafficStatistics::TYPE_DISTRIBUTION;
$top = json_encode($customerVisit->getCountryCount($date) ?? []);
$res = $this->logic->save(compact('top', 'type'), $type, $date, '统计当月地域分布数据');
if (!$res['status']) {
$this->info($res['msg']);
$this->error++;
}
$this->info($res['msg']);
return $this->error;
}
}
<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficStatistics;
use App\Models\CustomerVisit\CustomerVisit;
use Illuminate\Console\Command;
use Throwable;
class StatisticsPage extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'statistics_page';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计当月受访页面数据';
public $logic;
public function __construct()
{
parent::__construct();
$this->logic = new Logic();
}
/**
* 定时执行
* @return void
*/
public function handle()
{
$date = $this->logic->getMonths(TrafficStatistics::TYPE_PAGE);
if (!empty($date)) {
foreach ($date as $value) {
echo $this->statistics_page($value);
}
}
echo $this->statistics_page();
}
/**
* 统计当月受访页面数据
* @param null $date
* @return int|mixed
* @throws Throwable
*/
protected function statistics_page($date = null)
{
$customerVisit = new CustomerVisit();
$top = json_encode($customerVisit->getPageCount($date) ?? []);
$type = TrafficStatistics::TYPE_PAGE;
$res = $this->logic->save(compact('top', 'type'), $type, $date, '统计当月受访页面数据');
if (!$res['status']) {
$this->info($res['msg']);
$this->error++;
}
$this->info($res['msg']);
return $this->error;
}
}
<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficStatistics;
use App\Models\CustomerVisit\CustomerVisit;
use Illuminate\Console\Command;
use Throwable;
class StatisticsSource extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'statistics_source';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计当月访问来源数据';
public $logic;
public function __construct()
{
parent::__construct();
$this->logic = new Logic();
}
/**
* @return void
* @throws Throwable
*/
public function handle()
{
$date = $this->logic->getMonths();
if (!empty($date)) {
foreach ($date as $value) {
echo $this->statistics_source($value);
}
}
echo $this->statistics_source();
}
/**
* 统计当天流量趋势数据
* @param string|null $date
* @return int|mixed
* @throws Throwable
*/
protected function statistics_source(string $date = null)
{
// 获取当天的IP|PV数量
$customerVisit = new CustomerVisit();
$top = json_encode($customerVisit->getUrlCount($date) ?? []);
$type = TrafficStatistics::TYPE_SOURCE;
$res = $this->logic->save(compact('top', 'type'), $type, $date);
if (!$res['status']) {
$this->info($res['msg']);
$this->error++;
}
$this->info($res['msg']);
return $this->error;
}
}
<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficStatistics;
use App\Models\CustomerVisit\CustomerVisit;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Console\Command;
use Throwable;
class StatisticsTerminal extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'statistics_terminal';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计当月访问终端数据';
public $logic;
public function __construct()
{
parent::__construct();
$this->logic = new Logic();
}
/**
* @return void
* @throws Throwable
*/
public function handle()
{
$date = $this->logic->getMonths(TrafficStatistics::TYPE_TERMINAL);
if (!empty($date)) {
foreach ($date as $value) {
echo $this->statistics_terminal($value);
}
}
echo $this->statistics_terminal();
}
/**
* 统计当月访问终端数据
* @param string|null $date
* @return int|mixed
* @throws Throwable
*/
protected function statistics_terminal(string $date = null)
{
$customerVisit = new CustomerVisit();
$pcnum = $customerVisit->getTerminalPcCount($date);
$mbnum = $customerVisit->getTerminalMobileCount($date);
$top = json_encode($customerVisit->getCountryCount($date) ?? []);
$type = TrafficStatistics::TYPE_TERMINAL;
$res = $this->logic->save(compact('top', 'type', 'pcnum', 'mbnum'), $type, $date, '统计当月访问终端数据');
if (!$res['status']) {
$this->info($res['msg']);
$this->error++;
}
$this->info($res['msg']);
return $this->error;
}
}
<?php
namespace App\Console\Commands\Bside\Statistics;
use App\Models\Bside\Statistics\TrafficStatistics;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Console\Command;
use Throwable;
class StatisticsTrend extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'statistics_trend';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计当月流量趋势数据';
public $logic;
public function __construct()
{
parent::__construct();
$this->logic = new Logic();
}
/**
* 定时执行
* @return void
* @throws GuzzleException|Throwable
*/
public function handle()
{
$date = $this->logic->getMonths(TrafficStatistics::TYPE_TREND);
if (!empty($date)) {
foreach ($date as $value) {
echo $this->statistics_trend($value);
}
}
echo $this->statistics_trend();
}
/**
* 统计当天流量趋势数据
* @param string|null $date
* @return int|mixed
* @throws GuzzleException|Throwable
*/
protected function statistics_trend(string $date = null)
{
$domain = request()->getHttpHost(); //'www.wowstainless.com';
$sta_date = !is_null($date) ? $date . "-01" : date('Y-m-01');
$inquiry = getInquiryInformation($domain, $sta_date);
$innum = $inquiry['count'] ?? 0;
$top = json_encode($inquiry['lists'] ?? []);
$type = TrafficStatistics::TYPE_TREND;
$res = $this->logic->save(compact('top', 'type', 'innum'), $type, $date, '统计当月流量趋势数据');
if (!$res['status']) {
$this->info($res['msg']);
$this->error++;
}
$this->info($res['msg']);
return $this->error;
}
}
... ... @@ -19,6 +19,19 @@ use Illuminate\Support\Facades\DB;
class ImportManager extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'import_manager';
/**
* The console command description.
*
* @var string
*/
protected $description = '导入数据';
/**
* @remark :导入5.0管理员数据
* @name :handle
* @author :lyh
... ...
... ... @@ -34,21 +34,6 @@ class Kernel extends ConsoleKernel
$schedule->command('inquiry_count')->dailyAt('01:00')->withoutOverlapping(1); // 询盘统计数据,每天凌晨执行一次
// // 更新域名|证书结束时间,每天凌晨1点执行一次
// $schedule->command('domain_time')->dailyAt('01:00')->withoutOverlapping(1);
// // B站 - 网站数据统计
// // 获取当前月份最后一天
// $lastDay = date('Y-m-t');
// // 统计当月访问来源数据,每月最后一天23:59点执行一次
// $schedule->command('statistics_source')->monthlyOn($lastDay, '23:59')->withoutOverlapping(1);
// // 统计当月地域分布数据,每月最后一天23:59点执行一次
// $schedule->command('statistics_distribution')->monthlyOn($lastDay, '23:59')->withoutOverlapping(1);
// // 统计当月受访页面数据,每月最后一天23:59点执行一次
// $schedule->command('statistics_page')->monthlyOn($lastDay, '23:59')->withoutOverlapping(1);
// // 统计当月访问终端数据,每月最后一天23:59点执行一次
// $schedule->command('statistics_terminal')->monthlyOn($lastDay, '23:59')->withoutOverlapping(1);
// // 统计当月流量趋势数据,每月最后一天23:59点执行一次
// $schedule->command('statistics_trend')->monthlyOn($lastDay, '23:59')->withoutOverlapping(1);
// // 统计当天流量趋势数据,每天23:59点执行一次
// $schedule->command('statistics_day_trend')->dailyAt('23:59')->withoutOverlapping(1);
}
/**
... ...