Merge remote-tracking branch 'origin/master' into akun
正在显示
21 个修改的文件
包含
361 行增加
和
109 行删除
| @@ -8,6 +8,7 @@ use App\Models\Ai\AiBlogOpenLog; | @@ -8,6 +8,7 @@ use App\Models\Ai\AiBlogOpenLog; | ||
| 8 | use App\Models\Project\AiBlogTask as AiBlogTaskModel; | 8 | use App\Models\Project\AiBlogTask as AiBlogTaskModel; |
| 9 | use App\Models\Project\Project; | 9 | use App\Models\Project\Project; |
| 10 | use App\Models\Project\ProjectKeyword; | 10 | use App\Models\Project\ProjectKeyword; |
| 11 | +use App\Models\RankData\RankData; | ||
| 11 | use App\Models\WebSetting\WebSetting; | 12 | use App\Models\WebSetting\WebSetting; |
| 12 | use App\Services\AiBlogService; | 13 | use App\Services\AiBlogService; |
| 13 | use App\Services\ProjectServer; | 14 | use App\Services\ProjectServer; |
| @@ -78,26 +79,38 @@ class AiBlogAutoPublish extends Command | @@ -78,26 +79,38 @@ class AiBlogAutoPublish extends Command | ||
| 78 | $keywords = array_map('trim', $keywords); | 79 | $keywords = array_map('trim', $keywords); |
| 79 | if (empty($keywords)) { | 80 | if (empty($keywords)) { |
| 80 | $this->output("项目{$project->id}未获取到关键词"); | 81 | $this->output("项目{$project->id}未获取到关键词"); |
| 82 | + continue; | ||
| 81 | } | 83 | } |
| 82 | $last_task = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->orderBy('id', 'desc')->first(); | 84 | $last_task = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->orderBy('id', 'desc')->first(); |
| 83 | - //如果没有发布过AI blog任务, 第一次提交3个任务 | 85 | + $compliance = RankData::where(['project_id' => $project->id, 'lang' => ''])->value('is_compliance'); |
| 86 | + $frequency = Project::typeBlogFrequency($project->deploy_optimize->send_ai_blog_frequency); | ||
| 87 | + $frequency = explode('-', $frequency); | ||
| 88 | + //1、之前测试那批项目,按照正常频率发送; | ||
| 89 | + //2、未达标的项目,开启AIblog, 并立即推送三篇; | ||
| 90 | + //3、其他项目等下下周 1 (2025-03-17)开始推送第一篇, 之后按照正频率发送; | ||
| 84 | if (!$last_task) { | 91 | if (!$last_task) { |
| 85 | - for ($i = 0; $i < 3; $i++) { | ||
| 86 | - $this->createTask($keywords, $project->id); | 92 | + if(!$compliance) { |
| 93 | + for ($i = 0; $i < 3; $i++) { | ||
| 94 | + $this->createTask($keywords, $project->id, $frequency); | ||
| 95 | + } | ||
| 96 | + }else{ | ||
| 97 | + if(date('Y-m-d') >= '2025-03-17'){ | ||
| 98 | + $this->createTask($keywords, $project->id, $frequency); | ||
| 99 | + } | ||
| 87 | } | 100 | } |
| 88 | } else { | 101 | } else { |
| 89 | - $this->createTask($keywords, $project->id); | 102 | + $this->createTask($keywords, $project->id, $frequency); |
| 90 | } | 103 | } |
| 91 | } | 104 | } |
| 92 | } | 105 | } |
| 93 | 106 | ||
| 94 | - public function createTask($keywords, $project_id){ | 107 | + public function createTask($keywords, $project_id, $frequency){ |
| 95 | $keyword = $keywords[array_rand($keywords)]; | 108 | $keyword = $keywords[array_rand($keywords)]; |
| 96 | $aiBlogService = new AiBlogService($project_id); | 109 | $aiBlogService = new AiBlogService($project_id); |
| 97 | $result = $aiBlogService->setRoute($keyword)->createTask($keyword); | 110 | $result = $aiBlogService->setRoute($keyword)->createTask($keyword); |
| 98 | if ($result['status'] == 200) { | 111 | if ($result['status'] == 200) { |
| 99 | $aiBlogTaskModel = new AiBlogTaskModel(); | 112 | $aiBlogTaskModel = new AiBlogTaskModel(); |
| 100 | - $next_auto_date = date('Y-m-d', strtotime('+' . mt_rand(3,6) . 'days')); //每3-6天自动发布 | 113 | + $next_auto_date = date('Y-m-d', strtotime('+' . mt_rand($frequency[0],$frequency[1]) . 'days')); //每3-6天自动发布 |
| 101 | $aiBlogTaskModel->addReturnId(['project_id' => $project_id, 'type' => 2, 'task_id' => $result['data']['task_id'], 'status' => 1, 'next_auto_date' => $next_auto_date]); | 114 | $aiBlogTaskModel->addReturnId(['project_id' => $project_id, 'type' => 2, 'task_id' => $result['data']['task_id'], 'status' => 1, 'next_auto_date' => $next_auto_date]); |
| 102 | 115 | ||
| 103 | ProjectServer::useProject($project_id); | 116 | ProjectServer::useProject($project_id); |
| @@ -123,23 +136,26 @@ class AiBlogAutoPublish extends Command | @@ -123,23 +136,26 @@ class AiBlogAutoPublish extends Command | ||
| 123 | */ | 136 | */ |
| 124 | public function auto_open() | 137 | public function auto_open() |
| 125 | { | 138 | { |
| 126 | - $this->output('上线的推广项目自动开启'); | ||
| 127 | - $projects = Project::whereIn('type', [Project::TYPE_TWO, Project::TYPE_FOUR]) | ||
| 128 | - ->whereNotNull('uptime')->where('is_ai_blog', 0) | ||
| 129 | - ->get(); | ||
| 130 | - foreach ($projects as $project) { | ||
| 131 | - //未开启过 自动开启 | ||
| 132 | - if (!AiBlogOpenLog::isOpened($project->id)) { | ||
| 133 | - //开启 | ||
| 134 | - $project->is_ai_blog = 1; | ||
| 135 | - $project->save(); | ||
| 136 | - //创建AI博客项目 | ||
| 137 | - (new ProjectLogic())->setAiBlog($project->id, $project->main_lang_id, 1, $project->title); | ||
| 138 | - //开启日志 | ||
| 139 | - AiBlogOpenLog::addLog($project->id); | 139 | + while (true) { |
| 140 | + $this->output('上线的推广项目自动开启'); | ||
| 141 | + $projects = Project::whereIn('type', [Project::TYPE_TWO, Project::TYPE_FOUR]) | ||
| 142 | + ->whereNotNull('uptime')->where('is_ai_blog', 0) | ||
| 143 | + ->get(); | ||
| 144 | + foreach ($projects as $project) { | ||
| 145 | + //未开启过 自动开启 | ||
| 146 | + if (!AiBlogOpenLog::isOpened($project->id)) { | ||
| 147 | + //开启 | ||
| 148 | + $project->is_ai_blog = 1; | ||
| 149 | + $project->save(); | ||
| 150 | + //创建AI博客项目 | ||
| 151 | + (new ProjectLogic())->setAiBlog($project->id, $project->main_lang_id, 1, $project->title); | ||
| 152 | + //开启日志 | ||
| 153 | + AiBlogOpenLog::addLog($project->id); | ||
| 140 | 154 | ||
| 141 | - $this->output('自动开启项目:' . $project->id); | 155 | + $this->output('自动开启项目:' . $project->id); |
| 156 | + } | ||
| 142 | } | 157 | } |
| 158 | + sleep(60); | ||
| 143 | } | 159 | } |
| 144 | } | 160 | } |
| 145 | 161 |
| @@ -148,7 +148,7 @@ class CountProject extends Command | @@ -148,7 +148,7 @@ class CountProject extends Command | ||
| 148 | if($inquiry_list == false){ | 148 | if($inquiry_list == false){ |
| 149 | return false; | 149 | return false; |
| 150 | } | 150 | } |
| 151 | - echo date('Y-m-d H:i:s') . '拉取询盘状态:' .json_encode($inquiry_list) . PHP_EOL; | 151 | +// echo date('Y-m-d H:i:s') . '拉取询盘状态:' .json_encode($inquiry_list) . PHP_EOL; |
| 152 | if($inquiry_list['status'] == self::STATUS_ERROR){ | 152 | if($inquiry_list['status'] == self::STATUS_ERROR){ |
| 153 | $arr['inquiry_num'] = 0; | 153 | $arr['inquiry_num'] = 0; |
| 154 | $countryArr = []; | 154 | $countryArr = []; |
| @@ -528,8 +528,8 @@ class RelayInquiry extends Command | @@ -528,8 +528,8 @@ class RelayInquiry extends Command | ||
| 528 | $seconds += rand(5,60); | 528 | $seconds += rand(5,60); |
| 529 | ReInquiryDetailLog::createInquiryLog($re_detail->id, ReInquiryDetailLog::TYPE_VISIT, $pre, $v, date('Y-m-d H:i:s', $start_time + $seconds)); | 529 | ReInquiryDetailLog::createInquiryLog($re_detail->id, ReInquiryDetailLog::TYPE_VISIT, $pre, $v, date('Y-m-d H:i:s', $start_time + $seconds)); |
| 530 | // 最后一次访问询盘 加上询盘 | 530 | // 最后一次访问询盘 加上询盘 |
| 531 | - if($is_inquiry && $k+1 == count($urls)){ | ||
| 532 | - $this->output('第' . $k+1 . '个链接询盘'); | 531 | + if($is_inquiry && ($k+1) == count($urls)){ |
| 532 | + $this->output('第' . ($k+1) . '个链接询盘'); | ||
| 533 | $seconds += rand(30,120); | 533 | $seconds += rand(30,120); |
| 534 | $pre++; | 534 | $pre++; |
| 535 | ReInquiryDetailLog::createInquiryLog($re_detail->id, ReInquiryDetailLog::TYPE_INQUIRY, $pre, $v, date('Y-m-d H:i:s', $start_time + $seconds)); | 535 | ReInquiryDetailLog::createInquiryLog($re_detail->id, ReInquiryDetailLog::TYPE_INQUIRY, $pre, $v, date('Y-m-d H:i:s', $start_time + $seconds)); |
| @@ -52,10 +52,9 @@ class LyhImportTest extends Command | @@ -52,10 +52,9 @@ class LyhImportTest extends Command | ||
| 52 | * @time :2023/11/20 15:13 | 52 | * @time :2023/11/20 15:13 |
| 53 | */ | 53 | */ |
| 54 | public function handle(){ | 54 | public function handle(){ |
| 55 | - ProjectServer::useProject(3283); | 55 | + ProjectServer::useProject(2837); |
| 56 | echo date('Y-m-d H:i:s') . 'start' . PHP_EOL; | 56 | echo date('Y-m-d H:i:s') . 'start' . PHP_EOL; |
| 57 | -// $this->importProductCategory('https://ecdn6.globalso.com/upload/p/3283/file/2025-03/zy_boss_pricelistcat_202503131025.csv','3283'); | ||
| 58 | - $this->importProduct('https://ecdn6.globalso.com/upload/p/3283/file/2025-03/zy_boss_price_copy1.csv',3283); | 57 | + $this->importCustomModule('https://ecdn6.globalso.com/upload/p/2837/file/2025-03/2.csv',2837); |
| 59 | DB::disconnect('custom_mysql'); | 58 | DB::disconnect('custom_mysql'); |
| 60 | echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; | 59 | echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; |
| 61 | } | 60 | } |
| @@ -332,53 +331,72 @@ class LyhImportTest extends Command | @@ -332,53 +331,72 @@ class LyhImportTest extends Command | ||
| 332 | * @method :post | 331 | * @method :post |
| 333 | * @time :2025/2/24 14:54 | 332 | * @time :2025/2/24 14:54 |
| 334 | */ | 333 | */ |
| 335 | - public function importCustomModule($text,$project_id = 2837){ | 334 | + public function importCustomModule($url,$project_id){ |
| 335 | + $line_of_text = []; | ||
| 336 | + $opts = [ | ||
| 337 | + 'http' => [ | ||
| 338 | + 'method' => 'GET', | ||
| 339 | + 'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' | ||
| 340 | + ], | ||
| 341 | + 'ssl' => [ | ||
| 342 | + 'verify_peer' => false, | ||
| 343 | + 'verify_peer_name' => false | ||
| 344 | + ] | ||
| 345 | + ]; | ||
| 346 | + $file_handle = fopen($url, 'r', null, stream_context_create($opts)); | ||
| 347 | + while (!feof($file_handle)) { | ||
| 348 | + $line_of_text[] = fgetcsv($file_handle, 0, ','); | ||
| 349 | + } | ||
| 350 | + fclose($file_handle); | ||
| 336 | $customContentModel = new CustomModuleContent(); | 351 | $customContentModel = new CustomModuleContent(); |
| 337 | $customCategoryModel = new CustomModuleCategory();; | 352 | $customCategoryModel = new CustomModuleCategory();; |
| 338 | $customExtendContentTModel = new CustomModuleExtentContent(); | 353 | $customExtendContentTModel = new CustomModuleExtentContent(); |
| 339 | - $data = explode("\n", $text); | ||
| 340 | - foreach ($data as $k => $item){ | ||
| 341 | - $item = trim($item,','); | ||
| 342 | - //按照逗号转为数组 | ||
| 343 | - $array = explode(",", $item); | ||
| 344 | - //添加分类 | ||
| 345 | - if(empty($array[0])){ | ||
| 346 | - continue; | ||
| 347 | - } | ||
| 348 | - //添加内容 | ||
| 349 | - $contentId = $customContentModel->addReturnId(['name'=>$array[0],'module_id'=>2,'project_id'=>$project_id]); | ||
| 350 | - echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL; | ||
| 351 | - //注册路由 | ||
| 352 | - $route = RouteMap::setRoute($array[0], RouteMap::SOURCE_MODULE, | ||
| 353 | - $contentId, $project_id); | ||
| 354 | - $customContentModel->edit(['route'=>$route],['id'=>$contentId]); | ||
| 355 | - if(!empty($array[1])){ | ||
| 356 | - $categoryId = ','; | ||
| 357 | - $cateArr = explode('/',$array[1]); | ||
| 358 | - foreach ($cateArr as $cateV){ | ||
| 359 | - $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]); | ||
| 360 | - if($cateInfo !== false){ | ||
| 361 | - $categoryId .= $cateInfo['id'].','; | 354 | + foreach ($line_of_text as $k => $item){ |
| 355 | +// try { | ||
| 356 | + //添加内容 | ||
| 357 | + $contentId = $customContentModel->addReturnId(['name'=>$item[0],'module_id'=>2,'project_id'=>$project_id]); | ||
| 358 | + echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL; | ||
| 359 | + //注册路由 | ||
| 360 | + $route = RouteMap::setRoute($item[0], RouteMap::SOURCE_MODULE, | ||
| 361 | + $contentId, $project_id); | ||
| 362 | + $customContentModel->edit(['route'=>$route],['id'=>$contentId]); | ||
| 363 | + if(!empty($item[1])){ | ||
| 364 | + $categoryId = ','; | ||
| 365 | + $cateArr = explode('/',$item[1]); | ||
| 366 | + foreach ($cateArr as $cateV){ | ||
| 367 | + $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]); | ||
| 368 | + if($cateInfo !== false){ | ||
| 369 | + $categoryId .= $cateInfo['id'].','; | ||
| 370 | + }else{ | ||
| 371 | + $cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]); | ||
| 372 | + $cateRoute = RouteMap::setRoute($cateV, RouteMap::SOURCE_MODULE_CATE, | ||
| 373 | + $cateVId, $project_id); | ||
| 374 | + $customCategoryModel->edit(['route'=>$cateRoute],['id'=>$cateVId]); | ||
| 375 | + $categoryId .= $cateVId.','; | ||
| 376 | + } | ||
| 362 | } | 377 | } |
| 378 | + $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]); | ||
| 363 | } | 379 | } |
| 364 | - $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]); | ||
| 365 | - } | ||
| 366 | - $saveData = [ | ||
| 367 | - ['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$array[2], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 368 | - ['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$array[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 369 | - ['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$array[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 370 | - ['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$array[3], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 371 | - ['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$array[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 372 | - ['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$array[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 373 | - ['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$array[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 374 | - ['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$array[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 375 | - ['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$array[11], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 376 | - ['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$array[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 377 | - ['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$array[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 378 | - ['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$array[14] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 379 | - ['key'=>'pd_extended_field_13', 'type'=>1, 'values'=>$array[7], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 380 | - ]; | ||
| 381 | - $customExtendContentTModel->insert($saveData); | 380 | + $saveData = [ |
| 381 | + ['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$item[2], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 382 | + ['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$item[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 383 | + ['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$item[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 384 | + ['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$item[3], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 385 | + ['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$item[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 386 | + ['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$item[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 387 | + ['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$item[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 388 | + ['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$item[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 389 | + ['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$item[11], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 390 | + ['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$item[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 391 | + ['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$item[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 392 | + ['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$item[14] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 393 | + ['key'=>'pd_extended_field_13', 'type'=>1, 'values'=>$item[7], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 394 | + ]; | ||
| 395 | + $customExtendContentTModel->insert($saveData); | ||
| 396 | +// }catch (\Exception $e){ | ||
| 397 | +// echo date('Y-m-d H:i:s') . '错误name:'. $item[0] . PHP_EOL; | ||
| 398 | +// continue; | ||
| 399 | +// } | ||
| 382 | } | 400 | } |
| 383 | } | 401 | } |
| 384 | 402 |
| @@ -90,7 +90,7 @@ class CopyProject extends Command | @@ -90,7 +90,7 @@ class CopyProject extends Command | ||
| 90 | $data['finish_remain_day'] = 0; | 90 | $data['finish_remain_day'] = 0; |
| 91 | $data['title'] = $data['title'].'-copy'; | 91 | $data['title'] = $data['title'].'-copy'; |
| 92 | $data['delete_status'] = 1; | 92 | $data['delete_status'] = 1; |
| 93 | - unset($data['id'],$data['robots'],$data['is_translate_tag'],$data['is_translate'],$data['is_minor_languages'],$data['uptime']); | 93 | + unset($data['id'],$data['exclusive_aicc_day'],$data['aicc'],$data['robots'],$data['is_translate_tag'],$data['is_translate'],$data['is_minor_languages'],$data['uptime']); |
| 94 | $project_id = $projectModel->insertGetId($data); | 94 | $project_id = $projectModel->insertGetId($data); |
| 95 | $hashids = new Hashids($data['from_order_id'], 13, 'abcdefghjkmnpqrstuvwxyz1234567890'); | 95 | $hashids = new Hashids($data['from_order_id'], 13, 'abcdefghjkmnpqrstuvwxyz1234567890'); |
| 96 | $projectModel->edit(['from_order_id'=>$hashids->encode($project_id)],['id'=>$project_id]); | 96 | $projectModel->edit(['from_order_id'=>$hashids->encode($project_id)],['id'=>$project_id]); |
| @@ -200,7 +200,7 @@ class SyncProject extends Command | @@ -200,7 +200,7 @@ class SyncProject extends Command | ||
| 200 | 'requirement' => $param['remark'], | 200 | 'requirement' => $param['remark'], |
| 201 | 'cooperate_date' => date('Y-m-d', $param['create_time']), | 201 | 'cooperate_date' => date('Y-m-d', $param['create_time']), |
| 202 | 'from_order_id' => $param['from_order_id'], | 202 | 'from_order_id' => $param['from_order_id'], |
| 203 | - 'aicc' => $param['exclusive_aicc'], | 203 | + 'aicc' => ($param['exclusive_aicc'] = 0), |
| 204 | "exclusive_aicc_day" => $param['exclusive_aicc_day'], | 204 | "exclusive_aicc_day" => $param['exclusive_aicc_day'], |
| 205 | 'hagro' => $param['exclusive_hagro'], | 205 | 'hagro' => $param['exclusive_hagro'], |
| 206 | "exclusive_hagro_day" => $param['exclusive_hagro_day'], | 206 | "exclusive_hagro_day" => $param['exclusive_hagro_day'], |
| @@ -12,6 +12,7 @@ use App\Models\Domain\DomainInfo; | @@ -12,6 +12,7 @@ use App\Models\Domain\DomainInfo; | ||
| 12 | use App\Models\Mail\Mail; | 12 | use App\Models\Mail\Mail; |
| 13 | use App\Models\Project\DeployBuild; | 13 | use App\Models\Project\DeployBuild; |
| 14 | use App\Models\Project\DeployOptimize; | 14 | use App\Models\Project\DeployOptimize; |
| 15 | +use App\Models\Project\Project; | ||
| 15 | use App\Models\Project\ProjectKeyword; | 16 | use App\Models\Project\ProjectKeyword; |
| 16 | use App\Models\Project\ProjectUpdateTdk; | 17 | use App\Models\Project\ProjectUpdateTdk; |
| 17 | use App\Models\User\User; | 18 | use App\Models\User\User; |
| @@ -263,6 +264,7 @@ class UpdateSeoTdk extends Command | @@ -263,6 +264,7 @@ class UpdateSeoTdk extends Command | ||
| 263 | public function seo_tdk($project_id, $task_id) | 264 | public function seo_tdk($project_id, $task_id) |
| 264 | { | 265 | { |
| 265 | $notify_master = $notify_keyword = false; | 266 | $notify_master = $notify_keyword = false; |
| 267 | + $project = Project::find($project_id); | ||
| 266 | //更新统计 | 268 | //更新统计 |
| 267 | $update = []; | 269 | $update = []; |
| 268 | //AI指令 是否有定制指令 | 270 | //AI指令 是否有定制指令 |
| @@ -366,15 +368,37 @@ class UpdateSeoTdk extends Command | @@ -366,15 +368,37 @@ class UpdateSeoTdk extends Command | ||
| 366 | } | 368 | } |
| 367 | } else if ($table == 'gl_product_keyword' && $field == 'seo_title') { | 369 | } else if ($table == 'gl_product_keyword' && $field == 'seo_title') { |
| 368 | # TODO 聚合页seo title 特殊处理 前缀_1 . 关键词 . 后缀_2 | 370 | # TODO 聚合页seo title 特殊处理 前缀_1 . 关键词 . 后缀_2 |
| 369 | - $prefix = $this->getPrefixKeyword($project_id, 'prefix', 1); | ||
| 370 | - $suffix = $this->getPrefixKeyword($project_id, 'suffix', 2); | ||
| 371 | - if (empty($prefix) || empty($suffix)){ | ||
| 372 | - continue; | 371 | + $seo_title = ''; |
| 372 | + //只有推广项目才加 前后缀 | ||
| 373 | + if($project->type == Project::TYPE_TWO) { | ||
| 374 | + $prefix = $this->getPrefixKeyword($project_id, 'prefix', 1); | ||
| 375 | + $suffix = $this->getPrefixKeyword($project_id, 'suffix', 2); | ||
| 376 | + if (empty($prefix) || empty($suffix)) { | ||
| 377 | + continue; | ||
| 378 | + } | ||
| 379 | + | ||
| 380 | + $title = $v[$this->topic_fields[$table]]; | ||
| 381 | + | ||
| 382 | + $prefix = $this->getPrefixKeyword($project_id, 'prefix', 1, $title); | ||
| 383 | + //in,for,with,to,near,from 这些介词 只拼前缀,不拼后缀 | ||
| 384 | + $suffix_ban = ['in ', 'for ', 'with ', 'to ', 'near ','from ', 'In ', 'For ', 'With ', 'To ', 'Near ','From ']; | ||
| 385 | + $suffix = ''; | ||
| 386 | + if(Str::contains($title, $suffix_ban)){ | ||
| 387 | + // 某些后缀不能并存的情况 | ||
| 388 | + $ban_suffix = []; | ||
| 389 | + //services/service 结尾的词,后缀不拼manufacturer,factory | ||
| 390 | + if (Str::endsWith($title, ['services', 'service', 'Services', 'Service'])) { | ||
| 391 | + $ban_suffix = ['manufacturer', 'factory', 'Manufacturer', 'Factory', 'Factories', 'Manufacturers']; | ||
| 392 | + } | ||
| 393 | + //前缀有wholesale或cheap的词,后缀不拼 manufacturer,factory,exporter,company | ||
| 394 | + if (Str::startsWith($title, ['wholesale', 'cheap', 'Wholesale', 'Cheap'])) { | ||
| 395 | + $ban_suffix = array_merge($ban_suffix, ['manufacturer', 'factory', 'exporter', 'company', 'Manufacturer', 'Factory', 'Exporter', 'Company', 'Factories', 'Manufacturers', 'Exporters', 'Companies']); | ||
| 396 | + } | ||
| 397 | + $suffix = $this->getPrefixKeyword($project_id, 'suffix', 2, $title, $ban_suffix); | ||
| 398 | + } | ||
| 399 | + $seo_title = $prefix . ' ' . $title . ' ' . $suffix; | ||
| 373 | } | 400 | } |
| 374 | 401 | ||
| 375 | - $prefix = $this->getPrefixKeyword($project_id, 'prefix', 1, $v[$this->topic_fields[$table]]); | ||
| 376 | - $suffix = $this->getPrefixKeyword($project_id, 'suffix', 2, $v[$this->topic_fields[$table]]); | ||
| 377 | - $seo_title = $prefix . ' ' . $v[$this->topic_fields[$table]] . ' ' . $suffix; | ||
| 378 | $data[$field] = trim($seo_title); | 402 | $data[$field] = trim($seo_title); |
| 379 | $update[$table]['title']++; | 403 | $update[$table]['title']++; |
| 380 | } else if ($table == 'gl_ai_blog_list' && $field == 'seo_title') { | 404 | } else if ($table == 'gl_ai_blog_list' && $field == 'seo_title') { |
| @@ -539,9 +563,11 @@ class UpdateSeoTdk extends Command | @@ -539,9 +563,11 @@ class UpdateSeoTdk extends Command | ||
| 539 | * @param $project_id | 563 | * @param $project_id |
| 540 | * @param $type | 564 | * @param $type |
| 541 | * @param $num | 565 | * @param $num |
| 566 | + * @param string $topic | ||
| 567 | + * @param array $ban 被禁用的前后缀 | ||
| 542 | * @return string | 568 | * @return string |
| 543 | */ | 569 | */ |
| 544 | - public function getPrefixKeyword($project_id, $type, $num, $topic='') | 570 | + public function getPrefixKeyword($project_id, $type, $num, $topic='', $ban = []) |
| 545 | { | 571 | { |
| 546 | $str = ''; | 572 | $str = ''; |
| 547 | $info = $this->getDeployOptimize($project_id); | 573 | $info = $this->getDeployOptimize($project_id); |
| @@ -551,6 +577,10 @@ class UpdateSeoTdk extends Command | @@ -551,6 +577,10 @@ class UpdateSeoTdk extends Command | ||
| 551 | //去掉标题存在的词 | 577 | //去掉标题存在的词 |
| 552 | if ($topic) { | 578 | if ($topic) { |
| 553 | foreach ($fix_keyword as $k=>$keyword) { | 579 | foreach ($fix_keyword as $k=>$keyword) { |
| 580 | + // 被禁用的关键词 | ||
| 581 | + if (in_array($keyword, $ban)) { | ||
| 582 | + unset($fix_keyword[$k]); | ||
| 583 | + } | ||
| 554 | // 前后缀如果已经存在, 就不在拼接当前类型 | 584 | // 前后缀如果已经存在, 就不在拼接当前类型 |
| 555 | if (FALSE !== strpos($topic, $keyword)) | 585 | if (FALSE !== strpos($topic, $keyword)) |
| 556 | return $str; | 586 | return $str; |
| @@ -572,7 +602,7 @@ class UpdateSeoTdk extends Command | @@ -572,7 +602,7 @@ class UpdateSeoTdk extends Command | ||
| 572 | //随机取 | 602 | //随机取 |
| 573 | shuffle($fix_keyword); | 603 | shuffle($fix_keyword); |
| 574 | if (count($fix_keyword) < $num) | 604 | if (count($fix_keyword) < $num) |
| 575 | - return $str; | 605 | + return implode(", ", $fix_keyword); |
| 576 | $keyword = array_slice($fix_keyword, 0, $num); | 606 | $keyword = array_slice($fix_keyword, 0, $num); |
| 577 | $str = implode(", ", $keyword); | 607 | $str = implode(", ", $keyword); |
| 578 | 608 | ||
| @@ -594,7 +624,7 @@ class UpdateSeoTdk extends Command | @@ -594,7 +624,7 @@ class UpdateSeoTdk extends Command | ||
| 594 | $info = Cache::get($cache_key); | 624 | $info = Cache::get($cache_key); |
| 595 | if(!$info){ | 625 | if(!$info){ |
| 596 | $projectOptimizeModel = new DeployOptimize(); | 626 | $projectOptimizeModel = new DeployOptimize(); |
| 597 | - $info = $projectOptimizeModel->read(['project_id' => $project_id], ['id', 'company_en_name', 'company_en_description', 'keyword_prefix', 'keyword_suffix']); | 627 | + $info = $projectOptimizeModel->read(['project_id' => $project_id], ['id', 'company_en_name', 'company_en_description', 'keyword_prefix', 'keyword_suffix', 'brand_keyword']); |
| 598 | $projectKeywordModel = new ProjectKeyword(); | 628 | $projectKeywordModel = new ProjectKeyword(); |
| 599 | $keywordInfo = $projectKeywordModel->read(['project_id'=>$project_id]); | 629 | $keywordInfo = $projectKeywordModel->read(['project_id'=>$project_id]); |
| 600 | $info['main_keyword'] = ''; | 630 | $info['main_keyword'] = ''; |
| @@ -453,7 +453,7 @@ class PrivateController extends BaseController | @@ -453,7 +453,7 @@ class PrivateController extends BaseController | ||
| 453 | return $this->error('未找到当前域名对应的项目!'); | 453 | return $this->error('未找到当前域名对应的项目!'); |
| 454 | } | 454 | } |
| 455 | 455 | ||
| 456 | - $json = file_get_contents(storage_path('data/send_product_tag_keyword/' . $project->id . '.json')); | 456 | + $json = @file_get_contents(storage_path('data/send_product_tag_keyword/' . $project->id . '.json')); |
| 457 | $result = json_decode($json, true) ?: []; | 457 | $result = json_decode($json, true) ?: []; |
| 458 | return $this->success($result); | 458 | return $this->success($result); |
| 459 | } | 459 | } |
| @@ -27,12 +27,15 @@ class MonthReportController extends BaseController | @@ -27,12 +27,15 @@ class MonthReportController extends BaseController | ||
| 27 | * @author :lyh | 27 | * @author :lyh |
| 28 | * @method :post | 28 | * @method :post |
| 29 | * @time :2024/2/2 15:14 | 29 | * @time :2024/2/2 15:14 |
| 30 | + * @param :is_upgrade;1->升级项目 | ||
| 30 | */ | 31 | */ |
| 31 | public function getMonth(){ | 32 | public function getMonth(){ |
| 32 | $monthCountModel = new MonthCount(); | 33 | $monthCountModel = new MonthCount(); |
| 33 | $this->map['project_id'] = $this->user['project_id']; | 34 | $this->map['project_id'] = $this->user['project_id']; |
| 34 | - $this->map['month'] = ['>=',date('Y-m',strtotime($this->user['uptime']))]; | ||
| 35 | - $month = $monthCountModel->formatQuery($this->map)->pluck('month')->unique()->toArray(); | 35 | + if($this->user['is_upgrade'] != 1){ |
| 36 | + $this->map['month'] = ['>=',date('Y-m',strtotime($this->user['uptime']))]; | ||
| 37 | + } | ||
| 38 | + $month = $monthCountModel->formatQuery($this->map)->orderBy('month', 'asc')->pluck('month')->unique()->toArray(); | ||
| 36 | $this->response('success',Code::SUCCESS,$month); | 39 | $this->response('success',Code::SUCCESS,$month); |
| 37 | } | 40 | } |
| 38 | 41 |
| @@ -7,12 +7,12 @@ | @@ -7,12 +7,12 @@ | ||
| 7 | * @time :2025/3/12 17:01 | 7 | * @time :2025/3/12 17:01 |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | -namespace App\Http\Controllers\Bside\Product; | 10 | +namespace App\Http\Controllers\Bside\SeoSetting; |
| 11 | 11 | ||
| 12 | use App\Enums\Common\Code; | 12 | 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\Product\KeywordUrlLogic; | ||
| 15 | -use App\Models\Product\KeywordUrl; | 14 | +use App\Http\Logic\Bside\SeoSetting\KeywordUrlLogic; |
| 15 | +use App\Models\SeoSetting\KeywordUrl; | ||
| 16 | 16 | ||
| 17 | /** | 17 | /** |
| 18 | * @remark :关键词设置 | 18 | * @remark :关键词设置 |
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * @remark : | ||
| 4 | + * @name :LinkDataController.php | ||
| 5 | + * @author :lyh | ||
| 6 | + * @method :post | ||
| 7 | + * @time :2025/3/14 16:30 | ||
| 8 | + */ | ||
| 9 | + | ||
| 10 | +namespace App\Http\Controllers\Bside\SeoSetting; | ||
| 11 | + | ||
| 12 | +use App\Enums\Common\Code; | ||
| 13 | +use App\Http\Controllers\Bside\BaseController; | ||
| 14 | +use App\Http\Logic\Bside\SeoSetting\LinkDataLogic; | ||
| 15 | +use App\Models\SeoSetting\LinkData; | ||
| 16 | + | ||
| 17 | +class LinkDataController extends BaseController | ||
| 18 | +{ | ||
| 19 | + /** | ||
| 20 | + * @remark :获取列表页 | ||
| 21 | + * @name :lists | ||
| 22 | + * @author :lyh | ||
| 23 | + * @method :post | ||
| 24 | + * @time :2025/3/14 16:33 | ||
| 25 | + */ | ||
| 26 | + public function lists(LinkData $linkData){ | ||
| 27 | + $lists = $linkData->lists($this->map,$this->page,$this->row); | ||
| 28 | + $this->response('success',Code::SUCCESS,$lists); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * @remark :获取详情数据 | ||
| 33 | + * @name :info | ||
| 34 | + * @author :lyh | ||
| 35 | + * @method :post | ||
| 36 | + * @time :2025/3/14 17:41 | ||
| 37 | + */ | ||
| 38 | + public function info(LinkData $linkData){ | ||
| 39 | + $this->request->validate([ | ||
| 40 | + 'id'=>['required'], | ||
| 41 | + ],[ | ||
| 42 | + 'id.required' => 'id不能为空', | ||
| 43 | + ]); | ||
| 44 | + $info = $linkData->read(['id'=>$this->param['id']]); | ||
| 45 | + $this->response('success',Code::SUCCESS,$info); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * @remark :批量添加 | ||
| 50 | + * @name :batchSave | ||
| 51 | + * @author :lyh | ||
| 52 | + * @method :post | ||
| 53 | + * @time :2025/3/14 16:45 | ||
| 54 | + */ | ||
| 55 | + public function batchSave(LinkDataLogic $logic){ | ||
| 56 | + $this->request->validate([ | ||
| 57 | + 'data'=>['required'], | ||
| 58 | + ],[ | ||
| 59 | + 'data.required' => 'da_values不能为空', | ||
| 60 | + ]); | ||
| 61 | + $logic->batchSave(); | ||
| 62 | + $this->response('success'); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * @remark :删除 | ||
| 67 | + * @name :del | ||
| 68 | + * @author :lyh | ||
| 69 | + * @method :post | ||
| 70 | + * @time :2025/3/14 16:45 | ||
| 71 | + */ | ||
| 72 | + public function del(LinkData $linkData){ | ||
| 73 | + $this->request->validate([ | ||
| 74 | + 'id'=>'required|array', | ||
| 75 | + ],[ | ||
| 76 | + 'id.required' => 'id不能为空', | ||
| 77 | + 'id.array' => 'id为数组', | ||
| 78 | + ]); | ||
| 79 | + $result = $linkData->del(['id'=>['in',$this->param['id']]]); | ||
| 80 | + $this->response('success',Code::SUCCESS,$result); | ||
| 81 | + } | ||
| 82 | +} |
| @@ -7,11 +7,11 @@ | @@ -7,11 +7,11 @@ | ||
| 7 | * @time :2025/3/12 15:36 | 7 | * @time :2025/3/12 15:36 |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | -namespace App\Http\Controllers\Bside\Setting; | 10 | +namespace App\Http\Controllers\Bside\SeoSetting; |
| 11 | 11 | ||
| 12 | use App\Enums\Common\Code; | 12 | use App\Enums\Common\Code; |
| 13 | use App\Http\Controllers\Bside\BaseController; | 13 | use App\Http\Controllers\Bside\BaseController; |
| 14 | -use App\Models\WebSetting\WebSettingYoutube; | 14 | +use App\Models\SeoSetting\WebSettingYoutube; |
| 15 | 15 | ||
| 16 | class WebSettingYoutubeController extends BaseController | 16 | class WebSettingYoutubeController extends BaseController |
| 17 | { | 17 | { |
| @@ -772,6 +772,7 @@ class ProjectLogic extends BaseLogic | @@ -772,6 +772,7 @@ class ProjectLogic extends BaseLogic | ||
| 772 | $data['special'] = $this->model::specialMap(); | 772 | $data['special'] = $this->model::specialMap(); |
| 773 | $data['search'] = $this->model::searchParam(); | 773 | $data['search'] = $this->model::searchParam(); |
| 774 | $data['plan'] = $this->model::planMap(); | 774 | $data['plan'] = $this->model::planMap(); |
| 775 | + $data['blog_frequency'] = $this->model::typeBlogFrequency(); | ||
| 775 | return $this->success($data); | 776 | return $this->success($data); |
| 776 | } | 777 | } |
| 777 | 778 |
| @@ -7,10 +7,10 @@ | @@ -7,10 +7,10 @@ | ||
| 7 | * @time :2025/3/12 17:06 | 7 | * @time :2025/3/12 17:06 |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | -namespace App\Http\Logic\Bside\Product; | 10 | +namespace App\Http\Logic\Bside\SeoSetting; |
| 11 | 11 | ||
| 12 | use App\Http\Logic\Bside\BaseLogic; | 12 | use App\Http\Logic\Bside\BaseLogic; |
| 13 | -use App\Models\Product\KeywordUrl; | 13 | +use App\Models\SeoSetting\KeywordUrl; |
| 14 | 14 | ||
| 15 | /** | 15 | /** |
| 16 | * @remark :关键词设置 | 16 | * @remark :关键词设置 |
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * @remark : | ||
| 4 | + * @name :LinkDataLogic.php | ||
| 5 | + * @author :lyh | ||
| 6 | + * @method :post | ||
| 7 | + * @time :2025/3/14 17:20 | ||
| 8 | + */ | ||
| 9 | + | ||
| 10 | +namespace App\Http\Logic\Bside\SeoSetting; | ||
| 11 | + | ||
| 12 | +use App\Http\Logic\Bside\BaseLogic; | ||
| 13 | +use App\Models\SeoSetting\LinkData; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * @remark :获取外链数据 | ||
| 17 | + * @name :LinkDataLogic | ||
| 18 | + * @author :lyh | ||
| 19 | + * @method :post | ||
| 20 | + * @time :2025/3/14 17:21 | ||
| 21 | + */ | ||
| 22 | +class LinkDataLogic extends BaseLogic | ||
| 23 | +{ | ||
| 24 | + public function __construct() | ||
| 25 | + { | ||
| 26 | + parent::__construct(); | ||
| 27 | + $this->param = $this->requestAll; | ||
| 28 | + $this->model = new LinkData(); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * @remark :保存数据 | ||
| 33 | + * @name :batchSave | ||
| 34 | + * @author :lyh | ||
| 35 | + * @method :post | ||
| 36 | + * @time :2025/3/14 17:22 | ||
| 37 | + * @param :url->外链;da_values->da值 | ||
| 38 | + */ | ||
| 39 | + public function batchSave(){ | ||
| 40 | + $data = []; | ||
| 41 | + foreach ($this->param['data'] as $v){ | ||
| 42 | + $data[] = [ | ||
| 43 | + 'url'=>$v['url'], | ||
| 44 | + 'da_values'=>$v['da_values'], | ||
| 45 | + ]; | ||
| 46 | + } | ||
| 47 | + if(!empty($data)){ | ||
| 48 | + $this->model->insertAll($data); | ||
| 49 | + } | ||
| 50 | + return $this->success(); | ||
| 51 | + } | ||
| 52 | +} |
| @@ -12,13 +12,6 @@ class DeployOptimize extends Base | @@ -12,13 +12,6 @@ class DeployOptimize extends Base | ||
| 12 | protected $table = 'gl_project_deploy_optimize'; | 12 | protected $table = 'gl_project_deploy_optimize'; |
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | -// public function setMinorLanguagesAttribute($value){ | ||
| 16 | -// $this->attributes['minor_languages'] = Arr::a2s($value); | ||
| 17 | -// } | ||
| 18 | -// | ||
| 19 | -// public function getMinorLanguagesAttribute($value){ | ||
| 20 | -// return Arr::s2a($value); | ||
| 21 | -// } | ||
| 22 | public function getGTopPlanAttribute($value){ | 15 | public function getGTopPlanAttribute($value){ |
| 23 | return Arr::s2a($value); | 16 | return Arr::s2a($value); |
| 24 | } | 17 | } |
| @@ -55,6 +55,27 @@ class Project extends Base | @@ -55,6 +55,27 @@ class Project extends Base | ||
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | /** | 57 | /** |
| 58 | + * @remark :aiBlog发布频率 | ||
| 59 | + * @name :typeBlogFrequency | ||
| 60 | + * @author :lyh | ||
| 61 | + * @method :post | ||
| 62 | + * @time :2025/3/15 10:29 | ||
| 63 | + */ | ||
| 64 | + public static function typeBlogFrequency($val = 0){ | ||
| 65 | + $arr = [ | ||
| 66 | + 1=>'1-2', | ||
| 67 | + 2=>'2-3', | ||
| 68 | + 3=>'2-4', | ||
| 69 | + 4=>'3-5', | ||
| 70 | + 5=>'5-7', | ||
| 71 | + ]; | ||
| 72 | + if($val){ | ||
| 73 | + return $arr[$val] ?? ''; | ||
| 74 | + } | ||
| 75 | + return $arr; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + /** | ||
| 58 | * 项目类型 | 79 | * 项目类型 |
| 59 | * @return string[] | 80 | * @return string[] |
| 60 | * @author zbj | 81 | * @author zbj |
| @@ -107,9 +128,10 @@ class Project extends Base | @@ -107,9 +128,10 @@ class Project extends Base | ||
| 107 | return [ | 128 | return [ |
| 108 | 1 => '自建站项目', | 129 | 1 => '自建站项目', |
| 109 | 2 => '重点跟进', | 130 | 2 => '重点跟进', |
| 110 | - 3 => '推广案例', | ||
| 111 | - 4 => '全球搜案例', | ||
| 112 | - 5 => '设计师案例', | 131 | + 3 => '经典案例', |
| 132 | + 4 => '全球搜案例库', | ||
| 133 | + 5 => '设计师精美网站', | ||
| 134 | + 18 => '多语言案例', | ||
| 113 | 6 => '可登陆后台', | 135 | 6 => '可登陆后台', |
| 114 | 7 => 'T项目', | 136 | 7 => 'T项目', |
| 115 | 8 => '特殊前后缀', | 137 | 8 => '特殊前后缀', |
| @@ -122,6 +144,7 @@ class Project extends Base | @@ -122,6 +144,7 @@ class Project extends Base | ||
| 122 | 15 => 'AI案例', | 144 | 15 => 'AI案例', |
| 123 | 16 => '6.0广告', | 145 | 16 => '6.0广告', |
| 124 | 17 => '超哥监控项目', | 146 | 17 => '超哥监控项目', |
| 147 | + 19 => '商城案例', | ||
| 125 | ]; | 148 | ]; |
| 126 | } | 149 | } |
| 127 | 150 |
app/Models/SeoSetting/LinkData.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * @remark : | ||
| 4 | + * @name :LinkData.php | ||
| 5 | + * @author :lyh | ||
| 6 | + * @method :post | ||
| 7 | + * @time :2025/3/14 16:30 | ||
| 8 | + */ | ||
| 9 | + | ||
| 10 | +namespace App\Models\SeoSetting; | ||
| 11 | + | ||
| 12 | +use App\Models\Base; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * @remark :外链数据 | ||
| 16 | + * @name :LinkData | ||
| 17 | + * @author :lyh | ||
| 18 | + * @method :post | ||
| 19 | + * @time :2025/3/14 16:31 | ||
| 20 | + */ | ||
| 21 | +class LinkData extends Base | ||
| 22 | +{ | ||
| 23 | + protected $table = 'gl_link_data'; | ||
| 24 | + //连接数据库 | ||
| 25 | + protected $connection = 'custom_mysql'; | ||
| 26 | +} |
| @@ -670,16 +670,24 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -670,16 +670,24 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 670 | 670 | ||
| 671 | //seo白帽 youtube账号密码设置 | 671 | //seo白帽 youtube账号密码设置 |
| 672 | Route::prefix('youtube')->group(function () { | 672 | Route::prefix('youtube')->group(function () { |
| 673 | - Route::any('/info', [\App\Http\Controllers\Bside\Setting\WebSettingYoutubeController::class, 'getYoutubeInfo'])->name('youtube_getYoutubeInfo'); | ||
| 674 | - Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingYoutubeController::class, 'saveYoutube'])->name('youtube_saveYoutube'); | 673 | + Route::any('/info', [\App\Http\Controllers\Bside\SeoSetting\WebSettingYoutubeController::class, 'getYoutubeInfo'])->name('youtube_getYoutubeInfo'); |
| 674 | + Route::any('/save', [\App\Http\Controllers\Bside\SeoSetting\WebSettingYoutubeController::class, 'saveYoutube'])->name('youtube_saveYoutube'); | ||
| 675 | }); | 675 | }); |
| 676 | 676 | ||
| 677 | //seo白帽 关键词设置 | 677 | //seo白帽 关键词设置 |
| 678 | Route::prefix('keyword_url')->group(function () { | 678 | Route::prefix('keyword_url')->group(function () { |
| 679 | - Route::any('/', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'lists'])->name('keyword_url_lists'); | ||
| 680 | - Route::any('/info', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'info'])->name('keyword_url_info'); | ||
| 681 | - Route::any('/save', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'save'])->name('keyword_url_save'); | ||
| 682 | - Route::any('/del', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'del'])->name('keyword_url_del'); | 679 | + Route::any('/', [\App\Http\Controllers\Bside\SeoSetting\KeywordUrlController::class, 'lists'])->name('keyword_url_lists'); |
| 680 | + Route::any('/info', [\App\Http\Controllers\Bside\SeoSetting\KeywordUrlController::class, 'info'])->name('keyword_url_info'); | ||
| 681 | + Route::any('/save', [\App\Http\Controllers\Bside\SeoSetting\KeywordUrlController::class, 'save'])->name('keyword_url_save'); | ||
| 682 | + Route::any('/del', [\App\Http\Controllers\Bside\SeoSetting\KeywordUrlController::class, 'del'])->name('keyword_url_del'); | ||
| 683 | + }); | ||
| 684 | + | ||
| 685 | + //seo白帽 外链设置 | ||
| 686 | + Route::prefix('link_data')->group(function () { | ||
| 687 | + Route::any('/', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'lists'])->name('link_data_lists'); | ||
| 688 | + Route::any('/batchSave', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'batchSave'])->name('link_data_batchSave'); | ||
| 689 | + Route::any('/info', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'info'])->name('link_data_info'); | ||
| 690 | + Route::any('/del', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'del'])->name('link_data_del'); | ||
| 683 | }); | 691 | }); |
| 684 | }); | 692 | }); |
| 685 | //无需登录验证的路由组 | 693 | //无需登录验证的路由组 |
-
请 注册 或 登录 后发表评论