作者 刘锟

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

... ... @@ -48,6 +48,7 @@ class AiBlogListTask extends Command
public function handle(){
$project_id = $this->argument('project_id');
@file_put_contents(storage_path('logs/lyh_error.log'), var_export('执行的项目id->'.$project_id, true) . PHP_EOL, FILE_APPEND);
ProjectServer::useProject($project_id);
$projectAiSettingModel = new ProjectAiSetting();
$aiSettingInfo = $projectAiSettingModel->read(['project_id'=>$project_id]);
... ... @@ -113,17 +114,14 @@ class AiBlogListTask extends Command
if(!empty($domain)){
$c_url = $domain.'api/update_page/';
$param = [
'project_id' => $this->user['project_id'],
'project_id' => $project_id,
'type' => 1,
'route' => 3,
'url' => ['top-blog'],
'language'=> [],
'is_sitemap' => 0
];
$res = http_post($c_url, json_encode($param));
echo date('Y-m-d H:i:s').'通知成功:' . json_encode($res,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
}else{
echo date('Y-m-d H:i:s').'域名不存在:' . $project_id . PHP_EOL;
http_post($c_url, json_encode($param));
}
return true;
}
... ...
... ... @@ -150,7 +150,7 @@ class AiBlogTask extends Command
}
$aiBlogTaskModel = new AiBlogTaskModel();
$finish_at = date('Y-m-d H:i:s', strtotime('-' . $finish_at . ' hour'));
$ids = $aiBlogTaskModel->formatQuery(['status'=>$aiBlogTaskModel::STATUS_RUNNING,'type'=>$aiBlogTaskModel::TYPE_BLOG,'created_at'=>['<=',$finish_at]])->limit(1000)->pluck('id');
$ids = $aiBlogTaskModel->formatQuery(['status'=>$aiBlogTaskModel::STATUS_RUNNING,'type'=>$aiBlogTaskModel::TYPE_BLOG,'updated_at'=>['<=',$finish_at]])->limit(1000)->pluck('id');
if(!empty($ids)){
foreach ($ids as $id) {
Redis::lpush('ai_blog_task', $id);
... ...
<?php
/**
* @remark :
* @name :AfterCount.php
* @author :lyh
* @method :post
* @time :2025/3/26 15:28
*/
namespace App\Console\Commands\DayCount;
use App\Models\Manage\ManageHr;
use App\Models\Project\Project;
use Carbon\Carbon;
use App\Models\HomeCount\AfterCount as AfterCountModel;
use Illuminate\Console\Command;
class AfterCount extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'after_count';
protected $managerHrModel;
public $after_manager = [
1 => ['许璐','王袁袁'],
2 => ['陈思蓓'],
3 => ['张国英']
];
/**
* The console command description.
*
* @var string
*/
protected $description = '统计昨日售后数据';
public function handle(){
echo date('Y-m-d H:i:s').'统计start->'.PHP_EOL;
$saveData = $this->_action();
$afterModel = new AfterCountModel();
$afterModel->insertAll($saveData);
echo date('Y-m-d H:i:s').'->统计end'.PHP_EOL;
return true;
}
/**
* @remark :执行方法
* @name :_action
* @author :lyh
* @method :post
* @time :2025/3/26 15:29
*/
public function _action(){
$this->managerHrModel = new ManageHr();
$projectModel = new Project();
$todayMidnight = date('Y-m-d 00:00:00', strtotime('today'));
$saveData = [];
foreach ($this->after_manager as $key => $valM){
$idArr = $this->managerHrModel->selectField(['name'=>['in',$valM]],'id');
$project_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$todayMidnight)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
$qualified_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$todayMidnight)->where('gl_project.is_remain_today',1)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
$rate = number_format($qualified_count / $project_count, 2);
$threeMonthsAgo = date('Y-m-d 00:00:00', strtotime('-3 months'));
$three_project_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$threeMonthsAgo)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
$three_qualified_count = $projectModel->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)->where('gl_project.created_at','<=',$threeMonthsAgo)->where('gl_project.is_remain_today',1)->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)->whereIn('gl_project.type',[2,4])->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count();
$three_rate = number_format($three_qualified_count / $three_project_count, 2);
$saveData[] = [
'date'=>date('Y-m-d', strtotime('yesterday')),
'type'=> $key,
'project_count'=>$project_count,
'qualified_count'=>$qualified_count,
'rate'=>$rate,
'three_project_count'=>$three_project_count,
'three_qualified_count'=>$three_qualified_count,
'three_rate'=>$three_rate,
];
}
return $saveData;
}
}
... ...
... ... @@ -38,7 +38,7 @@ class Count extends Command
*/
public function handle()
{
$list = DB::table('gl_project')->where('gl_project.extend_type','=',0)
$list = DB::table('gl_project')->where('gl_project.extend_type',0)->where('gl_project.delete_status',0)
->whereIn('gl_project.type',[1,2,3,4,6])
->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
... ...
... ... @@ -462,21 +462,21 @@ class LyhImportTest extends Command
foreach ($line_of_text as $k => $item){
// try {
//添加内容
$contentId = $customContentModel->addReturnId(['name'=>$item[0],'module_id'=>2,'project_id'=>$project_id]);
$contentId = $customContentModel->addReturnId(['name'=>$item[0],'image'=>'/upload/p/2140/image/'.$item[2],'module_id'=>2,'project_id'=>$project_id]);
echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL;
//注册路由
$route = RouteMap::setRoute($item[0], RouteMap::SOURCE_MODULE,
$contentId, $project_id);
$customContentModel->edit(['route'=>$route],['id'=>$contentId]);
if(!empty($item[1])){
if(!empty($item[3])){
$categoryId = ',';
$cateArr = explode('/',$item[1]);
$cateArr = explode('/',$item[3]);
foreach ($cateArr as $cateV){
$cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]);
$cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>7,'project_id'=>$project_id]);
if($cateInfo !== false){
$categoryId .= $cateInfo['id'].',';
}else{
$cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]);
$cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>7,'project_id'=>$project_id]);
$cateRoute = RouteMap::setRoute($cateV, RouteMap::SOURCE_MODULE_CATE,
$cateVId, $project_id);
$customCategoryModel->edit(['route'=>$cateRoute],['id'=>$cateVId]);
... ... @@ -486,19 +486,19 @@ class LyhImportTest extends Command
$customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]);
}
$saveData = [
['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$item[2], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$item[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$item[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$item[3], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$item[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$item[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$item[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$item[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$item[11], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$item[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$item[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$item[14] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_14', 'type'=>1, 'values'=>$item[7], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$item[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$item[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$item[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$item[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$item[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$item[7]??'', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$item[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$item[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$item[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$item[1], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$item[0], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$item[11] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
['key'=>'pd_extended_field_14', 'type'=>1, 'values'=>$item[14], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
];
$customExtendContentTModel->insert($saveData);
// }catch (\Exception $e){
... ...
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2025/3/26
* Time: 14:29
*/
namespace App\Console\Commands\Product;
use App\Models\Product\Keyword;
use App\Models\Project\AggregateKeyword;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
/**
* Class OptimizeSetKeywordSync
* @package App\Console\Commands\Product
*/
class OptimizeSetKeywordSync extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'optimize_set_keyword_sync';
/**
* The console command description.
*
* @var string
*/
protected $description = '优化设置聚合页关键词,同步至对应项目产品关键词';
/**
* OptimizeSetKeywordSync constructor.
*/
public function __construct()
{
parent::__construct();
}
/**
* 数据源:App\Http\Logic\Aside\Project\AggregateKeywordLogic::saveKeyword;
* @return bool
*/
public function handle()
{
$task = AggregateKeyword::where(['status' => AggregateKeyword::STATUS_INIT])->where('created_at', '<', date('Y-m-d H:i:s'))->get();
foreach ($task as $item) {
Log::info('同步ID:' . $item->id);
echo $item->project_id . PHP_EOL;
$this->syncKeyword($item->project_id, $item->keywords);
$item->status = AggregateKeyword::STATUS_FINISH;
$item->save();
}
return true;
}
/**
* 关键词同步
* @param $project_id
* @param $keywords
* @return bool
*/
public function syncKeyword($project_id, $keywords)
{
$keywords = explode("\n", $keywords);
$keywords = array_unique(array_filter($keywords));
ProjectServer::useProject($project_id);
$keywordModel = new Keyword();
$keywordModel->saveBKeyword($project_id,$keywords);
DB::disconnect('custom_mysql');
return true;
}
}
\ No newline at end of file
... ...
... ... @@ -37,6 +37,8 @@ class Kernel extends ConsoleKernel
$schedule->command('sync_inquiry_text')->dailyAt('09:00')->withoutOverlapping(1);
//FB询盘费用同步
$schedule->command('sync_ad_cost')->everyThirtyMinutes()->withoutOverlapping(1);
// 优化预设关键词 同步 20点会开始TDK生成
$schedule->command('optimize_set_keyword_sync')->dailyAt('20:00')->withoutOverlapping(1);
}
/**
... ...
<?php
/**
* @remark :
* @name :EnterpriseProductController.php
* @author :lyh
* @method :post
* @time :2025/3/26 9:55
*/
namespace App\Http\Controllers\Aside\Project;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Project\EnterpriseProductLogic;
class EnterpriseProductController extends BaseController
{
/**
* @remark :
* @name :saveNoticeLog
* @author :lyh
* @method :post
* @time :2025/3/26 9:55
*/
public function saveEnterpriseProduct(EnterpriseProductLogic $logic){
$this->request->validate([
'project_id'=>'required',
'data'=>'required',
],[
'project_id.required' => 'project_id不能为空',
'data.required' => '数据不能为空',
]);
$result = $logic->saveEnterpriseProduct();
$this->response('success',Code::SUCCESS,$result);
}
}
... ...
... ... @@ -301,6 +301,9 @@ class ProjectController extends BaseController
$query = $query->where('gl_project_deploy_optimize.domain','!=',null);
}
}
if(isset($this->map['project_type'])){
$query = $query->where('gl_project.project_type',$this->map['project_type']);
}
return $query;
}
... ...
<?php
/**
* @remark :
* @name :GoogleKeywordInsightController.php
* @author :lyh
* @method :post
* @time :2025/3/25 14:23
*/
namespace App\Http\Controllers\Bside\GoogleKeywordInsight;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\GoogleKeywordInsight\GoogleKeywordInsightLogic;
/**
* @remark :谷歌洞察数据
* @name :GoogleKeywordInsightController
* @author :lyh
* @method :post
* @time :2025/3/25 14:24
*/
class GoogleKeywordInsightController extends BaseController
{
/**
* @remark :保存数据
* @name :saveKeywordInsight
* @author :lyh
* @method :post
* @time :2025/3/25 14:30
*/
public function getKeywordInsight(GoogleKeywordInsightLogic $logic){
$this->request->validate([
'keyword' => 'required'
],[
'keyword.required' => '关键词不能为空',
]);
$data = $logic->getGoogleInsight();
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
<?php
/**
* @remark :
* @name :EnterpriseProductController.php
* @author :lyh
* @method :post
* @time :2025/3/26 11:05
*/
namespace App\Http\Controllers\Bside\SeoSetting;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\Project\EnterpriseProduct;
/**
* @remark :企业产品库
* @name :EnterpriseProductController
* @author :lyh
* @method :post
* @time :2025/3/26 11:05
*/
class EnterpriseProductController extends BaseController
{
/**
* @remark :获取产品库
* @name :getEnterProduct
* @author :lyh
* @method :post
* @time :2025/3/26 11:06
*/
public function getEnterProduct(EnterpriseProduct $enterpriseProduct){
$this->map['project_id'] = $this->user['project_id'];
$data = $enterpriseProduct->lists($this->map,$this->page,$this->row);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -12,6 +12,7 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Helper\FormGlobalsoApi;
use App\Helper\PayStripeApi;
use App\Helper\Translate;
use App\Http\Logic\Bside\News\NewsLogic;
use App\Models\Ai\AiBlog;
use App\Models\Channel\Channel;
... ... @@ -42,8 +43,7 @@ class TestController extends BaseController
*/
public function ceshi(){
//获取上一周询盘数量
$service = new GoogleKeywordInsightService();
$list = $service->requestUrl('cnc');
$this->response('success',Code::SUCCESS,$list);
$transData = Translate::tran(['heidenhain programming','heidenhain tnc 620'], 'zh');
$this->response('success',Code::SUCCESS,$transData);
}
}
... ...
... ... @@ -10,7 +10,10 @@
namespace App\Http\Logic\Aside\Project;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Product\Keyword;
use App\Models\Project\AggregateKeyword;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
class AggregateKeywordLogic extends BaseLogic
{
... ... @@ -22,19 +25,17 @@ class AggregateKeywordLogic extends BaseLogic
}
/**
* @remark :
* @name :saveKeyword
* @author :lyh
* @method :post
* @time :2025/3/17 16:11
* @return array
*/
public function saveKeyword(){
if(isset($this->param['id']) && !empty($this->param['id'])){
$id = $this->param['id'];
if (FALSE == empty($this->param['id'])) {
$this->model->edit($this->param,['id'=>$this->param['id']]);
}else{
$id = $this->model->addReturnId($this->param);
} else {
$this->param['id'] = $this->model->addReturnId($this->param);
// 添加预设功能 同步关键词 迁入到 namespace App\Console\Commands\Product\SetKeywordSync
}
return $this->success(['id'=>$id]);
return $this->success(['id'=>$this->param['id']]);
}
}
... ...
<?php
/**
* @remark :
* @name :EnterpriseProductLogic.php
* @author :lyh
* @method :post
* @time :2025/3/26 10:10
*/
namespace App\Http\Logic\Aside\Project;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Project\EnterpriseProduct;
/**
* @remark :企业产品库
* @name :EnterpriseProductLogic
* @author :lyh
* @method :post
* @time :2025/3/26 10:13
*/
class EnterpriseProductLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new EnterpriseProduct();
$this->param = $this->requestAll;
}
/**
* @remark :保存产品企业库
* @name :saveEnterpriseProduct
* @author :lyh
* @method :post
* @time :2025/3/26 10:17
*/
public function saveEnterpriseProduct(){
try {
$this->model->saveEnterpriseProduct($this->param['project_id'],$this->param['data']);
}catch (\Exception $e){
$this->fail('保存失败,请联系管理员');
}
return $this->success();
}
}
... ...
<?php
/**
* @remark :
* @name :GoogleKeywordInsightLogic.php
* @author :lyh
* @method :post
* @time :2025/3/25 14:31
*/
namespace App\Http\Logic\Bside\GoogleKeywordInsight;
use App\Helper\Translate;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\GoogleKeywordInsight\GoogleKeywordInsight;
use App\Models\GoogleKeywordInsight\GoogleKeywordInsightDetail;
use App\Services\GoogleKeywordInsightService;
use Illuminate\Support\Facades\DB;
class GoogleKeywordInsightLogic extends BaseLogic
{
public $service;
public function __construct()
{
parent::__construct();
$this->model = new GoogleKeywordInsight();
$this->param = $this->requestAll;
}
/**
* @remark :获取google洞察数据
* @name :saveGoogleKeywordInsight
* @author :lyh
* @method :post
* @time :2025/3/25 14:36
*/
public function getGoogleInsight(){
$data = $this->model->read(['search'=>$this->param['keyword']]);
if($data === false){
$this->service = new GoogleKeywordInsightService();
$data = $this->service->requestUrl($this->param['keyword']);
if(!empty($data)){
DB::beginTransaction();
//保存数据库
try {
$detailModel = new GoogleKeywordInsightDetail();
$this->model->saveInsight($this->user['project_id'],$this->param['keyword'],$data);
$detailModel->saveInsightDetail($this->user['project_id'],$this->param['keyword'],$data);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('保存失败,请联系管理员');
}
}
}
return $this->success($data);
}
}
... ...
... ... @@ -79,8 +79,8 @@ class KeywordLogic extends BaseLogic
if($info !== false){
return $this->success(['id'=>$info['id']]);
}
$this->param = $this->addHandleParam($this->param);
$id = $this->model->insertGetId($this->param);
$this->param['project_id'] = $this->user['project_id'];
$id = $this->model->addReturnId($this->param);
//路由映射
$route = RouteMap::setRoute($this->param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
$this->model->edit(['route'=>$route],['id'=>$id]);
... ... @@ -93,20 +93,6 @@ class KeywordLogic extends BaseLogic
}
/**
* @remark :添加组装数据
* @name :addHandleParam
* @author :lyh
* @method :post
* @time :2023/11/30 15:00
*/
public function addHandleParam($param){
$param['project_id'] = $this->user['project_id'];
$param['created_at'] = date('Y-m-d H:i:s');
$param['updated_at'] = $param['created_at'];
return $this->success($param);
}
/**
* @remark :保存数据时参数处理
* @name :handleSaveParam
* @author :lyh
... ... @@ -135,27 +121,11 @@ class KeywordLogic extends BaseLogic
if(!empty($param['seo_title'])){
$param['seo_title'] = ucfirst($param['seo_title']);
}
$param['first_word'] = $this->first_word($param['title']);
$param['first_word'] = $this->model->first_word($param['title']);
return $param;
}
/**
* @remark :获取字符串首字符
* @name :first_word
* @author :lyh
* @method :post
* @time :2024/10/28 10:47
*/
public function first_word($title){
$first_title = mb_substr(strtolower($title), 0, 1);
if (is_numeric($first_title)){
return 0;
}
$string_key = array_search($first_title, $this->model->firstNumWord);
return $string_key ?: 27;
}
/**
* @remark :批量添加关键词任务, 异步处理
* @name :batchAdd
* @author :lyh
... ... @@ -164,20 +134,7 @@ class KeywordLogic extends BaseLogic
*/
public function batchAdd(){
try {
foreach ($this->param['title'] as $k=>$v){
if(empty($v)){
continue;
}
$info = $this->model->read(['title'=>$v],['id']);
if($info === false){
$param['project_id'] = $this->user['project_id'];
$param['created_at'] = date('Y-m-d H:i:s');
$param['updated_at'] = $param['created_at'];
$param['title'] = $v;
$param['first_word'] = $this->first_word($param['title']);
$this->model->insertGetId($param);
}
}
$this->model->saveBKeyword($this->user['project_id'],$this->param['title']);
}catch (\Exception $e){
$this->fail('保存失败,请联系管理员');
}
... ... @@ -249,7 +206,7 @@ class KeywordLogic extends BaseLogic
if($v){
$keyword_info = $this->model->read(['title'=>$v]);
if(!$keyword_info){
$k_id = $this->model->addReturnId(['title'=>$v,'first_word' => $this->first_word($v),'project_id'=>$project_id]);
$k_id = $this->model->addReturnId(['title'=>$v,'first_word' => $this->model->first_word($v),'project_id'=>$project_id]);
$route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $k_id, $project_id);
$this->model->edit(['route'=>$route],['id'=>$k_id]);
}else{
... ...
<?php
/**
* @remark :
* @name :GoogleKeywordInsight.php
* @author :lyh
* @method :post
* @time :2025/3/25 14:33
*/
namespace App\Models\GoogleKeywordInsight;
use App\Models\Base;
class GoogleKeywordInsight extends Base
{
protected $table = 'gl_google_insight';
/**
* @remark :保存洞察总数据
* @name :saveInsight
* @author :lyh
* @method :post
* @time :2025/3/25 14:45
*/
public function saveInsight($project_id,$keyword,$data){
$saveData = [
'search'=>$keyword,
'project_id'=>$project_id,
'data'=>json_encode($data,true),
];
return $this->addReturnId($saveData);
}
}
... ...
<?php
/**
* @remark :
* @name :GoogleKeywordInsightDetail.php
* @author :lyh
* @method :post
* @time :2025/3/25 14:33
*/
namespace App\Models\GoogleKeywordInsight;
use App\Helper\Translate;
use App\Models\Base;
class GoogleKeywordInsightDetail extends Base
{
protected $table = 'gl_google_insight_detail';
/**
* @remark :保存洞察数据详情
* @name :saveInsightDetail
* @author :lyh
* @method :post
* @time :2025/3/25 14:45
*/
public function saveInsightDetail($project_id,$keyword,$data){
$saveData = [];
$textArr = array_column($data, 'text');
$transData = Translate::tran($textArr, 'zh');
foreach ($data as $key => $val){
$saveData[] = [
'search'=>$keyword,
'text'=>$val['text'],
'zh_text'=>$transData[$key] ?? $val['text'],
'project_id'=>$project_id,
'volume'=>$val['volume'],
'competition_level'=>$val['competition_level'],
'competition_index'=>$val['competition_index'],
'low_bid'=>$val['low_bid'],
'high_bid'=>$val['high_bid'],
'trend'=>$val['trend'],
];
}
return $this->insertAll($saveData);
}
}
... ...
<?php
/**
* @remark :
* @name :AfterCount.php
* @author :lyh
* @method :post
* @time :2025/3/26 15:31
*/
namespace App\Models\HomeCount;
use App\Models\Base;
/**
* @remark :售后日统计数据
* @name :AfterCount
* @author :lyh
* @method :post
* @time :2025/3/26 15:31
*/
class AfterCount extends Base
{
protected $table = 'gl_after_count';
}
... ...
... ... @@ -3,8 +3,13 @@
namespace App\Models\Product;
use App\Helper\Arr;
use App\Helper\Common;
use App\Models\Base;
use App\Models\Com\NoticeLog;
use App\Models\RouteMap\RouteMap;
use App\Services\ProjectServer;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
class Keyword extends Base
{
... ... @@ -50,19 +55,6 @@ class Keyword extends Base
];
/**
* 聚合页按照首字母归类
* @param $string
* @return int
*/
public function getFirstWord($string) {
$first_string = strtolower(mb_substr($string, 0, 1));
if (is_numeric($first_string))
return 0;
$string_key = array_search($first_string, $this->firstNumWord);
return $string_key ?: 27;
}
/**
* @remark :视频
* @name :getKeywordVideoAttribute
* @author :lyh
... ... @@ -149,4 +141,44 @@ class Keyword extends Base
}
return $result;
}
/**
* @remark :批量保存到产品关键词中
* @name :saveBKeyword
* @author :lyh
* @method :post
* @time :2025/3/25 16:28
*/
public function saveBKeyword($project_id,$keywords){
foreach ($keywords as $v){
if(empty($v)){
continue;
}
$info = $this->read(['title'=>$v],['id']);
if($info === false){
$param['project_id'] = $project_id;
$param['title'] = $v;
$param['first_word'] = $this->first_word($param['title']);
$this->addReturnId($param);
}
}
NoticeLog::createLog(NoticeLog::TYPE_INIT_KEYWORD, ['project_id' => $project_id]);
return true;
}
/**
* @remark :获取字符串首字符
* @name :first_word
* @author :lyh
* @method :post
* @time :2025/3/25 16:42
*/
public function first_word($title){
$first_title = mb_substr(strtolower($title), 0, 1);
if (is_numeric($first_title)){
return 0;
}
$string_key = array_search($first_title, $this->firstNumWord);
return $string_key ?: 27;
}
}
... ...
... ... @@ -12,13 +12,17 @@ namespace App\Models\Project;
use App\Models\Base;
/**
* @remark :聚合页关键词设置
* @name :AggregateKeyword
* @author :lyh
* @method :post
* @time :2025/3/17 16:02
* 聚合页关键词设置
* Class AggregateKeyword
* @package App\Models\Project
*/
class AggregateKeyword extends Base
{
protected $table = 'gl_aggregate_keyword';
/**
* 关键词是否导入项目聚合页关键词
*/
const STATUS_INIT = 0;
const STATUS_FINISH = 1;
}
... ...
<?php
/**
* @remark :
* @name :EnterpriseProduct.php
* @author :lyh
* @method :post
* @time :2025/3/26 10:11
*/
namespace App\Models\Project;
use App\Models\Base;
/**
* @remark :项目产品录入词
* @name :EnterpriseProduct
* @author :lyh
* @method :post
* @time :2025/3/26 10:12
*/
class EnterpriseProduct extends Base
{
protected $table = 'gl_project_enterprise_product';
/**
* @remark :保存数据
* @name :saveEnterpriseProduct
* @author :lyh
* @method :post
* @time :2025/3/26 10:42
*/
public function saveEnterpriseProduct($project_id,$data){
$saveData = [];
foreach ($data as $val){
$info = $this->read(['title'=>$val[0],'project_id'=>$project_id],['id']);
if($info === false){
$saveData[] = [
'title'=>$val[0],
'image'=>$val[1],
'url'=>$val[2],
'project_id'=>$project_id,
'keywords'=>$val[3],
'release_at'=>$val[4],
];
}
}
return $this->insertAll($saveData);
}
}
... ...
... ... @@ -208,7 +208,11 @@ 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('enterprise_product')->group(function () {
Route::any('/saveEnterpriseProduct', [Aside\Project\EnterpriseProductController::class, 'saveEnterpriseProduct'])->name('admin.enterprise_product_saveEnterpriseProduct');
});
//小语种
Route::prefix('language')->group(function () {
Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList');
Route::any('/getLanguages', [Aside\Project\MinorLanguagesController::class, 'getLanguages'])->name('admin.getLanguages');
... ...
... ... @@ -695,6 +695,16 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/getInfo', [\App\Http\Controllers\Bside\SeoSetting\DomainSettingController::class, 'getInfo'])->name('domain_setting_getInfo');
Route::any('/save', [\App\Http\Controllers\Bside\SeoSetting\DomainSettingController::class, 'save'])->name('domain_setting_save');
});
//google数据洞察
Route::prefix('google_keyword_insight')->group(function () {
Route::any('/getKeywordInsight', [\App\Http\Controllers\Bside\GoogleKeywordInsight\GoogleKeywordInsightController::class, 'getKeywordInsight'])->name('google_keyword_insight_getKeywordInsight');
});
//企业产品库
Route::prefix('enterprise_product')->group(function () {
Route::any('/getEnterProduct', [\App\Http\Controllers\Bside\SeoSetting\EnterpriseProductController::class, 'getEnterProduct'])->name('enterprise_product_getEnterProduct');
});
});
//无需登录验证的路由组
Route::group([], function () {
... ...