作者 赵彬吉

rankdata

@@ -48,7 +48,11 @@ class RankData extends BaseCommands @@ -48,7 +48,11 @@ class RankData extends BaseCommands
48 Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600); 48 Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600);
49 } 49 }
50 //有排名api编号的项目 50 //有排名api编号的项目
51 - $list = DeployOptimize::where('api_no', '>', 0)->select('api_no', 'project_id')->orderBy('project_id', 'asc')->get(); 51 + $list = DeployOptimize::where('api_no', '>', 0)->select('api_no', 'project_id')->orderBy('project_id', 'asc')->get()->toArray();
  52 + //特殊项目 一个项目多个apino
  53 + $list[] = ['api_no' => 11201, 'project_id' => 2104];
  54 + $list[] = ['api_no' => 10690, 'project_id' => 2104];
  55 +
52 Log::channel('rank_data')->info('开始-排名数据-' . count($list)); 56 Log::channel('rank_data')->info('开始-排名数据-' . count($list));
53 foreach ($list as $item){ 57 foreach ($list as $item){
54 RankDataLogModel::addTask($item['project_id'], $item['api_no']); 58 RankDataLogModel::addTask($item['project_id'], $item['api_no']);
@@ -56,6 +60,7 @@ class RankData extends BaseCommands @@ -56,6 +60,7 @@ class RankData extends BaseCommands
56 //小语种 60 //小语种
57 $api = new QuanqiusouApi(); 61 $api = new QuanqiusouApi();
58 $lang_list = $api->getLangList(); 62 $lang_list = $api->getLangList();
  63 +
59 foreach ($list as $item){ 64 foreach ($list as $item){
60 $langs = $lang_list[$item['api_no']] ?? []; 65 $langs = $lang_list[$item['api_no']] ?? [];
61 foreach ($langs as $lang){ 66 foreach ($langs as $lang){
@@ -76,7 +76,7 @@ class RankDataLog extends BaseCommands @@ -76,7 +76,7 @@ class RankDataLog extends BaseCommands
76 $log->data = Arr::s2a($res); 76 $log->data = Arr::s2a($res);
77 //保存数据 77 //保存数据
78 $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no); 78 $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no);
79 - $is_compliance = (new RankDataLogic())->save_rank($log->project_id, $res, null, $log->lang); 79 + $is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang);
80 $log->is_compliance = $is_compliance; 80 $log->is_compliance = $is_compliance;
81 $log->status = 1; 81 $log->status = 1;
82 $log->save(); 82 $log->save();
@@ -73,6 +73,8 @@ class RankDataTask extends Command @@ -73,6 +73,8 @@ class RankDataTask extends Command
73 $rankDataLogic->syncSpeed($item['data']['api_no'], true); 73 $rankDataLogic->syncSpeed($item['data']['api_no'], true);
74 //每周排名数据 74 //每周排名数据
75 $rankDataLogic->syncRankWeek($item['data']['api_no'], true); 75 $rankDataLogic->syncRankWeek($item['data']['api_no'], true);
  76 + //收录数
  77 + $rankDataLogic->syncIndexedPages($item['data']['api_no'], true);
76 78
77 $item->status = NoticeLog::STATUS_SUCCESS; 79 $item->status = NoticeLog::STATUS_SUCCESS;
78 $item->save(); 80 $item->save();
@@ -38,6 +38,12 @@ class NoticeController extends BaseController @@ -38,6 +38,12 @@ class NoticeController extends BaseController
38 { 38 {
39 LogUtils::info('notice rank_data', $this->param); 39 LogUtils::info('notice rank_data', $this->param);
40 NoticeLog::createLog(NoticeLog::TYPE_RANK_DATA, $this->param); 40 NoticeLog::createLog(NoticeLog::TYPE_RANK_DATA, $this->param);
  41 +
  42 + //特殊项目 一个项目多个apino
  43 + if($this->param['api_no'] == 10690){
  44 + NoticeLog::createLog(NoticeLog::TYPE_RANK_DATA, ['api_no' => 11201]);
  45 + }
  46 +
41 $this->response('success'); 47 $this->response('success');
42 } 48 }
43 49
@@ -45,17 +45,23 @@ class RankDataLogic extends BaseLogic @@ -45,17 +45,23 @@ class RankDataLogic extends BaseLogic
45 $project_id = $this->user['project_id']; 45 $project_id = $this->user['project_id'];
46 //查数据 46 //查数据
47 $project = (new ProjectLogic())->getProjectInfo($project_id); 47 $project = (new ProjectLogic())->getProjectInfo($project_id);
  48 + if(request('api_no')){
  49 + $api_no = request('api_no');
  50 + }else{
  51 + $api_no = $project['deploy_optimize']['api_no'] ?? 0;
  52 + }
  53 +
48 $domain_info = (new DomainInfoLogic)->getDomainInfo($project_id); 54 $domain_info = (new DomainInfoLogic)->getDomainInfo($project_id);
49 $rank = RankData::where('project_id', $project_id)->first(); 55 $rank = RankData::where('project_id', $project_id)->first();
50 if(empty($rank) && ($project['deploy_optimize']['api_no'] != 0)){ 56 if(empty($rank) && ($project['deploy_optimize']['api_no'] != 0)){
51 $data['langs_status'] = 1; 57 $data['langs_status'] = 1;
52 } 58 }
53 - $rank_week = RankWeek::where('project_id', $project_id)->first();  
54 - $recomm_domain = RecommDomain::where('project_id', $project_id)->first();  
55 - $external_links = ExternalLinks::where('project_id', $project_id)->first();  
56 - $indexed_pages = IndexedPages::where('project_id', $project_id)->first(); 59 + $rank_week = RankWeek::where('project_id', $project_id)->where('api_no', $api_no)->first();
  60 + $recomm_domain = RecommDomain::where('project_id', $project_id)->where('api_no', $api_no)->first();
  61 + $external_links = ExternalLinks::where('project_id', $project_id)->where('api_no', $api_no)->first();
  62 + $indexed_pages = IndexedPages::where('project_id', $project_id)->where('api_no', $api_no)->first();
57 $speed = Speed::where('project_id', $project_id)->first(); 63 $speed = Speed::where('project_id', $project_id)->first();
58 - $api_no = $project['deploy_optimize']['api_no'] ?? ''; 64 +
59 //排名数据 65 //排名数据
60 $data = [ 66 $data = [
61 'first_num' => $rank['first_num'] ?? 0, 67 'first_num' => $rank['first_num'] ?? 0,
@@ -171,6 +177,12 @@ class RankDataLogic extends BaseLogic @@ -171,6 +177,12 @@ class RankDataLogic extends BaseLogic
171 'data' => $rank_week['data'] ?? [], 177 'data' => $rank_week['data'] ?? [],
172 'labels' => $rank_week['date'] ?? [], 178 'labels' => $rank_week['date'] ?? [],
173 ]; 179 ];
  180 +
  181 + //多个api_no项目 切换api_no查看数据
  182 + if($project_id == 2104){
  183 + $data['other_api_no'] = $api_no == 10690 ? 11201 : 10690;
  184 + }
  185 +
174 return $data; 186 return $data;
175 } 187 }
176 188
@@ -406,7 +418,7 @@ class RankDataLogic extends BaseLogic @@ -406,7 +418,7 @@ class RankDataLogic extends BaseLogic
406 //收录数 418 //收录数
407 $indexed_pages_num = $site_res[$api_no] ?? 0; 419 $indexed_pages_num = $site_res[$api_no] ?? 0;
408 Log::channel('rank_data')->info('开始保存:' . $project_id); 420 Log::channel('rank_data')->info('开始保存:' . $project_id);
409 - $this->save_rank($project_id, $res, $indexed_pages_num); 421 + $this->save_rank($project_id, $api_no, $res, $indexed_pages_num);
410 } 422 }
411 //有小语种的 423 //有小语种的
412 $lang_list = $api->getLangList(); 424 $lang_list = $api->getLangList();
@@ -436,7 +448,7 @@ class RankDataLogic extends BaseLogic @@ -436,7 +448,7 @@ class RankDataLogic extends BaseLogic
436 $data[Arr::last($v)['lang']][$keyword] = $v; 448 $data[Arr::last($v)['lang']][$keyword] = $v;
437 } 449 }
438 foreach ($data as $lang => $rank) { 450 foreach ($data as $lang => $rank) {
439 - $this->save_rank($project_id, $rank, 0, $lang); 451 + $this->save_rank($project_id, $api_no, $rank, 0, $lang);
440 } 452 }
441 } 453 }
442 } 454 }
@@ -453,7 +465,7 @@ class RankDataLogic extends BaseLogic @@ -453,7 +465,7 @@ class RankDataLogic extends BaseLogic
453 * @author zbj 465 * @author zbj
454 * @date 2023/5/8 466 * @date 2023/5/8
455 */ 467 */
456 - public function save_rank($project_id, $data, $indexed_pages_num = null, string $lang = ''){ 468 + public function save_rank($project_id, $api_no, $data, $indexed_pages_num = null, string $lang = ''){
457 $without_project_ids = []; //不用处理排名的项目 469 $without_project_ids = []; //不用处理排名的项目
458 $without_extension_project_ids = [658]; //是否达标只统计主词的 470 $without_extension_project_ids = [658]; //是否达标只统计主词的
459 $extension_project_ids = [354]; //扩展词也到达标的 471 $extension_project_ids = [354]; //扩展词也到达标的
@@ -461,6 +473,14 @@ class RankDataLogic extends BaseLogic @@ -461,6 +473,14 @@ class RankDataLogic extends BaseLogic
461 354, 473 354,
462 1283 474 1283
463 ];//暂停项目id 475 ];//暂停项目id
  476 +
  477 + //一个项目多个api_no
  478 + $multiple_api_no_project_ids = [
  479 + 2104 => [
  480 + 11201 => 50, //api_no => 关键词达标数
  481 + 10690 => 100,
  482 + ]
  483 + ];
464 $first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0; 484 $first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0;
465 $first_page_without_extension_num = 0; //不算扩展词在首页的数量 485 $first_page_without_extension_num = 0; //不算扩展词在首页的数量
466 $first_page_extension_num = 0; //扩展词在首页的数量 486 $first_page_extension_num = 0; //扩展词在首页的数量
@@ -503,6 +523,7 @@ class RankDataLogic extends BaseLogic @@ -503,6 +523,7 @@ class RankDataLogic extends BaseLogic
503 } 523 }
504 $where = [ 524 $where = [
505 'project_id' => $project_id, 525 'project_id' => $project_id,
  526 + 'api_no' => $api_no,
506 'lang' => $lang 527 'lang' => $lang
507 ]; 528 ];
508 $model = RankData::where($where)->first(); 529 $model = RankData::where($where)->first();
@@ -513,6 +534,10 @@ class RankDataLogic extends BaseLogic @@ -513,6 +534,10 @@ class RankDataLogic extends BaseLogic
513 $this->g_top_plan($project_id,$g_top_first_page_extension_num); 534 $this->g_top_plan($project_id,$g_top_first_page_extension_num);
514 //保证关键词数 535 //保证关键词数
515 $keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num'); 536 $keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num');
  537 + //多api_no项目的保证关键词数
  538 + if(in_array($project_id, array_keys($multiple_api_no_project_ids))){
  539 + $keyword_num = $multiple_api_no_project_ids[$project_id][$api_no]??0;
  540 + }
