作者 赵彬吉
... ... @@ -128,7 +128,8 @@ class AfterDayCount extends Command
$data = $projectModel->where('gl_project.extend_type',0)
->where('gl_project.delete_status',0)
->where('gl_project.old_project_id',0)
->where('gl_project_deploy_optimize.start_date','<=',$date)
->where('gl_project_deploy_optimize.start_date','>=',$threeMonthsAgo.'-01')
->where('gl_project_deploy_optimize.start_date','<=',$threeMonthsAgo.'-31')
->where('gl_project.is_remain_today',1)
->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
->whereIn('gl_project.type',[2,4,6])
... ...
... ... @@ -151,7 +151,7 @@ class DomainInfo extends Command
$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('type', '=', 1)->where('certificate_end_time', '<', $end_day)->get()->toArray();
$list = $domainModel->where('status', '=', 1)->where('type', '!=', 2)->where('certificate_end_time', '<', $end_day)->get()->toArray();
foreach ($list as $v) {
$project_info = $projectModel->read(['id' => $v['project_id'], 'type' => ['!=', Project::TYPE_CLOSE]], ['serve_id', 'project_type']);
if (!$project_info) {
... ... @@ -204,7 +204,7 @@ class DomainInfo extends Command
$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('amp_type', '=', 1)->where('amp_certificate_end_time', '<', $end_day)->get()->toArray();
$list = $domainModel->where('status', '=', 1)->where('amp_status', 1)->where('amp_type', '!=', 2)->where('amp_certificate_end_time', '<', $end_day)->get()->toArray();
foreach ($list as $v) {
$domain_array = parse_url($v['domain']);
$host = $domain_array['host'] ?? $domain_array['path'];
... ...
... ... @@ -126,11 +126,12 @@ class RemainDay extends Command
}else{
$seo_remain_day = $deploy_build['seo_service_duration'];
}
if($seo_remain_day < 0){
$seo_remain_day = 0;
}
if($deploy_build['plan'] == 0 && $seo_remain_day == 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常未0,放入未续费中
$this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]);
// if($seo_remain_day < 0){
// $seo_remain_day = 0;
// }
if($deploy_build['plan'] == 0 && $seo_remain_day < 0 && $deploy_build['seo_service_duration'] != 0){//只有白帽版本的项目且剩余服务时常为0,放入未续费中
// $this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0,'extend_type'=>Project::TYPE_FIVE],['id'=>$item['id']]);
$this->project->edit(['seo_remain_day'=>$seo_remain_day,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]);
}else{
//同时包括白帽版本+默认版本的项目
$this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]);
... ... @@ -174,10 +175,10 @@ class RemainDay extends Command
}
}
$extend_type = 0;
if($remain_day < 0 && $deploy_build['service_duration'] != 0){
$remain_day = 0;
$extend_type = Project::TYPE_FIVE;
}
// if($remain_day < 0 && $deploy_build['service_duration'] != 0){
// $remain_day = 0;
// $extend_type = Project::TYPE_FIVE;
// }
$this->project->edit(['remain_day'=>$remain_day,'extend_type'=>$extend_type,'finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]);
return true;
}
... ...
... ... @@ -52,14 +52,55 @@ class LyhImportTest extends Command
* @time :2023/11/20 15:13
*/
public function handle(){
ProjectServer::useProject(2140);
ProjectServer::useProject(3951);
echo date('Y-m-d H:i:s') . 'start' . PHP_EOL;
$this->import2140CustomModule('https://ecdn6.globalso.com/upload/p/2140/file/2025-05/daoru.csv',2140);
$this->import2140CustomModule('https://ecdn6.globalso.com/upload/p/2140/file/2025-05/daoru.csv',3951);
DB::disconnect('custom_mysql');
echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
}
/**
* @remark :3951项目导入产品
* @name :import3951Product
* @author :lyh
* @method :post
* @time :2025/5/24 11:32
*/
public function import3951Product($url,$project_id){
$line_of_text = [];
$opts = [
'http' => [
'method' => 'GET',
'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
];
$file_handle = fopen($url, 'r', null, stream_context_create($opts));
while (!feof($file_handle)) {
$line_of_text[] = fgetcsv($file_handle, 0, ',');
}
fclose($file_handle);
$saveData = [];
foreach ($line_of_text as $k => $val){
if($k < 1){
continue;
}
if(empty($val[0])){
echo '跳过的名称:'.$val[0];
continue;
}
$saveData[] = [
'title'=>$val[0],
'thumb' => json_encode(['alt'=>'主图','url'=>'/upload/p/3951/image/',$val[2]],true),
'gallery' => json_encode([['alt'=>'主图','url'=>'/upload/p/3951/image/',$val[2]]],true)
];
}
}
/**
* @remark :导入产品分类
* @name :productCategory
* @author :lyh
... ...
... ... @@ -15,6 +15,7 @@ use App\Models\Ai\AiBlog;
use App\Models\Ai\AiBlogAuthor;
use App\Models\Com\NoticeLog;
use App\Models\Com\V6WeeklyReport;
use App\Models\Product\Category;
use App\Models\Project\AiBlogTask;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
... ... @@ -23,6 +24,8 @@ use App\Models\Project\Project;
use App\Models\Project\ProjectAiSetting;
use App\Models\ProjectAssociation\ProjectAssociation;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BTemplateMain;
use App\Models\Template\TemplateTypeMain;
use App\Models\Visit\Visit;
use App\Models\WebSetting\WebLanguage;
use App\Models\WebSetting\WebSetting;
... ... @@ -51,9 +54,38 @@ class lyhDemo extends Command
protected $description = '更新路由';
public function handle(){
dd(111);
return true;
}
public function _actionTemplateMain(){
$data = [];
$projectModel = new Project();
$lists = $projectModel->list(['delete_status' => 0,'project_type'=>0,'extend_type'=>0,'type'=>['in',[2,3,4,6]]], 'id', ['id']);
foreach ($lists as $val){
echo date('Y-m-d H:i:s') . '开始--项目的id:'. $val['id'] . PHP_EOL;
ProjectServer::useProject($val['id']);
$bTemplateMainModel = new BTemplateMain();
$info = $bTemplateMainModel->read(['type'=>2,'is_list'=>1],['id']);
$categoryModel = new Category();
$count = $categoryModel->counts(['id'=>['>',0]]);
if(($info === false) && ($count > 0)){
$mainModel = new TemplateTypeMain();
$mainInfo = $mainModel->read(['type'=>2,'is_list'=>1,'is_custom'=>0]);
$main_html = $mainInfo['main_html'];
$main_css = "<style id='globalsojs-styles'></style>";
//写入一条初始数据
$bTemplateMainModel->addReturnId(['type'=>2,'is_list'=>1,'is_custom'=>0,'project_id'=>$val['id'],'main_html'=>$main_html,'main_css'=>$main_css]);
$data[] = $val['id'];
}
DB::disconnect('custom_mysql');
echo date('Y-m-d H:i:s') . '结束--项目的id:'. $val['id'] . PHP_EOL;
}
dd($data);
}
public function _action_ai_blog(){
$projectModel = new Project();
$lists = $projectModel->list(['delete_status' => 0,'extend_type'=>0,'type'=>['in',[1,2,3,4,6]]], 'id', ['id']);
$lists = $projectModel->list(['delete_status' => 0,'extend_type'=>0,'type'=>['in',[2,3,4,6]]], 'id', ['id']);
foreach ($lists as $val) {
$aiSettingInfo = $this->getSetting($val['id']);
if($aiSettingInfo === false){
... ...
... ... @@ -23,6 +23,7 @@ use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
use App\Models\Project\ProjectAiSetting;
use App\Models\Project\ProjectKeyword;
use App\Models\RouteMap\RouteMap;
use App\Models\User\User;
... ... @@ -538,4 +539,21 @@ class PrivateController extends BaseController
];
return $this->success($result);
}
/**
* 获取项目信息,通过商户号
* @param Request $request
* @return false|string
*/
public function getProjectByMchId(Request $request)
{
$mch_id = intval($request->input('mch_id'));
$project_setting = ProjectAiSetting::where(['mch_id' => $mch_id])->first();
if (empty($project_setting))
return $this->error('商户号未匹配到项目');
$domain = DomainInfo::where(['status' => 1, 'project_id' => $project_setting->project_id])->first();
if (empty($domain))
return $this->error('项目未匹配到域名');
return $this->success(['domain' => $domain->domain]);
}
}
... ...
... ... @@ -38,6 +38,7 @@ class CheckListController extends BaseController
*/
public function lists(){
$this->map['status'] = 1;
$this->map['type'] = $this->map['type'] ?? 1;
$field = ['id','status','sort','text','created_at'];
$data = $this->model->lists($this->map,$this->page,$this->row,'id',$field);
$this->response('success',Code::SUCCESS,$data);
... ... @@ -52,6 +53,7 @@ class CheckListController extends BaseController
*/
public function list(){
$this->map['status'] = 1;
$this->map['type'] = $this->map['type'] ?? 1;
$field = ['id','status','sort','text','created_at'];
$data = $this->model->list($this->map,'id',$field);
$this->response('success',Code::SUCCESS,$data);
... ...
... ... @@ -11,6 +11,7 @@ namespace App\Http\Controllers\Aside\Optimize;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Project\OptimizeCheckList;
use App\Models\Project\OptimizeCheckLog;
use Illuminate\Http\Request;
... ... @@ -44,6 +45,7 @@ class CheckLogController extends BaseController
]);
$field = ['id','check_id','date','status','images','result','created_at'];
$this->map['status'] = 1;
$this->map['type'] = $this->map['type'] ?? 1;
$lists = $this->model->lists($this->map,$this->page,$this->row,'id',$field);
$this->response('success',Code::SUCCESS,$lists);
}
... ... @@ -80,6 +82,11 @@ class CheckLogController extends BaseController
'project_id.required' => 'project_id不能为空', 'check_id.required' => '问题id不能为空',
'date.required' => '时间不能为空', 'result.required' => '检查结果不能为空',
]);
$checkListModel = new OptimizeCheckList();
$listInfo = $checkListModel->read(['id'=>$this->param['check_id']],['id','type']);
if($listInfo !== false){
$this->param['type'] = $listInfo['type'];
}
$this->param = $this->model->saveHandleParam($this->param,$this->manage['id']);
if(isset($this->param['id']) && !empty($this->param['id'])){
$id = $this->param['id'];
... ...
... ... @@ -195,6 +195,7 @@ class OptimizeController extends BaseController
'gl_project.remain_day AS remain_day',
'gl_project.seo_remain_day AS seo_remain_day',
'gl_project.robots AS robots',
'gl_project.is_analysis AS is_analysis',
'gl_project.is_minor_languages AS is_minor_languages',
'gl_project.is_translate AS is_translate',
'gl_project.is_translate_tag AS is_translate_tag',
... ... @@ -593,5 +594,23 @@ class OptimizeController extends BaseController
$this->response('success',Code::SUCCESS,$resultData);
}
/**
* @remark :是否开启泛解析
* @name :saveIsAnalysis
* @author :lyh
* @method :post
* @time :2025/5/24 14:48
*/
public function saveIsAnalysis(){
$this->request->validate([
'id' => 'required',
'is_analysis' => 'required',
], [
'id.required' => '项目id不能为空',
'is_analysis.required' => 'is_analysis不能为空',
]);
$projectModel = new Project();
$data = $projectModel->edit(['is_analysis'=>$this->param['is_analysis']],['id'=>$this->param['id']]);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -16,6 +16,7 @@ use App\Models\ASide\APublicModel;
use App\Models\Channel\Channel;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\Manage;
use App\Models\Manage\ManageHr;
use App\Models\Project\Project;
use App\Models\Project\ProjectRenew;
use App\Models\Task\Task;
... ... @@ -36,7 +37,7 @@ class RenewProjectController extends BaseController
->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page);
if(!empty($lists)){
$lists = $lists->toArray();
$manageModel = new Manage();
$manageModel = new ManageHr();
$domainModel = new DomainInfo();
foreach ($lists['list'] as $k=>$item){
$item = $this->handleParam($item,$manageModel,$domainModel);
... ... @@ -122,7 +123,7 @@ class RenewProjectController extends BaseController
->with('project_after')->paginate($this->row, ['*'], 'page', $this->page);
if(!empty($lists)){
$lists = $lists->toArray();
$manageModel = new Manage();
$manageModel = new ManageHr();
$domainModel = new DomainInfo();
foreach ($lists['list'] as $k=>$item){
$item = $this->handleParam($item,$manageModel,$domainModel);
... ...
... ... @@ -215,9 +215,9 @@ class CNoticeController extends BaseController
$project_id = $this->user['project_id'];
$type = intval($request->input('type', 1));
$route = intval($request->input('page', 1));
if(($this->user['is_upgrade'] == 0) && ($type == 2) && in_array($route,[4,6])){
$this->fail('聚合页翻译请联系管理员');
}
// if(($this->user['is_upgrade'] == 0) && ($type == 2) && in_array($route,[4,6])){
// $this->fail('聚合页翻译请联系管理员');
// }
$url = $request->input('url', []);
$language = $request->input('language', []);
$is_sitemap = intval($request->input('is_sitemap', 0));
... ...
... ... @@ -471,7 +471,7 @@ class ProjectLogic extends BaseLogic
}
$param['upload_config'] = json_encode($param['upload_config'] ?? []);
$param['web_traffic_config'] = json_encode($param['web_traffic_config'] ?? []);
unset($param['robots']);//项目不保存robots
unset($param['robots'],$param['is_analysis']);//项目不保存robots
$this->model->edit($param,['id'=>$param['id']]);
Common::del_user_cache($this->model->getTable(),$param['id']);
return $this->success();
... ...
... ... @@ -489,14 +489,10 @@ class ProductLogic extends BaseLogic
foreach ($data as $k => $v){
$map = [];
$cateModel = new Category();
$status = [];
if($v != 3){
$status = ['status'=>$v];
}
$cateList = $cateModel->list($status,'id',['id','pid']);
$cateList = $cateModel->list(['status'=>1],'id',['id','pid']);
$this->param['featured_status'] = $this->param['featured_status'] ?? 0;
if(!empty($cateList) && ($this->param['featured_status'] != $cateModel::STATUS_ACTIVE)){
$featured_ids = $cateModel->where('title', 'Featured')->pluck('id')->toArray();
$featured_ids = $cateModel->formatQuery(['title'=>['in',['Featured','featured']]])->pluck('id')->toArray();
//获取当前的子集
$featured_arr = [];
foreach ($featured_ids as $id){
... ...
... ... @@ -73,3 +73,6 @@ Route::any('/addRedirect',[\App\Http\Controllers\Api\NoticeController::class,'ad
Route::post('/inquiry_relate_domain', [\App\Http\Controllers\Api\PrivateController::class, 'inquiry_relate_domain']);
// 通过域名获取项目人员配置
Route::get('/get_manage_by_domain', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectManageByDomain']);
// 获取信息通过商户号
Route::any('/get_project_by_mch_id', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectByMchId']);
\ No newline at end of file
... ...
... ... @@ -307,7 +307,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/getAnchorLink', [Aside\Optimize\OptimizeController::class, 'getAnchorLink'])->name('admin.optimize_getAnchorLink');//设置robots开关
Route::any('/getAfterCount', [Aside\Optimize\AfterCountController::class, 'getAfterCount'])->name('admin.optimize_getAfterCount');//售后统计数据
Route::any('/getAfterCountInfo', [Aside\Optimize\AfterCountController::class, 'getAfterCountInfo'])->name('admin.optimize_getAfterCountInfo');//售后统计数据详情
Route::any('/saveIsAnalysis', [Aside\Optimize\OptimizeController::class, 'saveIsAnalysis'])->name('admin.optimize_saveIsAnalysis');//优化中台开启与关闭泛解析
//检查列表
Route::prefix('check_list')->group(function () {
Route::any('/', [Aside\Optimize\CheckListController::class, 'lists'])->name('admin.check_lists');
... ...