作者 邓超

Merge branch 'develop' into dc

... ... @@ -2,13 +2,17 @@
namespace App\Console\Commands\YesterdayCount;
use App\Helper\Common;
use App\Helper\FormGlobalsoApi;
use App\Models\CustomerVisit\CustomerVisitItem;
use App\Models\Project\DeployBuild;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class Yesterday extends Command
{
const STATUS_ERROR = 400;
public $error = 0;
/**
* The name and signature of the console command.
... ... @@ -24,7 +28,7 @@ class Yesterday extends Command
*/
protected $description = '统计昨日数据';
/**
* @name :(定时执行)handle
* @name :(定时执行生成昨日数据统计)handle
* @author :lyh
* @method :post
* @time :2023/5/12 14:48
... ... @@ -34,16 +38,31 @@ class Yesterday extends Command
$deployModel = new DeployBuild();
$list = $deployModel->list();
$data = [];
$yesterday = Carbon::yesterday()->toDateString();
foreach ($list as $v){
$arr = [];
$yesterday = now()->subDay();
$arr['yesterday_pv_num'] = DB::table('gl_customer_visit_item')->whereDate('created_at', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['yesterday_ip_num'] = DB::table('gl_customer_visit')->whereDate('created_at', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['inquiry_num'] = DB::table('gl_inquiry_set')->whereDate('created_at', $yesterday)->where('project_id',$v['project_id'])->count();
$arr['date'] = date('Y-m-d',time());
$arr['yesterday_pv_num'] = DB::table('gl_customer_visit_item')->whereDate('date', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['yesterday_ip_num'] = DB::table('gl_customer_visit')->whereDate('date', $yesterday)->where('domain',$v['test_domain'])->count();
$inquiry_list = (new FormGlobalsoApi())->getInquiryList($v['test_domain']);
if($inquiry_list['status'] == self::STATUS_ERROR){
$arr['inquiry_num'] = 0;
}else{
$arr['inquiry_num'] = count($inquiry_list['data']['total']);
}
$arr['date'] = $yesterday;
$rank_info = DB::table('gl_rank_data')->where(['updated_date'=>$yesterday,'lang'=>''])->select(['compliance_day'])->first();
if(empty($rank_info)){
$arr['compliance_day'] = 0;
}else{
$arr['compliance_day'] = $rank_info->compliance_day;
}
$arr['service_day'] = $v['service_duration'] - Common::getDaysToTargetDate($v['created_at']);
$arr['project_id'] = $v['project_id'];
$arr['created_at'] = date('Y-m-d H:i:s');
$arr['updated_at'] = date('Y-m-d H:i:s');
$data[] = $arr;
}
DB::table('gl_yesterday_count')->insert($data);
DB::table('gl_count')->insert($data);
echo $this->error;
}
}
... ...
... ... @@ -133,4 +133,19 @@ class Common
$arr = array_map('unserialize', $arr);
return $arr;
}
/**
* @param $targetDateTime
* @name :(获取时间差,精确时分秒,返回天数)getDaysToTargetDate
* @author :lyh
* @method :post
* @time :2023/5/24 9:38
*/
public static function getDaysToTargetDate($targetDateTime)
{
$currentTimestamp = time();
$targetTimestamp = strtotime($targetDateTime);
$days = floor(($currentTimestamp - $targetTimestamp) / (60 * 60 * 24));
return (int)$days;
}
}
... ...
... ... @@ -223,3 +223,24 @@ if (!function_exists('getThisWeekStarDate')) {
return Carbon::now()->startOfWeek()->toDateString();
}
}
if (!function_exists('object_to_array')) {
/**
* 获取本周一的日期
* @return mixed
* @author zbj
* @date 2023/5/11
*/
function object_to_array($data)
{
if(is_object($data)){
$data = (array)$data;
}else{
foreach ($data as $k => $v){
$data[$k] = object_to_array($v);
}
}
return $data;
}
}
... ...
... ... @@ -210,5 +210,4 @@ class BaseController extends Controller
}
}
... ...
... ... @@ -3,24 +3,81 @@
namespace App\Http\Controllers\Bside\HomeCount;
use App\Enums\Common\Code;
use App\Helper\Common;
use App\Helper\FormGlobalsoApi;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\HomeCount\CountLogic;
use App\Models\Project\DeployBuild;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class CountController extends BaseController
{
const STATUS_ERROR = 400;
/**
* @name :(昨日统计数据)yesterday_count
* @author :lyh
* @method :post
* @time :2023/5/23 17:23
*/
public function count(){
public function count(CountLogic $countLogic){
$data = [];
//TODO::昨日数据统计
$data['yesterday'] = $countLogic->yesterday_count();
//TODO::全球搜方案信息
$data['scheme_info'] = $countLogic->scheme_info();
//TODO::网站访问量统计
$data['total_visit'] = $countLogic->total_count($data['yesterday']['inquiry_num']);
//TODO::关键字排名数据
//TODO::关键字排名数据
$data['keyword_data'] = $countLogic->keyword_data_count();
//TODO::相关数据统计
$data['with_data'] = $countLogic->with_data_count();
//TODO::30天pv,ip统计
$data['visit_data'] = $countLogic->visit_data_count();
//TODO::询盘国家统计
$data['country_data'] = $countLogic->inquiry_country_count();
//TODO::来源排名
$data['country_data'] = $countLogic->referrer_count();
//TODO::访问国家前10
$data['access_country_count'] = $countLogic->access_country_count();
return $this->response('success',Code::SUCCESS,$data);
}
/***
* @name :(手动获取昨日数据统计)yesterday
* @author :lyh
* @method :post
* @time :2023/5/24 9:13
*/
public function yesterday(){
$deployModel = new DeployBuild();
$list = $deployModel->list();
$data = [];
$yesterday = Carbon::yesterday()->toDateString();
foreach ($list as $v){
$arr = [];
$arr['yesterday_pv_num'] = DB::table('gl_customer_visit_item')->whereDate('date', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['yesterday_ip_num'] = DB::table('gl_customer_visit')->whereDate('date', $yesterday)->where('domain',$v['test_domain'])->count();
$inquiry_list = (new FormGlobalsoApi())->getInquiryList($v['test_domain']);
if($inquiry_list['status'] == self::STATUS_ERROR){
$arr['inquiry_num'] = 0;
}else{
$arr['inquiry_num'] = count($inquiry_list['data']['total']);
}
$arr['date'] = $yesterday;
$rank_info = DB::table('gl_rank_data')->where(['updated_date'=>$yesterday,'lang'=>''])->select(['compliance_day'])->first();
if(empty($rank_info)){
$arr['compliance_day'] = 0;
}else{
$arr['compliance_day'] = $rank_info->compliance_day;
}
$arr['service_day'] = $v['service_duration'] - Common::getDaysToTargetDate($v['created_at']);
$arr['project_id'] = $v['project_id'];
$arr['created_at'] = date('Y-m-d H:i:s');
$arr['updated_at'] = date('Y-m-d H:i:s');
$data[] = $arr;
}
DB::table('gl_count')->insert($data);
$this->response('success');
}
}
... ...
... ... @@ -2,15 +2,19 @@
namespace App\Http\Logic\Bside\HomeCount;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\HomeCount\Count;
use App\Models\RankData\RankData as RankDataModel;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class CountLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Yes();
$this->model = new Count();
}
/**
... ... @@ -20,6 +24,154 @@ class CountLogic extends BaseLogic
* @time :2023/5/23 17:30
*/
public function yesterday_count(){
return $this->success();
$yesterday = Carbon::yesterday()->toDateString();
$param = [
'date' => $yesterday,
'project_id' => $this->user['project_id']
];
$info = $this->model->read($param,['pv_num','ip_num','inquiry_num','date','compliance_day','service_day']);
if($info === false){
$info = [];
}
return $this->success($info);
}
/**
* @name :(方案信息)scheme_info
* @author :lyh
* @method :post
* @time :2023/5/24 11:48
*/
public function scheme_info(){
$data = [
'company'=>$this->project['company'],
'scheme'=>$this->project['deploy_build']['plan'],
'service_duration'=>$this->project['deploy_build']['service_duration'],
];
return $this->success($data);
}
/**
* @name :(总访问量)total_count
* @author :lyh
* @method :post
* @time :2023/5/24 13:33
*/
public function total_count($inquiry_num){
$pv = DB::table('gl_customer_visit_item')->where(['domain'=>$this->project['deploy_build']['test_domain']])->count();
$ip = DB::table('gl_customer_visit')->where(['domain'=>$this->project['deploy_build']['test_domain']])->count();
$data = [
'total_pv'=>$pv,
'total_ip'=>$ip,
'conversion_rate' => ($inquiry_num / $ip) * 100,
];
return $this->success($data);
}
/**
* @name :(前一天关键字排名统计)keyword_data
* @author :lyh
* @method :post
* @time :2023/5/24 14:03
*/
public function keyword_data_count(){
$yesterday = Carbon::yesterday()->toDateString();
$rankDataModel = new RankDataModel();
$param = [
'updated_date' => $yesterday,
'project_id' => $this->user['project_id']
];
$data = $rankDataModel->read($param,['first_num','first_page_num','first_three_pages_num','first_five_pages_num','first_ten_pages_num']);
if($data === false){
$data = [];
}
return $this->success($data);
}
/**
* @name :(相关数据统计)with_data_count
* @author :lyh
* @method :post
* @time :2023/5/24 14:12
*/
public function with_data_count(){
$product_count = DB::table('gl_product')->where(['project_id' => $this->user['project_id']])->count();
$news_count = DB::table('gl_news')->where(['project_id' => $this->user['project_id']])->count();
$page_count = DB::table('gl_web_template')->where(['project_id' => $this->user['project_id']])->count();
$data = [
'product_count' => $product_count,
'news_count' => $news_count,
'page_count' => $page_count,
];
return $this->success($data);
}
/**
* @name :(30天数据统计)visit_data_count
* @author :lyh
* @method :post
* @time :2023/5/24 14:18
*/
public function visit_data_count(){
$param = [
'date' => ['between',[now()->subDays(30)->startOfDay()->toDateString(),now()->startOfDay()->toDateString()]],
'project_id' => $this->user['project_id']
];
$data = $this->model->list($param,'id',['id','pv_num','ip_num','date']);
return $this->success($data);
}
/**
* @name :(询盘国家统计)inquiry_country_count
* @author :lyh
* @method :post
* @time :2023/5/24 14:58
*/
public function inquiry_country_count(){
$data = DB::table('gl_inquiry_record')
->select('ip_area', DB::raw('COUNT(ip_area) as count'))
->groupBy('ip_area')->orderBy('count','desc')->limit(20)->get()->toArray();
$data = object_to_array($data);
$total = DB::table('gl_inquiry_record')->count();
foreach ($data as $k=>$v){
$data[$k]['proportion'] = ($v['count']/$total) * 100;
}
return $this->success($data);
}
/**
* @name :(访问来源统计)referrer_count
* @author :lyh
* @method :post
* @time :2023/5/24 15:32
*/
public function referrer_count(){
$data = DB::table('gl_customer_visit')
->select('referrer_url', DB::raw('COUNT(*) as count'))->groupBy('referrer_url')
->orderBy('count','desc')->limit(8)->get()->toArray();
$total = DB::table('gl_customer_visit')->count();
$data = object_to_array($data);
foreach ($data as $k=>$v){
$data[$k]['proportion'] = ($v['count']/$total) * 100;
}
return $this->success($data);
}
/**
* @name :(访问国家统计)access_country_count
* @author :lyh
* @method :post
* @time :2023/5/24 15:56
*/
public function access_country_count(){
$data = DB::table('gl_customer_visit')
->select('country',DB::raw('COUNT(*) as ip'),DB::raw('SUM(depth) as pv'))
->groupBy('country')->orderBy('ip','desc')->limit(20)->get()->toArray();
$data = object_to_array($data);
foreach ($data as $k => $v){
$v['pv'] = (int)$v['pv'];
$data[$k] = $v;
}
return $this->success($data);
}
}
... ...
... ... @@ -29,7 +29,7 @@ class Logic
* @param array $data
* @return array
*/
public function success(array $data = [])
public function success($data = [])
{
return $data;
}
... ...
... ... @@ -4,7 +4,7 @@ namespace App\Models\HomeCount;
use App\Models\Base;
class YesterdayCount extends Base
class Count extends Base
{
protected $table = 'gl_yesterday_count';
protected $table = 'gl_count';
}
... ...
... ... @@ -6,9 +6,11 @@ use App\Models\Base;
class WebSetting extends Base
{
//锚文本常量配置在settingTextModel中
protected $table = 'gl_web_setting';
//连接数据库
// protected $connection = 'custom_mysql';
}
... ...
... ... @@ -262,12 +262,19 @@ Route::middleware(['bloginauth','accesstoken'])->group(function () {
Route::any('/get_google_rank', [\App\Http\Controllers\Bside\RankDataController::class, 'get_google_rank'])->name('rank_data_get_google_rank');
});
//首页统计数据
Route::prefix('home')->group(function () {
Route::any('/count', [\App\Http\Controllers\Bside\HomeCount\CountController::class, 'count'])->name('home_count');
Route::any('/yesterday', [\App\Http\Controllers\Bside\HomeCount\CountController::class, 'yesterday'])->name('home_yesterday');
});
//访问数据
Route::prefix('visit')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\VisitController::class, 'index'])->name('visit_list');
Route::any('/item', [\App\Http\Controllers\Bside\VisitController::class, 'item'])->name('visit_item');
});
});
//无需登录验证的路由组
Route::group([], function () {
... ...