作者 lyh

Merge branch 'master' of http://47.244.231.31:8099/zhl/globalso-v6 into lyh-server

... ... @@ -81,69 +81,86 @@ class DomainInfo extends Command
continue;
}
//除自建站项目外,记录已解析到别的ip的域名
if ($servers_ip_info['servers_id'] != ServerConfig::SELF_SITE_ID) {
//过滤已解析到别的ip的域名
if ($servers_ip_info['servers_id'] == ServerConfig::SELF_SITE_ID) {
//自建站项目,直接获取主站证书有效期并更新
$ssl_time = $this->getDomainSslTime($v['domain']);
if ($ssl_time['from'] && $ssl_time['to']) {
$v->certificate_start_time = $ssl_time['from'];
$v->certificate_end_time = $ssl_time['to'];
$v->save();
}
if (empty($v['domain_end_time']) || $v['domain_end_time'] < date('Y-m-d H:i:s')) {
//获取主站域名有效期并更新
$valid_time = $this->getDomainValidTime($v['domain']);
if ($valid_time['start'] && $valid_time['end']) {
$v->domain_start_time = $valid_time['start'];
$v->domain_end_time = $valid_time['end'];
$v->save();
}
}
} else {
//除自建站项目外,记录已解析到别的ip的域名
if (!check_domain_record($v['domain'], $servers_ip_info)) {
Log::channel('analyze_other')->error('域名 [' . $v['domain'] . '] 已解析到别的IP');
continue;
}
}
//判断是否已经建站
if ($project_info['project_type'] == Project::PROJECT_TYPE_SEO) {
$type = DomainCreateTask::TYPE_BLOG;
} else {
$type = DomainCreateTask::TYPE_MAIN;
}
$task_info = $domainCreateTaskModel->read(['type' => $type, 'domain_id' => $v['id'], 'status' => DomainCreateTask::STATUS_SUC], ['id']);
if (!$task_info) {
continue;
}
//获取主站证书有效期并更新
$ssl_time = $this->getDomainSslTime($v['domain']);
if ($ssl_time['from'] && $ssl_time['to']) {
$v->certificate_start_time = $ssl_time['from'];
$v->certificate_end_time = $ssl_time['to'];
$v->save();
}
//判断是否已经建站
if ($project_info['project_type'] == Project::PROJECT_TYPE_SEO) {
$type = DomainCreateTask::TYPE_BLOG;
} else {
$type = DomainCreateTask::TYPE_MAIN;
}
$task_info = $domainCreateTaskModel->read(['type' => $type, 'domain_id' => $v['id'], 'status' => DomainCreateTask::STATUS_SUC], ['id']);
if (!$task_info) {
continue;
}
if (empty($v['domain_end_time']) || $v['domain_end_time'] < date('Y-m-d H:i:s')) {
//获取主站域名有效期并更新
$valid_time = $this->getDomainValidTime($v['domain']);
if ($valid_time['start'] && $valid_time['end']) {
$v->domain_start_time = $valid_time['start'];
$v->domain_end_time = $valid_time['end'];
//获取主站证书有效期并更新
$ssl_time = $this->getDomainSslTime($v['domain']);
if ($ssl_time['from'] && $ssl_time['to']) {
$v->certificate_start_time = $ssl_time['from'];
$v->certificate_end_time = $ssl_time['to'];
$v->save();
}
}
if ($v['amp_status'] == 1) {
$domain_array = parse_url($v['domain']);
$host = $domain_array['host'] ?? $domain_array['path'];
$host_array = explode('.', $host);
if (count($host_array) <= 2) {
array_unshift($host_array, 'm');
} else {
$host_array[0] = 'm';
if (empty($v['domain_end_time']) || $v['domain_end_time'] < date('Y-m-d H:i:s')) {
//获取主站域名有效期并更新
$valid_time = $this->getDomainValidTime($v['domain']);
if ($valid_time['start'] && $valid_time['end']) {
$v->domain_start_time = $valid_time['start'];
$v->domain_end_time = $valid_time['end'];
$v->save();
}
}
$amp_domain = implode('.', $host_array);
if ($servers_ip_info['servers_id'] != ServerConfig::SELF_SITE_ID) {
//过滤已解析到别的ip的AMP域名
if (!check_domain_record($amp_domain, $servers_ip_info)) {
Log::channel('analyze_other')->error('AMP域名 [' . $amp_domain . '] 已解析到别的IP');
continue;
if ($v['amp_status'] == 1) {
$domain_array = parse_url($v['domain']);
$host = $domain_array['host'] ?? $domain_array['path'];
$host_array = explode('.', $host);
if (count($host_array) <= 2) {
array_unshift($host_array, 'm');
} else {
$host_array[0] = 'm';
}
$amp_domain = implode('.', $host_array);
if ($servers_ip_info['servers_id'] != ServerConfig::SELF_SITE_ID) {
//过滤已解析到别的ip的AMP域名
if (!check_domain_record($amp_domain, $servers_ip_info)) {
Log::channel('analyze_other')->error('AMP域名 [' . $amp_domain . '] 已解析到别的IP');
continue;
}
}
}
//获取AMP站证书有效期并更新
$amp_ssl_time = $this->getDomainSslTime($amp_domain);
if ($amp_ssl_time['from'] && $amp_ssl_time['to']) {
$v->amp_certificate_start_time = $amp_ssl_time['from'];
$v->amp_certificate_end_time = $amp_ssl_time['to'];
$v->save();
//获取AMP站证书有效期并更新
$amp_ssl_time = $this->getDomainSslTime($amp_domain);
if ($amp_ssl_time['from'] && $amp_ssl_time['to']) {
$v->amp_certificate_start_time = $amp_ssl_time['from'];
$v->amp_certificate_end_time = $amp_ssl_time['to'];
$v->save();
}
}
}
}
... ...
... ... @@ -717,7 +717,7 @@ class RelayInquiry extends Command
$project = Project::getProjectByDomain($domain);
if (empty($project)) {
$this->logChannel()->info('广告任务ID:' . $task['id'] . ', 转发对象:' . $re_website . '非v6链接,转发失败;', ['广告任务ID:' . $task['id'], '询盘ID:' . $form->id]);
return [[], $lang];
return [[], $lang, ''];
}
$lang = WebLanguage::getLangById($project->main_lang_id ?? 1)['short'];
... ...
... ... @@ -46,16 +46,17 @@ class RankDataLog extends BaseCommands
{
while (true) {
$log_id = Redis::rpop('rank_data_task');
echo $log_id . PHP_EOL;
if (!$log_id) {
sleep(10);
continue;
$log = RankDataLogModel::where('status', 0)->first();
}else{
$log = RankDataLogModel::where('id', $log_id)->where('status', 0)->first();
}
$log = RankDataLogModel::where('id', $log_id)->where('status', 0)->first();
if(!$log){
sleep(10);
continue;
}
try {
$this->output('项目开始:ID'.$log->project_id . ',APINO' . $log->api_no);
$project = Project::find($log->project_id);
... ...
... ... @@ -5,6 +5,7 @@ namespace App\Console\Commands\Tdk;
use App\Exceptions\ValidateException;
use App\Helper\Arr;
use App\Helper\Gpt;
use App\Helper\Translate;
use App\Models\Ai\AiCommand;
use App\Models\Com\NoticeLog;
use App\Models\Com\UpdateNotify;
... ... @@ -14,6 +15,7 @@ use App\Models\Project\AggregateKeywordAffix;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\ProjectKeywordAiTask;
use App\Models\WebSetting\WebLanguage;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
... ... @@ -51,6 +53,8 @@ class KeywordPageAiContent extends Command
'折线图',
];
protected $project;
/**
* @return bool
*/
... ... @@ -66,7 +70,7 @@ class KeywordPageAiContent extends Command
echo getmypid() . ' ' . date('Y-m-d H:i:s') . ' start project_id: ' . $project_id . PHP_EOL;
try {
ProjectServer::useProject($project_id);
$this->project = ProjectServer::useProject($project_id);
$update_rows = $this->ai_content($task);
... ... @@ -109,6 +113,10 @@ class KeywordPageAiContent extends Command
$prefix = empty($affix['prefix']) ? explode("\n", $default_affix['prefix']) : explode("\n", $affix['prefix']);
$suffix = empty($affix['suffix']) ? explode("\n", $default_affix['suffix']) : explode("\n", $affix['suffix']);
$lang = WebLanguage::getLangById($this->project['main_lang_id']??1);
$prefix = Translate::tran($prefix, $lang['short']);
$suffix = Translate::tran($suffix, $lang['short']);
if (!$prefix || !$suffix) {
throw new ValidateException('扩展标题前后缀不存在');
}
... ... @@ -193,8 +201,8 @@ class KeywordPageAiContent extends Command
//打乱顺序
shuffle($prefix);
shuffle($suffix);
//标题(title):{聚合页扩展标题前缀} keywords {聚合页扩展标题后缀} {聚合页扩展标题后缀}
//标题(title):{聚合页扩展标题前缀} keywords {聚合页扩展标题后缀} {聚合页扩展标题后缀}
return sprintf('%s %s %s %s', $prefix[0], $title, $suffix[0], $suffix[1]);
}
... ... @@ -211,6 +219,11 @@ class KeywordPageAiContent extends Command
shuffle($this->chart_types);
$prompt = str_replace('{chart_type}', $this->chart_types[0], $prompt);
}
if (strpos($prompt, '{lang}') !== false) {
$lang = WebLanguage::getLangById($this->project['main_lang_id']??1);
$lang = $lang['english'] ?? 'English';
$prompt = str_replace('{lang}', $lang, $prompt);
}
$text = Gpt::instance()->openai_chat_qqs($prompt);
if (!$text) {
... ... @@ -243,7 +256,7 @@ class KeywordPageAiContent extends Command
foreach ($body->childNodes as $child) {
$modifiedHtml .= $dom->saveHTML($child);
}
return $modifiedHtml;
return html_entity_decode($modifiedHtml, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
public function sendNotify($project_id)
... ...
... ... @@ -25,7 +25,7 @@ class AsideTicketController extends BaseController
public function index(AsideTicketListRequest $request)
{
$validated = $request->validated();
$lists = Tickets::with([
$query = Tickets::with([
'logs.engineer',
'project.pm',
'project.projectV6',
... ... @@ -66,9 +66,15 @@ class AsideTicketController extends BaseController
->orWhere('company_name', 'like', '%' . $search . '%');
});
});
})
->orderBy('id', 'desc')
->paginate($this->row, ['*'], 'page', $this->page);
});
// 添加排序功能
$sortField = $request->input('sort_field', 'plan_end_at');
$sortOrder = strtolower($request->input('sort_order', 'asc'));
$query->orderBy($sortField, $sortOrder);
// 添加次要排序:按状态升序排列
$query->orderBy('status', 'asc');
$lists = $query->paginate($this->row, ['*'], 'page', $this->page);
$this->response('success', Code::SUCCESS, $lists);
}
... ...
... ... @@ -95,6 +95,8 @@ class AsideTicketLogController extends BaseController
if ($project->wechat_switch && !$ticket->close_wechat)
$project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
$ticket->pushDing('finish');
}else{
$ticket->status = Tickets::STATUS_YANSHOU;
}
}
$ticket->save();
... ...
... ... @@ -24,7 +24,7 @@ class TicketListRequest extends FormRequest
public function rules()
{
return [
'status' => 'nullable|in:0,1,2,3|integer',
'status' => 'nullable|in:0,1,2,3,9|integer',
'search' => 'nullable|string', // 搜索关键词
'page' => 'nullable|integer',
'size' => 'nullable|integer',
... ...
... ... @@ -25,12 +25,14 @@ class AsideTicketListRequest extends FormRequest
{
return [
'project_id' => 'nullable|string',
'status' => 'nullable|in:0,1,2,3|integer',
'status' => 'nullable|in:0,1,2,3,9|integer',
'star' => 'nullable|in:1,2,3|integer',
'search' => 'nullable|string', // 搜索关键词
'engineer_id' => 'nullable|integer', // 工程师ID
'page' => 'nullable|integer',
'size' => 'nullable|integer',
'sort_field' => 'nullable|in:created_at,plan_end_at',
'sort_order' => 'nullable|in:asc,desc',
];
}
}
... ...
... ... @@ -27,7 +27,7 @@ class AsideTicketUpdateRequest extends FormRequest
'title' => 'nullable|string',
'content' => 'nullable|string',
'files' => 'nullable|array',
'status' => 'nullable|in:0,1,2,3|integer',
'status' => 'nullable|in:0,1,2,3,9|integer',
'engineer_ids' => 'nullable|array',
'star' => 'nullable|in:1,2,3|integer',
'plan_end_at' => 'nullable|date',
... ...
... ... @@ -15,8 +15,9 @@ class Tickets extends Base
const STATUS_PEDDING = 0; // 待处理
const STATUS_PROCESSING = 1; // 处理中
const STATUS_COMPLETED = 2; // 已完成
const STATUS_CLOSED = 3; // 已关闭,已失效
const STATUS_YANSHOU = 2; // 验收中
const STATUS_COMPLETED = 3; // 已完成
const STATUS_CLOSED = 9; // 已关闭,已失效,审核不通过,结束工单设置大一点,方便中途又要加状态
/**
* @return void
... ...