作者 赵彬吉

update

@@ -11,6 +11,7 @@ use App\Models\Project\ProjectKeyword; @@ -11,6 +11,7 @@ use App\Models\Project\ProjectKeyword;
11 use App\Models\RankData\RankData; 11 use App\Models\RankData\RankData;
12 use App\Models\WebSetting\WebSetting; 12 use App\Models\WebSetting\WebSetting;
13 use App\Services\AiBlogService; 13 use App\Services\AiBlogService;
  14 +use App\Services\DingService;
14 use App\Services\ProjectServer; 15 use App\Services\ProjectServer;
15 use Illuminate\Console\Command; 16 use Illuminate\Console\Command;
16 use Illuminate\Support\Facades\DB; 17 use Illuminate\Support\Facades\DB;
@@ -62,52 +63,64 @@ class AiBlogAutoPublish extends Command @@ -62,52 +63,64 @@ class AiBlogAutoPublish extends Command
62 $projects = Project::where('is_ai_blog', 1)->get(); 63 $projects = Project::where('is_ai_blog', 1)->get();
63 64
64 foreach ($projects as $project) { 65 foreach ($projects as $project) {
65 - $this->output("项目{$project->id}开始自动发布");  
66 - if(!$project->deploy_optimize['is_ai_blog_send']){  
67 - $this->output("项目{$project->id}未开启自动发布" . $project->deploy_optimize['start_date']);  
68 - continue;  
69 - }  
70 - if(($project->deploy_optimize['start_date'] > date('Y-m-d')) || !$project->deploy_optimize['start_date']){  
71 - $this->output("项目{$project->id}未到推广时间" . $project->deploy_optimize['start_date']);  
72 - continue;  
73 - }  
74 - $next_auto_date = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->whereNotNull('next_auto_date')->orderBy('id', 'desc')->value('next_auto_date');  
75 - if($next_auto_date && $next_auto_date > date('Y-m-d')){  
76 - $this->output("项目{$project->id}未到执行时间" . $next_auto_date);  
77 - continue;  
78 - }  
79 - //核心关键词+网站关键词  
80 - $main_keywords = ProjectKeyword::where('project_id', $project->id)->value('main_keyword');  
81 - $main_keywords = explode("\r\n", $main_keywords);  
82 - ProjectServer::useProject($project->id);  
83 - $site_keywords = WebSetting::where('project_id', $project->id)->value('keyword');  
84 - DB::disconnect('custom_mysql');  
85 - $site_keywords = explode(",", $site_keywords);  
86 - $keywords = array_filter(array_merge($main_keywords, $site_keywords));  
87 - $keywords = array_map('trim', $keywords);  
88 - if (empty($keywords)) {  
89 - $this->output("项目{$project->id}未获取到关键词");  
90 - continue;  
91 - }  
92 - $last_task = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->orderBy('id', 'desc')->first();  
93 - $compliance = RankData::where(['project_id' => $project->id, 'lang' => ''])->value('is_compliance');  
94 - $frequency = Project::typeBlogFrequency($project->deploy_optimize->send_ai_blog_frequency);  
95 - $frequency = explode('-', $frequency);  
96 - //1、之前测试那批项目,按照正常频率发送;  
97 - //2、未达标的项目,开启AIblog, 并立即推送三篇;  
98 - //3、其他项目等下下周 1 (2025-03-17)开始推送第一篇, 之后按照正频率发送;  
99 - if (!$last_task) {  
100 - if(!$compliance) {  
101 - for ($i = 0; $i < 3; $i++) {  
102 - $this->createTask($keywords, $project->id, $frequency);  
103 - }  
104 - }else{  
105 - if(date('Y-m-d') >= '2025-03-17'){  
106 - $this->createTask($keywords, $project->id, $frequency); 66 + try {
  67 + $this->output("项目{$project->id}开始自动发布");
  68 + if(!$project->deploy_optimize['is_ai_blog_send']){
  69 + $this->output("项目{$project->id}未开启自动发布" . $project->deploy_optimize['start_date']);
  70 + continue;
  71 + }
  72 + if(($project->deploy_optimize['start_date'] > date('Y-m-d')) || !$project->deploy_optimize['start_date']){
  73 + $this->output("项目{$project->id}未到推广时间" . $project->deploy_optimize['start_date']);
  74 + continue;
  75 + }
  76 + $next_auto_date = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->whereNotNull('next_auto_date')->orderBy('id', 'desc')->value('next_auto_date');
  77 + if($next_auto_date && $next_auto_date > date('Y-m-d')){
  78 + $this->output("项目{$project->id}未到执行时间" . $next_auto_date);
  79 + continue;
  80 + }
  81 + //核心关键词+网站关键词
  82 + $main_keywords = ProjectKeyword::where('project_id', $project->id)->value('main_keyword');
  83 + $main_keywords = explode("\r\n", $main_keywords);
  84 + ProjectServer::useProject($project->id);
  85 + $site_keywords = WebSetting::where('project_id', $project->id)->value('keyword');
  86 + DB::disconnect('custom_mysql');
  87 + $site_keywords = explode(",", $site_keywords);
  88 + $keywords = array_filter(array_merge($main_keywords, $site_keywords));
  89 + $keywords = array_map('trim', $keywords);
  90 + if (empty($keywords)) {
  91 + $this->output("项目{$project->id}未获取到关键词");
  92 + continue;
  93 + }
  94 + $last_task = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->orderBy('id', 'desc')->first();
  95 + $compliance = RankData::where(['project_id' => $project->id, 'lang' => ''])->value('is_compliance');
  96 + $frequency = Project::typeBlogFrequency($project->deploy_optimize->send_ai_blog_frequency);
  97 + $frequency = explode('-', $frequency);
  98 + //1、之前测试那批项目,按照正常频率发送;
  99 + //2、未达标的项目,开启AIblog, 并立即推送三篇;
  100 + //3、其他项目等下下周 1 (2025-03-17)开始推送第一篇, 之后按照正频率发送;
  101 + if (!$last_task) {
  102 + if(!$compliance) {
  103 + for ($i = 0; $i < 3; $i++) {
  104 + $this->createTask($keywords, $project->id, $frequency);
  105 + }
  106 + }else{
  107 + if(date('Y-m-d') >= '2025-03-17'){
  108 + $this->createTask($keywords, $project->id, $frequency);
  109 + }
107 } 110 }
  111 + } else {
  112 + $this->createTask($keywords, $project->id, $frequency);
108 } 113 }
109 - } else {  
110 - $this->createTask($keywords, $project->id, $frequency); 114 + }catch (\Exception $e){
  115 + (new DingService())->handle([
  116 + 'keyword' => 'AI_BLOG自动发布失败',
  117 + 'msg' => '项目ID:' . $project->id . PHP_EOL .
  118 + '错误信息:' . $e->getMessage() . PHP_EOL .
  119 + '错误文件:' . $e->getFile() . PHP_EOL .
  120 + '错误行数:' . $e->getLine(),
  121 + 'isAtAll' => true, // 是否@所有人
  122 + ]);
  123 + $this->output("自动发布失败:" . $e->getMessage() . $e->getFile() . $e->getLine());
111 } 124 }
112 } 125 }
113 } 126 }
@@ -159,25 +172,37 @@ class AiBlogAutoPublish extends Command @@ -159,25 +172,37 @@ class AiBlogAutoPublish extends Command
159 ->get(); 172 ->get();
160 173
161 foreach ($projects as $project) { 174 foreach ($projects as $project) {
162 - //未开启过 自动开启  
163 - if (!AiBlogOpenLog::isOpened($project->id)) {  
164 - //创建AI博客项目  
165 - $deploy_optimize = $project->deploy_optimize;  
166 - (new ProjectLogic())->setAiBlog($project->id, $project->main_lang_id, 1, $project->company, $deploy_optimize->company_en_name, $deploy_optimize->company_en_description); 175 + try {
  176 + //未开启过 自动开启
  177 + if (!AiBlogOpenLog::isOpened($project->id)) {
  178 + //创建AI博客项目
  179 + $deploy_optimize = $project->deploy_optimize;
  180 + (new ProjectLogic())->setAiBlog($project->id, $project->main_lang_id, 1, $project->company, $deploy_optimize->company_en_name, $deploy_optimize->company_en_description);
167 181
168 - //开启  
169 - $project->is_ai_blog = 1; 182 + //开启
  183 + $project->is_ai_blog = 1;
170 184
171 - //开启自动发布  
172 - $project->deploy_optimize->is_ai_blog_send = 1;  
173 - $project->deploy_optimize->save(); 185 + //开启自动发布
  186 + $project->deploy_optimize->is_ai_blog_send = 1;
  187 + $project->deploy_optimize->save();
174 188
175 - $project->save(); 189 + $project->save();
176 190
177 - //开启日志  
178 - AiBlogOpenLog::addLog($project->id); 191 + //开启日志
  192 + AiBlogOpenLog::addLog($project->id);
179 193
180 - $this->output('自动开启项目:' . $project->id); 194 + $this->output('自动开启项目:' . $project->id);
  195 + }
  196 + }catch (\Exception $e){
  197 + (new DingService())->handle([
  198 + 'keyword' => 'AI_BLOG自动开启失败',
  199 + 'msg' => '项目ID:' . $project->id . PHP_EOL .
  200 + '错误信息:' . $e->getMessage() . PHP_EOL .
  201 + '错误文件:' . $e->getFile() . PHP_EOL .
  202 + '错误行数:' . $e->getLine(),
  203 + 'isAtAll' => true, // 是否@所有人
  204 + ]);
  205 + $this->output("自动开启失败:" . $e->getMessage() . $e->getFile() . $e->getLine());
181 } 206 }
182 } 207 }
183 sleep(60); 208 sleep(60);