516 $type = Project::where('id', $project_id)->value('type'); 541 $type = Project::where('id', $project_id)->value('type');
517 $model_is_compliance = $model->is_compliance; 542 $model_is_compliance = $model->is_compliance;
518 $model->is_compliance = 0; 543 $model->is_compliance = 0;
@@ -530,8 +555,19 @@ class RankDataLogic extends BaseLogic @@ -530,8 +555,19 @@ class RankDataLogic extends BaseLogic
530 if (($model->updated_date != date('Y-m-d') || empty($model_is_compliance)) && !$lang) { 555 if (($model->updated_date != date('Y-m-d') || empty($model_is_compliance)) && !$lang) {
531 $compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0; 556 $compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0;
532 if(!in_array($project_id,$ceaseProjectId)){ 557 if(!in_array($project_id,$ceaseProjectId)){
  558 + //多api_no项目 要api_no都分别达标才算
  559 + if(in_array($project_id, array_keys($multiple_api_no_project_ids))){
  560 + $api_nos = array_keys($multiple_api_no_project_ids[$project_id]);
  561 + //今天其他api_no是否都达标了
  562 + $count = RankData::where('project_id', $project_id)->whereIn('api_no', $api_nos)->where('api_no', '<>', $api_no)->where('date', date('Y-m-d'))
  563 + ->where('is_compliance', 1)->count();
  564 + if($count == count($api_nos) - 1){
  565 + Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]);
  566 + }
  567 + }else{
533 Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]); 568 Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]);
534 - Log::channel('rank_data')->info('项目' . $project_id . '达标天数+1:'. ($compliance_day + 1)); 569 + }
  570 + Log::channel('rank_data')->info('项目' . $project_id . '达标天数+1:' . ($compliance_day + 1));
