Merge remote-tracking branch 'origin/master' into akun
正在显示
18 个修改的文件
包含
312 行增加
和
62 行删除
| @@ -83,7 +83,7 @@ class RemainDay extends Command | @@ -83,7 +83,7 @@ class RemainDay extends Command | ||
| 83 | * @time :2025/4/2 10:48 | 83 | * @time :2025/4/2 10:48 |
| 84 | */ | 84 | */ |
| 85 | public function saveRemainDay(){ | 85 | public function saveRemainDay(){ |
| 86 | - $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']); | 86 | + $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']); |
| 87 | foreach ($list as $item){ | 87 | foreach ($list as $item){ |
| 88 | $deploy_build = $this->deployBuild->read(['project_id'=>$item['id']],['service_duration','seo_service_duration','plan','seo_plan']); | 88 | $deploy_build = $this->deployBuild->read(['project_id'=>$item['id']],['service_duration','seo_service_duration','plan','seo_plan']); |
| 89 | echo 'start->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL; | 89 | echo 'start->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL; |
| @@ -97,11 +97,33 @@ class RemainDay extends Command | @@ -97,11 +97,33 @@ class RemainDay extends Command | ||
| 97 | $this->project->edit(['pause_days'=>$pause_days],['id'=>$item['id']]); | 97 | $this->project->edit(['pause_days'=>$pause_days],['id'=>$item['id']]); |
| 98 | continue; | 98 | continue; |
| 99 | } | 99 | } |
| 100 | - //白帽版本的系统 | ||
| 101 | - if($deploy_build['seo_plan'] == 1){ | 100 | + //白帽版本单独计算 |
| 101 | + $this->seoRemainDay($deploy_build,$item); | ||
| 102 | + //默认版本统计 | ||
| 103 | + if($deploy_build['service_duration'] == 0){ | ||
| 104 | + continue; | ||
| 105 | + } | ||
| 106 | + $this->remainDay($item,$deploy_build); | ||
| 107 | + echo 'end->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL; | ||
| 108 | + } | ||
| 109 | + return true; | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + /** | ||
| 113 | + * @remark :白帽版本单独计算 | ||
| 114 | + * @name :seoRemainDay | ||
| 115 | + * @author :lyh | ||
| 116 | + * @method :post | ||
| 117 | + * @time :2025/4/25 14:24 | ||
| 118 | + */ | ||
| 119 | + public function seoRemainDay($deploy_build,$item){ | ||
| 120 | + //白帽版本的系统 | ||
| 121 | + if($deploy_build['seo_plan'] == 1){ | ||
| 122 | + if($deploy_build['seo_service_duration'] != 0){ | ||
| 102 | if($item['uptime']){ | 123 | if($item['uptime']){ |
| 103 | $diff = time() - strtotime($item['uptime']); | 124 | $diff = time() - strtotime($item['uptime']); |
| 104 | - $seo_remain_day = $deploy_build['seo_service_duration'] - floor($diff / (60 * 60 * 24)); | 125 | + $compliance_day = floor($diff / (60 * 60 * 24)); |
| 126 | + $seo_remain_day = $deploy_build['seo_service_duration'] - $compliance_day; | ||
| 105 | }else{ | 127 | }else{ |
| 106 | $seo_remain_day = $deploy_build['seo_service_duration']; | 128 | $seo_remain_day = $deploy_build['seo_service_duration']; |
| 107 | } | 129 | } |
| @@ -109,46 +131,55 @@ class RemainDay extends Command | @@ -109,46 +131,55 @@ class RemainDay extends Command | ||
| 109 | $seo_remain_day = 0; | 131 | $seo_remain_day = 0; |
| 110 | } | 132 | } |
| 111 | if($deploy_build['plan'] == 0 && $seo_remain_day == 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常未0,放入未续费中 | 133 | if($deploy_build['plan'] == 0 && $seo_remain_day == 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常未0,放入未续费中 |
| 112 | - $this->project->edit(['seo_remain_day'=>$seo_remain_day,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]); | ||
| 113 | - continue; | 134 | + $this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]); |
| 135 | + }else{ | ||
| 136 | + //同时包括白帽版本+默认版本的项目 | ||
| 137 | + $this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]); | ||
| 114 | } | 138 | } |
| 115 | - //同时包括白帽版本+默认版本的项目 | ||
| 116 | - $this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]); | ||
| 117 | } | 139 | } |
| 118 | - //默认版本计算剩余服务时常 | ||
| 119 | - if($item['type'] == Project::TYPE_TWO || $item['type'] == Project::TYPE_FOUR){ | ||
| 120 | - if(in_array($item['id'],$this->projectId)){//已开始优化的时间结算 | ||
| 121 | - $optimizeModel = new DeployOptimize(); | ||
| 122 | - $opInfo = $optimizeModel->read(['project_id'=>$item['id']],['start_date']); | ||
| 123 | - if($opInfo === false){ | ||
| 124 | - continue; | ||
| 125 | - } | ||
| 126 | - $diff = time() - strtotime($opInfo['start_date'] ?? $item['uptime']); | ||
| 127 | - $compliance_day = floor($diff / (60 * 60 * 24)); | ||
| 128 | - $remain_day = $deploy_build['service_duration'] - $compliance_day; | 140 | + } |
| 141 | + return true; | ||
| 142 | + } | ||
| 129 | 143 | ||
| 130 | - }else{ | ||
| 131 | - $compliance_day = ($item['finish_remain_day'] ?? 0); | ||
| 132 | - $remain_day = $deploy_build['service_duration'] - $compliance_day; | 144 | + /** |
| 145 | + * @remark :普通版本剩余服务时常 | ||
| 146 | + * @name :RemainDay | ||
| 147 | + * @author :lyh | ||
| 148 | + * @method :post | ||
| 149 | + * @time :2025/4/25 14:31 | ||
| 150 | + */ | ||
| 151 | + public function remainDay($item,$deploy_build){ | ||
| 152 | + //默认版本计算剩余服务时常 | ||
| 153 | + if($item['type'] == Project::TYPE_TWO || $item['type'] == Project::TYPE_FOUR){ | ||
| 154 | + if(in_array($item['id'],$this->projectId)){//已开始优化的时间结算 | ||
| 155 | + $optimizeModel = new DeployOptimize(); | ||
| 156 | + $opInfo = $optimizeModel->read(['project_id'=>$item['id']],['start_date']); | ||
| 157 | + if($opInfo === false){ | ||
| 158 | + return true; | ||
| 133 | } | 159 | } |
| 160 | + $diff = time() - strtotime($opInfo['start_date'] ?? $item['uptime']); | ||
| 161 | + $compliance_day = floor($diff / (60 * 60 * 24)); | ||
| 162 | + $remain_day = $deploy_build['service_duration'] - $compliance_day; | ||
| 134 | }else{ | 163 | }else{ |
| 135 | - //普通建站项目 | ||
| 136 | - if($item['uptime']){ | ||
| 137 | - $diff = time() - strtotime($item['uptime']); | ||
| 138 | - $compliance_day = floor($diff / (60 * 60 * 24)); | ||
| 139 | - $remain_day = $deploy_build['service_duration'] - $compliance_day; | ||
| 140 | - }else{ | ||
| 141 | - $remain_day = $deploy_build['service_duration']; | ||
| 142 | - } | 164 | + $compliance_day = ($item['finish_remain_day'] ?? 0); |
| 165 | + $remain_day = $deploy_build['service_duration'] - $compliance_day; | ||
| 143 | } | 166 | } |
| 144 | - $extend_type = 0; | ||
| 145 | - if($remain_day < 0 && $deploy_build['service_duration'] != 0){ | ||
| 146 | - $remain_day = 0; | ||
| 147 | - $extend_type = Project::TYPE_FIVE; | 167 | + }else{ |
| 168 | + //普通建站项目 | ||
| 169 | + if($item['uptime']){ | ||
| 170 | + $diff = time() - strtotime($item['uptime']); | ||
| 171 | + $compliance_day = floor($diff / (60 * 60 * 24)); | ||
| 172 | + $remain_day = $deploy_build['service_duration'] - $compliance_day; | ||
| 173 | + }else{ | ||
| 174 | + $remain_day = $deploy_build['service_duration']; | ||
| 148 | } | 175 | } |
| 149 | - $this->project->edit(['remain_day'=>$remain_day,'extend_type'=>$extend_type,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]); | ||
| 150 | - echo 'end->项目id:' . $item['id'] . '执行时间:'. date('Y-m-d H:i:s') . PHP_EOL; | ||
| 151 | } | 176 | } |
| 177 | + $extend_type = 0; | ||
| 178 | + if($remain_day < 0 && $deploy_build['service_duration'] != 0){ | ||
| 179 | + $remain_day = 0; | ||
| 180 | + $extend_type = Project::TYPE_FIVE; | ||
| 181 | + } | ||
| 182 | + $this->project->edit(['remain_day'=>$remain_day,'extend_type'=>$extend_type,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]); | ||
| 152 | return true; | 183 | return true; |
| 153 | } | 184 | } |
| 154 | } | 185 | } |
| @@ -771,7 +771,7 @@ class RelayInquiry extends Command | @@ -771,7 +771,7 @@ class RelayInquiry extends Command | ||
| 771 | */ | 771 | */ |
| 772 | public function getInquiry($num = 10) | 772 | public function getInquiry($num = 10) |
| 773 | { | 773 | { |
| 774 | - $result = ReInquiryForm::where(['status' => ReInquiryForm::STATUS_INIT])->orderBy('id', 'asc')->limit($num)->get(); | 774 | + $result = ReInquiryForm::where(['status' => ReInquiryForm::STATUS_INIT])->where('created_at', '>', '2025-04-27 00:00:00')->orderBy('id', 'asc')->limit($num)->get(); |
| 775 | return $result; | 775 | return $result; |
| 776 | } | 776 | } |
| 777 | 777 |
| @@ -9,8 +9,10 @@ | @@ -9,8 +9,10 @@ | ||
| 9 | 9 | ||
| 10 | namespace App\Console\Commands\LyhTest; | 10 | namespace App\Console\Commands\LyhTest; |
| 11 | 11 | ||
| 12 | +use App\Console\Commands\Domain\DomainInfo; | ||
| 12 | use App\Models\Com\NoticeLog; | 13 | use App\Models\Com\NoticeLog; |
| 13 | use App\Models\Project\AiBlogTask; | 14 | use App\Models\Project\AiBlogTask; |
| 15 | +use App\Models\Project\DeployBuild; | ||
| 14 | use App\Models\Project\Project; | 16 | use App\Models\Project\Project; |
| 15 | use Illuminate\Console\Command; | 17 | use Illuminate\Console\Command; |
| 16 | use Illuminate\Support\Facades\Artisan; | 18 | use Illuminate\Support\Facades\Artisan; |
| @@ -33,9 +35,14 @@ class lyhDemo extends Command | @@ -33,9 +35,14 @@ class lyhDemo extends Command | ||
| 33 | protected $description = '更新路由'; | 35 | protected $description = '更新路由'; |
| 34 | 36 | ||
| 35 | public function handle(){ | 37 | public function handle(){ |
| 36 | - $projectModel = new Project(); | ||
| 37 | - $noticeModel = new NoticeLog(); | ||
| 38 | - $lists = $projectModel->list(['from_order_id'=>null]); | 38 | + $projectBuildModel = new DeployBuild(); |
| 39 | + $projectList = $projectBuildModel->list(['plan'=>0,'seo_plan'=>1],'project_id'); | ||
| 40 | + foreach ($projectList as $val){ | ||
| 41 | + if(!empty($val['service_duration']) && empty($val['seo_service_duration'])){ | ||
| 42 | + $projectBuildModel->edit(['seo_service_duration'=>$val['service_duration']],['id'=>$val['id']]); | ||
| 43 | + echo '项目id:'.$val['project_id'].PHP_EOL; | ||
| 44 | + } | ||
| 45 | + } | ||
| 39 | return true; | 46 | return true; |
| 40 | } | 47 | } |
| 41 | } | 48 | } |
| @@ -9,6 +9,7 @@ namespace App\Console\Commands\Monitor; | @@ -9,6 +9,7 @@ namespace App\Console\Commands\Monitor; | ||
| 9 | 9 | ||
| 10 | use App\Models\Domain\DomainInfo; | 10 | use App\Models\Domain\DomainInfo; |
| 11 | use App\Models\Product\Keyword; | 11 | use App\Models\Product\Keyword; |
| 12 | +use App\Models\Project\DeployOptimize; | ||
| 12 | use App\Models\Project\OnlineCheck; | 13 | use App\Models\Project\OnlineCheck; |
| 13 | use App\Models\Project\Project; | 14 | use App\Models\Project\Project; |
| 14 | use App\Repositories\ToolRepository; | 15 | use App\Repositories\ToolRepository; |
| @@ -259,9 +260,29 @@ class Supervisory extends Command | @@ -259,9 +260,29 @@ class Supervisory extends Command | ||
| 259 | file_put_contents(storage_path('data/robots/' . date('Ymd'). 'log.json'), json_encode($tmp, 256)); | 260 | file_put_contents(storage_path('data/robots/' . date('Ymd'). 'log.json'), json_encode($tmp, 256)); |
| 260 | unset($tmp); | 261 | unset($tmp); |
| 261 | 262 | ||
| 263 | + // 所有路由 | ||
| 262 | $domain = array_column($spot_projects, 'domain'); | 264 | $domain = array_column($spot_projects, 'domain'); |
| 263 | $domain = array_unique(array_filter($domain)); | 265 | $domain = array_unique(array_filter($domain)); |
| 264 | 266 | ||
| 267 | + // 通知对应优化师 | ||
| 268 | + $tmp = []; | ||
| 269 | + foreach ($spot_projects as $item) { | ||
| 270 | + $tmp[$item['domain']] = $item['project_id']; | ||
| 271 | + } | ||
| 272 | + $project_ids = array_column($spot_projects, 'project_id'); | ||
| 273 | + $optimist = DeployOptimize::leftJoin('gl_manage', 'gl_project_deploy_optimize.optimist_mid', '=', 'gl_manage.id') | ||
| 274 | + ->whereIn('project_id', $project_ids) | ||
| 275 | + ->pluck('mobile', 'project_id') | ||
| 276 | + ->toArray(); | ||
| 277 | + | ||
| 278 | + $notice = []; | ||
| 279 | + $all_url = array_merge($error_url, $error, $page_404, $tdk_error); | ||
| 280 | + foreach ($all_url as $url) { | ||
| 281 | + if (FALSE == empty($optimist[$tmp[parse_url($url, PHP_URL_HOST)]])) | ||
| 282 | + $notice[] = '86' . $optimist[$tmp[parse_url($url, PHP_URL_HOST)]]; | ||
| 283 | + } | ||
| 284 | + $notice = array_filter(array_unique($notice)); | ||
| 285 | + | ||
| 265 | $message[] = '开启robots项目数:' . count($robots_ids); | 286 | $message[] = '开启robots项目数:' . count($robots_ids); |
| 266 | $message[] = '关闭robots项目:' . ($close_ids ? implode(',', $close_ids) : '无'); | 287 | $message[] = '关闭robots项目:' . ($close_ids ? implode(',', $close_ids) : '无'); |
| 267 | $message[] = '抽查项目数量: ' . count($domain); | 288 | $message[] = '抽查项目数量: ' . count($domain); |
| @@ -282,6 +303,7 @@ class Supervisory extends Command | @@ -282,6 +303,7 @@ class Supervisory extends Command | ||
| 282 | 'keyword' => '项目数据推送', | 303 | 'keyword' => '项目数据推送', |
| 283 | 'msg' => $msg, | 304 | 'msg' => $msg, |
| 284 | 'isAtAll' => false, // 是否@所有人 | 305 | 'isAtAll' => false, // 是否@所有人 |
| 306 | + 'atMobiles' => $notice | ||
| 285 | ]; | 307 | ]; |
| 286 | $dingService->handle($body, $link); | 308 | $dingService->handle($body, $link); |
| 287 | } | 309 | } |
| @@ -2,12 +2,11 @@ | @@ -2,12 +2,11 @@ | ||
| 2 | 2 | ||
| 3 | namespace App\Console\Commands\RankData; | 3 | namespace App\Console\Commands\RankData; |
| 4 | 4 | ||
| 5 | -use App\Helper\QuanqiusouApi; | 5 | + |
| 6 | +use App\Http\Logic\Bside\RankData\RankDataLogic; | ||
| 6 | use App\Models\RankData\RankDataLog as RankDataLogModel; | 7 | use App\Models\RankData\RankDataLog as RankDataLogModel; |
| 7 | -use App\Models\Project\DeployOptimize; | 8 | +use App\Models\Domain\DomainInfo; |
| 8 | use App\Models\Project\Project; | 9 | use App\Models\Project\Project; |
| 9 | -use Illuminate\Support\Facades\Cache; | ||
| 10 | -use Illuminate\Support\Facades\DB; | ||
| 11 | use Illuminate\Support\Facades\Log; | 10 | use Illuminate\Support\Facades\Log; |
| 12 | 11 | ||
| 13 | /** | 12 | /** |
| @@ -49,8 +48,7 @@ class RankData extends BaseCommands | @@ -49,8 +48,7 @@ class RankData extends BaseCommands | ||
| 49 | 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); |
| 50 | } | 49 | } |
| 51 | 50 | ||
| 52 | - $projectModel = new Project(); | ||
| 53 | - $list = $projectModel->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') | 51 | + $list = Project::leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') |
| 54 | ->where('gl_project.extend_type',0) | 52 | ->where('gl_project.extend_type',0) |
| 55 | ->where('gl_project.delete_status',0) | 53 | ->where('gl_project.delete_status',0) |
| 56 | ->where('gl_project_deploy_optimize.api_no', '>', 0) | 54 | ->where('gl_project_deploy_optimize.api_no', '>', 0) |
| @@ -79,6 +77,22 @@ class RankData extends BaseCommands | @@ -79,6 +77,22 @@ class RankData extends BaseCommands | ||
| 79 | RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang); | 77 | RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang); |
| 80 | } | 78 | } |
| 81 | } | 79 | } |
| 80 | + | ||
| 81 | + //白帽SEO版 | ||
| 82 | + $list = Project::leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id') | ||
| 83 | + ->where('gl_project.delete_status',0) | ||
| 84 | + ->where('gl_project_deploy_build.seo_plan', 1) | ||
| 85 | + ->whereIn('gl_project.type',[2,3,4]) | ||
| 86 | + ->orderBy('gl_project.id', 'asc') | ||
| 87 | + ->pluck('gl_project.id')->toArray(); | ||
| 88 | + foreach ($list as $project_id){ | ||
| 89 | + $domain = DomainInfo::getCacheInfoByProjectId($project_id); | ||
| 90 | + $id = RankDataLogic::instance()->getBmSeoProjects($domain['domain']); | ||
| 91 | + if(!$id){ | ||
| 92 | + continue; | ||
| 93 | + } | ||
| 94 | + RankDataLogModel::addTask($project_id, $id . '_bmseo'); | ||
| 95 | + } | ||
| 82 | } catch (\Exception|\Throwable $e) { | 96 | } catch (\Exception|\Throwable $e) { |
| 83 | Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage()); | 97 | Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage()); |
| 84 | } | 98 | } |
| @@ -13,6 +13,7 @@ use App\Models\Project\Project; | @@ -13,6 +13,7 @@ use App\Models\Project\Project; | ||
| 13 | use Illuminate\Support\Facades\Cache; | 13 | use Illuminate\Support\Facades\Cache; |
| 14 | use Illuminate\Support\Facades\Log; | 14 | use Illuminate\Support\Facades\Log; |
| 15 | use Illuminate\Support\Facades\Redis; | 15 | use Illuminate\Support\Facades\Redis; |
| 16 | +use Illuminate\Support\Str; | ||
| 16 | 17 | ||
| 17 | /** | 18 | /** |
| 18 | * Class GoogleRank | 19 | * Class GoogleRank |
| @@ -76,8 +77,13 @@ class RankDataLog extends BaseCommands | @@ -76,8 +77,13 @@ class RankDataLog extends BaseCommands | ||
| 76 | $log->data = Arr::s2a($res); | 77 | $log->data = Arr::s2a($res); |
| 77 | //保存数据 | 78 | //保存数据 |
| 78 | $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no); | 79 | $this->output('保存排名数据:ID'.$log->project_id . ',APINO' . $log->api_no); |
| 79 | - $is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang); | ||
| 80 | - $log->is_compliance = $is_compliance; | 80 | + if(Str::endsWith($log->api_no, '_bmseo')){ |
| 81 | + //白帽版 | ||
| 82 | + (new RankDataLogic())->save_rank_bmseo($log->project_id, $log->api_no, $res); | ||
| 83 | + }else{ | ||
| 84 | + $is_compliance = (new RankDataLogic())->save_rank($log->project_id, $log->api_no, $res, null, $log->lang); | ||
| 85 | + $log->is_compliance = $is_compliance; | ||
| 86 | + } | ||
| 81 | $log->status = 1; | 87 | $log->status = 1; |
| 82 | $log->save(); | 88 | $log->save(); |
| 83 | 89 |
| @@ -143,7 +143,8 @@ class FormGlobalsoApi | @@ -143,7 +143,8 @@ class FormGlobalsoApi | ||
| 143 | */ | 143 | */ |
| 144 | public function submitInquiry($ip, $referer, $submit_at, $data, $traffic = 0) | 144 | public function submitInquiry($ip, $referer, $submit_at, $data, $traffic = 0) |
| 145 | { | 145 | { |
| 146 | - $api_url = $this->url . '/api/external-interface/add/fa043f9cbec6b38f'; | 146 | +// $api_url = $this->url; |
| 147 | + $api_url = 'https://form.globalso.com/api/external-interface/add/fa043f9cbec6b38f'; | ||
| 147 | 148 | ||
| 148 | $data['ip'] = $ip; | 149 | $data['ip'] = $ip; |
| 149 | $data['token'] = md5($referer . $data['name'] . $ip . date("Y-m-d")); | 150 | $data['token'] = md5($referer . $data['name'] . $ip . date("Y-m-d")); |
| @@ -839,7 +839,7 @@ function getCustomRouteMap($module_route,$route = '') | @@ -839,7 +839,7 @@ function getCustomRouteMap($module_route,$route = '') | ||
| 839 | if($module_route == $route){ | 839 | if($module_route == $route){ |
| 840 | $resultRoute = $route; | 840 | $resultRoute = $route; |
| 841 | }else{ | 841 | }else{ |
| 842 | - $resultRoute = $module_route.'_catelog/'.$route; | 842 | + $resultRoute = $module_route.'_catalog/'.$route; |
| 843 | } | 843 | } |
| 844 | return $resultRoute; | 844 | return $resultRoute; |
| 845 | } | 845 | } |
| @@ -147,8 +147,8 @@ class OptimizeController extends BaseController | @@ -147,8 +147,8 @@ class OptimizeController extends BaseController | ||
| 147 | $data = APublicModel::getNumByProjectId($item['id']); | 147 | $data = APublicModel::getNumByProjectId($item['id']); |
| 148 | } | 148 | } |
| 149 | $manageModel = new ManageHr(); | 149 | $manageModel = new ManageHr(); |
| 150 | - $plan = Project::planMap(); | ||
| 151 | - $seo_plan = Project::seoMap(); | 150 | +// $plan = Project::planMap(); |
| 151 | +// $seo_plan = Project::seoMap(); | ||
| 152 | $item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0); | 152 | $item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0); |
| 153 | $item['build_leader'] = $manageModel->getName($item['leader_mid']); | 153 | $item['build_leader'] = $manageModel->getName($item['leader_mid']); |
| 154 | $item['build_manager'] = $manageModel->getName($item['manager_mid']); | 154 | $item['build_manager'] = $manageModel->getName($item['manager_mid']); |
| @@ -159,8 +159,6 @@ class OptimizeController extends BaseController | @@ -159,8 +159,6 @@ class OptimizeController extends BaseController | ||
| 159 | $item['optimize_assist'] = $manageModel->getName($item['optimize_assist_mid']); | 159 | $item['optimize_assist'] = $manageModel->getName($item['optimize_assist_mid']); |
| 160 | $item['optimize_tech'] = $manageModel->getName($item['optimize_tech_mid']); | 160 | $item['optimize_tech'] = $manageModel->getName($item['optimize_tech_mid']); |
| 161 | $item['quality_mid_name'] = $manageModel->getName($item['quality_mid']); | 161 | $item['quality_mid_name'] = $manageModel->getName($item['quality_mid']); |
| 162 | - $item['plan'] = $plan[$item['plan']] ?? 0; | ||
| 163 | - $item['seo_plan'] = $seo_plan[$item['plan']] ?? 0; | ||
| 164 | $item['created_at'] = date('Y年m月d日', strtotime($item['cooperate_date'])); | 162 | $item['created_at'] = date('Y年m月d日', strtotime($item['cooperate_date'])); |
| 165 | $item['autologin_code'] = getAutoLoginCode($item['id']); | 163 | $item['autologin_code'] = getAutoLoginCode($item['id']); |
| 166 | $item['domain'] = 'https://'.$item['domain'].'/'; | 164 | $item['domain'] = 'https://'.$item['domain'].'/'; |
| @@ -194,6 +192,7 @@ class OptimizeController extends BaseController | @@ -194,6 +192,7 @@ class OptimizeController extends BaseController | ||
| 194 | 'gl_project.finish_remain_day AS finish_remain_day', | 192 | 'gl_project.finish_remain_day AS finish_remain_day', |
| 195 | 'gl_project.is_remain_today AS is_remain_today', | 193 | 'gl_project.is_remain_today AS is_remain_today', |
| 196 | 'gl_project.remain_day AS remain_day', | 194 | 'gl_project.remain_day AS remain_day', |
| 195 | + 'gl_project.seo_remain_day AS seo_remain_day', | ||
| 197 | 'gl_project.robots AS robots', | 196 | 'gl_project.robots AS robots', |
| 198 | 'gl_project.is_minor_languages AS is_minor_languages', | 197 | 'gl_project.is_minor_languages AS is_minor_languages', |
| 199 | 'gl_project.is_translate AS is_translate', | 198 | 'gl_project.is_translate AS is_translate', |
| @@ -69,6 +69,7 @@ class RenewProjectController extends BaseController | @@ -69,6 +69,7 @@ class RenewProjectController extends BaseController | ||
| 69 | } | 69 | } |
| 70 | $map['extend_type'] = 0; | 70 | $map['extend_type'] = 0; |
| 71 | $map['remain_day'] = ['<=',15]; | 71 | $map['remain_day'] = ['<=',15]; |
| 72 | + $map['seo_remain_day'] = ['<=',15]; | ||
| 72 | return $map; | 73 | return $map; |
| 73 | } | 74 | } |
| 74 | 75 | ||
| @@ -142,6 +143,7 @@ class RenewProjectController extends BaseController | @@ -142,6 +143,7 @@ class RenewProjectController extends BaseController | ||
| 142 | if($item['type'] != Project::TYPE_ZERO){ | 143 | if($item['type'] != Project::TYPE_ZERO){ |
| 143 | $data = APublicModel::getNumByProjectId($item['id']); | 144 | $data = APublicModel::getNumByProjectId($item['id']); |
| 144 | } | 145 | } |
| 146 | + $plan = Project::planMap(); | ||
| 145 | $item = [ | 147 | $item = [ |
| 146 | 'id' => $item['id'], | 148 | 'id' => $item['id'], |
| 147 | 'title' => $item['title'], | 149 | 'title' => $item['title'], |
| @@ -159,7 +161,7 @@ class RenewProjectController extends BaseController | @@ -159,7 +161,7 @@ class RenewProjectController extends BaseController | ||
| 159 | 'optimize_tech' => $manageModel->getName($item['deploy_optimize']['tech_mid']), //售后技术 | 161 | 'optimize_tech' => $manageModel->getName($item['deploy_optimize']['tech_mid']), //售后技术 |
| 160 | 'type' => $item['type'], | 162 | 'type' => $item['type'], |
| 161 | 'test_domain' => $item['deploy_build']['test_domain'] ?? 0, | 163 | 'test_domain' => $item['deploy_build']['test_domain'] ?? 0, |
| 162 | - 'plan' =>Project::planMap()[$item['deploy_build']['plan']], | 164 | + 'plan' =>$plan[$item['deploy_build']['plan']] ?? '白帽seo版本', |
| 163 | 'plan_id' =>$item['deploy_build']['plan'], | 165 | 'plan_id' =>$item['deploy_build']['plan'], |
| 164 | 'domain' => !empty($item['deploy_optimize']['domain']) ? $domainModel->getDomain($item['deploy_optimize']['domain']) : '', | 166 | 'domain' => !empty($item['deploy_optimize']['domain']) ? $domainModel->getDomain($item['deploy_optimize']['domain']) : '', |
| 165 | 'created_at' => date('Y年m月d日', strtotime($item['created_at'])), | 167 | 'created_at' => date('Y年m月d日', strtotime($item['created_at'])), |
| @@ -13,6 +13,8 @@ use App\Enums\Common\Code; | @@ -13,6 +13,8 @@ use App\Enums\Common\Code; | ||
| 13 | use App\Http\Controllers\Bside\BaseController; | 13 | use App\Http\Controllers\Bside\BaseController; |
| 14 | use App\Http\Logic\Bside\Setting\TranslateLogic; | 14 | use App\Http\Logic\Bside\Setting\TranslateLogic; |
| 15 | use App\Models\Blog\Blog; | 15 | use App\Models\Blog\Blog; |
| 16 | +use App\Models\CustomModule\CustomModule; | ||
| 17 | +use App\Models\CustomModule\CustomModuleCategory; | ||
| 16 | use App\Models\CustomModule\CustomModuleContent; | 18 | use App\Models\CustomModule\CustomModuleContent; |
| 17 | use App\Models\News\News; | 19 | use App\Models\News\News; |
| 18 | use App\Models\Product\Product; | 20 | use App\Models\Product\Product; |
| @@ -279,7 +281,19 @@ class TranslateController extends BaseController | @@ -279,7 +281,19 @@ class TranslateController extends BaseController | ||
| 279 | case RouteMap::SOURCE_MODULE_CATE: | 281 | case RouteMap::SOURCE_MODULE_CATE: |
| 280 | $customModel = new CustomModuleContent(); | 282 | $customModel = new CustomModuleContent(); |
| 281 | $count = $customModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%']])->count(); | 283 | $count = $customModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%']])->count(); |
| 282 | - $this->pageSixList($data,$count,$v,3,10); | 284 | + //获取module_id |
| 285 | + $customCateModel = new CustomModuleCategory(); | ||
| 286 | + $cateInfo = $customCateModel->read(['route'=>$v['route']],['module_id']); | ||
| 287 | + if($cateInfo !== false){ | ||
| 288 | + $model = new CustomModule(); | ||
| 289 | + $moduleInfo = $model->read(['id'=>$cateInfo['module_id']],['route']); | ||
| 290 | + if($moduleInfo !== false){ | ||
| 291 | + if($v['route'] != $moduleInfo['route']){ | ||
| 292 | + $v['route'] = $moduleInfo['route'].'/'.$v['route']; | ||
| 293 | + } | ||
| 294 | + } | ||
| 295 | + } | ||
| 296 | + $this->pageList($data,$count,$v,3,10); | ||
| 283 | break; | 297 | break; |
| 284 | default: | 298 | default: |
| 285 | $data[] = $v['route']; | 299 | $data[] = $v['route']; |
| @@ -393,7 +407,7 @@ class TranslateController extends BaseController | @@ -393,7 +407,7 @@ class TranslateController extends BaseController | ||
| 393 | } | 407 | } |
| 394 | 408 | ||
| 395 | /** | 409 | /** |
| 396 | - * @remark : | 410 | + * @remark :5.0列表页路由处理 |
| 397 | * @name :pageList | 411 | * @name :pageList |
| 398 | * @author :lyh | 412 | * @author :lyh |
| 399 | * @method :post | 413 | * @method :post |
| @@ -412,6 +426,15 @@ class TranslateController extends BaseController | @@ -412,6 +426,15 @@ class TranslateController extends BaseController | ||
| 412 | } | 426 | } |
| 413 | $page = ceil($count / $pageNum);//向上取整 | 427 | $page = ceil($count / $pageNum);//向上取整 |
| 414 | } | 428 | } |
| 429 | + if($v['source'] == RouteMap::SOURCE_NEWS_CATE){ | ||
| 430 | + if($v['route'] != 'news'){ | ||
| 431 | + $v['route'] = RouteMap::PATH_NEWS_CATE.'/'.$v['route']; | ||
| 432 | + } | ||
| 433 | + }elseif($v['source'] == RouteMap::SOURCE_BLOG_CATE){ | ||
| 434 | + if($v['route'] != 'blog'){ | ||
| 435 | + $v['route'] = RouteMap::PATH_BLOG_CATE.'/'.$v['route']; | ||
| 436 | + } | ||
| 437 | + } | ||
| 415 | for ($i = 1;$i <= $page;$i++){ | 438 | for ($i = 1;$i <= $page;$i++){ |
| 416 | if($i == 1){ | 439 | if($i == 1){ |
| 417 | $data[] = $v['route']; | 440 | $data[] = $v['route']; |
| @@ -423,7 +446,7 @@ class TranslateController extends BaseController | @@ -423,7 +446,7 @@ class TranslateController extends BaseController | ||
| 423 | } | 446 | } |
| 424 | 447 | ||
| 425 | /** | 448 | /** |
| 426 | - * @remark : | 449 | + * @remark :6.0列表路由处理 |
| 427 | * @name :pageList | 450 | * @name :pageList |
| 428 | * @author :lyh | 451 | * @author :lyh |
| 429 | * @method :post | 452 | * @method :post |
| @@ -63,10 +63,11 @@ class AiBlogLogic extends BaseLogic | @@ -63,10 +63,11 @@ class AiBlogLogic extends BaseLogic | ||
| 63 | $aiBlogService->mch_id = $aiSettingInfo['mch_id']; | 63 | $aiBlogService->mch_id = $aiSettingInfo['mch_id']; |
| 64 | $aiBlogService->key = $aiSettingInfo['key']; | 64 | $aiBlogService->key = $aiSettingInfo['key']; |
| 65 | $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']]); | 65 | $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']]); |
| 66 | + $aiBlogTaskModel = new AiBlogTask(); | ||
| 67 | + $aiBlogTaskModel->edit(['status'=>AiBlogTask::STATUS_RUNNING],['task_id'=>$this->param['task_id']]);//重新走拉取流程 | ||
| 66 | }catch (\Exception $e){ | 68 | }catch (\Exception $e){ |
| 67 | $this->fail('保存失败,请联系管理员'); | 69 | $this->fail('保存失败,请联系管理员'); |
| 68 | } | 70 | } |
| 69 | - $this->sendHttpC([$this->param['route'],'top-blog']); | ||
| 70 | return $this->success(); | 71 | return $this->success(); |
| 71 | } | 72 | } |
| 72 | 73 |
| @@ -10,6 +10,7 @@ use App\Models\Com\UpdateNotify; | @@ -10,6 +10,7 @@ use App\Models\Com\UpdateNotify; | ||
| 10 | use App\Models\Devops\ServerConfig; | 10 | use App\Models\Devops\ServerConfig; |
| 11 | use App\Models\Devops\ServersIp; | 11 | use App\Models\Devops\ServersIp; |
| 12 | use App\Models\Project\Project; | 12 | use App\Models\Project\Project; |
| 13 | +use Illuminate\Support\Facades\Artisan; | ||
| 13 | use Illuminate\Support\Facades\Cache; | 14 | use Illuminate\Support\Facades\Cache; |
| 14 | use Illuminate\Support\Str; | 15 | use Illuminate\Support\Str; |
| 15 | 16 |
| @@ -59,7 +59,7 @@ class MonthCountLogic extends BaseLogic | @@ -59,7 +59,7 @@ class MonthCountLogic extends BaseLogic | ||
| 59 | $ensTime = date('Y-m-d',time()); | 59 | $ensTime = date('Y-m-d',time()); |
| 60 | $lists = $count->list(['date'=>['between',[$startTime,$ensTime]],'project_id'=>$this->user['project_id']],'id',['*'],'asc'); | 60 | $lists = $count->list(['date'=>['between',[$startTime,$ensTime]],'project_id'=>$this->user['project_id']],'id',['*'],'asc'); |
| 61 | $groupedData = []; | 61 | $groupedData = []; |
| 62 | - foreach ($lists as $k=>$v){ | 62 | + foreach ($lists as $v){ |
| 63 | $month = date('Y-m', strtotime($v['date'])); | 63 | $month = date('Y-m', strtotime($v['date'])); |
| 64 | if(!isset($groupedData[$month])){ | 64 | if(!isset($groupedData[$month])){ |
| 65 | $groupedData[$month] = []; | 65 | $groupedData[$month] = []; |
| @@ -20,6 +20,7 @@ use App\Models\RankData\ExternalLinks as ExternalLinksModel; | @@ -20,6 +20,7 @@ use App\Models\RankData\ExternalLinks as ExternalLinksModel; | ||
| 20 | use App\Models\RankData\IndexedPages; | 20 | use App\Models\RankData\IndexedPages; |
| 21 | use App\Models\RankData\IndexedPages as IndexedPagesModel; | 21 | use App\Models\RankData\IndexedPages as IndexedPagesModel; |
| 22 | use App\Models\RankData\RankData; | 22 | use App\Models\RankData\RankData; |
| 23 | +use App\Models\RankData\RankDataBmseo; | ||
| 23 | use App\Models\RankData\RankWeek; | 24 | use App\Models\RankData\RankWeek; |
| 24 | use App\Models\RankData\RankWeek as RankWeekModel; | 25 | use App\Models\RankData\RankWeek as RankWeekModel; |
| 25 | use App\Models\RankData\RecommDomain; | 26 | use App\Models\RankData\RecommDomain; |
| @@ -32,6 +33,7 @@ use Illuminate\Database\Eloquent\Model; | @@ -32,6 +33,7 @@ use Illuminate\Database\Eloquent\Model; | ||
| 32 | use Illuminate\Support\Collection; | 33 | use Illuminate\Support\Collection; |
| 33 | use Illuminate\Support\Facades\Cache; | 34 | use Illuminate\Support\Facades\Cache; |
| 34 | use Illuminate\Support\Facades\Log; | 35 | use Illuminate\Support\Facades\Log; |
| 36 | +use Illuminate\Support\Str; | ||
| 35 | 37 | ||
| 36 | class RankDataLogic extends BaseLogic | 38 | class RankDataLogic extends BaseLogic |
| 37 | { | 39 | { |
| @@ -193,6 +195,11 @@ class RankDataLogic extends BaseLogic | @@ -193,6 +195,11 @@ class RankDataLogic extends BaseLogic | ||
| 193 | $data['current_api_no'] = $api_no; | 195 | $data['current_api_no'] = $api_no; |
| 194 | $data['current_api_source'] = $api_no == 10690 ? 'Yandex' : 'Google'; | 196 | $data['current_api_source'] = $api_no == 10690 ? 'Yandex' : 'Google'; |
| 195 | } | 197 | } |
| 198 | + $data['api_no'] = $api_no; | ||
| 199 | + $bmseo_id = RankDataBmseo::where('project_id', $project_id)->value('id'); | ||
| 200 | + if($bmseo_id){ | ||
| 201 | + $data['bmseo_api_no'] = $bmseo_id . '_bmseo'; | ||
| 202 | + } | ||
| 196 | 203 | ||
| 197 | return $data; | 204 | return $data; |
| 198 | } | 205 | } |
| @@ -226,7 +233,12 @@ class RankDataLogic extends BaseLogic | @@ -226,7 +233,12 @@ class RankDataLogic extends BaseLogic | ||
| 226 | $ai_projects = $this->getAiProjects()['data'] ?? []; | 233 | $ai_projects = $this->getAiProjects()['data'] ?? []; |
| 227 | $flg_ai = $this->getAiFlag($ai_projects, $domain); | 234 | $flg_ai = $this->getAiFlag($ai_projects, $domain); |
| 228 | $ai_domain = str_replace('www.', '', $this->getAiProjects($domain)['domain'] ?? ''); | 235 | $ai_domain = str_replace('www.', '', $this->getAiProjects($domain)['domain'] ?? ''); |
| 229 | - $list = RankData::where('project_id', $project_id)->where('api_no', $api_no)->where('lang', $lang)->value('data') ?: []; | 236 | + if (Str::endsWith($api_no, '_bmseo')) { |
| 237 | + $list = RankDataBmseo::where('project_id', $project_id)->where('api_no', $api_no)->where('lang', $lang)->value('data') ?: []; | ||
| 238 | + } else { | ||
| 239 | + $list = RankData::where('project_id', $project_id)->where('api_no', $api_no)->where('lang', $lang)->value('data') ?: []; | ||
| 240 | + } | ||
| 241 | + | ||
| 230 | $list30 = []; //排名前三十的 | 242 | $list30 = []; //排名前三十的 |
| 231 | $list30_0 = []; //排名前三十且近三天没有排名的 | 243 | $list30_0 = []; //排名前三十且近三天没有排名的 |
| 232 | $list100 = []; //排名前100的 | 244 | $list100 = []; //排名前100的 |
| @@ -360,6 +372,34 @@ class RankDataLogic extends BaseLogic | @@ -360,6 +372,34 @@ class RankDataLogic extends BaseLogic | ||
| 360 | } | 372 | } |
| 361 | 373 | ||
| 362 | /** | 374 | /** |
| 375 | + * 获取白帽seo站点项目 | ||
| 376 | + * @author zbj | ||
| 377 | + * @date 2023/5/12 | ||
| 378 | + */ | ||
| 379 | + public function getBmSeoProjects($domain = '') | ||
| 380 | + { | ||
| 381 | + $key = 'weblist_bm'; | ||
| 382 | + $data = Cache::get($key); | ||
| 383 | + if (!$data) { | ||
| 384 | + $api_url = 'http://api.quanqiusou.cn/api/index/weblist_bm'; | ||
| 385 | + try { | ||
| 386 | + $data = HttpUtils::get($api_url, ['key'=> '289c1fc81c89d79c04ed4fd72822948e']); | ||
| 387 | + if ($data) { | ||
| 388 | + $data = Arr::s2a($data); | ||
| 389 | + Cache::put($key, $data, 4 * 3600); | ||
| 390 | + } | ||
| 391 | + } catch (\Exception | GuzzleException $e) { | ||
| 392 | + errorLog('白帽seo站点项目获取失败', [], $e); | ||
| 393 | + return false; | ||
| 394 | + } | ||
| 395 | + } | ||
| 396 | + if ($domain) { | ||
| 397 | + return array_search($domain, $data); | ||
| 398 | + } | ||
| 399 | + return $data; | ||
| 400 | + } | ||
| 401 | + | ||
| 402 | + /** | ||
| 363 | * 获取AI站点项目 | 403 | * 获取AI站点项目 |
| 364 | * | 404 | * |
| 365 | * @author zbj | 405 | * @author zbj |
| @@ -622,6 +662,58 @@ class RankDataLogic extends BaseLogic | @@ -622,6 +662,58 @@ class RankDataLogic extends BaseLogic | ||
| 622 | return $model->is_compliance; | 662 | return $model->is_compliance; |
| 623 | } | 663 | } |
| 624 | 664 | ||
| 665 | + public function save_rank_bmseo($project_id, $api_no, $data){ | ||
| 666 | + $first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0; | ||
| 667 | + $first_page_without_extension_num = 0; //不算扩展词在首页的数量 | ||
| 668 | + $first_page_extension_num = 0; //扩展词在首页的数量 | ||
| 669 | + foreach ($data as &$ranks){ | ||
| 670 | + ksort($ranks); | ||
| 671 | + $last = Arr::last($ranks); | ||
| 672 | + //第一名 | ||
| 673 | + if($last['position'] == 1){ | ||
| 674 | + $first_num ++; | ||
| 675 | + } | ||
| 676 | + //排名第一页 | ||
| 677 | + if($last['position'] > 0 && $last['position'] <= 10){ | ||
| 678 | + $first_page_num ++; | ||
| 679 | + $last['g'] == 1 && $first_page_without_extension_num++; | ||
| 680 | + $last['g'] == 2 && $first_page_extension_num++; | ||
| 681 | + } | ||
| 682 | + //排名前三页 | ||
| 683 | + if($last['position'] > 0 && $last['position'] <= 30){ | ||
| 684 | + $first_three_pages_num ++; | ||
| 685 | + } | ||
| 686 | + //排名前五页 | ||
| 687 | + if($last['position'] > 0 && $last['position'] <= 50){ | ||
| 688 | + $first_five_pages_num ++; | ||
| 689 | + } | ||
| 690 | + //排名前十页 | ||
| 691 | + if($last['position'] > 0 && $last['position'] <= 100){ | ||
| 692 | + $first_ten_pages_num ++; | ||
| 693 | + } | ||
| 694 | + } | ||
| 695 | + $where = [ | ||
| 696 | + 'project_id' => $project_id, | ||
| 697 | + 'api_no' => $api_no, | ||
| 698 | + ]; | ||
| 699 | + $model = RankDataBmseo::where($where)->first(); | ||
| 700 | + if(!$model){ | ||
| 701 | + $model = new RankDataBmseo(); | ||
| 702 | + } | ||
| 703 | + $model->project_id = $project_id; | ||
| 704 | + $model->api_no = $api_no; | ||
| 705 | + $model->first_num = $first_num; | ||
| 706 | + $model->first_page_num = $first_page_num; | ||
| 707 | + $model->first_three_pages_num = $first_three_pages_num; | ||
| 708 | + $model->first_five_pages_num = $first_five_pages_num; | ||
| 709 | + $model->first_ten_pages_num = $first_ten_pages_num; | ||
| 710 | + $model->data = $data; | ||
| 711 | + $model->updated_date = date('Y-m-d'); | ||
| 712 | + $model->save(); | ||
| 713 | + | ||
| 714 | + return true; | ||
| 715 | + } | ||
| 716 | + | ||
| 625 | /** | 717 | /** |
| 626 | * @remark :g_top | 718 | * @remark :g_top |
| 627 | * @name :g_top_plan | 719 | * @name :g_top_plan |
| @@ -10,6 +10,7 @@ use App\Models\RouteMap\RouteMap; | @@ -10,6 +10,7 @@ use App\Models\RouteMap\RouteMap; | ||
| 10 | use App\Services\ProjectServer; | 10 | use App\Services\ProjectServer; |
| 11 | use Illuminate\Database\Eloquent\SoftDeletes; | 11 | use Illuminate\Database\Eloquent\SoftDeletes; |
| 12 | use Illuminate\Support\Facades\DB; | 12 | use Illuminate\Support\Facades\DB; |
| 13 | +use Illuminate\Support\Str; | ||
| 13 | 14 | ||
| 14 | class Keyword extends Base | 15 | class Keyword extends Base |
| 15 | { | 16 | { |
| @@ -136,6 +137,18 @@ class Keyword extends Base | @@ -136,6 +137,18 @@ class Keyword extends Base | ||
| 136 | foreach ($suffix_array as $suffix) { | 137 | foreach ($suffix_array as $suffix) { |
| 137 | array_push($result, trim($keyword . $suffix)); | 138 | array_push($result, trim($keyword . $suffix)); |
| 138 | array_push($result, trim($prefix . $keyword . $suffix)); | 139 | array_push($result, trim($prefix . $keyword . $suffix)); |
| 140 | + | ||
| 141 | + // 复数形式, 需要将单数的词也拼接上 | ||
| 142 | + if (Str::contains($suffix, ['Products', 'Exporters', 'Suppliers', 'Manufacturers'])) { | ||
| 143 | + $suffix = trim($suffix, 's'); | ||
| 144 | + array_push($result, trim($keyword . $suffix)); | ||
| 145 | + array_push($result, trim($prefix . $keyword . $suffix)); | ||
| 146 | + } | ||
| 147 | + if (Str::contains($suffix, [ 'Companies', 'Factories'])) { | ||
| 148 | + $suffix = trim($suffix, 'ies'); | ||
| 149 | + array_push($result, trim($keyword . $suffix . 'y')); | ||
| 150 | + array_push($result, trim($prefix . $keyword . $suffix . 'y')); | ||
| 151 | + } | ||
| 139 | } | 152 | } |
| 140 | } catch (\Exception $e) { | 153 | } catch (\Exception $e) { |
| 141 | continue; | 154 | continue; |
app/Models/RankData/RankDataBmseo.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Models\RankData; | ||
| 4 | + | ||
| 5 | + | ||
| 6 | +use App\Helper\Arr; | ||
| 7 | +use App\Models\Base; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * Class GoogleRank | ||
| 11 | + * @package App\Models | ||
| 12 | + * @author zbj | ||
| 13 | + * @date 2023/5/6 | ||
| 14 | + */ | ||
| 15 | +class RankDataBmseo extends Base | ||
| 16 | +{ | ||
| 17 | + //设置关联表名 | ||
| 18 | + protected $table = 'gl_rank_data_bmseo'; | ||
| 19 | + | ||
| 20 | + public static function gMap(){ | ||
| 21 | + return [ | ||
| 22 | + 1 => '主关键词', | ||
| 23 | + 2 => '拓展关键词', | ||
| 24 | + 3 => '小语种关键词', | ||
| 25 | + ]; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public function setDataAttribute($value) | ||
| 29 | + { | ||
| 30 | + $this->attributes['data'] = Arr::a2s($value); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + public function getDataAttribute($value) | ||
| 34 | + { | ||
| 35 | + return Arr::s2a($value); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | +} |
| @@ -39,7 +39,7 @@ class DingService | @@ -39,7 +39,7 @@ class DingService | ||
| 39 | 'content' => $body['keyword'] . PHP_EOL . $body['msg'] | 39 | 'content' => $body['keyword'] . PHP_EOL . $body['msg'] |
| 40 | ], | 40 | ], |
| 41 | 'at' => [ | 41 | 'at' => [ |
| 42 | - 'atMobiles' => [], | 42 | + 'atMobiles' => $body['atMobiles'], |
| 43 | 'atUserIds' => [], | 43 | 'atUserIds' => [], |
| 44 | 'isAtAll' => $body['isAtAll'], | 44 | 'isAtAll' => $body['isAtAll'], |
| 45 | ] | 45 | ] |
-
请 注册 或 登录 后发表评论