作者 赵彬吉

rankdata

... ... @@ -48,7 +48,11 @@ class RankData extends BaseCommands
Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600);
}
//有排名api编号的项目
$list = DeployOptimize::where('api_no', '>', 0)->select('api_no', 'project_id')->orderBy('project_id', 'asc')->get();
$list = DeployOptimize::where('api_no', '>', 0)->select('api_no', 'project_id')->orderBy('project_id', 'asc')->get()->toArray();
//特殊项目 一个项目多个apino
$list[] = ['api_no' => 11201, 'project_id' => 2104];
$list[] = ['api_no' => 10690, 'project_id' => 2104];
Log::channel('rank_data')->info('开始-排名数据-' . count($list));
foreach ($list as $item){
RankDataLogModel::addTask($item['project_id'], $item['api_no']);
... ... @@ -56,6 +60,7 @@ class RankData extends BaseCommands
//小语种
$api = new QuanqiusouApi();
$lang_list = $api->getLangList();
foreach ($list as $item){
$langs = $lang_list[$item['api_no']] ?? [];
foreach ($langs as $lang){
... ...
... ... @@ -76,7 +76,7 @@ class RankDataLog extends BaseCommands
$log->data = Arr::s2a($res);
//保存数据
$this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no);
$is_compliance = (new RankDataLogic())->save_rank($log->project_id, $res, null, $log->lang);
$is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang);
$log->is_compliance = $is_compliance;
$log->status = 1;
$log->save();
... ...
... ... @@ -73,6 +73,8 @@ class RankDataTask extends Command
$rankDataLogic->syncSpeed($item['data']['api_no'], true);
//每周排名数据
$rankDataLogic->syncRankWeek($item['data']['api_no'], true);
//收录数
$rankDataLogic->syncIndexedPages($item['data']['api_no'], true);
$item->status = NoticeLog::STATUS_SUCCESS;
$item->save();
... ...
... ... @@ -38,6 +38,12 @@ class NoticeController extends BaseController
{
LogUtils::info('notice rank_data', $this->param);
NoticeLog::createLog(NoticeLog::TYPE_RANK_DATA, $this->param);
//特殊项目 一个项目多个apino
if($this->param['api_no'] == 10690){
NoticeLog::createLog(NoticeLog::TYPE_RANK_DATA, ['api_no' => 11201]);
}
$this->response('success');
}
... ...
... ... @@ -45,17 +45,23 @@ class RankDataLogic extends BaseLogic
$project_id = $this->user['project_id'];
//查数据
$project = (new ProjectLogic())->getProjectInfo($project_id);
if(request('api_no')){
$api_no = request('api_no');
}else{
$api_no = $project['deploy_optimize']['api_no'] ?? 0;
}
$domain_info = (new DomainInfoLogic)->getDomainInfo($project_id);
$rank = RankData::where('project_id', $project_id)->first();
if(empty($rank) && ($project['deploy_optimize']['api_no'] != 0)){
$data['langs_status'] = 1;
}
$rank_week = RankWeek::where('project_id', $project_id)->first();
$recomm_domain = RecommDomain::where('project_id', $project_id)->first();
$external_links = ExternalLinks::where('project_id', $project_id)->first();
$indexed_pages = IndexedPages::where('project_id', $project_id)->first();
$rank_week = RankWeek::where('project_id', $project_id)->where('api_no', $api_no)->first();
$recomm_domain = RecommDomain::where('project_id', $project_id)->where('api_no', $api_no)->first();
$external_links = ExternalLinks::where('project_id', $project_id)->where('api_no', $api_no)->first();
$indexed_pages = IndexedPages::where('project_id', $project_id)->where('api_no', $api_no)->first();
$speed = Speed::where('project_id', $project_id)->first();
$api_no = $project['deploy_optimize']['api_no'] ?? '';
//排名数据
$data = [
'first_num' => $rank['first_num'] ?? 0,
... ... @@ -171,6 +177,12 @@ class RankDataLogic extends BaseLogic
'data' => $rank_week['data'] ?? [],
'labels' => $rank_week['date'] ?? [],
];
//多个api_no项目 切换api_no查看数据
if($project_id == 2104){
$data['other_api_no'] = $api_no == 10690 ? 11201 : 10690;
}
return $data;
}
... ... @@ -406,7 +418,7 @@ class RankDataLogic extends BaseLogic
//收录数
$indexed_pages_num = $site_res[$api_no] ?? 0;
Log::channel('rank_data')->info('开始保存:' . $project_id);
$this->save_rank($project_id, $res, $indexed_pages_num);
$this->save_rank($project_id, $api_no, $res, $indexed_pages_num);
}
//有小语种的
$lang_list = $api->getLangList();
... ... @@ -436,7 +448,7 @@ class RankDataLogic extends BaseLogic
$data[Arr::last($v)['lang']][$keyword] = $v;
}
foreach ($data as $lang => $rank) {
$this->save_rank($project_id, $rank, 0, $lang);
$this->save_rank($project_id, $api_no, $rank, 0, $lang);
}
}
}
... ... @@ -453,7 +465,7 @@ class RankDataLogic extends BaseLogic
* @author zbj
* @date 2023/5/8
*/
public function save_rank($project_id, $data, $indexed_pages_num = null, string $lang = ''){
public function save_rank($project_id, $api_no, $data, $indexed_pages_num = null, string $lang = ''){
$without_project_ids = []; //不用处理排名的项目
$without_extension_project_ids = [658]; //是否达标只统计主词的
$extension_project_ids = [354]; //扩展词也到达标的
... ... @@ -461,6 +473,14 @@ class RankDataLogic extends BaseLogic
354,
1283
];//暂停项目id
//一个项目多个api_no
$multiple_api_no_project_ids = [
2104 => [
11201 => 50, //api_no => 关键词达标数
10690 => 100,
]
];
$first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0;
$first_page_without_extension_num = 0; //不算扩展词在首页的数量
$first_page_extension_num = 0; //扩展词在首页的数量
... ... @@ -503,6 +523,7 @@ class RankDataLogic extends BaseLogic
}
$where = [
'project_id' => $project_id,
'api_no' => $api_no,
'lang' => $lang
];
$model = RankData::where($where)->first();
... ... @@ -513,6 +534,10 @@ class RankDataLogic extends BaseLogic
$this->g_top_plan($project_id,$g_top_first_page_extension_num);
//保证关键词数
$keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num');
//多api_no项目的保证关键词数
if(in_array($project_id, array_keys($multiple_api_no_project_ids))){
$keyword_num = $multiple_api_no_project_ids[$project_id][$api_no]??0;
}
$type = Project::where('id', $project_id)->value('type');
$model_is_compliance = $model->is_compliance;
$model->is_compliance = 0;
... ... @@ -530,8 +555,19 @@ class RankDataLogic extends BaseLogic
if (($model->updated_date != date('Y-m-d') || empty($model_is_compliance)) && !$lang) {
$compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0;
if(!in_array($project_id,$ceaseProjectId)){
//多api_no项目 要api_no都分别达标才算
if(in_array($project_id, array_keys($multiple_api_no_project_ids))){
$api_nos = array_keys($multiple_api_no_project_ids[$project_id]);
//今天其他api_no是否都达标了
$count = RankData::where('project_id', $project_id)->whereIn('api_no', $api_nos)->where('api_no', '<>', $api_no)->where('date', date('Y-m-d'))
->where('is_compliance', 1)->count();
if($count == count($api_nos) - 1){
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]);
}
}else{
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]);
Log::channel('rank_data')->info('项目' . $project_id . '达标天数+1:'. ($compliance_day + 1));
}
Log::channel('rank_data')->info('项目' . $project_id . '达标天数+1:' . ($compliance_day + 1));
}else{
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day]);
Log::channel('rank_data')->info('项目' . $project_id . '暂停项目达标天数不加:'. ($compliance_day));
... ... @@ -543,6 +579,7 @@ class RankDataLogic extends BaseLogic
}
$model->compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0;
$model->project_id = $project_id;
$model->api_no = $api_no;
$model->first_num = $first_num;
$model->first_page_num = $first_page_num;
$model->first_three_pages_num = $first_three_pages_num;
... ... @@ -598,7 +635,7 @@ class RankDataLogic extends BaseLogic
continue;
}
$model = ExternalLinksModel::where('project_id', $project_id)->first();
$model = ExternalLinksModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
//continue;
}
... ... @@ -630,6 +667,7 @@ class RankDataLogic extends BaseLogic
$data = $this->_data($project_id, $res['total']);
}
$model->project_id = $project_id;
$model->api_no = $api_no;
$model->total = $data['total'];
$model->data = $data['data'];
$model->updated_date = date('Y-m-d');
... ... @@ -684,7 +722,7 @@ class RankDataLogic extends BaseLogic
Log::channel('rank_data')->error('syncRecommDomain:未配置正式域名', ['project_id' => $project_id, 'api_no' => $api_no]);
continue;
}
$model = RecommDomainModel::where('project_id', $project_id)->first();
$model = RecommDomainModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
continue;
}
... ... @@ -716,6 +754,7 @@ class RankDataLogic extends BaseLogic
continue;
}
$model->project_id = $project_id;
$model->api_no = $api_no;
$model->data = $data;
$model->updated_date = date('Y-m-d');
$model->save();
... ... @@ -730,7 +769,7 @@ class RankDataLogic extends BaseLogic
public function syncIndexedPages($api_no, $force=false){
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
foreach ($project_ids as $project_id => $domain) {
$model = IndexedPagesModel::where('project_id', $project_id)->first();
$model = IndexedPagesModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
if($model && $model->updated_date >= getThisWeekStarDate() && !$force){
continue;
}
... ... @@ -745,6 +784,7 @@ class RankDataLogic extends BaseLogic
continue;
}
$model->project_id = $project_id;
$model->api_no = $api_no;
$model->data = $res['data'];
$model->updated_date = date('Y-m-d');
$model->save();
... ... @@ -793,7 +833,7 @@ class RankDataLogic extends BaseLogic
public function syncRankWeek($api_no, $force=false){
$project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
foreach ($project_ids as $project_id => $domain) {
$rank_week = RankWeekModel::where('project_id', $project_id)->first();
$rank_week = RankWeekModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
if ($rank_week && $rank_week->updated_date >= getThisWeekStarDate() && !$force) {
//本周数据已更新
continue;
... ... @@ -809,6 +849,7 @@ class RankDataLogic extends BaseLogic
$rank_week = new RankWeekModel();
}
$rank_week->project_id = $project_id;
$rank_week->api_no = $api_no;
$rank_week->data = $res['data'][$api_no] ?? [];
$rank_week->date = $res['date'];
$rank_week->updated_date = date('Y-m-d');
... ...