作者 刘锟

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

@@ -48,6 +48,7 @@ class AiBlogListTask extends Command @@ -48,6 +48,7 @@ class AiBlogListTask extends Command
48 48
49 public function handle(){ 49 public function handle(){
50 $project_id = $this->argument('project_id'); 50 $project_id = $this->argument('project_id');
  51 + @file_put_contents(storage_path('logs/lyh_error.log'), var_export('执行的项目id->'.$project_id, true) . PHP_EOL, FILE_APPEND);
51 ProjectServer::useProject($project_id); 52 ProjectServer::useProject($project_id);
52 $projectAiSettingModel = new ProjectAiSetting(); 53 $projectAiSettingModel = new ProjectAiSetting();
53 $aiSettingInfo = $projectAiSettingModel->read(['project_id'=>$project_id]); 54 $aiSettingInfo = $projectAiSettingModel->read(['project_id'=>$project_id]);
@@ -113,17 +114,14 @@ class AiBlogListTask extends Command @@ -113,17 +114,14 @@ class AiBlogListTask extends Command
113 if(!empty($domain)){ 114 if(!empty($domain)){
114 $c_url = $domain.'api/update_page/'; 115 $c_url = $domain.'api/update_page/';
115 $param = [ 116 $param = [
116 - 'project_id' => $this->user['project_id'], 117 + 'project_id' => $project_id,
117 'type' => 1, 118 'type' => 1,
118 'route' => 3, 119 'route' => 3,
119 'url' => ['top-blog'], 120 'url' => ['top-blog'],
120 'language'=> [], 121 'language'=> [],
121 'is_sitemap' => 0 122 'is_sitemap' => 0
122 ]; 123 ];
123 - $res = http_post($c_url, json_encode($param));  
124 - echo date('Y-m-d H:i:s').'通知成功:' . json_encode($res,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;  
125 - }else{  
126 - echo date('Y-m-d H:i:s').'域名不存在:' . $project_id . PHP_EOL; 124 + http_post($c_url, json_encode($param));
127 } 125 }
128 return true; 126 return true;
129 } 127 }
@@ -150,7 +150,7 @@ class AiBlogTask extends Command @@ -150,7 +150,7 @@ class AiBlogTask extends Command
150 } 150 }
151 $aiBlogTaskModel = new AiBlogTaskModel(); 151 $aiBlogTaskModel = new AiBlogTaskModel();
152 $finish_at = date('Y-m-d H:i:s', strtotime('-' . $finish_at . ' hour')); 152 $finish_at = date('Y-m-d H:i:s', strtotime('-' . $finish_at . ' hour'));
153 - $ids = $aiBlogTaskModel->formatQuery(['status'=>$aiBlogTaskModel::STATUS_RUNNING,'type'=>$aiBlogTaskModel::TYPE_BLOG,'created_at'=>['<=',$finish_at]])->limit(1000)->pluck('id'); 153 + $ids = $aiBlogTaskModel->formatQuery(['status'=>$aiBlogTaskModel::STATUS_RUNNING,'type'=>$aiBlogTaskModel::TYPE_BLOG,'updated_at'=>['<=',$finish_at]])->limit(1000)->pluck('id');
154 if(!empty($ids)){ 154 if(!empty($ids)){
155 foreach ($ids as $id) { 155 foreach ($ids as $id) {
156 Redis::lpush('ai_blog_task', $id); 156 Redis::lpush('ai_blog_task', $id);
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :AfterCount.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/26 15:28
  8 + */
  9 +
  10 +namespace App\Console\Commands\DayCount;
  11 +
  12 +use App\Models\Manage\ManageHr;
  13 +use App\Models\Project\Project;
  14 +use Carbon\Carbon;
  15 +use App\Models\HomeCount\AfterCount as AfterCountModel;
  16 +use Illuminate\Console\Command;
  17 +
  18 +class AfterCount extends Command
  19 +{
  20 + /**
  21 + * The name and signature of the console command.
  22 + *
  23 + * @var string
  24 + */
  25 + protected $signature = 'after_count';
  26 +
  27 + protected $managerHrModel;
  28 +
  29 + public $after_manager = [
  30 + 1 => ['许璐','王袁袁'],
  31 + 2 => ['陈思蓓'],
  32 + 3 => ['张国英']
  33 + ];
  34 +
  35 + /**
  36 + * The console command description.
  37 + *
  38 + * @var string
  39 + */
  40 + protected $description = '统计昨日售后数据';
  41 +
  42 + public function handle(){
  43 + echo date('Y-m-d H:i:s').'统计start->'.PHP_EOL;
  44 + $saveData = $this->_action();
  45 + $afterModel = new AfterCountModel();
  46 + $afterModel->insertAll($saveData);
  47 + echo date('Y-m-d H:i:s').'->统计end'.PHP_EOL;
  48 + return true;
  49 + }
  50 +
  51 + /**
  52 + * @remark :执行方法
  53 + * @name :_action
  54 + * @author :lyh
  55 + * @method :post
  56 + * @time :2025/3/26 15:29
  57 + */
  58 + public function _action(){
  59 + $this->managerHrModel = new ManageHr();
  60 + $projectModel = new Project();
  61 + $todayMidnight = date('Y-m-d 00:00:00', strtotime('today'));
  62 + $saveData = [];
  63 + foreach ($this->after_manager as $key => $valM){
  64 + $idArr = $this->managerHrModel->selectField(['name'=>['in',$valM]],'id');
  65 + $project_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$todayMidnight)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
  66 + $qualified_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$todayMidnight)->where('gl_project.is_remain_today',1)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
  67 + $rate = number_format($qualified_count / $project_count, 2);
  68 + $threeMonthsAgo = date('Y-m-d 00:00:00', strtotime('-3 months'));
  69 + $three_project_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$threeMonthsAgo)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
  70 + $three_qualified_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$threeMonthsAgo)->where('gl_project.is_remain_today',1)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
  71 + $three_rate = number_format($three_qualified_count / $three_project_count, 2);
  72 + $saveData[] = [
  73 + 'date'=>date('Y-m-d', strtotime('yesterday')),
  74 + 'type'=> $key,
  75 + 'project_count'=>$project_count,
  76 + 'qualified_count'=>$qualified_count,
  77 + 'rate'=>$rate,
  78 + 'three_project_count'=>$three_project_count,
  79 + 'three_qualified_count'=>$three_qualified_count,
  80 + 'three_rate'=>$three_rate,
  81 + ];
  82 + }
  83 + return $saveData;
  84 + }
  85 +
  86 +}