535 }else{ 571 }else{
536 Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day]); 572 Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day]);
537 Log::channel('rank_data')->info('项目' . $project_id . '暂停项目达标天数不加:'. ($compliance_day)); 573 Log::channel('rank_data')->info('项目' . $project_id . '暂停项目达标天数不加:'. ($compliance_day));
@@ -543,6 +579,7 @@ class RankDataLogic extends BaseLogic @@ -543,6 +579,7 @@ class RankDataLogic extends BaseLogic
543 } 579 }
544 $model->compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0; 580 $model->compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0;
545 $model->project_id = $project_id; 581 $model->project_id = $project_id;
  582 + $model->api_no = $api_no;
546 $model->first_num = $first_num; 583 $model->first_num = $first_num;
547 $model->first_page_num = $first_page_num; 584 $model->first_page_num = $first_page_num;
548 $model->first_three_pages_num = $first_three_pages_num; 585 $model->first_three_pages_num = $first_three_pages_num;
@@ -598,7 +635,7 @@ class RankDataLogic extends BaseLogic @@ -598,7 +635,7 @@ class RankDataLogic extends BaseLogic
598 continue; 635 continue;
599 } 636 }
600 637
601 - $model = ExternalLinksModel::where('project_id', $project_id)->first(); 638 + $model = ExternalLinksModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
602 if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) { 639 if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
603 //continue; 640 //continue;
604 } 641 }
@@ -630,6 +667,7 @@ class RankDataLogic extends BaseLogic @@ -630,6 +667,7 @@ class RankDataLogic extends BaseLogic
630 $data = $this->_data($project_id, $res['total']); 667 $data = $this->_data($project_id, $res['total']);
631 } 668 }
632 $model->project_id = $project_id; 669 $model->project_id = $project_id;
  670 + $model->api_no = $api_no;
