作者 lyh

Merge branch 'develop' of http://47.244.231.31:8099/zhl/globalso-v6

... ... @@ -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;
... ... @@ -262,74 +264,32 @@ class Demo extends Command
// }
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);
$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;
}
/**
* 关键词聚合页-推荐&热门产品
*/
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;
$projectModel = new DeployOptimize();
$list = $projectModel->list();
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'end'.json_encode($v) . PHP_EOL;
$data = [];
if(!empty($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')
];
}
}
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']) : "";
}
$languageModel = new MinorLanguages();
$languageModel->insert($data);
}
return $data;
}
public function printMessage()
{
$client = new Client();
... ...
... ... @@ -29,7 +29,7 @@ class MinorLanguagesController extends BaseController
'project_id.required' => 'keyword不能为空',
]);
$languageModel = new MinorLanguages();
$lists = $languageModel->list($this->map);
$lists = $languageModel->list($this->map,'id',['language','type','keywords','service_day']);
$this->response('success',Code::SUCCESS,$lists);
}
}
... ...
... ... @@ -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,21 @@ 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 = http_get('http://title.globalso.com/ajax_data_for_web.php?keyword='.$this->param['keyword'],['charset=utf-8']);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -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;
... ... @@ -131,8 +132,8 @@ class ProjectLogic extends BaseLogic
* @time :2023/8/30 11:57
*/
public function projectSave(){
DB::beginTransaction();
try {
// DB::beginTransaction();
// try {
$this->param['project_location'] = 0;//TODO::图片文件存储不同地方,上线后删除
if($this->param['type'] == Project::TYPE_SEVEN){
//错误单直接返回,单独处理
... ... @@ -150,6 +151,8 @@ class ProjectLogic extends BaseLogic
$this->saveProjectDeployOptimize($this->param['deploy_optimize']);
//保存售后信息
$this->saveProjectAfter($this->param['project_after']);
$this->saveMinorLanguages($this->param['minor_language'] ?? []);
//保存询盘过滤配置
// $this->param['inquiry_filter_config']['project_id'] = $this->param['id'];
// $this->saveInquiryFilterConfig($this->param['inquiry_filter_config']);
... ... @@ -157,11 +160,11 @@ class ProjectLogic extends BaseLogic
//创建站点
// $this->createSite($this->param);
(new SyncService())->projectAcceptAddress($this->param['id']);
}
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('保存失败,请联系管理员');
// }
// DB::commit();
// }catch (\Exception $e){
// DB::rollBack();
// $this->fail('保存失败,请联系管理员');
}
return $this->success();
... ... @@ -210,7 +213,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'] = [
... ... @@ -278,7 +282,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 +309,27 @@ class ProjectLogic extends BaseLogic
}
/**
* @remark :保存小语种配置
* @name :saveMinorLanguages
* @author :lyh
* @method :post
* @time :2023/8/30 13:57
*/
protected function saveMinorLanguages($minor_language){
//查询数据是否存在
$languageModel = new MinorLanguages();
$languageModel->del(['project_id'=>$this->param['id']]);
if(!empty($minor_language)){
foreach ($minor_language as $k => $v){
$v['project_id'] = $this->param['id'];
$minor_language[$k] = $v;
}
$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 保证首页关键词 项目达标天数
];
... ... @@ -471,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');
... ... @@ -479,8 +482,10 @@ class RankDataLogic extends BaseLogic
$model->compliance_day = $model->compliance_day + 1;
$model->is_compliance = 1;
//项目表更新
$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]);
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]);
}
}
}
... ...
... ... @@ -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'=>'指令你能为空',
];
}
... ...
... ... @@ -193,8 +193,6 @@ Route::middleware(['aloginauth'])->group(function () {
Route::prefix('language')->group(function () {
Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList');
Route::any('/save', [Aside\Project\KeywordPrefixController::class, 'save'])->name('admin.keyword_save');
Route::any('/del', [Aside\Project\KeywordPrefixController::class, 'del'])->name('admin.keyword_del');
});
//更新项目tdk
Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk');
... ...
... ... @@ -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');
... ...