Merge remote-tracking branch 'origin/master' into akun
正在显示
24 个修改的文件
包含
653 行增加
和
105 行删除
| @@ -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); |
app/Console/Commands/DayCount/AfterCount.php
0 → 100644
| 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 | +} |
app/Models/HomeCount/AfterCount.php
0 → 100644
| 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 | } |
app/Models/Project/EnterpriseProduct.php
0 → 100644
| 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 () { |
-
请 注册 或 登录 后发表评论