@@ -38,7 +38,7 @@ class Count extends Command @@ -38,7 +38,7 @@ class Count extends Command
38 */ 38 */
39 public function handle() 39 public function handle()
40 { 40 {
41 - $list = DB::table('gl_project')->where('gl_project.extend_type','=',0) 41 + $list = DB::table('gl_project')->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)
42 ->whereIn('gl_project.type',[1,2,3,4,6]) 42 ->whereIn('gl_project.type',[1,2,3,4,6])
43 ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id') 43 ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
44 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') 44 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
@@ -462,21 +462,21 @@ class LyhImportTest extends Command @@ -462,21 +462,21 @@ class LyhImportTest extends Command
462 foreach ($line_of_text as $k => $item){ 462 foreach ($line_of_text as $k => $item){
463 // try { 463 // try {
464 //添加内容 464 //添加内容
465 - $contentId = $customContentModel->addReturnId(['name'=>$item[0],'module_id'=>2,'project_id'=>$project_id]); 465 + $contentId = $customContentModel->addReturnId(['name'=>$item[0],'image'=>'/upload/p/2140/image/'.$item[2],'module_id'=>2,'project_id'=>$project_id]);
466 echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL; 466 echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL;
467 //注册路由 467 //注册路由
468 $route = RouteMap::setRoute($item[0], RouteMap::SOURCE_MODULE, 468 $route = RouteMap::setRoute($item[0], RouteMap::SOURCE_MODULE,
469 $contentId, $project_id); 469 $contentId, $project_id);
470 $customContentModel->edit(['route'=>$route],['id'=>$contentId]); 470 $customContentModel->edit(['route'=>$route],['id'=>$contentId]);
471 - if(!empty($item[1])){ 471 + if(!empty($item[3])){
472 $categoryId = ','; 472 $categoryId = ',';
473 - $cateArr = explode('/',$item[1]); 473 + $cateArr = explode('/',$item[3]);
474 foreach ($cateArr as $cateV){ 474 foreach ($cateArr as $cateV){
475 - $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]); 475 + $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>7,'project_id'=>$project_id]);
476 if($cateInfo !== false){ 476 if($cateInfo !== false){
477 $categoryId .= $cateInfo['id'].','; 477 $categoryId .= $cateInfo['id'].',';
478 }else{ 478 }else{
479 - $cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]); 479 + $cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>7,'project_id'=>$project_id]);
480 $cateRoute = RouteMap::setRoute($cateV, RouteMap::SOURCE_MODULE_CATE, 480 $cateRoute = RouteMap::setRoute($cateV, RouteMap::SOURCE_MODULE_CATE,
481 $cateVId, $project_id); 481 $cateVId, $project_id);
482 $customCategoryModel->edit(['route'=>$cateRoute],['id'=>$cateVId]); 482 $customCategoryModel->edit(['route'=>$cateRoute],['id'=>$cateVId]);
@@ -486,19 +486,19 @@ class LyhImportTest extends Command @@ -486,19 +486,19 @@ class LyhImportTest extends Command
486 $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]); 486 $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]);
487 } 487 }
488 $saveData = [ 488 $saveData = [
489 - ['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')],  
490 - ['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')],  
491 - ['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')],  
492 - ['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')],  
493 - ['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')],  
494 - ['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')],  
495 - ['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')],  
496 - ['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')],  
497 - ['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')],  
498 - ['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')],  
499 - ['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')],  
500 - ['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')],  
501 - ['key'=>'pd_extended_field_14', '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')], 489 + ['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$item[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  490 + ['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$item[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  491 + ['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$item[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  492 + ['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$item[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  493 + ['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$item[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  494 + ['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$item[7]??'', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  495 + ['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$item[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  496 + ['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$item[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  497 + ['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$item[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  498 + ['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$item[1], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  499 + ['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$item[0], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  500 + ['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$item[11] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
  501 + ['key'=>'pd_extended_field_14', 'type'=>1, 'values'=>$item[14], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
502 ]; 502 ];
503 $customExtendContentTModel->insert($saveData); 503 $customExtendContentTModel->insert($saveData);
504 // }catch (\Exception $e){ 504 // }catch (\Exception $e){
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: zhl
  5 + * Date: 2025/3/26
  6 + * Time: 14:29
  7 + */
  8 +namespace App\Console\Commands\Product;
  9 +
  10 +use App\Models\Product\Keyword;
  11 +use App\Models\Project\AggregateKeyword;
  12 +use App\Services\ProjectServer;
  13 +use Illuminate\Console\Command;
  14 +use Illuminate\Support\Facades\DB;
  15 +use Illuminate\Support\Facades\Log;
  16 +
  17 +/**
  18 + * Class OptimizeSetKeywordSync
  19 + * @package App\Console\Commands\Product
  20 + */
  21 +class OptimizeSetKeywordSync extends Command
  22 +{
  23 + /**
  24 + * The name and signature of the console command.
  25 + *
  26 + * @var string
  27 + */
  28 + protected $signature = 'optimize_set_keyword_sync';
  29 +
  30 + /**
  31 + * The console command description.
  32 + *
  33 + * @var string
  34 + */
  35 + protected $description = '优化设置聚合页关键词,同步至对应项目产品关键词';
  36 +
  37 + /**
  38 + * OptimizeSetKeywordSync constructor.
  39 + */
  40 + public function __construct()
  41 + {
  42 + parent::__construct();
  43 + }
  44 +
  45 + /**
  46 + * 数据源:App\Http\Logic\Aside\Project\AggregateKeywordLogic::saveKeyword;
  47 + * @return bool
  48 + */
  49 + public function handle()
  50 + {
  51 + $task = AggregateKeyword::where(['status' => AggregateKeyword::STATUS_INIT])->where('created_at', '<', date('Y-m-d H:i:s'))->get();
  52 + foreach ($task as $item) {
  53 + Log::info('同步ID:' . $item->id);
  54 + echo $item->project_id . PHP_EOL;
  55 + $this->syncKeyword($item->project_id, $item->keywords);
  56 + $item->status = AggregateKeyword::STATUS_FINISH;
  57 + $item->save();
  58 + }
  59 + return true;
  60 + }
  61 +
  62 + /**
  63 + * 关键词同步
  64 + * @param $project_id
  65 + * @param $keywords
  66 + * @return bool
  67 + */
  68 + public function syncKeyword($project_id, $keywords)
  69 + {
  70 + $keywords = explode("\n", $keywords);
  71 + $keywords = array_unique(array_filter($keywords));
  72 +
  73 + ProjectServer::useProject($project_id);
  74 + $keywordModel = new Keyword();
  75 + $keywordModel->saveBKeyword($project_id,$keywords);
  76 + DB::disconnect('custom_mysql');
  77 + return true;
  78 + }
  79 +}
@@ -37,6 +37,8 @@ class Kernel extends ConsoleKernel @@ -37,6 +37,8 @@ class Kernel extends ConsoleKernel
37 $schedule->command('sync_inquiry_text')->dailyAt('09:00')->withoutOverlapping(1); 37 $schedule->command('sync_inquiry_text')->dailyAt('09:00')->withoutOverlapping(1);
38 //FB询盘费用同步 38 //FB询盘费用同步
39 $schedule->command('sync_ad_cost')->everyThirtyMinutes()->withoutOverlapping(1); 39 $schedule->command('sync_ad_cost')->everyThirtyMinutes()->withoutOverlapping(1);
  40 + // 优化预设关键词 同步 20点会开始TDK生成
  41 + $schedule->command('optimize_set_keyword_sync')->dailyAt('20:00')->withoutOverlapping(1);
40 } 42 }
41 43
42 /** 44 /**
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :EnterpriseProductController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/26 9:55
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Aside\Project;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Aside\BaseController;
  14 +use App\Http\Logic\Aside\Project\EnterpriseProductLogic;
  15 +
  16 +class EnterpriseProductController extends BaseController
  17 +{
  18 + /**
  19 + * @remark :
  20 + * @name :saveNoticeLog
  21 + * @author :lyh
  22 + * @method :post
  23 + * @time :2025/3/26 9:55
  24 + */
  25 + public function saveEnterpriseProduct(EnterpriseProductLogic $logic){
  26 + $this->request->validate([
  27 + 'project_id'=>'required',
  28 + 'data'=>'required',
  29 +
  30 + ],[
  31 + 'project_id.required' => 'project_id不能为空',
  32 + 'data.required' => '数据不能为空',
  33 + ]);
  34 + $result = $logic->saveEnterpriseProduct();
  35 + $this->response('success',Code::SUCCESS,$result);
  36 + }
  37 +}
@@ -301,6 +301,9 @@ class ProjectController extends BaseController @@ -301,6 +301,9 @@ class ProjectController extends BaseController
301 $query = $query->where('gl_project_deploy_optimize.domain','!=',null); 301 $query = $query->where('gl_project_deploy_optimize.domain','!=',null);
302 } 302 }
303 } 303 }
  304 + if(isset($this->map['project_type'])){
  305 + $query = $query->where('gl_project.project_type',$this->map['project_type']);
  306 + }
304 return $query; 307 return $query;
305 } 308 }
306 309
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :GoogleKeywordInsightController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/25 14:23
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Bside\GoogleKeywordInsight;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Bside\BaseController;
  14 +use App\Http\Logic\Bside\GoogleKeywordInsight\GoogleKeywordInsightLogic;
  15 +
  16 +/**
  17 + * @remark :谷歌洞察数据
  18 + * @name :GoogleKeywordInsightController
  19 + * @author :lyh
  20 + * @method :post
  21 + * @time :2025/3/25 14:24
  22 + */
  23 +class GoogleKeywordInsightController extends BaseController
  24 +{
  25 + /**
  26 + * @remark :保存数据
  27 + * @name :saveKeywordInsight
  28 + * @author :lyh
  29 + * @method :post
  30 + * @time :2025/3/25 14:30
  31 + */
  32 + public function getKeywordInsight(GoogleKeywordInsightLogic $logic){
  33 + $this->request->validate([
  34 + 'keyword' => 'required'
  35 + ],[
  36 + 'keyword.required' => '关键词不能为空',
  37 + ]);
  38 + $data = $logic->getGoogleInsight();
  39 + $this->response('success',Code::SUCCESS,$data);
  40 + }
  41 +}
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :EnterpriseProductController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/26 11:05
  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\Models\Project\EnterpriseProduct;
  15 +
  16 +/**
  17 + * @remark :企业产品库
  18 + * @name :EnterpriseProductController
  19 + * @author :lyh
  20 + * @method :post
  21 + * @time :2025/3/26 11:05
  22 + */
  23 +class EnterpriseProductController extends BaseController
  24 +{
  25 + /**
  26 + * @remark :获取产品库
  27 + * @name :getEnterProduct
  28 + * @author :lyh
  29 + * @method :post
  30 + * @time :2025/3/26 11:06
  31 + */
  32 + public function getEnterProduct(EnterpriseProduct $enterpriseProduct){
  33 + $this->map['project_id'] = $this->user['project_id'];
  34 + $data = $enterpriseProduct->lists($this->map,$this->page,$this->row);
  35 + $this->response('success',Code::SUCCESS,$data);
  36 + }
  37 +}
