作者 赵彬吉
... ... @@ -35,7 +35,7 @@ class CreateSite extends Command
if ($task) {
$model->edit(['status' => DomainCreateTask::STATUS_ING], ['id' => $task['id']]);
$re = $this->editDomainBt($task['domain_id']);
$re = $this->editDomainBt($task['domain_id'], $task['type']);
if (is_array($re)) {
$model->edit(['status' => DomainCreateTask::STATUS_FAL, 'error_msg' => $re[1]], ['id' => $task['id']]);
... ... @@ -45,7 +45,7 @@ class CreateSite extends Command
}
}
protected function editDomainBt($domain_id)
protected function editDomainBt($domain_id, $type)
{
//获取域名数据
$domain_model = new DomainInfo();
... ... @@ -73,6 +73,7 @@ class CreateSite extends Command
return [false, '获取服务器数据失败2'];
}
if ($type == 1) {
/*****************编辑主站*******************/
if ($domain_info['type'] == 2) {
$api_url = 'http://' . $serverInfo['init_domain'] . '/api/setSsl';
... ... @@ -101,17 +102,17 @@ class CreateSite extends Command
}
try {
$rs = HttpUtils::get($api_url, $api_param);
$rs = HttpUtils::get($api_url, $api_param, [], 180);
$rs = json_decode($rs, true);
if (isset($rs['status']) && $rs['status'] == 200) {
$this->output($domain_info['domain'] . ',主站创建成功');
} else {
return [false, '主站:' . ($rs['message'] ?? '未知错误')];
return [false, $rs['message'] ?? '未知错误'];
}
} catch (\Exception | GuzzleException $e) {
return [false, '主站:' . $e->getMessage()];
return [false, $e->getMessage()];
}
} else {
/*****************编辑amp站*******************/
if ($domain_info['amp_status']) {
$api_url_amp = 'http://' . $serverInfo['init_domain'] . '/api/createSiteAmp';
... ... @@ -127,15 +128,16 @@ class CreateSite extends Command
}
try {
$rs_amp = HttpUtils::get($api_url_amp, $api_param_amp);
$rs_amp = HttpUtils::get($api_url_amp, $api_param_amp, [], 180);
$rs_amp = json_decode($rs_amp, true);
if (isset($rs_amp['status']) && $rs_amp['status'] == 200) {
$this->output($domain_info['domain'] . ',amp站创建成功');
} else {
return [false, 'amp站:' . ($rs['message'] ?? '未知错误')];
return [false, $rs['message'] ?? '未知错误'];
}
} catch (\Exception | GuzzleException $e_amp) {
return [false, 'amp站:' . $e_amp->getMessage()];
return [false, $e_amp->getMessage()];
}
}
}
... ...
... ... @@ -11,6 +11,7 @@ namespace App\Console\Commands\Domain;
use App\Models\Devops\ServerConfig;
use App\Models\Devops\ServersIp;
use App\Models\Domain\DomainCreateTask;
use App\Models\Project\CountryCustom;
use App\Models\Project\Project;
use Illuminate\Console\Command;
... ... @@ -42,9 +43,6 @@ class DomainInfo extends Command
*/
public function handle()
{
//更新主站域名有效时间
$this->startUpdateDomain();
//主站证书到期更新
$this->startUpdateCert();
... ... @@ -58,27 +56,6 @@ class DomainInfo extends Command
}
/**
* 更新域名到期时间
* @author Akun
* @date 2024/02/26 10:26
*/
public function startUpdateDomain()
{
$domainModel = new DomainInfoModel();
$list = $domainModel->where('status', '=', 1)->where(function ($query) {
$query->whereNull('domain_end_time')->orWhere('domain_end_time', '<', date('Y-m-d H:i:s'));
})->get()->toArray();
foreach ($list as $v) {
$time = $this->updateDomain($v['domain']);
$data = [
'domain_start_time' => $time['start'],
'domain_end_time' => $time['end']
];
$domainModel->edit($data, ['id' => $v['id']]);
}
}
/**
* 主站证书到期更新
* @author Akun
* @date 2024/02/26 10:26
... ... @@ -88,33 +65,42 @@ class DomainInfo extends Command
$domainModel = new DomainInfoModel();
$projectModel = new Project();
$serverIpModel = new ServersIp();
$domainCreateTaskModel = new DomainCreateTask();
$end_day = date('Y-m-d H:i:s', time() + 3 * 24 * 3600);//3天后到期
$list = $domainModel->where('status', '=', 1)->where(function ($query) use ($end_day) {
$list = $domainModel->where('status', '=', 1)->where('type', 1)->where(function ($query) use ($end_day) {
$query->whereNull('certificate_end_time')->orWhere('certificate_end_time', '<', $end_day);
})->get()->toArray();
foreach ($list as $v) {
//更新证书到期时间
$data = [];
$ssl = $this->updateDomainSsl($v['domain']);
$ssl['from'] && $data['certificate_start_time'] = $ssl['from'];
$ssl['to'] && $data['certificate_end_time'] = $ssl['to'];
$project_info = $projectModel->read(['id' => $v['project_id']], ['serve_id']);
if ($v['type'] == 1 && $ssl['to'] < $end_day && $project_info) {
if (!$project_info) {
continue;
}
$servers_ip_info = $serverIpModel->read(['id' => $project_info['serve_id']], ['servers_id', 'ip', 'domain']);
if ($servers_ip_info && $servers_ip_info['servers_id'] != ServerConfig::SELF_SITE_ID && $this->check_cname($v['domain'], $servers_ip_info)) {
//非自建站项目,申请免费证书
$this->updatePrivate($v);
if (!$servers_ip_info) {
continue;
}
$ssl_new = $this->updateDomainSsl($v['domain']);
$ssl_new['from'] && $data['certificate_start_time'] = $ssl_new['from'];
$ssl_new['to'] && $data['certificate_end_time'] = $ssl_new['to'];
//过滤自建站项目域名
if ($servers_ip_info['servers_id'] == ServerConfig::SELF_SITE_ID) {
continue;
}
//过滤已解析到别的ip的域名
if (!$this->check_cname($v['domain'], $servers_ip_info)) {
continue;
}
$domainModel->edit($data, ['id' => $v['id']]);
//创建更新站点证书任务
$task_info = $domainCreateTaskModel->read(['type' => DomainCreateTask::TYPE_MAIN, 'domain_id' => $v['id'], 'status' => ['<', DomainCreateTask::STATUS_SUC]]);
if (!$task_info) {
$domainCreateTaskModel->add([
'server_id' => $servers_ip_info['servers_id'],
'project_id' => $v['project_id'],
'domain_id' => $v['id'],
'type' => DomainCreateTask::TYPE_MAIN
]);
}
}
}
... ... @@ -128,12 +114,12 @@ class DomainInfo extends Command
$domainModel = new DomainInfoModel();
$projectModel = new Project();
$serverIpModel = new ServersIp();
$domainCreateTaskModel = new DomainCreateTask();
$end_day = date('Y-m-d H:i:s', time() + 3 * 24 * 3600);//3天后到期
$list = $domainModel->where('status', '=', 1)->where('amp_status', 1)->where(function ($query) use ($end_day) {
$list = $domainModel->where('status', '=', 1)->where('amp_status', 1)->where('amp_type', 1)->where(function ($query) use ($end_day) {
$query->whereNull('amp_certificate_end_time')->orWhere('amp_certificate_end_time', '<', $end_day);
})->get()->toArray();
foreach ($list as $v) {
//更新amp站点证书到期时间
$domain_array = parse_url($v['domain']);
$host = $domain_array['host'] ?? $domain_array['path'];
$host_array = explode('.', $host);
... ... @@ -144,25 +130,36 @@ class DomainInfo extends Command
}
$amp_domain = implode('.', $host_array);
$data = [];
$ssl = $this->updateDomainSsl($amp_domain);
$ssl['from'] && $data['amp_certificate_start_time'] = $ssl['from'];
$ssl['to'] && $data['amp_certificate_end_time'] = $ssl['to'];
$project_info = $projectModel->read(['id' => $v['project_id']], ['serve_id']);
if ($v['amp_type'] == 1 && $ssl['to'] < $end_day && $project_info) {
if (!$project_info) {
continue;
}
$servers_ip_info = $serverIpModel->read(['id' => $project_info['serve_id']], ['servers_id', 'ip', 'domain']);
if ($servers_ip_info && $servers_ip_info['servers_id'] != ServerConfig::SELF_SITE_ID && $this->check_cname($amp_domain, $servers_ip_info)) {
//非自建站项目,申请免费证书
$this->updateAmpPrivate($v);
if (!$servers_ip_info) {
continue;
}
$ssl_new = $this->updateDomainSsl($amp_domain);
$ssl_new['from'] && $data['amp_certificate_start_time'] = $ssl_new['from'];
$ssl_new['to'] && $data['amp_certificate_end_time'] = $ssl_new['to'];
//过滤自建站项目域名
if ($servers_ip_info['servers_id'] == ServerConfig::SELF_SITE_ID) {
continue;
}
//过滤已解析到别的ip的域名
if (!$this->check_cname($amp_domain, $servers_ip_info)) {
continue;
}
$domainModel->edit($data, ['id' => $v['id']]);
//创建更新站点证书任务
$task_info = $domainCreateTaskModel->read(['type' => DomainCreateTask::TYPE_AMP, 'domain_id' => $v['id'], 'status' => ['<', DomainCreateTask::STATUS_SUC]]);
if (!$task_info) {
$domainCreateTaskModel->add([
'server_id' => $servers_ip_info['servers_id'],
'project_id' => $v['project_id'],
'domain_id' => $v['id'],
'type' => DomainCreateTask::TYPE_AMP
]);
}
}
}
... ... @@ -176,172 +173,43 @@ class DomainInfo extends Command
$customModel = new CountryCustom();
$projectModel = new Project();
$serverIpModel = new ServersIp();
$domainCreateTaskModel = new DomainCreateTask();
$end_day = date('Y-m-d H:i:s', time() + 3 * 24 * 3600);//3天后到期
$list = $customModel->where('status', 1)->where('is_create', 1)->where(function ($query) use ($end_day) {
$list = $customModel->where('status', 1)->where('is_create', 1)->where('type', 1)->where(function ($query) use ($end_day) {
$query->whereNull('certificate_end_time')->orWhere('certificate_end_time', '<', $end_day);
})->get()->toArray();
foreach ($list as $v) {
//更新证书到期时间
$data = [];
$ssl = $this->updateDomainSsl($v['custom_domain']);
$ssl['from'] && $data['certificate_start_time'] = $ssl['from'];
$ssl['to'] && $data['certificate_end_time'] = $ssl['to'];
$project_info = $projectModel->read(['id' => $v['project_id']], ['serve_id']);
if ($v['type'] == 1 && $ssl['to'] < $end_day && $project_info) {
$servers_ip_info = $serverIpModel->read(['id' => $project_info['serve_id']], ['servers_id', 'ip', 'domain']);
if ($servers_ip_info && $servers_ip_info['servers_id'] != ServerConfig::SELF_SITE_ID && $this->check_cname($v['custom_domain'], $servers_ip_info)) {
//申请免费证书
$this->updateCustomPrivate($v['custom_domain']);
$ssl_new = $this->updateDomainSsl($v['domain']);
$ssl_new['from'] && $data['certificate_start_time'] = $ssl_new['from'];
$ssl_new['to'] && $data['certificate_end_time'] = $ssl_new['to'];
}
}
$customModel->edit($data, ['id' => $v['id']]);
}
if (!$project_info) {
continue;
}
/**
* @remark :更新主站证书
* @name :updatePrivate
* @author :lyh
* @method :post
* @time :2023/12/8 16:16
*/
public function updatePrivate($param)
{
$url = 'https://' . $param['domain'] . '/api/applySsl/';
$param = [
"domain" => $param['domain'],
"rewrite" => $param['extend_config'],
'other_domain' => $param['other_domain'],
'is_https' => $param['is_https'],
'not_allow_country' => $param['not_allow_country'],
'not_allow_ip' => $param['not_allow_ip'],
'is_redirect' => $param['is_redirect']
];
return $this->curlRequest($url, $param);
$servers_ip_info = $serverIpModel->read(['id' => $project_info['serve_id']], ['servers_id', 'ip', 'domain']);
if (!$servers_ip_info) {
continue;
}
/**
* 更新amp站证书
* @param $param
* @return array
* @author Akun
* @date 2024/02/26 10:25
*/
public function updateAmpPrivate($param)
{
$url = 'https://' . $param['domain'] . '/api/createSiteAmp/';
$param = [
"domain" => $param['domain'],
'not_allow_country' => $param['not_allow_country'],
'not_allow_ip' => $param['not_allow_ip'],
'is_redirect' => $param['is_redirect']
];
return $this->curlRequest($url, $param);
//过滤自建站项目域名
if ($servers_ip_info['servers_id'] == ServerConfig::SELF_SITE_ID) {
continue;
}
/**
* 更新小语种自定义站证书
* @param $domain
* @return array
* @author Akun
* @date 2024/03/23 10:07
*/
public function updateCustomPrivate($domain)
{
$url = 'http://' . $domain . '/api/applySsl';
$param = [
'domain' => $domain,
'rewrite' => [],
'other_domain' => [],
'is_https' => 1
];
return $this->curlRequest($url, $param);
//过滤已解析到别的ip的域名
if (!$this->check_cname($v['custom_domain'], $servers_ip_info)) {
continue;
}
public function curlRequest($url, $data, $method = 'POST', $header = [], $time_out = 60)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, $time_out);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
if ($data)
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge([
'Expect:',
'Content-type: application/json',
'Accept: application/json',
], $header)
);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [$code, $response];
}
/**
* @remark :获取域名证书有效时间
* @name :updateDomainSsl
* @author :lyh
* @method :post
* @time :2023/9/11 15:07
*/
public function updateDomainSsl($domain)
{
$valid_from = '';
$valid_to = '';
try {
$context = stream_context_create([
'ssl' => [
'capture_peer_cert' => true,
'capture_peer_cert_chain' => false,
'verify_peer' => false,
'verify_peer_name' => false
],
//创建更新站点证书任务
$task_info = $domainCreateTaskModel->read(['type' => DomainCreateTask::TYPE_CUSTOM, 'domain_id' => $v['id'], 'status' => ['<', DomainCreateTask::STATUS_SUC]]);
if (!$task_info) {
$domainCreateTaskModel->add([
'server_id' => $servers_ip_info['servers_id'],
'project_id' => $v['project_id'],
'domain_id' => $v['id'],
'type' => DomainCreateTask::TYPE_CUSTOM
]);
$stream = stream_socket_client('ssl://' . $domain . ':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if ($stream) {
$remote_cert = stream_context_get_params($stream)['options']['ssl']['peer_certificate'];
if ($remote_cert) {
$valid_from = date('Y-m-d H:i:s', openssl_x509_parse($remote_cert)['validFrom_time_t']);
$valid_to = date('Y-m-d H:i:s', openssl_x509_parse($remote_cert)['validTo_time_t']);
}
}
fclose($stream);
} catch (\Exception $e) {
$valid_from = '';
$valid_to = '';
}
return ['from' => $valid_from, 'to' => $valid_to];
}
/**
* @remark :更新域名有效时间
* @name :updateDomain
* @author :lyh
* @method :post
* @time :2023/9/11 15:11
*/
public function updateDomain($domain)
{
$url = 'http://openai.waimaoq.com/v1/whois_api?domain=' . $domain;
$response = http_get($url);
$start = date('Y-m-d H:i:s');
$end = date('Y-m-d H:i:s');
if ($response['code'] == 200) {
$start = $response['text']['creation_date'];
$end = $response['text']['expiration_date'];
}
return ['start' => $start, 'end' => $end];
}
/**
... ...
... ... @@ -58,18 +58,16 @@ class Demo extends Command
protected $description = 'demo';
public function handle(){
$domain = "https://www.xawellauto.com/";
$token = md5($domain.date("Y-m-d"));
$url = "https://form.globalso.com/api/external-interface/domain_con/15243d63ed5a5738?domain=$domain&token=$token&source=1,2,3,4&num=15";
$url = $url."&sta_date=2024-07";
try {
$res = http_get($url,['charset=utf-8']);
} catch (\Exception | GuzzleException $e) {
errorLog('提交询盘信息失败', $domain, $e);
return false;
$optimizeModel = new DeployOptimize();
$list = $optimizeModel->list();
foreach ($list as $k => $v){
if(!empty($v['g_top_plan'])){
$v['g_top_plan']['is_compliance'] = 0;
$optimizeModel->edit(['g_top_plan'=>json_encode($v['g_top_plan'])],['id'=>$v['id']]);
echo date('Y-m-d H:i:s') . '重制g_top-project_id:'.$v['project_id'] . PHP_EOL;
}
echo date('Y-m-d H:i:s') . '数据:'.json_encode($res) . PHP_EOL;
return $res;
}
return true;
}
// public function handle(){
... ...
... ... @@ -33,7 +33,7 @@ class AutoPullController extends BaseController
}
}
$lists['list'][$k]['process_name'] = $process_name;
$lists['list'][$k]['process_name'] = $process_name ? $process_name : ['无'];
}
}
... ...
... ... @@ -105,6 +105,10 @@ class ComController extends BaseController
if($uploadCode != 1){
$info['role_menu'] = trim(str_replace(',41,',',',','.$info['role_menu'].','),',');
}
$projectCode = $this->getProjectWatermark();
if($projectCode != 1){
$info['role_menu'] = trim(str_replace(',50,',',',','.$info['role_menu'].','),',');
}
$this->map = [
'status'=>0,
'is_role'=>0,
... ... @@ -140,9 +144,28 @@ class ComController extends BaseController
if(!empty($data)){
$this->map['id'] = ['not in',$data];
}
$projectCode = $this->getProjectWatermark();
if($projectCode != 1){
$data[] = 50;
}
if(!empty($data)){
$this->map['id'] = ['not in',$data];
}
return $this->map;
}
/**
* @remark :是否开启水印功能
* @name :getProjectWatermark
* @author :lyh
* @method :post
* @time :2024/8/28 14:47
*/
public function getProjectWatermark(){
$projectModel = new Project();
$info = $projectModel->read(['id'=>$this->user['project_id']],['id','is_watermark']);
return $info['is_watermark'] ?? 0;
}
/**
* @remark :查看是否显示网站装饰
... ...
<?php
/**
* @remark :
* @name :OperationHeartbeatController.php
* @author :lyh
* @method :post
* @time :2024/8/28 14:02
*/
namespace App\Http\Controllers\Bside\BCom;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\Log\OperationHeartbeat;
class OperationHeartbeatController extends BaseController
{
/**
* @remark :保存数据
* @name :saveHeartbeat
* @author :lyh
* @method :post
* @time :2024/8/28 14:03
*/
public function saveHeartbeat(){
$this->request->validate([
'source'=>'required',
'is_list' => 'required',
'is_custom'=>'required',
'is_template'=>'required',
'operator_id'=>'required',
], [
'source.required' => '请选择页面',
'is_list.required' => '列表页/详情页',
'is_custom.required' => '是否为扩展模版',
'is_template.required' => '详情页/可视化',
'operator_id.required' => '操作人',
]);
$condition = ['source'=>$this->param['source'],'is_list'=>$this->param['is_list'],'is_custom'=>$this->param['is_custom'],'is_template'=>$this->param['is_template']];
$operationHeartbeatModel = new OperationHeartbeat();
$info = $operationHeartbeatModel->read($condition,['id','status']);
if($info === false){
$condition['status'] = 1;
$operationHeartbeatModel->addReturnId($condition);
}else{
$operationHeartbeatModel->edit(['status'=>1],['id'=>$info['id']]);
}
$this->response('success');
}
/**
* @remark :获取当前详情
* @name :getInfo
* @author :lyh
* @method :post
* @time :2024/8/28 14:29
*/
public function getInfo(){
$this->request->validate([
'source'=>'required',
'is_list' => 'required',
'is_custom'=>'required',
'is_template'=>'required',
'operator_id'=>'required',
], [
'source.required' => '请选择页面',
'is_list.required' => '列表页/详情页',
'is_custom.required' => '是否为扩展模版',
'is_template.required' => '详情页/可视化',
'operator_id.required' => '操作人',
]);
$condition = ['source'=>$this->param['source'],'is_list'=>$this->param['is_list'],'is_custom'=>$this->param['is_custom'],'is_template'=>$this->param['is_template']];
$operationHeartbeatModel = new OperationHeartbeat();
$info = $operationHeartbeatModel->read($condition,['id','status']);
$this->response('success',Code::SUCCESS,$info);
}
}
... ...
... ... @@ -319,13 +319,27 @@ class DomainInfoLogic extends BaseLogic
//新增建站任务
$task_model = new DomainCreateTask();
$task_info = $task_model->read(['domain_id'=>$this->param['id'],'status'=>['<',DomainCreateTask::STATUS_SUC]]);
$task_info = $task_model->read(['type'=>DomainCreateTask::TYPE_MAIN,'domain_id'=>$this->param['id'],'status'=>['<',DomainCreateTask::STATUS_SUC]]);
if(!$task_info){
$task_model->add([
'server_id' => $serversIpInfo['servers_id'],
'project_id' => $info['project_id'],
'domain_id' => $this->param['id']
'domain_id' => $this->param['id'],
'type' => DomainCreateTask::TYPE_MAIN
]);
}
if($data['amp_status']){
$task_amp_info = $task_model->read(['type'=>DomainCreateTask::TYPE_AMP,'domain_id'=>$this->param['id'],'status'=>['<',DomainCreateTask::STATUS_SUC]]);
if(!$task_amp_info){
$task_model->add([
'server_id' => $serversIpInfo['servers_id'],
'project_id' => $info['project_id'],
'domain_id' => $this->param['id'],
'type' => DomainCreateTask::TYPE_AMP
]);
}
}
// //主站生成证书
// EditDomainBt::dispatch($this->param['id']);
// //amp站生成证书
... ... @@ -436,8 +450,19 @@ class DomainInfoLogic extends BaseLogic
}
if($this->param['is_create']){
//创建站点,设置证书
EditCustomDomainBt::dispatch($id);
$task_model = new DomainCreateTask();
$task_amp_info = $task_model->read(['type'=>DomainCreateTask::TYPE_CUSTOM,'domain_id'=>$id,'status'=>['<',DomainCreateTask::STATUS_SUC]]);
if(!$task_amp_info){
$task_model->add([
'server_id' => $serversIpInfo['servers_id'],
'project_id' => $project_id,
'domain_id' => $id,
'type' => DomainCreateTask::TYPE_CUSTOM
]);
}
// //创建站点,设置证书
// EditCustomDomainBt::dispatch($id);
}
return $this->success();
... ...
... ... @@ -180,6 +180,7 @@ class UserLoginLogic
$info['project_location'] = $project['project_location'];
$info['open_export_product'] = $project['open_export_product'];
$info['is_update_language'] = $project['is_update_language'];
$info['is_watermark'] = $project['is_watermark'];
$info['configuration'] = $project['deploy_build']['configuration'];
$info['file_cdn'] = $project['deploy_build']['file_cdn'];
$info['project_type'] = $project['type'];
... ... @@ -284,6 +285,7 @@ class UserLoginLogic
$info['uptime_type'] = $this->getHistory($project);
$info['uptime'] = $project['uptime'];
$info['is_update_language'] = $project['is_update_language'];
$info['is_watermark'] = $project['is_watermark'];
$info['configuration'] = $project['deploy_build']['configuration'];
$info['project_type'] = $project['type'];
$info['storage_type'] = $project['storage_type'];
... ...
... ... @@ -12,4 +12,8 @@ class DomainCreateTask extends Base
const STATUS_ING = 1;
const STATUS_SUC = 2;
const STATUS_FAL = 3;
const TYPE_MAIN = 1;
const TYPE_AMP = 2;
const TYPE_CUSTOM = 3;
}
... ...
<?php
/**
* @remark :
* @name :OperationHeartbeat.php
* @author :lyh
* @method :post
* @time :2024/8/28 10:35
*/
namespace App\Models\Log;
use App\Models\Base;
/**
* @remark :用户心跳
* @name :OperationHeartbeat
* @author :lyh
* @method :post
* @time :2024/8/28 10:36
*/
class OperationHeartbeat extends Base
{
protected $table = 'gl_operation_heartbeat';
}
... ...
... ... @@ -77,7 +77,6 @@ class Project extends Base
public static function planMap()
{
return [
10 => '专业版',
1 => '标准版',
2 => '商务版',
3 => '旗舰版',
... ... @@ -87,6 +86,7 @@ class Project extends Base
7 => '定制建站(PS订制)',
8 => '星链网站(1年版)',
9 => '星链网站(2年版)',
10 => '专业版',
11 => '俄语标准版',
12 => '俄语商务版',
14 => '俄语旗舰版',
... ...
... ... @@ -39,18 +39,18 @@ class HttpUtils
* @return int
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public static function get($url, $data, $headers = [])
public static function get($url, $data, $headers = [],$timeout=60)
{
LogUtils::info("HttpUtils-GET请求URL:" . $url);
$response = Http::timeout(60)->withHeaders($headers)->get($url, $data);
$response = Http::timeout($timeout)->withHeaders($headers)->get($url, $data);
self::checkSuccess($response);
return $response->getBody()->getContents();
}
public static function post($url, $data, $headers = [])
public static function post($url, $data, $headers = [],$timeout=60)
{
LogUtils::info("HttpUtils-POST请求URL:" . $url);
$response = Http::timeout(60)->withHeaders($headers)->post($url, $data);
$response = Http::timeout($timeout)->withHeaders($headers)->post($url, $data);
self::checkSuccess($response);
return $response->getBody()->getContents();
}
... ...
... ... @@ -600,6 +600,10 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/save', [\App\Http\Controllers\Bside\Inquiry\InquiryFieldController::class, 'save'])->name('inquiry_field_save');
Route::any('/del', [\App\Http\Controllers\Bside\Inquiry\InquiryFieldController::class, 'del'])->name('inquiry_field_del');
});
Route::prefix('operation_heartbeat')->group(function () {
Route::any('/saveHeartbeat', [\App\Http\Controllers\Bside\BCom\OperationHeartbeatController::class, 'saveHeartbeat'])->name('operation_heartbeat_saveHeartbeat');
});
});
//无需登录验证的路由组
Route::group([], function () {
... ...