|
...
|
...
|
@@ -11,6 +11,7 @@ use App\Models\Project\ProjectKeyword; |
|
|
|
use App\Models\RankData\RankData;
|
|
|
|
use App\Models\WebSetting\WebSetting;
|
|
|
|
use App\Services\AiBlogService;
|
|
|
|
use App\Services\DingService;
|
|
|
|
use App\Services\ProjectServer;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
...
|
...
|
@@ -62,52 +63,64 @@ class AiBlogAutoPublish extends Command |
|
|
|
$projects = Project::where('is_ai_blog', 1)->get();
|
|
|
|
|
|
|
|
foreach ($projects as $project) {
|
|
|
|
$this->output("项目{$project->id}开始自动发布");
|
|
|
|
if(!$project->deploy_optimize['is_ai_blog_send']){
|
|
|
|
$this->output("项目{$project->id}未开启自动发布" . $project->deploy_optimize['start_date']);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if(($project->deploy_optimize['start_date'] > date('Y-m-d')) || !$project->deploy_optimize['start_date']){
|
|
|
|
$this->output("项目{$project->id}未到推广时间" . $project->deploy_optimize['start_date']);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$next_auto_date = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->whereNotNull('next_auto_date')->orderBy('id', 'desc')->value('next_auto_date');
|
|
|
|
if($next_auto_date && $next_auto_date > date('Y-m-d')){
|
|
|
|
$this->output("项目{$project->id}未到执行时间" . $next_auto_date);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
//核心关键词+网站关键词
|
|
|
|
$main_keywords = ProjectKeyword::where('project_id', $project->id)->value('main_keyword');
|
|
|
|
$main_keywords = explode("\r\n", $main_keywords);
|
|
|
|
ProjectServer::useProject($project->id);
|
|
|
|
$site_keywords = WebSetting::where('project_id', $project->id)->value('keyword');
|
|
|
|
DB::disconnect('custom_mysql');
|
|
|
|
$site_keywords = explode(",", $site_keywords);
|
|
|
|
$keywords = array_filter(array_merge($main_keywords, $site_keywords));
|
|
|
|
$keywords = array_map('trim', $keywords);
|
|
|
|
if (empty($keywords)) {
|
|
|
|
$this->output("项目{$project->id}未获取到关键词");
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$last_task = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->orderBy('id', 'desc')->first();
|
|
|
|
$compliance = RankData::where(['project_id' => $project->id, 'lang' => ''])->value('is_compliance');
|
|
|
|
$frequency = Project::typeBlogFrequency($project->deploy_optimize->send_ai_blog_frequency);
|
|
|
|
$frequency = explode('-', $frequency);
|
|
|
|
//1、之前测试那批项目,按照正常频率发送;
|
|
|
|
//2、未达标的项目,开启AIblog, 并立即推送三篇;
|
|
|
|
//3、其他项目等下下周 1 (2025-03-17)开始推送第一篇, 之后按照正频率发送;
|
|
|
|
if (!$last_task) {
|
|
|
|
if(!$compliance) {
|
|
|
|
for ($i = 0; $i < 3; $i++) {
|
|
|
|
$this->createTask($keywords, $project->id, $frequency);
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
if(date('Y-m-d') >= '2025-03-17'){
|
|
|
|
$this->createTask($keywords, $project->id, $frequency);
|
|
|
|
try {
|
|
|
|
$this->output("项目{$project->id}开始自动发布");
|
|
|
|
if(!$project->deploy_optimize['is_ai_blog_send']){
|
|
|
|
$this->output("项目{$project->id}未开启自动发布" . $project->deploy_optimize['start_date']);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if(($project->deploy_optimize['start_date'] > date('Y-m-d')) || !$project->deploy_optimize['start_date']){
|
|
|
|
$this->output("项目{$project->id}未到推广时间" . $project->deploy_optimize['start_date']);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$next_auto_date = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->whereNotNull('next_auto_date')->orderBy('id', 'desc')->value('next_auto_date');
|
|
|
|
if($next_auto_date && $next_auto_date > date('Y-m-d')){
|
|
|
|
$this->output("项目{$project->id}未到执行时间" . $next_auto_date);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
//核心关键词+网站关键词
|
|
|
|
$main_keywords = ProjectKeyword::where('project_id', $project->id)->value('main_keyword');
|
|
|
|
$main_keywords = explode("\r\n", $main_keywords);
|
|
|
|
ProjectServer::useProject($project->id);
|
|
|
|
$site_keywords = WebSetting::where('project_id', $project->id)->value('keyword');
|
|
|
|
DB::disconnect('custom_mysql');
|
|
|
|
$site_keywords = explode(",", $site_keywords);
|
|
|
|
$keywords = array_filter(array_merge($main_keywords, $site_keywords));
|
|
|
|
$keywords = array_map('trim', $keywords);
|
|
|
|
if (empty($keywords)) {
|
|
|
|
$this->output("项目{$project->id}未获取到关键词");
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$last_task = AiBlogTaskModel::where('project_id', $project->id)->where('type', 2)->orderBy('id', 'desc')->first();
|
|
|
|
$compliance = RankData::where(['project_id' => $project->id, 'lang' => ''])->value('is_compliance');
|
|
|
|
$frequency = Project::typeBlogFrequency($project->deploy_optimize->send_ai_blog_frequency);
|
|
|
|
$frequency = explode('-', $frequency);
|
|
|
|
//1、之前测试那批项目,按照正常频率发送;
|
|
|
|
//2、未达标的项目,开启AIblog, 并立即推送三篇;
|
|
|
|
//3、其他项目等下下周 1 (2025-03-17)开始推送第一篇, 之后按照正频率发送;
|
|
|
|
if (!$last_task) {
|
|
|
|
if(!$compliance) {
|
|
|
|
for ($i = 0; $i < 3; $i++) {
|
|
|
|
$this->createTask($keywords, $project->id, $frequency);
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
if(date('Y-m-d') >= '2025-03-17'){
|
|
|
|
$this->createTask($keywords, $project->id, $frequency);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$this->createTask($keywords, $project->id, $frequency);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$this->createTask($keywords, $project->id, $frequency);
|
|
|
|
}catch (\Exception $e){
|
|
|
|
(new DingService())->handle([
|
|
|
|
'keyword' => 'AI_BLOG自动发布失败',
|
|
|
|
'msg' => '项目ID:' . $project->id . PHP_EOL .
|
|
|
|
'错误信息:' . $e->getMessage() . PHP_EOL .
|
|
|
|
'错误文件:' . $e->getFile() . PHP_EOL .
|
|
|
|
'错误行数:' . $e->getLine(),
|
|
|
|
'isAtAll' => true, // 是否@所有人
|
|
|
|
]);
|
|
|
|
$this->output("自动发布失败:" . $e->getMessage() . $e->getFile() . $e->getLine());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
...
|
...
|
@@ -159,23 +172,37 @@ class AiBlogAutoPublish extends Command |
|
|
|
->get();
|
|
|
|
|
|
|
|
foreach ($projects as $project) {
|
|
|
|
//未开启过 自动开启
|
|
|
|
if (!AiBlogOpenLog::isOpened($project->id)) {
|
|
|
|
//开启
|
|
|
|
$project->is_ai_blog = 1;
|
|
|
|
|
|
|
|
//开启自动发布
|
|
|
|
$project->deploy_optimize->is_ai_blog_send = 1;
|
|
|
|
$project->deploy_optimize->save();
|
|
|
|
|
|
|
|
$project->save();
|
|
|
|
//创建AI博客项目
|
|
|
|
$deploy_optimize = $project->deploy_optimize;
|
|
|
|
(new ProjectLogic())->setAiBlog($project->id, $project->main_lang_id, 1, $project->company, $deploy_optimize->company_en_name, $deploy_optimize->company_en_description);
|
|
|
|
//开启日志
|
|
|
|
AiBlogOpenLog::addLog($project->id);
|
|
|
|
|
|
|
|
$this->output('自动开启项目:' . $project->id);
|
|
|
|
try {
|
|
|
|
//未开启过 自动开启
|
|
|
|
if (!AiBlogOpenLog::isOpened($project->id)) {
|
|
|
|
//创建AI博客项目
|
|
|
|
$deploy_optimize = $project->deploy_optimize;
|
|
|
|
(new ProjectLogic())->setAiBlog($project->id, $project->main_lang_id, 1, $project->company, $deploy_optimize->company_en_name, $deploy_optimize->company_en_description);
|
|
|
|
|
|
|
|
//开启
|
|
|
|
$project->is_ai_blog = 1;
|
|
|
|
|
|
|
|
//开启自动发布
|
|
|
|
$project->deploy_optimize->is_ai_blog_send = 1;
|
|
|
|
$project->deploy_optimize->save();
|
|
|
|
|
|
|
|
$project->save();
|
|
|
|
|
|
|
|
//开启日志
|
|
|
|
AiBlogOpenLog::addLog($project->id);
|
|
|
|
|
|
|
|
$this->output('自动开启项目:' . $project->id);
|
|
|
|
}
|
|
|
|
}catch (\Exception $e){
|
|
|
|
(new DingService())->handle([
|
|
|
|
'keyword' => 'AI_BLOG自动开启失败',
|
|
|
|
'msg' => '项目ID:' . $project->id . PHP_EOL .
|
|
|
|
'错误信息:' . $e->getMessage() . PHP_EOL .
|
|
|
|
'错误文件:' . $e->getFile() . PHP_EOL .
|
|
|
|
'错误行数:' . $e->getLine(),
|
|
|
|
'isAtAll' => true, // 是否@所有人
|
|
|
|
]);
|
|
|
|
$this->output("自动开启失败:" . $e->getMessage() . $e->getFile() . $e->getLine());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sleep(60);
|
...
|
...
|
|