@@ -12,6 +12,7 @@ namespace App\Http\Controllers\Bside; @@ -12,6 +12,7 @@ namespace App\Http\Controllers\Bside;
12 use App\Enums\Common\Code; 12 use App\Enums\Common\Code;
13 use App\Helper\FormGlobalsoApi; 13 use App\Helper\FormGlobalsoApi;
14 use App\Helper\PayStripeApi; 14 use App\Helper\PayStripeApi;
  15 +use App\Helper\Translate;
15 use App\Http\Logic\Bside\News\NewsLogic; 16 use App\Http\Logic\Bside\News\NewsLogic;
16 use App\Models\Ai\AiBlog; 17 use App\Models\Ai\AiBlog;
17 use App\Models\Channel\Channel; 18 use App\Models\Channel\Channel;
@@ -42,8 +43,7 @@ class TestController extends BaseController @@ -42,8 +43,7 @@ class TestController extends BaseController
42 */ 43 */
43 public function ceshi(){ 44 public function ceshi(){
44 //获取上一周询盘数量 45 //获取上一周询盘数量
45 - $service = new GoogleKeywordInsightService();  
46 - $list = $service->requestUrl('cnc');  
47 - $this->response('success',Code::SUCCESS,$list); 46 + $transData = Translate::tran(['heidenhain programming','heidenhain tnc 620'], 'zh');
  47 + $this->response('success',Code::SUCCESS,$transData);
48 } 48 }
49 } 49 }
@@ -10,7 +10,10 @@ @@ -10,7 +10,10 @@
10 namespace App\Http\Logic\Aside\Project; 10 namespace App\Http\Logic\Aside\Project;
11 11
12 use App\Http\Logic\Aside\BaseLogic; 12 use App\Http\Logic\Aside\BaseLogic;
  13 +use App\Models\Product\Keyword;