633 $model->total = $data['total']; 671 $model->total = $data['total'];
634 $model->data = $data['data']; 672 $model->data = $data['data'];
635 $model->updated_date = date('Y-m-d'); 673 $model->updated_date = date('Y-m-d');
@@ -684,7 +722,7 @@ class RankDataLogic extends BaseLogic @@ -684,7 +722,7 @@ class RankDataLogic extends BaseLogic
684 Log::channel('rank_data')->error('syncRecommDomain:未配置正式域名', ['project_id' => $project_id, 'api_no' => $api_no]); 722 Log::channel('rank_data')->error('syncRecommDomain:未配置正式域名', ['project_id' => $project_id, 'api_no' => $api_no]);
685 continue; 723 continue;
686 } 724 }
687 - $model = RecommDomainModel::where('project_id', $project_id)->first(); 725 + $model = RecommDomainModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
688 if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) { 726 if ($model && $model->updated_date >= getThisWeekStarDate() && !$force) {
689 continue; 727 continue;
690 } 728 }
@@ -716,6 +754,7 @@ class RankDataLogic extends BaseLogic @@ -716,6 +754,7 @@ class RankDataLogic extends BaseLogic
716 continue; 754 continue;
717 } 755 }
718 $model->project_id = $project_id; 756 $model->project_id = $project_id;
  757 + $model->api_no = $api_no;
