作者 刘锟

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

... ... @@ -12,6 +12,7 @@ namespace App\Console\Commands\Ai;
use App\Models\Ai\AiBlog;
use App\Models\Ai\AiBlogAuthor;
use App\Models\Ai\AiBlogList;
use App\Models\Domain\DomainInfo;
use App\Models\Project\ProjectAiSetting;
use App\Models\RouteMap\RouteMap;
use App\Services\AiBlogService;
... ... @@ -51,6 +52,7 @@ class AiBlogListTask extends Command
$projectAiSettingModel = new ProjectAiSetting();
$aiSettingInfo = $projectAiSettingModel->read(['project_id'=>$project_id]);
$this->updateBlogList($aiSettingInfo);
$this->curlDelRoute($project_id);
DB::disconnect('custom_mysql');
return true;
}
... ... @@ -96,4 +98,24 @@ class AiBlogListTask extends Command
}
return true;
}
/**
* @remark :通知C端生成界面
* @name :sendNotice
* @author :lyh
* @method :post
* @time :2025/3/6 11:51
*/
public function curlDelRoute($project_id){
$domainModel = new DomainInfo();
//获取项目域名
$domain = $domainModel->getProjectIdDomain($project_id);
if(!empty($domain)){
$url = $domain.'api/update_page/?project_id='.$project_id.'&route=7';
shell_exec('curl -k "'.$url.'"');
}else{
echo '域名不存在:' . $project_id . PHP_EOL . date('Y-m-d H:i:s');
}
return true;
}
}
... ...
... ... @@ -145,11 +145,10 @@ class WeekProject extends Command
}
/**
* @remark :推送消息
* @name :workChatMessage
* @author :lyh
* @method :post
* @time :2025/2/26 10:15
* 周报消息推送消息入库
* @param $data
* @param $project_id
* @return bool
*/
public function workChatMessage($data,$project_id){
$arr = [];
... ... @@ -227,7 +226,7 @@ class WeekProject extends Command
if(!empty($data['daily_average_num'])){
$content2 .= '本周日均访客量:'.$data['daily_average_num'].'+。';
}
$content2 .= '全球搜建议用户持续分析、选择、添加企业、产品、服务等相关关键词进行优化和监控,以覆盖更多相关排名和流量;';
$content2 .= PHP_EOL.'全球搜建议用户持续分析、选择、添加企业、产品、服务等相关关键词进行优化和监控,以覆盖更多相关排名和流量;';
}
if(!empty($content2)){
$arr[] = $content2;
... ... @@ -252,7 +251,7 @@ class WeekProject extends Command
$content3 .= '新闻:'.$data['week_news_num'].'条。';
}
}
$content3 .= '全球搜建议用户保持网站内容的持续更新与完善,可参考谷歌关于创建实用、可靠、以用户为中心的内容的相关建议:https://developers.google.com/search/docs/fundamentals/creating-helpful-content?hl=zh-cn;';
$content3 .= PHP_EOL.'全球搜建议用户保持网站内容的持续更新与完善,可参考谷歌关于创建实用、可靠、以用户为中心的内容的相关建议:https://developers.google.com/search/docs/fundamentals/creating-helpful-content?hl=zh-cn;';
}
if(!empty($content3)){
$arr[] = $content3;
... ... @@ -264,9 +263,6 @@ class WeekProject extends Command
if(!empty($data['aggregation_update_num'])){
$content4 .= '聚合页主站页面更新'.$data['aggregation_update_num'].'次。';
}
if(!empty($data['aggregation_update_num'])){
$content4 .= '聚合页主站页面更新'.$data['aggregation_update_num'].'次。';
}
if(!empty($data['minor_update_num'])){
$content4 .= '小语种站页面更新'.$data['minor_update_num'].'次。';
}
... ... @@ -274,7 +270,7 @@ class WeekProject extends Command
$content4 .= '聚合页小语种站页面'.$data['aggregation_minor_update_num'].'次。';
}
if(!empty($content4)){
$content4 = '本周主要优化工作包括:TDK、H标签、Img标签等优化设置排查与进一步完善,Sitemap更新与网页收录提交,外链新增与排查。'.$content4;
$content4 = PHP_EOL.'本周主要优化工作包括:TDK、H标签、Img标签等优化设置排查与进一步完善,Sitemap更新与网页收录提交,外链新增与排查。'.$content4;
}
if(!empty($content4)){
$arr[] = $content4;
... ... @@ -283,7 +279,7 @@ class WeekProject extends Command
return true;
}
foreach ($arr as $key => $val){
$content .= ($key+1).','.$val.PHP_EOL;
$content .= ($key+1).','.$val.PHP_EOL.PHP_EOL;
}
$timestamp = strtotime('tomorrow 9:00 AM');
$tomorrowNineAM = date('Y-m-d H:i:s', $timestamp);
... ... @@ -291,11 +287,12 @@ class WeekProject extends Command
return true;
}
$tips = 'Tips:'.PHP_EOL.'1、全球搜V6.0系统提供网页TDK、H标签、Img标签等用户自定义编辑接口且辅以AI创作工具,用户可进一步对相关优化设置进行精细化优化与调整;'.PHP_EOL.'2、全球搜V6.0系统提供小语种页面精准校对翻译功能,用户可进一步对已翻译小语种页面进行人工翻译校对;'.PHP_EOL.'3、全球搜V6.0系统支持绑定Facebook、LinkedIn、X(原Twitter)等社媒账号,可一键同步转发网站上发布的产品和新闻至社媒账号动态,建议用户用起来哦;'.PHP_EOL.'4、如用户有较丰富的企业、产品、服务相关视频素材,全球搜建议用户及时创建YouTube主页,并在YouTube和网站相关网页上同步发布视频;';
$message = "【全球搜V6.0周报】- 项目ID:" . PHP_EOL . $content . PHP_EOL . $tips;
$param = [
'project_id'=>$project_id,
'friend_id'=>$friend_id,
'type'=>MessagePush::TYPE_WEEK,
'content'=>"【全球搜V6.0周报】".PHP_EOL.$content.PHP_EOL.$tips,
'content'=> $message,
'ref_ids'=>'',
'send_time'=>$tomorrowNineAM,
'status'=>0,
... ...
... ... @@ -9,10 +9,6 @@ use App\Http\Requests\Bside\Ai\AiBlogRequest;
use App\Models\Ai\AiBlog;
use App\Models\Ai\AiBlogAuthor;
use App\Models\Ai\AiBlogList;
use App\Models\RouteMap\RouteMap;
use App\Services\AiBlogService;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
class AiBlogController extends BaseController
{
... ...
<?php
/**
* @remark :
* @name :KeywordUrlController.php
* @author :lyh
* @method :post
* @time :2025/3/12 17:01
*/
namespace App\Http\Controllers\Bside\Product;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Product\KeywordUrlLogic;
use App\Models\Product\KeywordUrl;
/**
* @remark :关键词设置
* @name :KeywordUrlController
* @author :lyh
* @method :post
* @time :2025/3/12 17:01
*/
class KeywordUrlController extends BaseController
{
/**
* @remark :关键词设置列表
* @name :lists
* @author :lyh
* @method :post
* @time :2025/3/12 17:01
* @param :keyword->关键字
*/
public function lists(KeywordUrl $keywordUrl){
if(isset($this->map['keyword']) && !empty($this->map['keyword'])){
$this->map['keyword'] = ['like','%'.$this->map['keyword'].'%'];
}
$filed = ['id','keyword','url','created_at','updated_at'];
$lists = $keywordUrl->lists($this->map,$this->page,$this->row,$this->order,$filed);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :获取数据详情
* @name :info
* @author :lyh
* @method :post
* @time :2025/3/12 17:25
*/
public function info(KeywordUrl $keywordUrl){
$this->request->validate([
'id'=>['required'],
],[
'id.required' => 'id不能为空',
]);
$lists = $keywordUrl->read(['id'=>$this->param['id']]);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :保存数据
* @name :save
* @author :lyh
* @method :post
* @time :2025/3/12 17:02
* @param :keyword->关键词; url->对应路由
*/
public function save(KeywordUrlLogic $keywordUrlLogic){
$this->request->validate([
'keyword'=>['required'],
'url'=>['required'],
],[
'keyword.required' => 'keyword不能为空',
'url.required' => 'url不能为空',
]);
$result = $keywordUrlLogic->saveKeywordUrl();
$this->response('success',Code::SUCCESS,$result);
}
/**
* @remark :删除数据
* @name :del
* @author :lyh
* @method :post
* @time :2025/3/12 17:02
*/
public function del(KeywordUrl $keywordUrl){
$this->request->validate([
'id'=>['required'],
],[
'id.required' => 'id不能为空',
]);
$result = $keywordUrl->del($this->param);
$this->response('success',Code::SUCCESS,$result);
}
}
... ...
<?php
/**
* @remark :
* @name :WebSettingYoutubeController.php
* @author :lyh
* @method :post
* @time :2025/3/12 15:36
*/
namespace App\Http\Controllers\Bside\Setting;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\WebSetting\WebSettingYoutube;
class WebSettingYoutubeController extends BaseController
{
/**
* @remark :获取当前项目的youtube
* @name :getInfo
* @author :lyh
* @method :post
* @time :2025/3/12 15:37
*/
public function getYoutubeInfo(WebSettingYoutube $webSettingYoutube){
$data = $webSettingYoutube->read(['project_id'=>$this->user['project_id']]);
$this->response('success',Code::SUCCESS,$data);
}
/**
* @remark :保存youtube账号密码
* @name :saveYoutube
* @author :lyh
* @method :post
* @time :2025/3/12 15:39
* @param :account->账号;password->密码
*/
public function saveYoutube(WebSettingYoutube $webSettingYoutube){
$this->request->validate([
'account'=>'required',
'password'=>'required',
],[
'account.required' => 'account不能为空',
'password.required' => 'password不能为空',
]);
$info = $webSettingYoutube->read(['project_id'=>$this->user['project_id']]);
if($info === false){
$this->param['project_id'] = $this->user['project_id'];
$id = $webSettingYoutube->addReturnId($this->param);
}else{
$id = $info['id'];
$webSettingYoutube->edit($this->param,['project_id'=>$this->user['project_id']]);
}
$this->response('success',Code::SUCCESS,['id'=>$id]);
}
}
... ...
... ... @@ -6,9 +6,7 @@ use App\Helper\Translate;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Ai\AiBlog;
use App\Models\Ai\AiBlogAuthor;
use App\Models\Ai\AiBlogList;
use App\Models\Project\AiBlogTask;
use App\Models\Project\Project;
use App\Models\Project\ProjectAiSetting;
use App\Models\RouteMap\RouteMap;
use App\Services\AiBlogService;
... ...
<?php
/**
* @remark :
* @name :KeywordUrlLogic.php
* @author :lyh
* @method :post
* @time :2025/3/12 17:06
*/
namespace App\Http\Logic\Bside\Product;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\KeywordUrl;
/**
* @remark :关键词设置
* @name :KeywordUrlLogic
* @author :lyh
* @method :post
* @time :2025/3/12 17:07
*/
class KeywordUrlLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->param = $this->requestAll;
$this->model = new KeywordUrl();
}
/**
* @remark :保存数据
* @name :saveKeywordUrl
* @author :lyh
* @method :post
* @time :2025/3/12 17:08
*/
public function saveKeywordUrl(){
if(isset($this->param['id']) && !empty($this->param['id'])){
$id = $this->param['id'];
$this->model->edit($this->param,['id'=>$this->param['id']]);
}else{
$id = $this->model->addReturnId($this->param);
}
return $this->success(['id'=>$id]);
}
}
... ...
<?php
/**
* @remark :
* @name :KeywordUrl.php
* @author :lyh
* @method :post
* @time :2025/3/12 16:59
*/
namespace App\Models\Product;
use App\Models\Base;
/**
* @remark :关键词设置
* @name :KeywordUrl
* @author :lyh
* @method :post
* @time :2025/3/12 17:00
*/
class KeywordUrl extends Base
{
//设置关联表名
protected $table = 'gl_keyword_url';
//连接数据库
protected $connection = 'custom_mysql';
}
... ...
<?php
/**
* @remark :
* @name :WebSettingYoutube.php
* @name :WebSettingYoutubeController.php
* @author :lyh
* @method :post
* @time :2025/3/11 15:51
... ... @@ -13,7 +13,7 @@ use App\Models\Base;
/**
* @remark :youtube账号密码设置
* @name :WebSettingYoutube
* @name :WebSettingYoutubeController
* @author :lyh
* @method :post
* @time :2025/3/11 15:51
... ... @@ -21,4 +21,6 @@ use App\Models\Base;
class WebSettingYoutube extends Base
{
protected $table = 'gl_web_setting_youtube';
//连接数据库
protected $connection = 'custom_mysql';
}
... ...
... ... @@ -666,7 +666,20 @@ Route::middleware(['bloginauth'])->group(function () {
Route::prefix('auto_email_content')->group(function () {
Route::any('/getContent', [\App\Http\Controllers\Bside\Subscribe\AutoEmailContentController::class, 'getContent'])->name('auto_email_content_getContent');
Route::any('/saveContent', [\App\Http\Controllers\Bside\Subscribe\AutoEmailContentController::class, 'saveContent'])->name('auto_email_content_saveContent');
});
//seo白帽 youtube账号密码设置
Route::prefix('youtube')->group(function () {
Route::any('/info', [\App\Http\Controllers\Bside\Setting\WebSettingYoutubeController::class, 'getYoutubeInfo'])->name('youtube_getYoutubeInfo');
Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingYoutubeController::class, 'saveYoutube'])->name('youtube_saveYoutube');
});
//seo白帽 关键词设置
Route::prefix('keyword_url')->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'lists'])->name('keyword_url_lists');
Route::any('/info', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'info'])->name('keyword_url_info');
Route::any('/save', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'save'])->name('keyword_url_save');
Route::any('/del', [\App\Http\Controllers\Bside\Product\KeywordUrlController::class, 'del'])->name('keyword_url_del');
});
});
//无需登录验证的路由组
... ...