13 use App\Models\Project\AggregateKeyword; 14 use App\Models\Project\AggregateKeyword;
  15 +use App\Services\ProjectServer;
  16 +use Illuminate\Support\Facades\DB;
14 17
15 class AggregateKeywordLogic extends BaseLogic 18 class AggregateKeywordLogic extends BaseLogic
16 { 19 {
@@ -22,19 +25,17 @@ class AggregateKeywordLogic extends BaseLogic @@ -22,19 +25,17 @@ class AggregateKeywordLogic extends BaseLogic
22 } 25 }
23 26
24 /** 27 /**
25 - * @remark :  
26 - * @name :saveKeyword  
27 - * @author :lyh  
28 - * @method :post  
29 - * @time :2025/3/17 16:11 28 + * @return array
30 */ 29 */
31 public function saveKeyword(){ 30 public function saveKeyword(){
32 - if(isset($this->param['id']) && !empty($this->param['id'])){  
33 - $id = $this->param['id']; 31 + if (FALSE == empty($this->param['id'])) {
34 $this->model->edit($this->param,['id'=>$this->param['id']]); 32 $this->model->edit($this->param,['id'=>$this->param['id']]);
35 - }else{  
36 - $id = $this->model->addReturnId($this->param); 33 + } else {
  34 + $this->param['id'] = $this->model->addReturnId($this->param);
  35 + // 添加预设功能 同步关键词 迁入到 namespace App\Console\Commands\Product\SetKeywordSync
37 } 36 }
38 - return $this->success(['id'=>$id]); 37 +
  38 + return $this->success(['id'=>$this->param['id']]);
39 } 39 }
  40 +
