作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

... ... @@ -83,7 +83,7 @@ class RemainDay extends Command
* @time :2025/4/2 10:48
*/
public function saveRemainDay(){
$list = $this->project->list(['type'=>['in',[Project::TYPE_TWO,Project::TYPE_THREE,Project::TYPE_FOUR]]],'id',['id','type','uptime','remain_day','is_remain_today','pause_days','finish_remain_day']);
$list = $this->project->list(['extend_type'=>Project::TYPE_ZERO,'type'=>['in',[Project::TYPE_TWO,Project::TYPE_THREE,Project::TYPE_FOUR]]],'id',['id','type','uptime','remain_day','is_remain_today','pause_days','finish_remain_day']);
foreach ($list as $item){
$deploy_build = $this->deployBuild->read(['project_id'=>$item['id']],['service_duration','seo_service_duration','plan','seo_plan']);
echo 'start->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL;
... ... @@ -97,11 +97,33 @@ class RemainDay extends Command
$this->project->edit(['pause_days'=>$pause_days],['id'=>$item['id']]);
continue;
}
//白帽版本的系统
if($deploy_build['seo_plan'] == 1){
//白帽版本单独计算
$this->seoRemainDay($deploy_build,$item);
//默认版本统计
if($deploy_build['service_duration'] == 0){
continue;
}
$this->remainDay($item,$deploy_build);
echo 'end->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL;
}
return true;
}
/**
* @remark :白帽版本单独计算
* @name :seoRemainDay
* @author :lyh
* @method :post
* @time :2025/4/25 14:24
*/
public function seoRemainDay($deploy_build,$item){
//白帽版本的系统
if($deploy_build['seo_plan'] == 1){
if($deploy_build['seo_service_duration'] != 0){
if($item['uptime']){
$diff = time() - strtotime($item['uptime']);
$seo_remain_day = $deploy_build['seo_service_duration'] - floor($diff / (60 * 60 * 24));
$compliance_day = floor($diff / (60 * 60 * 24));
$seo_remain_day = $deploy_build['seo_service_duration'] - $compliance_day;
}else{
$seo_remain_day = $deploy_build['seo_service_duration'];
}
... ... @@ -109,46 +131,55 @@ class RemainDay extends Command
$seo_remain_day = 0;
}
if($deploy_build['plan'] == 0 && $seo_remain_day == 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常未0,放入未续费中
$this->project->edit(['seo_remain_day'=>$seo_remain_day,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]);
continue;
$this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]);
}else{
//同时包括白帽版本+默认版本的项目
$this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]);
}
//同时包括白帽版本+默认版本的项目
$this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]);
}
//默认版本计算剩余服务时常
if($item['type'] == Project::TYPE_TWO || $item['type'] == Project::TYPE_FOUR){
if(in_array($item['id'],$this->projectId)){//已开始优化的时间结算
$optimizeModel = new DeployOptimize();
$opInfo = $optimizeModel->read(['project_id'=>$item['id']],['start_date']);
if($opInfo === false){
continue;
}
$diff = time() - strtotime($opInfo['start_date'] ?? $item['uptime']);
$compliance_day = floor($diff / (60 * 60 * 24));
$remain_day = $deploy_build['service_duration'] - $compliance_day;
}
return true;
}
}else{
$compliance_day = ($item['finish_remain_day'] ?? 0);
$remain_day = $deploy_build['service_duration'] - $compliance_day;
/**
* @remark :普通版本剩余服务时常
* @name :RemainDay
* @author :lyh
* @method :post
* @time :2025/4/25 14:31
*/
public function remainDay($item,$deploy_build){
//默认版本计算剩余服务时常
if($item['type'] == Project::TYPE_TWO || $item['type'] == Project::TYPE_FOUR){
if(in_array($item['id'],$this->projectId)){//已开始优化的时间结算
$optimizeModel = new DeployOptimize();
$opInfo = $optimizeModel->read(['project_id'=>$item['id']],['start_date']);
if($opInfo === false){
return true;
}
$diff = time() - strtotime($opInfo['start_date'] ?? $item['uptime']);
$compliance_day = floor($diff / (60 * 60 * 24));
$remain_day = $deploy_build['service_duration'] - $compliance_day;
}else{
//普通建站项目
if($item['uptime']){
$diff = time() - strtotime($item['uptime']);
$compliance_day = floor($diff / (60 * 60 * 24));
$remain_day = $deploy_build['service_duration'] - $compliance_day;
}else{
$remain_day = $deploy_build['service_duration'];
}
$compliance_day = ($item['finish_remain_day'] ?? 0);
$remain_day = $deploy_build['service_duration'] - $compliance_day;
}
$extend_type = 0;
if($remain_day < 0 && $deploy_build['service_duration'] != 0){
$remain_day = 0;
$extend_type = Project::TYPE_FIVE;
}else{
//普通建站项目
if($item['uptime']){
$diff = time() - strtotime($item['uptime']);
$compliance_day = floor($diff / (60 * 60 * 24));
$remain_day = $deploy_build['service_duration'] - $compliance_day;
}else{
$remain_day = $deploy_build['service_duration'];
}
$this->project->edit(['remain_day'=>$remain_day,'extend_type'=>$extend_type,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]);
echo 'end->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL;
}
$extend_type = 0;
if($remain_day < 0 && $deploy_build['service_duration'] != 0){
$remain_day = 0;
$extend_type = Project::TYPE_FIVE;
}
$this->project->edit(['remain_day'=>$remain_day,'extend_type'=>$extend_type,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]);
return true;
}
}
... ...
... ... @@ -771,7 +771,7 @@ class RelayInquiry extends Command
*/
public function getInquiry($num = 10)
{
$result = ReInquiryForm::where(['status' => ReInquiryForm::STATUS_INIT])->orderBy('id', 'asc')->limit($num)->get();
$result = ReInquiryForm::where(['status' => ReInquiryForm::STATUS_INIT])->where('created_at', '>', '2025-04-27 00:00:00')->orderBy('id', 'asc')->limit($num)->get();
return $result;
}
... ...
... ... @@ -9,8 +9,10 @@
namespace App\Console\Commands\LyhTest;
use App\Console\Commands\Domain\DomainInfo;
use App\Models\Com\NoticeLog;
use App\Models\Project\AiBlogTask;
use App\Models\Project\DeployBuild;
use App\Models\Project\Project;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
... ... @@ -33,9 +35,14 @@ class lyhDemo extends Command
protected $description = '更新路由';
public function handle(){
$projectModel = new Project();
$noticeModel = new NoticeLog();
$lists = $projectModel->list(['from_order_id'=>null]);
$projectBuildModel = new DeployBuild();
$projectList = $projectBuildModel->list(['plan'=>0,'seo_plan'=>1],'project_id');
foreach ($projectList as $val){
if(!empty($val['service_duration']) && empty($val['seo_service_duration'])){
$projectBuildModel->edit(['seo_service_duration'=>$val['service_duration']],['id'=>$val['id']]);
echo '项目id:'.$val['project_id'].PHP_EOL;
}
}
return true;
}
}
... ...
... ... @@ -9,6 +9,7 @@ namespace App\Console\Commands\Monitor;
use App\Models\Domain\DomainInfo;
use App\Models\Product\Keyword;
use App\Models\Project\DeployOptimize;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
use App\Repositories\ToolRepository;
... ... @@ -259,9 +260,29 @@ class Supervisory extends Command
file_put_contents(storage_path('data/robots/' . date('Ymd'). 'log.json'), json_encode($tmp, 256));
unset($tmp);
// 所有路由
$domain = array_column($spot_projects, 'domain');
$domain = array_unique(array_filter($domain));
// 通知对应优化师
$tmp = [];
foreach ($spot_projects as $item) {
$tmp[$item['domain']] = $item['project_id'];
}
$project_ids = array_column($spot_projects, 'project_id');
$optimist = DeployOptimize::leftJoin('gl_manage', 'gl_project_deploy_optimize.optimist_mid', '=', 'gl_manage.id')
->whereIn('project_id', $project_ids)
->pluck('mobile', 'project_id')
->toArray();
$notice = [];
$all_url = array_merge($error_url, $error, $page_404, $tdk_error);
foreach ($all_url as $url) {
if (FALSE == empty($optimist[$tmp[parse_url($url, PHP_URL_HOST)]]))
$notice[] = '86' . $optimist[$tmp[parse_url($url, PHP_URL_HOST)]];
}
$notice = array_filter(array_unique($notice));
$message[] = '开启robots项目数:' . count($robots_ids);
$message[] = '关闭robots项目:' . ($close_ids ? implode(',', $close_ids) : '无');
$message[] = '抽查项目数量: ' . count($domain);
... ... @@ -282,6 +303,7 @@ class Supervisory extends Command
'keyword' => '项目数据推送',
'msg' => $msg,
'isAtAll' => false, // 是否@所有人
'atMobiles' => $notice
];
$dingService->handle($body, $link);
}
... ...
... ... @@ -2,12 +2,11 @@
namespace App\Console\Commands\RankData;
use App\Helper\QuanqiusouApi;
use App\Http\Logic\Bside\RankData\RankDataLogic;
use App\Models\RankData\RankDataLog as RankDataLogModel;
use App\Models\Project\DeployOptimize;
use App\Models\Domain\DomainInfo;
use App\Models\Project\Project;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
/**
... ... @@ -49,8 +48,7 @@ class RankData extends BaseCommands
Cache::set('clear_remain_today_' . date('Y-m-d'), 1, 24 * 3600);
}
$projectModel = new Project();
$list = $projectModel->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
$list = Project::leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
->where('gl_project.extend_type',0)
->where('gl_project.delete_status',0)
->where('gl_project_deploy_optimize.api_no', '>', 0)
... ... @@ -79,6 +77,22 @@ class RankData extends BaseCommands
RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang);
}
}
//白帽SEO版
$list = Project::leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
->where('gl_project.delete_status',0)
->where('gl_project_deploy_build.seo_plan', 1)
->whereIn('gl_project.type',[2,3,4])
->orderBy('gl_project.id', 'asc')
->pluck('gl_project.id')->toArray();
foreach ($list as $project_id){
$domain = DomainInfo::getCacheInfoByProjectId($project_id);
$id = RankDataLogic::instance()->getBmSeoProjects($domain['domain']);
if(!$id){
continue;
}
RankDataLogModel::addTask($project_id, $id . '_bmseo');
}
} catch (\Exception|\Throwable $e) {
Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage());
}
... ...
... ... @@ -13,6 +13,7 @@ use App\Models\Project\Project;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Str;
/**
* Class GoogleRank
... ... @@ -76,8 +77,13 @@ 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, $log->api_no, $res, null, $log->lang);
$log->is_compliance = $is_compliance;
if(Str::endsWith($log->api_no, '_bmseo')){
//白帽版
(new RankDataLogic())->save_rank_bmseo($log->project_id, $log->api_no, $res);
}else{
$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();
... ...
... ... @@ -143,7 +143,8 @@ class FormGlobalsoApi
*/
public function submitInquiry($ip, $referer, $submit_at, $data, $traffic = 0)
{
$api_url = $this->url . '/api/external-interface/add/fa043f9cbec6b38f';
// $api_url = $this->url;
$api_url = 'https://form.globalso.com/api/external-interface/add/fa043f9cbec6b38f';
$data['ip'] = $ip;
$data['token'] = md5($referer . $data['name'] . $ip . date("Y-m-d"));
... ...
... ... @@ -839,7 +839,7 @@ function getCustomRouteMap($module_route,$route = '')
if($module_route == $route){
$resultRoute = $route;
}else{
$resultRoute = $module_route.'_catelog/'.$route;
$resultRoute = $module_route.'_catalog/'.$route;
}
return $resultRoute;
}
... ...
... ... @@ -147,8 +147,8 @@ class OptimizeController extends BaseController
$data = APublicModel::getNumByProjectId($item['id']);
}
$manageModel = new ManageHr();
$plan = Project::planMap();
$seo_plan = Project::seoMap();
// $plan = Project::planMap();
// $seo_plan = Project::seoMap();
$item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0);
$item['build_leader'] = $manageModel->getName($item['leader_mid']);
$item['build_manager'] = $manageModel->getName($item['manager_mid']);
... ... @@ -159,8 +159,6 @@ class OptimizeController extends BaseController
$item['optimize_assist'] = $manageModel->getName($item['optimize_assist_mid']);
$item['optimize_tech'] = $manageModel->getName($item['optimize_tech_mid']);
$item['quality_mid_name'] = $manageModel->getName($item['quality_mid']);
$item['plan'] = $plan[$item['plan']] ?? 0;
$item['seo_plan'] = $seo_plan[$item['plan']] ?? 0;
$item['created_at'] = date('Y年m月d日', strtotime($item['cooperate_date']));
$item['autologin_code'] = getAutoLoginCode($item['id']);
$item['domain'] = 'https://'.$item['domain'].'/';
... ... @@ -194,6 +192,7 @@ class OptimizeController extends BaseController
'gl_project.finish_remain_day AS finish_remain_day',
'gl_project.is_remain_today AS is_remain_today',
'gl_project.remain_day AS remain_day',
'gl_project.seo_remain_day AS seo_remain_day',
'gl_project.robots AS robots',
'gl_project.is_minor_languages AS is_minor_languages',
'gl_project.is_translate AS is_translate',
... ...
... ... @@ -69,6 +69,7 @@ class RenewProjectController extends BaseController
}
$map['extend_type'] = 0;
$map['remain_day'] = ['<=',15];
$map['seo_remain_day'] = ['<=',15];
return $map;
}
... ... @@ -142,6 +143,7 @@ class RenewProjectController extends BaseController
if($item['type'] != Project::TYPE_ZERO){
$data = APublicModel::getNumByProjectId($item['id']);
}
$plan = Project::planMap();
$item = [
'id' => $item['id'],
'title' => $item['title'],
... ... @@ -159,7 +161,7 @@ class RenewProjectController extends BaseController
'optimize_tech' => $manageModel->getName($item['deploy_optimize']['tech_mid']), //售后技术
'type' => $item['type'],
'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
'plan' =>Project::planMap()[$item['deploy_build']['plan']],
'plan' =>$plan[$item['deploy_build']['plan']] ?? '白帽seo版本',
'plan_id' =>$item['deploy_build']['plan'],
'domain' => !empty($item['deploy_optimize']['domain']) ? $domainModel->getDomain($item['deploy_optimize']['domain']) : '',
'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
... ...
... ... @@ -13,6 +13,8 @@ use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Setting\TranslateLogic;
use App\Models\Blog\Blog;
use App\Models\CustomModule\CustomModule;
use App\Models\CustomModule\CustomModuleCategory;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\News\News;
use App\Models\Product\Product;
... ... @@ -279,7 +281,19 @@ class TranslateController extends BaseController
case RouteMap::SOURCE_MODULE_CATE:
$customModel = new CustomModuleContent();
$count = $customModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%']])->count();
$this->pageSixList($data,$count,$v,3,10);
//获取module_id
$customCateModel = new CustomModuleCategory();
$cateInfo = $customCateModel->read(['route'=>$v['route']],['module_id']);
if($cateInfo !== false){
$model = new CustomModule();
$moduleInfo = $model->read(['id'=>$cateInfo['module_id']],['route']);
if($moduleInfo !== false){
if($v['route'] != $moduleInfo['route']){
$v['route'] = $moduleInfo['route'].'/'.$v['route'];
}
}
}
$this->pageList($data,$count,$v,3,10);
break;
default:
$data[] = $v['route'];
... ... @@ -393,7 +407,7 @@ class TranslateController extends BaseController
}
/**
* @remark :
* @remark :5.0列表页路由处理
* @name :pageList
* @author :lyh
* @method :post
... ... @@ -412,6 +426,15 @@ class TranslateController extends BaseController
}
$page = ceil($count / $pageNum);//向上取整
}
if($v['source'] == RouteMap::SOURCE_NEWS_CATE){
if($v['route'] != 'news'){
$v['route'] = RouteMap::PATH_NEWS_CATE.'/'.$v['route'];
}
}elseif($v['source'] == RouteMap::SOURCE_BLOG_CATE){
if($v['route'] != 'blog'){
$v['route'] = RouteMap::PATH_BLOG_CATE.'/'.$v['route'];
}
}
for ($i = 1;$i <= $page;$i++){
if($i == 1){
$data[] = $v['route'];
... ... @@ -423,7 +446,7 @@ class TranslateController extends BaseController
}
/**
* @remark :
* @remark :6.0列表路由处理
* @name :pageList
* @author :lyh
* @method :post
... ...
... ... @@ -63,10 +63,11 @@ class AiBlogLogic extends BaseLogic
$aiBlogService->mch_id = $aiSettingInfo['mch_id'];
$aiBlogService->key = $aiSettingInfo['key'];
$aiBlogService->updateDetail(['task_id'=>$this->param['task_id'],'title'=>$this->param['new_title'],'thumb'=>$this->param['image'],'route'=>$this->param['route'],'author_id'=>$this->param['author_id']]);
$aiBlogTaskModel = new AiBlogTask();
$aiBlogTaskModel->edit(['status'=>AiBlogTask::STATUS_RUNNING],['task_id'=>$this->param['task_id']]);//重新走拉取流程
}catch (\Exception $e){
$this->fail('保存失败,请联系管理员');
}
$this->sendHttpC([$this->param['route'],'top-blog']);
return $this->success();
}
... ...
... ... @@ -10,6 +10,7 @@ use App\Models\Com\UpdateNotify;
use App\Models\Devops\ServerConfig;
use App\Models\Devops\ServersIp;
use App\Models\Project\Project;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
... ...
... ... @@ -59,7 +59,7 @@ class MonthCountLogic extends BaseLogic
$ensTime = date('Y-m-d',time());
$lists = $count->list(['date'=>['between',[$startTime,$ensTime]],'project_id'=>$this->user['project_id']],'id',['*'],'asc');
$groupedData = [];
foreach ($lists as $k=>$v){
foreach ($lists as $v){
$month = date('Y-m', strtotime($v['date']));
if(!isset($groupedData[$month])){
$groupedData[$month] = [];
... ...
... ... @@ -20,6 +20,7 @@ use App\Models\RankData\ExternalLinks as ExternalLinksModel;
use App\Models\RankData\IndexedPages;
use App\Models\RankData\IndexedPages as IndexedPagesModel;
use App\Models\RankData\RankData;
use App\Models\RankData\RankDataBmseo;
use App\Models\RankData\RankWeek;
use App\Models\RankData\RankWeek as RankWeekModel;
use App\Models\RankData\RecommDomain;
... ... @@ -32,6 +33,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
class RankDataLogic extends BaseLogic
{
... ... @@ -193,6 +195,11 @@ class RankDataLogic extends BaseLogic
$data['current_api_no'] = $api_no;
$data['current_api_source'] = $api_no == 10690 ? 'Yandex' : 'Google';
}
$data['api_no'] = $api_no;
$bmseo_id = RankDataBmseo::where('project_id', $project_id)->value('id');
if($bmseo_id){
$data['bmseo_api_no'] = $bmseo_id . '_bmseo';
}
return $data;
}
... ... @@ -226,7 +233,12 @@ class RankDataLogic extends BaseLogic
$ai_projects = $this->getAiProjects()['data'] ?? [];
$flg_ai = $this->getAiFlag($ai_projects, $domain);
$ai_domain = str_replace('www.', '', $this->getAiProjects($domain)['domain'] ?? '');
$list = RankData::where('project_id', $project_id)->where('api_no', $api_no)->where('lang', $lang)->value('data') ?: [];
if (Str::endsWith($api_no, '_bmseo')) {
$list = RankDataBmseo::where('project_id', $project_id)->where('api_no', $api_no)->where('lang', $lang)->value('data') ?: [];
} else {
$list = RankData::where('project_id', $project_id)->where('api_no', $api_no)->where('lang', $lang)->value('data') ?: [];
}
$list30 = []; //排名前三十的
$list30_0 = []; //排名前三十且近三天没有排名的
$list100 = []; //排名前100的
... ... @@ -360,6 +372,34 @@ class RankDataLogic extends BaseLogic
}
/**
* 获取白帽seo站点项目
* @author zbj
* @date 2023/5/12
*/
public function getBmSeoProjects($domain = '')
{
$key = 'weblist_bm';
$data = Cache::get($key);
if (!$data) {
$api_url = 'http://api.quanqiusou.cn/api/index/weblist_bm';
try {
$data = HttpUtils::get($api_url, ['key'=> '289c1fc81c89d79c04ed4fd72822948e']);
if ($data) {
$data = Arr::s2a($data);
Cache::put($key, $data, 4 * 3600);
}
} catch (\Exception | GuzzleException $e) {
errorLog('白帽seo站点项目获取失败', [], $e);
return false;
}
}
if ($domain) {
return array_search($domain, $data);
}
return $data;
}
/**
* 获取AI站点项目
*
* @author zbj
... ... @@ -622,6 +662,58 @@ class RankDataLogic extends BaseLogic
return $model->is_compliance;
}
public function save_rank_bmseo($project_id, $api_no, $data){
$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; //扩展词在首页的数量
foreach ($data as &$ranks){
ksort($ranks);
$last = Arr::last($ranks);
//第一名
if($last['position'] == 1){
$first_num ++;
}
//排名第一页
if($last['position'] > 0 && $last['position'] <= 10){
$first_page_num ++;
$last['g'] == 1 && $first_page_without_extension_num++;
$last['g'] == 2 && $first_page_extension_num++;
}
//排名前三页
if($last['position'] > 0 && $last['position'] <= 30){
$first_three_pages_num ++;
}
//排名前五页
if($last['position'] > 0 && $last['position'] <= 50){
$first_five_pages_num ++;
}
//排名前十页
if($last['position'] > 0 && $last['position'] <= 100){
$first_ten_pages_num ++;
}
}
$where = [
'project_id' => $project_id,
'api_no' => $api_no,
];
$model = RankDataBmseo::where($where)->first();
if(!$model){
$model = new RankDataBmseo();
}
$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;
$model->first_five_pages_num = $first_five_pages_num;
$model->first_ten_pages_num = $first_ten_pages_num;
$model->data = $data;
$model->updated_date = date('Y-m-d');
$model->save();
return true;
}
/**
* @remark :g_top
* @name :g_top_plan
... ...
... ... @@ -10,6 +10,7 @@ use App\Models\RouteMap\RouteMap;
use App\Services\ProjectServer;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class Keyword extends Base
{
... ... @@ -136,6 +137,18 @@ class Keyword extends Base
foreach ($suffix_array as $suffix) {
array_push($result, trim($keyword . $suffix));
array_push($result, trim($prefix . $keyword . $suffix));
// 复数形式, 需要将单数的词也拼接上
if (Str::contains($suffix, ['Products', 'Exporters', 'Suppliers', 'Manufacturers'])) {
$suffix = trim($suffix, 's');
array_push($result, trim($keyword . $suffix));
array_push($result, trim($prefix . $keyword . $suffix));
}
if (Str::contains($suffix, [ 'Companies', 'Factories'])) {
$suffix = trim($suffix, 'ies');
array_push($result, trim($keyword . $suffix . 'y'));
array_push($result, trim($prefix . $keyword . $suffix . 'y'));
}
}
} catch (\Exception $e) {
continue;
... ...
<?php
namespace App\Models\RankData;
use App\Helper\Arr;
use App\Models\Base;
/**
* Class GoogleRank
* @package App\Models
* @author zbj
* @date 2023/5/6
*/
class RankDataBmseo extends Base
{
//设置关联表名
protected $table = 'gl_rank_data_bmseo';
public static function gMap(){
return [
1 => '主关键词',
2 => '拓展关键词',
3 => '小语种关键词',
];
}
public function setDataAttribute($value)
{
$this->attributes['data'] = Arr::a2s($value);
}
public function getDataAttribute($value)
{
return Arr::s2a($value);
}
}
... ...
... ... @@ -39,7 +39,7 @@ class DingService
'content' => $body['keyword'] . PHP_EOL . $body['msg']
],
'at' => [
'atMobiles' => [],
'atMobiles' => $body['atMobiles'],
'atUserIds' => [],
'isAtAll' => $body['isAtAll'],
]
... ...