作者 刘锟

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

... ... @@ -58,6 +58,7 @@ class VideoTask extends Command
*/
public function handle()
{
echo '开始:'.PHP_EOL;
Log::info('开始视频推广任务');
$this->createSubTask();
$this->sendSubTask();
... ... @@ -81,10 +82,17 @@ class VideoTask extends Command
if (empty($task_project)){
break;
}
$domainModel = new DomainInfo();
$domainInfo = $domainModel->read(['project_id'=>$task_project->project_id]);
if($domainInfo === false){
$task_project->status = KeywordVideoTask::STATUS_CLOSE;
$task_project->save();
continue;
}
ProjectServer::useProject($task_project->project_id);
$keyword = $this->getProjectKeyword();
$keyword = $this->getProjectKeyword($task_project->number);
// 已经没有需要生成视频的关键词
if (FALSE == $keyword->isEmpty()) {
if (!$keyword) {
$task_project->status = KeywordVideoTask::STATUS_CLOSE;
$task_project->save();
continue;
... ... @@ -94,7 +102,7 @@ class VideoTask extends Command
if ($log){
continue;
}
$keywordInfo = $this->getKeywordImage($val->id,$task_project->project_id);
$keywordInfo = $this->getKeywordImage($val->id,$task_project->project_id,$domainInfo['domain']);
$array = [
'project_id' => $task_project->project_id,
'keyword_id' => $val->id,
... ... @@ -123,7 +131,7 @@ class VideoTask extends Command
if ($subTask->isEmpty())
return true;
foreach ($subTask as $val) {
$valData = json_decode($val->data);
$valData = (array)json_decode($val->data);
$task_id = 'v6-' . uniqid();
$data = [
'project_data' => [
... ... @@ -139,7 +147,7 @@ class VideoTask extends Command
$result = Http::post('http://216.250.255.116:7866/create_task', $data);
$val->task_id = $task_id;
$val->status = KeywordVideoTaskLog::STATUS_RUNNING;
$val->request_result = $result;
$val->result_info = $result;
$val->save();
}
return true;
... ... @@ -147,11 +155,14 @@ class VideoTask extends Command
/**
* 获取未生成页面的关键词
* @param $number
* @return mixed
*/
public function getProjectKeyword()
public function getProjectKeyword($number)
{
$keyword = Keyword::where('video', null)->whereNotNull('keyword_content')->inRandomOrder()->take(100)->get();
$keyword_arr_id = Keyword::where('video', null)->whereNotNull('keyword_content')->pluck('id')->toArray();
$keyword_id = array_rand($keyword_arr_id, $number);
$keyword = Keyword::whereIn("id", $keyword_id)->get();
return $keyword;
}
... ... @@ -173,19 +184,14 @@ class VideoTask extends Command
* @method :post
* @time :2024/2/23 16:28
*/
public function getKeywordImage($keyword_id,$project_id){
public function getKeywordImage($keyword_id,$project_id,$domain){
$keywordModel = new Keyword();
$keywordInfo = $keywordModel->read(['id'=>$keyword_id]);
//TODO::所有产品
$thumb = $this->getRecommendAndHotProducts($keywordInfo['route'],$project_id);
$domainModel = new DomainInfo();
$domainInfo = $domainModel->read(['project_id'=>$project_id]);
if(!empty($domainInfo)){
$keywordInfo['route'] = $domainInfo['domain'].'/'.$keywordInfo['route'];
}
$keyword_arr = Keyword::where("project_id",$project_id)->where("status",1)->inRandomOrder()->take(10)->pluck('title')->toArray();;
$data = [
'url'=>$keywordInfo['route'],
'url'=>$domain.'/'.$keywordInfo['route'],
'title'=>$keywordInfo['title'],
'keyword_title'=>$keywordInfo['keyword_title'],
'keyword_content'=>$keywordInfo['keyword_content'],
... ... @@ -209,13 +215,17 @@ class VideoTask extends Command
$productIds[] = $item->id;
}
if (count($productIds)<7){
$randomData = Product::where("project_id", $project_id)->where("status",1)->whereNotIn('id', $productIds)->inRandomOrder()->take(13-count($productIds))->get();
$product_all_id = Product::where("project_id", $project_id)->whereNotIn('id', $productIds)->where("status",1)->pluck('id')->toArray();
$product_id = array_rand($product_all_id, 13-count($productIds));
$randomData = Product::where("project_id", $project_id)->whereIn("id", $product_id)->get();
$products = $productsQuery->merge($randomData);
}else{
$products = $productsQuery;
}
}else{
$products = Product::where("project_id", $project_id)->where("status",1)->inRandomOrder()->take(13)->get();
$product_all_id = Product::where("project_id", $project_id)->where("status",1)->pluck('id')->toArray();
$product_id = array_rand($product_all_id, 13);
$products = Product::where("project_id", $project_id)->whereIn("id", $product_id)->get();
}
}
$data = [];
... ...
... ... @@ -18,6 +18,8 @@ use App\Models\Manage\EntryPosition;
use App\Models\Manage\ManageHr;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\DeployOptimize;
use App\Models\Project\MinorLanguages;
use App\Models\Project\Project;
use App\Models\WebSetting\WebSettingService;
use App\Services\ProjectServer;
... ... @@ -260,76 +262,49 @@ class Demo extends Command
//
// print_r($include);
// }
public function handle(){
// $projectModel = new Project();
// $list = $projectModel->list(['delete_status'=>0]);
// foreach ($list as $v){
ProjectServer::useProject(150);
$this->getKeywordImage();
DB::disconnect('custom_mysql');
// }
}
/**
* @remark :根据关键字获取产品主图
* @name :getKeywordList
* @author :lyh
* @method :post
* @time :2024/2/23 16:28
*/
public function getKeywordImage($keyword_id = 1,$project_id = 150){
$keywordModel = new Keyword();
$keywordInfo = $keywordModel->read(['id'=>$keyword_id]);
//TODO::所有产品
$thumb = $this->getRecommendAndHotProducts($keywordInfo['route'],$project_id);
$projectModel = new Project();
$list = $projectModel->list(['type'=>['in',[2,3]]]);
foreach ($list as $k => $v){
$domainModel = new DomainInfo();
$domainInfo = $domainModel->read(['project_id'=>$project_id]);
if(!empty($domainInfo)){
$keywordInfo['route'] = $domainInfo['domain'].'/'.$keywordInfo['route'];
}
$data = [
'url'=>$keywordInfo['route'],
'title'=>$keywordInfo['title'],
'keyword_title'=>$keywordInfo['keyword_title'],
'keyword_content'=>$keywordInfo['keyword_content'],
'product_list'=>$thumb ?? []
];
dd($data);
return $data;
if(empty($v['uptime'])){
//获取项目域名的时间
$domainInfo = $domainModel->read(['project_id'=>$v['id']]);
if($domainInfo !== false){
// dd($domainInfo);
$projectModel->edit(['uptime'=>$domainInfo['created_at']],['id'=>$v['id']]);
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
}
/**
* 关键词聚合页-推荐&热门产品
*/
public function getRecommendAndHotProducts($route,$project_id): ?array
{
$productIds = [];
$productKeyword = Keyword::where("project_id",$project_id)->where("route",$route)->first();
if (!empty($productKeyword)){
$productsQuery = Product::where("project_id", $project_id)->where("status",1)->where("keyword_id","like","%,".$productKeyword->id.",%")->limit(7)->get();
if (!empty($productsQuery)){
foreach ($productsQuery as $item){
$productIds[] = $item->id;
}
if (count($productIds)<7){
$randomData = Product::where("project_id", $project_id)->where("status",1)->whereNotIn('id', $productIds)->inRandomOrder()->take(13-count($productIds))->get();
$products = $productsQuery->merge($randomData);
}else{
$products = $productsQuery;
}
}else{
$products = Product::where("project_id", $project_id)->where("status",1)->inRandomOrder()->take(13)->get();
}
}
$data = [];
if (!empty($products)){
foreach ($products as $item){
$data[] = !empty($item->thumb) && $item->thumb['url'] != "" ? getImageUrl($item->thumb['url']) : "";
}
}
return $data;
}
// public function handle(){
// $projectModel = new DeployOptimize();
// $list = $projectModel->list(['project_id'=>['<',187]]);
// foreach ($list as $v){
// echo date('Y-m-d H:i:s') . 'end'.json_encode($v) . PHP_EOL;
// $data = [];
// if(!empty($v['minor_languages']) && is_array($v['minor_languages'])){
// foreach ($v['minor_languages'] as $k1=> $v1){
// if(!empty($v1['tl']) && !empty($v1['type'])){
// $data[] = [
// 'language'=>$v1['tl'],
// 'type'=>$v1['type'],
// 'keywords'=>$v1['keywords'],
// 'service_day'=>$v1['service_day'],
// 'project_id'=>$v['project_id'],
// 'created_at'=>date('Y-m-d H:i:s'),
// 'updated_at'=>date('Y-m-d H:i:s')
// ];
// }
// }
// }
// $languageModel = new MinorLanguages();
// $languageModel->insert($data);
// }
//
// }
public function printMessage()
{
$client = new Client();
... ...
... ... @@ -55,7 +55,7 @@ class UpdateRoute extends Command
*/
public function handle(){
$projectModel = new Project();
$list = $projectModel->list(['id'=>264]);
$list = $projectModel->list(['id'=>917]);
$data = [];
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
... ...
... ... @@ -8,6 +8,7 @@ use App\Models\Product\Product;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
use App\Models\Template\BCustomTemplate;
use App\Models\WebSetting\WebLanguage;
use App\Services\ProjectServer;
use Carbon\Carbon;
use GuzzleHttp\Client;
... ... @@ -130,6 +131,19 @@ class WebTraffic extends Command
'https://search.yahoo.com/' => 5,
'https://www.facebook.com/' => 5,
];
//俄语
protected $eylyzb = [
'https://www.yandex.com/' => 630,
'https://www.google.com/' => 30,
'http://www.google.com/' => 30,
'http://www.bing.com/' => 20,
'https://www.bing.com/' => 5,
'https://www.youtube.com/' => 5,
'https://search.yahoo.com/' => 5,
'https://www.facebook.com/' => 5,
];
protected $otherzb = [700, 300]; //模拟访问来源占比 (非美国) google.com|google.其他后缀
protected $pc_ua = [
... ... @@ -230,7 +244,7 @@ class WebTraffic extends Command
'ip' => $ips[$project_key]['ip'],
'url' => $project['visit_urls'][$j],
'device_port' => $project['device_port'],
'referrer_url' => $this->getReferer($ips[$project_key]['ip_area']),
'referrer_url' => $this->getReferer($ips[$project_key]['ip_area'], $project['lang']),
'user_agent' => $project['user_agent'],
];
Log::channel('traffic')->info('traffic project_id:' . $project['project_id'], $data);
... ... @@ -293,12 +307,15 @@ class WebTraffic extends Command
$startTime = Carbon::now()->addMonths(-9)->startOfDay()->toDateTimeString();
$query->where('pdo.start_date', '<', $startTime);
}
})->select('pdo.project_id')->forPage($page, 500)->get();
})->select(['pdo.project_id','gl_project.main_lang_id'])->forPage($page, 500)->get();
//其他地方在引流的域名
$other = DB::connection('projects_mysql')->table('projects')->where('switch', 1)->pluck('domain')->toArray();
$data = [];
foreach ($list as $project) {
$lang = WebLanguage::getLangById($this->project['main_lang_id']??1)['short'];
if(empty($project->domainInfo['domain'])){
continue;
}
//其他地方在引流就不再引流了
if(in_array($project->domainInfo['domain'], $other)){
continue;
... ... @@ -306,9 +323,9 @@ class WebTraffic extends Command
$data[] = [
'project_id' => $project['project_id'],
'domain' => 'https://' . $project->domainInfo['domain'] . '/',
'lang' => $lang
];
}
return $data;
}
... ... @@ -440,7 +457,12 @@ class WebTraffic extends Command
/**
* 获取访问来路
*/
protected function getReferer($ip_area){
protected function getReferer($ip_area, $lang){
if($lang == 'ru'){
return $this->get_rand($this->eylyzb);
}
if($ip_area == '美国'){
$referer = $this->get_rand($this->lyzb);
}else{
... ...
... ... @@ -12,6 +12,8 @@ namespace App\Http\Controllers\Aside\Com;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Com\KeywordVideoTask;
use App\Models\Domain\DomainInfo;
use App\Models\Project\Project;
class KeywordVideoController extends BaseController
{
... ... @@ -24,9 +26,55 @@ class KeywordVideoController extends BaseController
*/
public function lists(){
$keywordModel = new KeywordVideoTask();
$lists = $keywordModel->lists($this->map,$this->page,$this->row);
$query = $keywordModel->leftJoin('gl_project', 'gl_keyword_video_task.project_id', '=', 'gl_project.id');
$query = $this->searchParam($query);
$query = $this->orderByList($query);
$lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray();
$this->response('success',Code::SUCCESS,$lists);
}
/**
* 需要查询的字段
* @return array
*/
public function selectParam(){
$select = [
'gl_keyword_video_task.id AS id',
'gl_keyword_video_task.project_id AS project_id',
'gl_keyword_video_task.number AS number',
'gl_keyword_video_task.status AS status',
'gl_keyword_video_task.sort AS sort',
'gl_keyword_video_task.created_at AS created_at',
'gl_keyword_video_task.updated_at AS updated_at',
'gl_project.title AS title',
'gl_project.company AS company',
];
return $select;
}
/**
* @remark :搜索参数处理
* @name :searchParam
* @author :lyh
* @method :post
* @time :2023/8/18 10:58
*/
public function searchParam(&$query){
if(isset($this->map['project_name']) && is_array($this->map['project_name'])){
$query->where('gl_project.title','like','%'.$this->map['project_name'].'%');
}
return $query;
}
/**
* @remark :排序
* @name :orderByList
* @author :lyh
* @method :post
* @time :2023/12/29 17:14
*/
public function orderByList(&$query){
$query = $query->orderBy('gl_keyword_video_task.sort', 'desc')->orderBy('gl_keyword_video_task.id', 'desc');
return $query;
}
/**
* @remark :创建关键字任务池子
... ... @@ -43,6 +91,12 @@ class KeywordVideoController extends BaseController
'project_id.required' => '项目唯一标识不为空',
'number.required' => 'number不为空',
]);
//查看当前项目是否有正式域名
$domainModel = new DomainInfo();
$info = $domainModel->read(['project_id'=>$this->param['project_id']]);
if($info === false){
$this->response('请先设置域名',Code::SYSTEM_ERROR);
}
$keywordModel = new KeywordVideoTask();
$rs = $keywordModel->add($this->param);
if($rs === false){
... ... @@ -65,7 +119,7 @@ class KeywordVideoController extends BaseController
'id.required' => '主键标识不为空',
]);
$keywordModel = new KeywordVideoTask();
$rs = $keywordModel->edit(['sort'=>$this->param['sort']],['id'=>$this->param['id']]);
$rs = $keywordModel->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('编辑失败',Code::SYSTEM_ERROR);
}
... ...
... ... @@ -5,19 +5,15 @@ namespace App\Http\Controllers\Aside\Optimize;
use App\Enums\Common\Code;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Optimize\OptimizeLogic;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\Ai\AiPrefix;
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\OnlineCheck;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use App\Models\RankData\RankData;
use App\Models\Task\Task;
use Illuminate\Support\Facades\DB;
/**
* @remark :优化
... ... @@ -194,6 +190,7 @@ class OptimizeController extends BaseController
'gl_project_deploy_optimize.quality_mid AS quality_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.start_date AS start_date',
'gl_project_deploy_optimize.backlink AS backlink',
];
return $select;
}
... ... @@ -365,4 +362,24 @@ class OptimizeController extends BaseController
$projectModel->edit([$this->param['type']=>$this->param['status']],['id'=>$this->param['project_id']]);
$this->response('success');
}
/**
* @remark :标记反向链接
* @name :editBacklink
* @author :lyh
* @method :post
* @time :2024/2/29 9:18
*/
public function editBacklink(){
$this->request->validate([
'project_id'=>'required',
'backlink'=>'required',
],[
'project_id.required' => 'project_id不能为空',
'backlink.required' => 'backlink不能为空',
]);
$optimizeModel = new DeployOptimize();
$optimizeModel->edit(['backlink'=>$this->param['backlink']],['project_id'=>$this->param['project_id']]);
$this->response('success');
}
}
... ...
<?php
/**
* @remark :
* @name :MinorLanguagesController.php
* @author :lyh
* @method :post
* @time :2024/2/28 9:08
*/
namespace App\Http\Controllers\Aside\Project;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Project\MinorLanguages;
/**
* @remark :小语种
* @name :MinorLanguagesController
* @author :lyh
* @method :post
* @time :2024/2/28 9:09
*/
class MinorLanguagesController extends BaseController
{
public function getMinorLanguageList(){
$this->request->validate([
'project_id'=>'required',
],[
'project_id.required' => 'keyword不能为空',
]);
$languageModel = new MinorLanguages();
$lists = $languageModel->list($this->map,'id',['language','type','keywords','service_day']);
$this->response('success',Code::SUCCESS,$lists);
}
}
... ...
... ... @@ -76,6 +76,49 @@ class ProjectController extends BaseController
}
/**
* 需要查询的字段
* @return array
*/
public function selectParam(){
$select = [
'gl_project.id AS id',
'gl_project.title AS title',
'gl_project.channel AS channel',
'gl_project.company AS company',
'gl_project.type AS type',
'gl_project.is_upgrade AS is_upgrade',
'gl_project.created_at AS created_at',
'gl_project.cooperate_date AS cooperate_date',
'gl_project_online_check.id AS online_check_id',
'gl_project_online_check.question AS question',
'gl_project_online_check.optimist_status AS optimist_status',
'gl_project_online_check.qa_status AS qa_status',
'gl_project_payment.amount AS amount',
'gl_project_deploy_build.dept_id AS dept_id',
'gl_project_deploy_build.keyword_num AS key',
'gl_project_deploy_build.service_duration AS day',
'gl_project_deploy_build.leader_mid AS leader_mid',
'gl_project_deploy_build.manager_mid AS manager_mid',
'gl_project_deploy_build.designer_mid AS designer_mid',
'gl_project_deploy_build.tech_mid AS tech_mid',
'gl_project_deploy_build.test_domain AS test_domain',
'gl_project_deploy_build.plan AS plan',
'gl_project_deploy_optimize.dept_id AS optimize_dept_id',
'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid',
'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid',
'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid',
'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.tech_leader AS tech_leader',
'gl_project_deploy_optimize.domain AS domain',
'gl_project_deploy_optimize.quality_mid AS quality_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.api_no AS api_no',
];
return $select;
}
/**
* @remark :排序
* @name :orderByList
* @author :lyh
... ... @@ -146,49 +189,6 @@ class ProjectController extends BaseController
}
/**
* 需要查询的字段
* @return array
*/
public function selectParam(){
$select = [
'gl_project.id AS id',
'gl_project.title AS title',
'gl_project.channel AS channel',
'gl_project.company AS company',
'gl_project.type AS type',
'gl_project.is_upgrade AS is_upgrade',
'gl_project.created_at AS created_at',
'gl_project.cooperate_date AS cooperate_date',
'gl_project_online_check.id AS online_check_id',
'gl_project_online_check.question AS question',
'gl_project_online_check.optimist_status AS optimist_status',
'gl_project_online_check.qa_status AS qa_status',
'gl_project_payment.amount AS amount',
'gl_project_deploy_build.dept_id AS dept_id',
'gl_project_deploy_build.keyword_num AS key',
'gl_project_deploy_build.service_duration AS day',
'gl_project_deploy_build.leader_mid AS leader_mid',
'gl_project_deploy_build.manager_mid AS manager_mid',
'gl_project_deploy_build.designer_mid AS designer_mid',
'gl_project_deploy_build.tech_mid AS tech_mid',
'gl_project_deploy_build.test_domain AS test_domain',
'gl_project_deploy_build.plan AS plan',
'gl_project_deploy_optimize.dept_id AS optimize_dept_id',
'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid',
'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid',
'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid',
'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.tech_leader AS tech_leader',
'gl_project_deploy_optimize.domain AS domain',
'gl_project_deploy_optimize.quality_mid AS quality_mid',
'gl_project_deploy_optimize.design_mid AS design_mid',
'gl_project_deploy_optimize.api_no AS api_no',
];
return $select;
}
/**
* 搜索框
* @param $query
* @return mixed
... ...
... ... @@ -80,6 +80,11 @@ class LoginController extends BaseController
*/
public function autologin(UserLoginLogic $logic, EncryptUtils $encrypt)
{
$this->request->validate([
'code' => 'required',
],[
'code.required' => 'code不能为空',
]);
$serviceSettingModel = new Service();
$info = $serviceSettingModel->read(['type'=>4]);
if($info === false){
... ...
... ... @@ -284,7 +284,7 @@ class ProductController extends BaseController
$v = $this->getHandleFileImage($v);
$template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL);
$v['is_renovation'] = $this->getIsRenovation(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL,$template_id,$v['id'] ?? 0);
$v['url'] = $this->user['domain'].$v['route'];
$v['url'] = $this->user['domain'].$v['route'] ?? '';
//获取当前数据扩展字段及值
$v['extend'] = $this->getExtendInfo($v['id']);
return $v;
... ... @@ -525,4 +525,22 @@ class ProductController extends BaseController
}
$this->response('success',Code::SUCCESS,$info);
}
/**
* @remark :Ai发布新闻
* @name :sendAiNews
* @author :lyh
* @method :post
* @time :2024/1/26 15:33
*/
public function sendAiProduct(){
$this->request->validate([
'keyword'=>'required',
],[
'keyword.required' => 'keyword不能为空',
]);
$data = curl_c('http://title.globalso.com/ajax_data_for_web.php?keyword='.$this->param['keyword'],false);
@file_put_contents(storage_path('logs/lyh_error.log'), var_export($data, true) . PHP_EOL, FILE_APPEND);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -84,10 +84,12 @@ class CreateKeywordLogic extends BaseLogic
}
$except_k = ['Quality','Philippines','USA','UK','America','China','Wholesale','Hot Sale','Cheap','cheap','price','pricelist','hot sale','Price','Pricelist','With ','For ','And ','Oem','Odm','Supplier','Manufacturer','CE Certification','Factory','Exporters','Company','Companies','Suppliers','Manufacturers','Factories','Company','Companies','Exporters','Exporter','Buy ',' Buy','Where ','What ','When ','How ','Which ','Producer','Producers','Best Selling','Hot Selling','Near','Chinese','India','use','high quality','discount','online','custom','customized','Enterprise','Agent','Plant','Refinery','Foundry','Maker','Distributor'];
$filterKeywords = [];
foreach ($this->param['keyword'] as $k=>$v){
if(in_array($v,$except_k)){
foreach ($this->param['keyword'] as $k=>$keyword){
foreach ($except_k as $exc_k){
if(strpos(strtolower($keyword),strtolower($exc_k)) !== false){
unset($this->param['keyword'][$k]);
$filterKeywords[] = $v;
$filterKeywords[] = $keyword;
}
}
}
$prefix_keyword = $this->prefixKeyword($this->param['prefix'] ?? [],$this->param['keyword'],$except_k);
... ...
... ... @@ -12,6 +12,7 @@ use App\Models\Com\NoticeLog;
use App\Models\Com\UpdateLog;
use App\Models\Devops\ServerConfig;
use App\Models\Project\InquiryFilterConfig;
use App\Models\Project\MinorLanguages;
use App\Models\Project\ProjectRenew;
use App\Models\Template\Setting;
use App\Models\User\ProjectMenu;
... ... @@ -150,12 +151,9 @@ class ProjectLogic extends BaseLogic
$this->saveProjectDeployOptimize($this->param['deploy_optimize']);
//保存售后信息
$this->saveProjectAfter($this->param['project_after']);
//保存询盘过滤配置
// $this->param['inquiry_filter_config']['project_id'] = $this->param['id'];
// $this->saveInquiryFilterConfig($this->param['inquiry_filter_config']);
$this->saveMinorLanguages($this->param['minor_language'] ?? []);
$this->syncImageFile($this->param['project_location'],$this->param['id']);
//创建站点
// $this->createSite($this->param);
(new SyncService())->projectAcceptAddress($this->param['id']);
}
DB::commit();
... ... @@ -186,6 +184,9 @@ class ProjectLogic extends BaseLogic
$param['extend_type'] = Project::TYPE_FIVE;
unset($param['type']);
}
if((($param['type'] == Project::TYPE_TWO) || ($param['type'] == Project::TYPE_THREE)) && empty($param['uptime'])){
$param['uptime'] = date('Y-m-d H:i:s');
}
if(isset($param['level']) && !empty($param['level'])){
$param['level'] = Arr::arrToSet($param['level']);
}
... ... @@ -210,7 +211,8 @@ class ProjectLogic extends BaseLogic
}
$param['remain_day'] = $param['deploy_build']['service_duration'] - $param['finish_remain_day'];
$param['remain_day'] = ($param['remain_day'] > 0) ? $param['remain_day'] : 0;
unset($param['payment'],$param['deploy_build'],$param['deploy_optimize'],$param['online_check'],$param['project_after'],$param['inquiry_filter_config']);
unset($param['payment'],$param['deploy_build'],$param['deploy_optimize'],
$param['online_check'],$param['project_after'],$param['inquiry_filter_config'],$param['minor_language']);
//文件上传默认值
if($param['is_upload_manage']){
$param['upload_config'] = [
... ... @@ -224,6 +226,7 @@ class ProjectLogic extends BaseLogic
$param['is_visualization'] = json_encode($param['is_visualization']);
}
}
$this->model->edit($param,['id'=>$param['id']]);
Common::del_user_cache($this->model->getTable(),$param['id']);
return $this->success();
... ... @@ -278,7 +281,7 @@ class ProjectLogic extends BaseLogic
//更改域名
$this->editDomainStatus($deploy_optimize['domain'],$deploy_optimize['project_id']);
}
$deploy_optimize['minor_languages'] = Arr::a2s(!empty($deploy_optimize['minor_languages']) ? $deploy_optimize['minor_languages'] : []);
$deploy_optimize['minor_languages'] = Arr::a2s( []);
$deploy_optimize['minor_keywords'] = Arr::a2s(!empty($deploy_optimize['minor_keywords']) ? $deploy_optimize['minor_keywords'] : []);
$deploy_optimize['special'] = !empty($deploy_optimize['special']) ? ','.trim($deploy_optimize['special'],',').',' : '';
//是否更新了api_no
... ... @@ -305,6 +308,32 @@ class ProjectLogic extends BaseLogic
}
/**
* @remark :保存小语种配置
* @name :saveMinorLanguages
* @author :lyh
* @method :post
* @time :2023/8/30 13:57
*/
protected function saveMinorLanguages($minor_language){
$data = [];
//查询数据是否存在
$languageModel = new MinorLanguages();
$languageModel->del(['project_id'=>$this->param['id']]);
if(!empty($minor_language)){
foreach ($minor_language as $k => $v){
if(!empty($v['language'])){
$v['project_id'] = $this->param['id'];
$data[] = $v;
}
}
if(!empty($data)){
$languageModel->insert($minor_language);
}
}
return $this->success();
}
/**
* @remark :创建初始数据
* @name :createProjectData
* @author :lyh
... ...
... ... @@ -14,6 +14,7 @@ use App\Http\Logic\Bside\BaseLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\MinorLanguages;
use App\Models\Project\Project;
use App\Models\RankData\ExternalLinks;
use App\Models\RankData\ExternalLinks as ExternalLinksModel;
... ... @@ -83,14 +84,16 @@ class RankDataLogic extends BaseLogic
$lang_data = $quanqiusou_api->getLangRankData($api_no);
$lang_data = Arr::setValueToKey($lang_data, 'language');
$data['langs'] = [];
if(isset($project['deploy_optimize']['minor_languages']) && !empty($project['deploy_optimize']['minor_languages']) && is_array($project['deploy_optimize']['minor_languages'])){
foreach($project['deploy_optimize']['minor_languages']??[] as $lang){
$remain_day = $lang_data[$lang['tl']]['dabiao_day'] ?? 0;
$data['langs'][$lang['tl'] ?? ''] = [
$languageModel = new MinorLanguages();
$languageList = $languageModel->list(['project_id'=>$project['id']]);
if(!empty($languageList) && is_array($languageList)){
foreach($languageList as $lang){
$remain_day = $lang_data[$lang['language']]['dabiao_day'] ?? 0;
$data['langs'][$lang['language'] ?? ''] = [
'lang_text' => Translate::getTls($lang['tl'] ?? ''),
'keyword_num' => $lang['keywords'] ?? 0,
'reach_day' => $lang_data[$lang['tl']]['dabiao_day'] ?? 0,
'home_cnt' => $lang_data[$lang['tl']]['home_cnt'] ?? 0,
'reach_day' => $lang_data[$lang['language']]['dabiao_day'] ?? 0,
'home_cnt' => $lang_data[$lang['language']]['home_cnt'] ?? 0,
'remain_day' => ($lang['type']??0) == 1 ? $data['project']['remain_day'] : $lang['service_day'] - $remain_day,
'type' => $lang['type'] ?? 0, //1 项目关键词 项目天数 2 保证首页关键词 项目达标天数
];
... ... @@ -139,7 +142,6 @@ class RankDataLogic extends BaseLogic
'data' => $rank_week['data'] ?? [],
'labels' => $rank_week['date'] ?? [],
];
return $data;
}
... ... @@ -472,7 +474,7 @@ class RankDataLogic extends BaseLogic
//关键词达标天数
$model->is_compliance = 0;
if($model->updated_date != date('Y-m-d') && !$lang){
if($model->updated_date != date('Y-m-d')){
//保证关键词数
$keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num');
$type = Project::where('id', $project_id)->value('type');
... ... @@ -480,10 +482,12 @@ class RankDataLogic extends BaseLogic
$model->compliance_day = $model->compliance_day + 1;
$model->is_compliance = 1;
//项目表更新
if(!$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]);
}
}
}
$model->project_id = $project_id;
$model->first_num = $first_num;
... ...
... ... @@ -58,7 +58,7 @@ class RatingLogic extends BaseLogic
'type'=>$this->param['type']
];
$this->scoringModel->add($param);
return $this->httpSore($this->param['data'],$this->project['post_id'],$this->param['type']);
return $this->httpSore($this->param['data'],$this->project['id'],$this->param['type']);
}
/**
... ...
... ... @@ -25,7 +25,7 @@ class AiCommandRequest extends FormRequest
{
return [
'key'=>'required',
'scene'=>'required',
// 'scene'=>'required',
'ai'=>'required',
];
}
... ... @@ -34,7 +34,7 @@ class AiCommandRequest extends FormRequest
{
return [
'key.required'=>'key不能为空',
'scene.required' => '场景不能为空',
// 'scene.required' => '场景不能为空',
'ai.required'=>'指令你能为空',
];
}
... ...
... ... @@ -30,7 +30,7 @@ class DomainInfo extends Base
const DELETED_DELETE = 1;
protected $hidden = [
'created_at',
// 'created_at',
'updated_at'
];
... ...
<?php
/**
* @remark :
* @name :MinorLanguages.php
* @author :lyh
* @method :post
* @time :2024/2/28 9:26
*/
namespace App\Models\Project;
use App\Models\Base;
/**
* @remark :项目小语种
* @name :MinorLanguages
* @author :lyh
* @method :post
* @time :2024/2/28 9:27
*/
class MinorLanguages extends Base
{
protected $table = 'gl_project_minor_languages';
}
... ...
... ... @@ -48,7 +48,7 @@ class ProjectUpdateTdk extends Base
$project_id = Redis::rpop('updateSeoTdk');
$data = [];
if($project_id){
$data = self::find($project_id);
$data = self::where('status', self::STATUS_PENDING)->where('project_id', $project_id)->orderBy('id', 'asc')->first();
}
if($data){
return $data;
... ...
... ... @@ -55,9 +55,11 @@ class RouteMap extends Base
public static function generateRoute($title, $source, $source_id, $project_id){
if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $title)){
$title = Translate::tran($title, 'en');
}elseif (preg_match('/[а-яА-Я]/u', $title)) {
}else{
if(!preg_match('/^[a-zA-Z\s]+$/', $title)){
$title = Translate::tran($title, 'en');
}
}
$i=1;
$sign = generateRoute($title);
$info = self::where(['project_id' => $project_id, 'source' => $source, 'source_id'=>$source_id])->first();
... ...
... ... @@ -190,6 +190,10 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/save', [Aside\Project\KeywordPrefixController::class, 'save'])->name('admin.keyword_save');
Route::any('/del', [Aside\Project\KeywordPrefixController::class, 'del'])->name('admin.keyword_del');
});
Route::prefix('language')->group(function () {
Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList');
});
//更新项目tdk
Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk');
//项目内容采集
... ... @@ -266,6 +270,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/getAiPrefix', [Aside\Optimize\OptimizeController::class, 'getAiPrefix'])->name('admin.optimize_getAiPrefix');//获取Ai前后缀
Route::any('/saveAiPrefix', [Aside\Optimize\OptimizeController::class, 'saveAiPrefix'])->name('admin.optimize_saveAiPrefix');//保存Ai前后缀
Route::any('/setRobots', [Aside\Optimize\OptimizeController::class, 'setRobots'])->name('admin.optimize_setRobots');//设置robots开关
Route::any('/editBacklink', [Aside\Optimize\OptimizeController::class, 'editBacklink'])->name('admin.optimize_editBacklink');//设置backlink开关
Route::any('/editTranslateStatus', [Aside\Optimize\OptimizeController::class, 'editTranslateStatus'])->name('admin.optimize_editTranslateStatus');//设置robots开关
});
//生成关键字
... ...
... ... @@ -230,6 +230,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/statusNum', [\App\Http\Controllers\Bside\Product\ProductController::class, 'getStatusNumber'])->name('product_statusNum');
Route::any('/copyProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'copyProduct'])->name('product_copyProduct');
Route::any('/batchSetCategory', [\App\Http\Controllers\Bside\Product\ProductController::class, 'batchSetCategory'])->name('product_batchSetCategory');
Route::any('/sendAiProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'sendAiProduct'])->name('product_sendAiProduct');
//产品分类
Route::get('category', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'index'])->name('product_category');
Route::get('category/info', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'info'])->name('product_category_info');
... ...