40 } 41 }
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :EnterpriseProductLogic.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/26 10:10
  8 + */
  9 +
  10 +namespace App\Http\Logic\Aside\Project;
  11 +
  12 +use App\Http\Logic\Aside\BaseLogic;
  13 +use App\Models\Project\EnterpriseProduct;
  14 +
  15 +/**
  16 + * @remark :企业产品库
  17 + * @name :EnterpriseProductLogic
  18 + * @author :lyh
  19 + * @method :post
  20 + * @time :2025/3/26 10:13
  21 + */
  22 +class EnterpriseProductLogic extends BaseLogic
  23 +{
  24 + public function __construct()
  25 + {
  26 + parent::__construct();
  27 + $this->model = new EnterpriseProduct();
  28 + $this->param = $this->requestAll;
  29 + }
  30 +
  31 + /**
  32 + * @remark :保存产品企业库
  33 + * @name :saveEnterpriseProduct
  34 + * @author :lyh
  35 + * @method :post
  36 + * @time :2025/3/26 10:17
  37 + */
  38 + public function saveEnterpriseProduct(){
  39 + try {
  40 + $this->model->saveEnterpriseProduct($this->param['project_id'],$this->param['data']);
  41 + }catch (\Exception $e){
  42 + $this->fail('保存失败,请联系管理员');
  43 + }
  44 + return $this->success();
  45 + }
  46 +}
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :GoogleKeywordInsightLogic.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/25 14:31
  8 + */
  9 +
  10 +namespace App\Http\Logic\Bside\GoogleKeywordInsight;
  11 +
  12 +use App\Helper\Translate;
  13 +use App\Http\Logic\Bside\BaseLogic;
  14 +use App\Models\GoogleKeywordInsight\GoogleKeywordInsight;
  15 +use App\Models\GoogleKeywordInsight\GoogleKeywordInsightDetail;
  16 +use App\Services\GoogleKeywordInsightService;
  17 +use Illuminate\Support\Facades\DB;
  18 +
  19 +class GoogleKeywordInsightLogic extends BaseLogic
  20 +{
  21 + public $service;
  22 +
  23 + public function __construct()
  24 + {
  25 + parent::__construct();
  26 + $this->model = new GoogleKeywordInsight();
  27 + $this->param = $this->requestAll;
  28 + }
  29 +
  30 + /**
  31 + * @remark :获取google洞察数据
  32 + * @name :saveGoogleKeywordInsight
  33 + * @author :lyh
  34 + * @method :post
  35 + * @time :2025/3/25 14:36
  36 + */
  37 + public function getGoogleInsight(){
  38 + $data = $this->model->read(['search'=>$this->param['keyword']]);
  39 + if($data === false){
  40 + $this->service = new GoogleKeywordInsightService();
  41 + $data = $this->service->requestUrl($this->param['keyword']);
  42 + if(!empty($data)){
  43 + DB::beginTransaction();
  44 + //保存数据库
  45 + try {
  46 + $detailModel = new GoogleKeywordInsightDetail();
  47 + $this->model->saveInsight($this->user['project_id'],$this->param['keyword'],$data);
  48 + $detailModel->saveInsightDetail($this->user['project_id'],$this->param['keyword'],$data);
  49 + DB::commit();
  50 + }catch (\Exception $e){
  51 + DB::rollBack();
  52 + $this->fail('保存失败,请联系管理员');
  53 + }
  54 + }
  55 + }
  56 + return $this->success($data);
  57 + }
  58 +}
@@ -79,8 +79,8 @@ class KeywordLogic extends BaseLogic @@ -79,8 +79,8 @@ class KeywordLogic extends BaseLogic
79 if($info !== false){ 79 if($info !== false){
80 return $this->success(['id'=>$info['id']]); 80 return $this->success(['id'=>$info['id']]);
81 } 81 }
82 - $this->param = $this->addHandleParam($this->param);  
83 - $id = $this->model->insertGetId($this->param); 82 + $this->param['project_id'] = $this->user['project_id'];
  83 + $id = $this->model->addReturnId($this->param);
