作者 赵彬吉
... ... @@ -78,14 +78,11 @@ class RemainDay extends Command
continue;
}
$diff = time() - strtotime($opInfo['start_date'] ?? $item->uptime);
$remain_day = $item['deploy_build']['service_duration'] + $item->pause_days - floor($diff / (60 * 60 * 24));
$remain_day = $item['deploy_build']['service_duration'] - floor($diff / (60 * 60 * 24));
}else{
if($item['type'] == Project::TYPE_TWO){
$compliance_day = ($item->finish_remain_day ?? 0);
if($item->finish_remain_day < $item->pause_days){
$item->pause_days = $item->finish_remain_day;
}
$remain_day = $item['deploy_build']['service_duration'] + $item->pause_days - $compliance_day;
$remain_day = $item['deploy_build']['service_duration'] - $compliance_day;
}else{
if($item->uptime){
$diff = time() - strtotime($item->uptime);
... ...
... ... @@ -9,6 +9,7 @@ namespace App\Console\Commands\Test;
use App\Helper\Arr;
use App\Helper\Translate;
use App\Models\Blog\Blog;
use App\Models\Blog\BlogCategory;
use App\Models\Com\KeywordVideoTask;
... ... @@ -58,65 +59,28 @@ class Demo extends Command
*/
protected $description = 'demo';
public static $main404Html = '<main>
<section data-section="section" data-screen="screen-large" class="section-404-wrap-block section-block-error404"
id="sectionIdyxqu938">
<div class="layout" data-unable="demo01-error404">
<img src="https://ecdn6.globalso.com/upload/m/image_other/2023-10/6528a87e594db30162.png" />
</div>
<p style="text-align: center">SORRY. THE PAGE HAS EITHER MOVED OR CANNOT BE FOUND.</p>
<style>
.section-block-error404 .layout {
height: 700px;
display: flex;
align-items: center;
justify-content: center;
}
.section-block-error404 img {
width: 400px;
}
@media only screen and (max-width:500) {
.section-block-error404 img {
max-width: 100%;
}
}
</style>
<script>
</script>
</section>
</main>';
public function handle(){
$projectModel = new Project();
$list = $projectModel->list(['is_upgrade'=>1]);
$data = [];
$list = $projectModel->list(['id'=>1659]);
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
ProjectServer::useProject($v['id']);
$this->init404Page($v['id']);
$this->getProduct();
DB::disconnect('custom_mysql');
}
echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
}
public static function init404Page($project_id){
$time = date('Y-m-d H:i:s');
$info = DB::connection('custom_mysql')->table('gl_web_custom_template')->where('url',BCustomTemplate::NOT_FOUND_PAGE_URL)->first();
if(empty($info)) {
$data = [
'project_id' => $project_id,
'name' => BCustomTemplate::NOT_FOUND_PAGE_URL,
'status' => 1,
'url' => BCustomTemplate::NOT_FOUND_PAGE_URL,
'html' => self::$main404Html,
'html_style' => '<style id="globalsojs-styles"></style>',
'title' => '404-Page not found',
'description' => 'Sorry. The page has either moved or cannot be found.',
'created_at' => $time, 'updated_at' => $time];
$id = DB::connection('custom_mysql')->table('gl_web_custom_template')->insertGetId($data);
//路由
$info = DB::connection('custom_mysql')->table('gl_route_map')->first();
if(empty($info)) {
$data = ['project_id' => $project_id, 'source' => RouteMap::SOURCE_PAGE, 'source_id' => $id, 'route' => BCustomTemplate::NOT_FOUND_PAGE_URL, 'created_at' => $time, 'updated_at' => $time];
DB::connection('custom_mysql')->table('gl_route_map')->insert($data);
public function getProduct(){
$productModel = new Product();
$lists = $productModel->list(['status'=>['!=',2]]);
if(!empty($lists)){
foreach ($lists as $v){
if(!empty($v['route'])){
echo date('Y-m-d H:i:s') . 'id :'.$v['id'] . PHP_EOL;
$route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']);
$productModel->edit(['route'=>$route],['id'=>$v['id']]);
}
}
}
}
... ...
... ... @@ -12,6 +12,7 @@ use App\Http\Logic\Bside\User\UserLoginLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Product\Category;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
... ... @@ -151,11 +152,7 @@ class PrivateController extends BaseController
}
/**
* @remark :模拟登录返回token
* @name :getToken
* @author :lyh
* @method :post
* @time :2024/3/29 16:19
* 模拟登录返回token
*/
public function getAutoToken(){
$this->request->validate([
... ... @@ -201,4 +198,96 @@ class PrivateController extends BaseController
$product_route = Product::where(['status' => Product::STATUS_ON])->whereNotIn('id', $feature_product)->pluck('route')->toArray();
return $this->success($product_route);
}
/**
* 获取项目信息---站群服务
* @param Request $request
* @return false|string
*/
public function getProjectByDomain(Request $request)
{
$domain = trim($request->input('domain'));
if (empty($domain)) {
return $this->error('非法参数!');
}
$project = Project::getProjectByDomain($domain);
if (empty($project)) {
return $this->error('未找到当前域名对应的项目!');
}
$optimize = $project->optimize;
$keyword = $project->project_keyword;
$keywords = explode("\r\n", $keyword ? $keyword->main_keyword : []);
$result = [
'company' => $project->company,
'company_en_name' => $optimize ? $optimize->company_en_name : '',
'company_en_description' => $optimize ? $optimize->company_en_description : '',
'keywords' => $keywords
];
return $this->success($result);
}
/**
* 获取产品信息---站群服务
* @param Request $request
* @return false|string
*/
public function getProjectProduct(Request $request)
{
$domain = trim($request->input('domain'));
$page_size = intval($request->input('page_size', 20));
if (empty($domain)) {
return $this->error('非法参数!');
}
$project = Project::getProjectByDomain($domain);
if (empty($project)) {
return $this->error('未找到当前域名对应的项目!');
}
ProjectServer::useProject($project->id);
$products = Product::with('category')->where(['status' => Product::STATUS_ON])->paginate($page_size);
// $products_ids = $products->pluck('id')->toArray();
// $category_ids = CategoryRelated::whereIn('product_id', $products_ids)->pluck('cate_id')->toArray();
// $category = Category::whereIn('id', $category_ids)->pluck('title', 'id')->toArray();
$keyword_id = $products->pluck('keyword_id')->toArray();
$keyword_ids = array_reduce($keyword_id, 'array_merge', array());
$keyword = Keyword::whereIn('id', $keyword_ids)->pluck('title', 'id')->toArray();
$result = [];
foreach ($products as $product) {
$product_keyword = [];
foreach ($product->keyword_id as $k_id) {
array_push($product_keyword, $keyword[$k_id]);
}
$product_category = $product->category->pluck('title')->toArray();
$result[] = [
'title' => $product->title,
'thumb' => $product->thumb,
'gallery' => $product->gallery,
'intro' => $product->intro,
'content' => $product->content,
'category' => $product_category,
'keyword' => $product_keyword,
'route' => $product->route
];
}
return $this->success($result);
}
/**
* 获取上线项目 --- 监控服务
* @param Request $request
* @return false|string
*/
public function getProjectOnline(Request $request)
{
$page_size = intval($request->input('page_size', 20));
$projects = Project::select(['id', 'title', 'company', 'type', 'finish_remain_day', 'remain_day'])->whereIn('type', [2, 3, 4, 6])->where('delete_status', 0)->paginate($page_size);
foreach ($projects as $project) {
$project->domain = $project->domainInfo ? $project->domainInfo->domain : '';
}
return $this->success($projects);
}
}
... ...
<?php
/**
* @remark :
* @name :ExtensionModuleController.php
* @author :lyh
* @method :post
* @time :2024/8/7 16:15
*/
namespace App\Http\Controllers\Bside\ExtensionModule;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\ExtensionModule\ExtensionModuleFieldLogic;
use App\Models\ExtentModule\Extension2205ModuleValueLog;
use App\Models\ExtentModule\ExtensionModule;
use App\Models\ExtentModule\ExtensionModuleField;
use App\Models\ExtentModule\ExtensionModuleValue;
use Illuminate\Support\Facades\DB;
/**
* @remark :单独处理2205项目扩展
* @name :Extension2205ModuleController
* @author :lyh
* @method :post
* @time :2024/9/4 14:32
*/
class Extension2205ModuleController extends BaseController
{
/**
* @remark :
* @name :get2205List
* @author :lyh
* @method :post
* @time :2024/9/4 16:28
*/
public function get2205List(){
$this->request->validate([
'uuid'=>'required',
],[
'uuid.required' => 'uuid不能为空',
]);
$log2205Model = new Extension2205ModuleValueLog();
$lists = $log2205Model->list(['module_id'=>1,'uuid'=>$this->param['uuid']]);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :流程控制处理(2205)
* @name :save2205Status
* @author :lyh
* @method :post
* @time :2024/9/4 14:34
*/
public function save2205Status(){
$this->request->validate([
'uuid'=>'required',
'status'=>'required',
'date'=>'required',
],[
'uuid.required' => 'uuid不能为空',
'status.required' => 'status不能为空',
'date.required' => 'status不能为空',
]);
if(empty($this->param['status']) || empty($this->param['date'])){
$this->response('success');
}
if($this->user['project_id'] != 2205){
$this->fail('当前接口为2205私有接口');
}
$this->param['module_id'] = $this->param['module_id'] ?? 1;
$filedModel = new ExtensionModuleField();
$fileInfo = $filedModel->read(['id'=>12]);//获取当前下拉框的数据
if($fileInfo === false){
$this->fail('当前字段不存在');
}
$statusData = json_decode($fileInfo['data'],true);
$data = [];
$number = 1;
foreach ($statusData as $v){
$data[$v] = $number;
$number++;
}
$log2205Model = new Extension2205ModuleValueLog();
$log2205Info = $log2205Model->read(['module_id'=>$this->param['module_id'],'uuid'=>$this->param['uuid'],'status'=>$this->param['status']]);
if($log2205Info == false){
$data = [
'module_id'=>$this->param['module_id'],
'uuid'=>$this->param['uuid'],
'status'=>$this->param['status'],
'date'=>$this->param['date'],
'remark'=>$this->param['remark'] ?? ''
];
$id = $log2205Model->addReturnId($data);
}else{
$id = $log2205Info['id'];
$data = [
'date'=>$this->param['date'],
'remark'=>$this->param['remark'] ?? ''
];
$log2205Model->edit($data,['id'=>$log2205Info['id']]);
}
$this->response('success',Code::SUCCESS,['id'=>$id]);
}
}
... ...
... ... @@ -192,12 +192,29 @@ class ExtensionModuleController extends BaseController
];
$moduleValueModel->addReturnId($data);
}else{
if($this->user['project_id'] == 2205 && $this->param['module_id'] == 1){
if($v['field_id'] == 12 && (!empty($v['value']) && !empty($info['value']))){//下拉框数据
$filedModel = new ExtensionModuleField();
$fileInfo = $filedModel->read(['id'=>12]);//获取当前下拉框的数据
$statusData = json_decode($fileInfo['data'],true);
$status_data = [];
$number = 1;
foreach ($statusData as $value){
$status_data[$value] = $number;
$number++;
}
if($status_data[$info['value']] > $status_data[$v['value']]){
$this->fail('流程控制不能回滚');
}
}
}
$moduleValueModel->edit(['value'=>$v['value'] ?? ''],['id'=>$info['id']]);
}
}
$this->response('success',Code::SUCCESS,['uuid'=>$this->param['uuid']]);
}
/**
* @remark :新增數據
* @name :addModuleValue
... ...
... ... @@ -209,10 +209,21 @@ class DomainInfoLogic extends BaseLogic
}
}
$extend_config = [];
$unique_extend = [];
if(isset($this->param['extend_config']) && $this->param['extend_config']){
foreach ($this->param['extend_config'] as $k=>$v){
if(!in_array($v['origin'],$unique_extend)){
$unique_extend[] = $v['origin'];
$extend_config[] = $v;
}
}
}
//保存301跳转数据+其他域名
$data = [
'other_domain'=>json_encode(array_filter($this->param['other_domain'] ?? [])),
'extend_config'=>json_encode(array_filter($this->param['extend_config'] ?? [])),
'extend_config'=>json_encode($extend_config),
'type'=>$this->param['type'],
'private_key' => $this->param['key'] ?? '',
'private_cert' => $this->param['cert'] ?? '',
... ...
... ... @@ -45,8 +45,8 @@ class NewsCategoryLogic extends BaseLogic
public function newsCategorySave(){
//验证名称是否存在
$this->verifyParamName($this->param['name']);
// DB::beginTransaction();
// try {
DB::beginTransaction();
try {
if(isset($this->param['id']) && !empty($this->param['id'])){
$id = $this->param['id'];
$this->param['alias'] = RouteMap::setRoute($this->param['alias'], RouteMap::SOURCE_NEWS_CATE, $id, $this->user['project_id']);
... ... @@ -62,11 +62,11 @@ class NewsCategoryLogic extends BaseLogic
$route = RouteMap::setRoute($this->param['alias'], RouteMap::SOURCE_NEWS_CATE, $id, $this->user['project_id']);
$this->model->edit(['alias'=>$route],['id'=>$id]);
}
// DB::commit();
// }catch (\Exception $e){
// DB::rollBack();
// $this->fail('系统错误,请联系管理员');
// }
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('系统错误,请联系管理员');
}
$this->addUpdateNotify(RouteMap::SOURCE_NEWS_CATE,$route);
$this->curlDelRoute(['new_route'=>$route]);
return $this->success(['id'=>$id]);
... ...
... ... @@ -447,7 +447,10 @@ class RankDataLogic extends BaseLogic
$without_project_ids = []; //不用处理排名的项目
$without_extension_project_ids = [658]; //是否达标只统计主词的
$extension_project_ids = [354]; //扩展词也到达标的
$ceaseProjectId = [
354,
1283
];//暂停项目id
$first_num = $first_page_num = $first_three_pages_num = $first_five_pages_num = $first_ten_pages_num = 0;
$first_page_without_extension_num = 0; //不算扩展词在首页的数量
$first_page_extension_num = 0; //扩展词在首页的数量
... ... @@ -516,8 +519,13 @@ class RankDataLogic extends BaseLogic
//项目表更新
if (($model->updated_date != date('Y-m-d') || empty($model_is_compliance)) && !$lang) {
$compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0;
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]);
Log::channel('rank_data')->info('项目' . $project_id . '达标天数+1:'. ($compliance_day + 1));
if(!in_array($project_id,$ceaseProjectId)){
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day + 1]);
Log::channel('rank_data')->info('项目' . $project_id . '达标天数+1:'. ($compliance_day + 1));
}else{
Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day]);
Log::channel('rank_data')->info('项目' . $project_id . '暂停项目达标天数不加:'. ($compliance_day));
}
}
$model->is_compliance = 1;
} else {
... ...
<?php
/**
* @remark :
* @name :ExtensionModuleValue.php
* @author :lyh
* @method :post
* @time :2024/8/7 16:10
*/
namespace App\Models\ExtentModule;
use App\Models\Base;
/**
* @remark :2205单独的类
* @name :Extension2205ModuleValueLog
* @author :lyh
* @method :post
* @time :2024/9/4 14:50
*/
class Extension2205ModuleValueLog extends Base
{
protected $table = 'gl_extension_module_value_log';
//连接数据库
protected $connection = 'custom_mysql';
}
... ...
... ... @@ -39,6 +39,15 @@ Route::any('getAutoToken', [\App\Http\Controllers\Api\PrivateController::class,
// 特殊项目 有效产品路由
Route::any('valid_product_route', [\App\Http\Controllers\Api\PrivateController::class, 'getProductRoute'])->name('api.valid_product_route');
// --------------------- 站群服务 ------------------------------------------
// 获取项目信息
Route::any('get_project_detail', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectByDomain'])->name('api.project_detail');
// 获取项目产品信息
Route::any('get_project_product', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectProduct'])->name('api.project_product');
// --------------------- 站群服务 ------------------------------------------
// --------------------- 监控服务 ------------------------------------------
Route::any('get_project_online', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectOnline'])->name('api.get_project_online');
//自建站接口转接
Route::post('selfSiteApi', [\App\Http\Controllers\Api\SelfSiteController::class, 'selfSiteApi']);
Route::post('selfSiteNotify', [\App\Http\Controllers\Api\SelfSiteController::class, 'selfSiteNotify']);
... ...
... ... @@ -593,6 +593,9 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/setSort', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'setSort'])->name('extension_module_setSort');
Route::any('/setSearchParam', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'setSearchParam'])->name('extension_module_setSearchParam');
Route::any('/delExtensionValue', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'delExtensionValue'])->name('extension_module_delExtensionValue');
//2205项目单独处理
Route::any('2205/get2205List', [\App\Http\Controllers\Bside\ExtensionModule\Extension2205ModuleController::class, 'get2205List'])->name('extension_module_get2205List');
Route::any('2205/save2205Status', [\App\Http\Controllers\Bside\ExtensionModule\Extension2205ModuleController::class, 'save2205Status'])->name('extension_module_save2205Status');
});
//自定义小语种文本信息
... ...