719 $model->data = $data; 758 $model->data = $data;
720 $model->updated_date = date('Y-m-d'); 759 $model->updated_date = date('Y-m-d');
721 $model->save(); 760 $model->save();
@@ -730,7 +769,7 @@ class RankDataLogic extends BaseLogic @@ -730,7 +769,7 @@ class RankDataLogic extends BaseLogic
730 public function syncIndexedPages($api_no, $force=false){ 769 public function syncIndexedPages($api_no, $force=false){
731 $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id'); 770 $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
732 foreach ($project_ids as $project_id => $domain) { 771 foreach ($project_ids as $project_id => $domain) {
733 - $model = IndexedPagesModel::where('project_id', $project_id)->first(); 772 + $model = IndexedPagesModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
734 if($model && $model->updated_date >= getThisWeekStarDate() && !$force){ 773 if($model && $model->updated_date >= getThisWeekStarDate() && !$force){
735 continue; 774 continue;
736 } 775 }
@@ -745,6 +784,7 @@ class RankDataLogic extends BaseLogic @@ -745,6 +784,7 @@ class RankDataLogic extends BaseLogic
745 continue; 784 continue;
746 } 785 }
747 $model->project_id = $project_id; 786 $model->project_id = $project_id;
  787 + $model->api_no = $api_no;
748 $model->data = $res['data']; 788 $model->data = $res['data'];
749 $model->updated_date = date('Y-m-d'); 789 $model->updated_date = date('Y-m-d');
750 $model->save(); 790 $model->save();
@@ -793,7 +833,7 @@ class RankDataLogic extends BaseLogic @@ -793,7 +833,7 @@ class RankDataLogic extends BaseLogic
793 public function syncRankWeek($api_no, $force=false){ 833 public function syncRankWeek($api_no, $force=false){
794 $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id'); 834 $project_ids = DeployOptimize::where('api_no', $api_no)->pluck('domain', 'project_id');
795 foreach ($project_ids as $project_id => $domain) { 835 foreach ($project_ids as $project_id => $domain) {
796 - $rank_week = RankWeekModel::where('project_id', $project_id)->first(); 836 + $rank_week = RankWeekModel::where('project_id', $project_id)->where('api_no', $api_no)->first();
797 if ($rank_week && $rank_week->updated_date >= getThisWeekStarDate() && !$force) { 837 if ($rank_week && $rank_week->updated_date >= getThisWeekStarDate() && !$force) {
798 //本周数据已更新 838 //本周数据已更新
799 continue; 839 continue;
@@ -809,6 +849,7 @@ class RankDataLogic extends BaseLogic @@ -809,6 +849,7 @@ class RankDataLogic extends BaseLogic
809 $rank_week = new RankWeekModel(); 849 $rank_week = new RankWeekModel();
810 } 850 }
811 $rank_week->project_id = $project_id; 851 $rank_week->project_id = $project_id;
  852 + $rank_week->api_no = $api_no;
812 $rank_week->data = $res['data'][$api_no] ?? []; 853 $rank_week->data = $res['data'][$api_no] ?? [];
813 $rank_week->date = $res['date']; 854 $rank_week->date = $res['date'];
814 $rank_week->updated_date = date('Y-m-d'); 855 $rank_week->updated_date = date('Y-m-d');