84 //路由映射 84 //路由映射
85 $route = RouteMap::setRoute($this->param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']); 85 $route = RouteMap::setRoute($this->param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
86 $this->model->edit(['route'=>$route],['id'=>$id]); 86 $this->model->edit(['route'=>$route],['id'=>$id]);
@@ -93,20 +93,6 @@ class KeywordLogic extends BaseLogic @@ -93,20 +93,6 @@ class KeywordLogic extends BaseLogic
93 } 93 }
94 94
95 /** 95 /**
96 - * @remark :添加组装数据  
97 - * @name :addHandleParam  
98 - * @author :lyh  
99 - * @method :post  
100 - * @time :2023/11/30 15:00  
101 - */  
102 - public function addHandleParam($param){  
103 - $param['project_id'] = $this->user['project_id'];  
104 - $param['created_at'] = date('Y-m-d H:i:s');  
105 - $param['updated_at'] = $param['created_at'];  
106 - return $this->success($param);  
107 - }  
108 -  
109 - /**  
110 * @remark :保存数据时参数处理 96 * @remark :保存数据时参数处理
111 * @name :handleSaveParam 97 * @name :handleSaveParam
112 * @author :lyh 98 * @author :lyh
@@ -135,27 +121,11 @@ class KeywordLogic extends BaseLogic @@ -135,27 +121,11 @@ class KeywordLogic extends BaseLogic
135 if(!empty($param['seo_title'])){ 121 if(!empty($param['seo_title'])){
136 $param['seo_title'] = ucfirst($param['seo_title']); 122 $param['seo_title'] = ucfirst($param['seo_title']);
137 } 123 }
138 - $param['first_word'] = $this->first_word($param['title']); 124 + $param['first_word'] = $this->model->first_word($param['title']);
139 return $param; 125 return $param;
140 } 126 }
141 127
142 /** 128 /**
143 - * @remark :获取字符串首字符  
144 - * @name :first_word  
145 - * @author :lyh  
146 - * @method :post  
147 - * @time :2024/10/28 10:47  
148 - */  
149 - public function first_word($title){  
150 - $first_title = mb_substr(strtolower($title), 0, 1);  
151 - if (is_numeric($first_title)){  
152 - return 0;  
153 - }  
154 - $string_key = array_search($first_title, $this->model->firstNumWord);  
155 - return $string_key ?: 27;  
156 - }  
157 -  
158 - /**  
159 * @remark :批量添加关键词任务, 异步处理 129 * @remark :批量添加关键词任务, 异步处理
160 * @name :batchAdd 130 * @name :batchAdd
161 * @author :lyh 131 * @author :lyh
@@ -164,20 +134,7 @@ class KeywordLogic extends BaseLogic @@ -164,20 +134,7 @@ class KeywordLogic extends BaseLogic
164 */ 134 */
165 public function batchAdd(){ 135 public function batchAdd(){
166 try { 136 try {
167 - foreach ($this->param['title'] as $k=>$v){  
168 - if(empty($v)){  
169 - continue;  
170 - }  
171 - $info = $this->model->read(['title'=>$v],['id']);  
172 - if($info === false){  
173 - $param['project_id'] = $this->user['project_id'];  
174 - $param['created_at'] = date('Y-m-d H:i:s');  
175 - $param['updated_at'] = $param['created_at'];  
176 - $param['title'] = $v;  
177 - $param['first_word'] = $this->first_word($param['title']);  
178 - $this->model->insertGetId($param);  
179 - }  
180 - } 137 + $this->model->saveBKeyword($this->user['project_id'],$this->param['title']);
181 }catch (\Exception $e){ 138 }catch (\Exception $e){
182 $this->fail('保存失败,请联系管理员'); 139 $this->fail('保存失败,请联系管理员');
183 } 140 }
@@ -249,7 +206,7 @@ class KeywordLogic extends BaseLogic @@ -249,7 +206,7 @@ class KeywordLogic extends BaseLogic
249 if($v){ 206 if($v){
250 $keyword_info = $this->model->read(['title'=>$v]); 207 $keyword_info = $this->model->read(['title'=>$v]);
251 if(!$keyword_info){ 208 if(!$keyword_info){
252 - $k_id = $this->model->addReturnId(['title'=>$v,'first_word' => $this->first_word($v),'project_id'=>$project_id]); 209 + $k_id = $this->model->addReturnId(['title'=>$v,'first_word' => $this->model->first_word($v),'project_id'=>$project_id]);
253 $route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $k_id, $project_id); 210 $route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $k_id, $project_id);
254 $this->model->edit(['route'=>$route],['id'=>$k_id]); 211 $this->model->edit(['route'=>$route],['id'=>$k_id]);
255 }else{ 212 }else{
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :GoogleKeywordInsight.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/25 14:33
  8 + */
  9 +
  10 +namespace App\Models\GoogleKeywordInsight;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +class GoogleKeywordInsight extends Base
  15 +{
  16 + protected $table = 'gl_google_insight';
  17 +
  18 + /**
  19 + * @remark :保存洞察总数据
  20 + * @name :saveInsight
  21 + * @author :lyh
  22 + * @method :post
  23 + * @time :2025/3/25 14:45
  24 + */
  25 + public function saveInsight($project_id,$keyword,$data){
  26 + $saveData = [
  27 + 'search'=>$keyword,
  28 + 'project_id'=>$project_id,
  29 + 'data'=>json_encode($data,true),
  30 + ];
  31 + return $this->addReturnId($saveData);
  32 + }
  33 +
  34 +}
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :GoogleKeywordInsightDetail.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/25 14:33
  8 + */
  9 +
  10 +namespace App\Models\GoogleKeywordInsight;
  11 +
  12 +use App\Helper\Translate;
  13 +use App\Models\Base;
  14 +
  15 +class GoogleKeywordInsightDetail extends Base
  16 +{
  17 + protected $table = 'gl_google_insight_detail';
  18 +
  19 + /**
  20 + * @remark :保存洞察数据详情
  21 + * @name :saveInsightDetail
  22 + * @author :lyh
  23 + * @method :post
  24 + * @time :2025/3/25 14:45
  25 + */
  26 + public function saveInsightDetail($project_id,$keyword,$data){
  27 + $saveData = [];
  28 + $textArr = array_column($data, 'text');
  29 + $transData = Translate::tran($textArr, 'zh');
  30 + foreach ($data as $key => $val){
  31 + $saveData[] = [
  32 + 'search'=>$keyword,
  33 + 'text'=>$val['text'],
  34 + 'zh_text'=>$transData[$key] ?? $val['text'],
  35 + 'project_id'=>$project_id,
  36 + 'volume'=>$val['volume'],
  37 + 'competition_level'=>$val['competition_level'],
  38 + 'competition_index'=>$val['competition_index'],
  39 + 'low_bid'=>$val['low_bid'],
  40 + 'high_bid'=>$val['high_bid'],
  41 + 'trend'=>$val['trend'],
  42 + ];
  43 + }
  44 + return $this->insertAll($saveData);
  45 + }
  46 +}
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :AfterCount.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/26 15:31
  8 + */
  9 +
  10 +namespace App\Models\HomeCount;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +/**
  15 + * @remark :售后日统计数据
  16 + * @name :AfterCount
  17 + * @author :lyh
  18 + * @method :post
  19 + * @time :2025/3/26 15:31
  20 + */
  21 +class AfterCount extends Base
  22 +{
  23 + protected $table = 'gl_after_count';
  24 +}
@@ -3,8 +3,13 @@ @@ -3,8 +3,13 @@
3 namespace App\Models\Product; 3 namespace App\Models\Product;
4 4
5 use App\Helper\Arr; 5 use App\Helper\Arr;
  6 +use App\Helper\Common;
6 use App\Models\Base; 7 use App\Models\Base;
  8 +use App\Models\Com\NoticeLog;
  9 +use App\Models\RouteMap\RouteMap;
  10 +use App\Services\ProjectServer;
7 use Illuminate\Database\Eloquent\SoftDeletes; 11 use Illuminate\Database\Eloquent\SoftDeletes;
  12 +use Illuminate\Support\Facades\DB;
8 13
9 class Keyword extends Base 14 class Keyword extends Base
10 { 15 {
@@ -50,19 +55,6 @@ class Keyword extends Base @@ -50,19 +55,6 @@ class Keyword extends Base
50 ]; 55 ];
51 56
52 /** 57 /**
53 - * 聚合页按照首字母归类  
54 - * @param $string  
55 - * @return int  
56 - */  
57 - public function getFirstWord($string) {  
58 - $first_string = strtolower(mb_substr($string, 0, 1));  
59 - if (is_numeric($first_string))  
60 - return 0;  
61 - $string_key = array_search($first_string, $this->firstNumWord);  
62 - return $string_key ?: 27;  
63 - }  
64 -  
65 - /**  
66 * @remark :视频 58 * @remark :视频
67 * @name :getKeywordVideoAttribute 59 * @name :getKeywordVideoAttribute
68 * @author :lyh 60 * @author :lyh
@@ -149,4 +141,44 @@ class Keyword extends Base @@ -149,4 +141,44 @@ class Keyword extends Base
149 } 141 }
150 return $result; 142 return $result;
151 } 143 }
  144 +
  145 + /**
  146 + * @remark :批量保存到产品关键词中
  147 + * @name :saveBKeyword
  148 + * @author :lyh
  149 + * @method :post
  150 + * @time :2025/3/25 16:28
  151 + */
  152 + public function saveBKeyword($project_id,$keywords){
  153 + foreach ($keywords as $v){
  154 + if(empty($v)){
  155 + continue;
  156 + }
  157 + $info = $this->read(['title'=>$v],['id']);
  158 + if($info === false){
  159 + $param['project_id'] = $project_id;
  160 + $param['title'] = $v;
  161 + $param['first_word'] = $this->first_word($param['title']);
  162 + $this->addReturnId($param);
  163 + }
  164 + }
  165 + NoticeLog::createLog(NoticeLog::TYPE_INIT_KEYWORD, ['project_id' => $project_id]);
  166 + return true;
  167 + }
  168 +
  169 + /**
  170 + * @remark :获取字符串首字符
  171 + * @name :first_word
  172 + * @author :lyh
  173 + * @method :post
  174 + * @time :2025/3/25 16:42
  175 + */
  176 + public function first_word($title){
  177 + $first_title = mb_substr(strtolower($title), 0, 1);
  178 + if (is_numeric($first_title)){
  179 + return 0;
  180 + }
  181 + $string_key = array_search($first_title, $this->firstNumWord);
  182 + return $string_key ?: 27;
  183 + }
152 } 184 }
@@ -12,13 +12,17 @@ namespace App\Models\Project; @@ -12,13 +12,17 @@ namespace App\Models\Project;
12 use App\Models\Base; 12 use App\Models\Base;
13 13
14 /** 14 /**
15 - * @remark :聚合页关键词设置  
16 - * @name :AggregateKeyword  
17 - * @author :lyh  
18 - * @method :post  
19 - * @time :2025/3/17 16:02 15 + * 聚合页关键词设置
  16 + * Class AggregateKeyword
  17 + * @package App\Models\Project
20 */ 18 */
21 class AggregateKeyword extends Base 19 class AggregateKeyword extends Base
22 { 20 {
23 protected $table = 'gl_aggregate_keyword'; 21 protected $table = 'gl_aggregate_keyword';
  22 +
  23 + /**
  24 + * 关键词是否导入项目聚合页关键词
  25 + */
  26 + const STATUS_INIT = 0;
  27 + const STATUS_FINISH = 1;
24 } 28 }
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :EnterpriseProduct.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2025/3/26 10:11
  8 + */
  9 +
  10 +namespace App\Models\Project;
  11 +
  12 +use App\Models\Base;
  13 +
  14 +/**
  15 + * @remark :项目产品录入词
  16 + * @name :EnterpriseProduct
  17 + * @author :lyh
  18 + * @method :post
  19 + * @time :2025/3/26 10:12
  20 + */
  21 +class EnterpriseProduct extends Base
  22 +{
  23 + protected $table = 'gl_project_enterprise_product';
  24 +
  25 + /**
  26 + * @remark :保存数据
  27 + * @name :saveEnterpriseProduct
  28 + * @author :lyh
  29 + * @method :post
  30 + * @time :2025/3/26 10:42
  31 + */
  32 + public function saveEnterpriseProduct($project_id,$data){
  33 + $saveData = [];
  34 + foreach ($data as $val){
  35 + $info = $this->read(['title'=>$val[0],'project_id'=>$project_id],['id']);
  36 + if($info === false){
  37 + $saveData[] = [
  38 + 'title'=>$val[0],
  39 + 'image'=>$val[1],
  40 + 'url'=>$val[2],
  41 + 'project_id'=>$project_id,
  42 + 'keywords'=>$val[3],
  43 + 'release_at'=>$val[4],
  44 + ];
  45 + }
  46 + }
  47 + return $this->insertAll($saveData);
  48 + }
  49 +}
@@ -208,7 +208,11 @@ Route::middleware(['aloginauth'])->group(function () { @@ -208,7 +208,11 @@ Route::middleware(['aloginauth'])->group(function () {
208 Route::any('/save', [Aside\Project\KeywordPrefixController::class, 'save'])->name('admin.keyword_save'); 208 Route::any('/save', [Aside\Project\KeywordPrefixController::class, 'save'])->name('admin.keyword_save');
209 Route::any('/del', [Aside\Project\KeywordPrefixController::class, 'del'])->name('admin.keyword_del'); 209 Route::any('/del', [Aside\Project\KeywordPrefixController::class, 'del'])->name('admin.keyword_del');
210 }); 210 });
211 - 211 + //企业资料库
  212 + Route::prefix('enterprise_product')->group(function () {
  213 + Route::any('/saveEnterpriseProduct', [Aside\Project\EnterpriseProductController::class, 'saveEnterpriseProduct'])->name('admin.enterprise_product_saveEnterpriseProduct');
  214 + });
  215 + //小语种
212 Route::prefix('language')->group(function () { 216 Route::prefix('language')->group(function () {
213 Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList'); 217 Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList');
214 Route::any('/getLanguages', [Aside\Project\MinorLanguagesController::class, 'getLanguages'])->name('admin.getLanguages'); 218 Route::any('/getLanguages', [Aside\Project\MinorLanguagesController::class, 'getLanguages'])->name('admin.getLanguages');
@@ -695,6 +695,16 @@ Route::middleware(['bloginauth'])->group(function () { @@ -695,6 +695,16 @@ Route::middleware(['bloginauth'])->group(function () {
695 Route::any('/getInfo', [\App\Http\Controllers\Bside\SeoSetting\DomainSettingController::class, 'getInfo'])->name('domain_setting_getInfo'); 695 Route::any('/getInfo', [\App\Http\Controllers\Bside\SeoSetting\DomainSettingController::class, 'getInfo'])->name('domain_setting_getInfo');
696 Route::any('/save', [\App\Http\Controllers\Bside\SeoSetting\DomainSettingController::class, 'save'])->name('domain_setting_save'); 696 Route::any('/save', [\App\Http\Controllers\Bside\SeoSetting\DomainSettingController::class, 'save'])->name('domain_setting_save');
697 }); 697 });
  698 +
  699 + //google数据洞察
  700 + Route::prefix('google_keyword_insight')->group(function () {
  701 + Route::any('/getKeywordInsight', [\App\Http\Controllers\Bside\GoogleKeywordInsight\GoogleKeywordInsightController::class, 'getKeywordInsight'])->name('google_keyword_insight_getKeywordInsight');
  702 + });
  703 +
  704 + //企业产品库
  705 + Route::prefix('enterprise_product')->group(function () {
  706 + Route::any('/getEnterProduct', [\App\Http\Controllers\Bside\SeoSetting\EnterpriseProductController::class, 'getEnterProduct'])->name('enterprise_product_getEnterProduct');
  707 + });
698 }); 708 });
699 //无需登录验证的路由组 709 //无需登录验证的路由组
700 Route::group([], function () { 710 Route::group([], function () {