作者 lyh

gx锚文本

@@ -12,9 +12,15 @@ use App\Models\Channel\Channel; @@ -12,9 +12,15 @@ use App\Models\Channel\Channel;
12 use App\Models\Com\KeywordVideoTask; 12 use App\Models\Com\KeywordVideoTask;
13 use App\Models\Domain\DomainInfo; 13 use App\Models\Domain\DomainInfo;
14 use App\Models\Manage\ManageHr; 14 use App\Models\Manage\ManageHr;
  15 +use App\Models\Product\Category;
  16 +use App\Models\Product\Keyword;
  17 +use App\Models\Product\Product;
15 use App\Models\Project\DeployOptimize; 18 use App\Models\Project\DeployOptimize;
16 use App\Models\Project\Project; 19 use App\Models\Project\Project;
17 use App\Models\RankData\RankData; 20 use App\Models\RankData\RankData;
  21 +use App\Models\RouteMap\RouteMap;
  22 +use App\Services\ProjectServer;
  23 +use Illuminate\Support\Facades\DB;
18 24
19 /** 25 /**
20 * @remark :优化 26 * @remark :优化
@@ -426,4 +432,58 @@ class OptimizeController extends BaseController @@ -426,4 +432,58 @@ class OptimizeController extends BaseController
426 $optimizeModel->edit(['ai_video'=>$this->param['status']],['project_id'=>$this->param['project_id']]); 432 $optimizeModel->edit(['ai_video'=>$this->param['status']],['project_id'=>$this->param['project_id']]);
427 $this->response('success'); 433 $this->response('success');
428 } 434 }
  435 +
  436 + /**
  437 + * @remark :锚文本链接
  438 + * @name :anchorTextList
  439 + * @author :lyh
  440 + * @method :post
  441 + * @time :2024/7/17 14:04
  442 + */
  443 + public function anchorTextList(){
  444 + $this->request->validate([
  445 + 'project_id' => 'required',
  446 + ], [
  447 + 'project_id.required' => 'project_id不能为空',
  448 + ]);
  449 + // 获取当前网站正式域名
  450 + $domainModel = new DomainInfo();
  451 + $domainInfo = $domainModel->read(['project_id' => $this->param['project_id']], ['domain']);
  452 + if ($domainInfo === false) {
  453 + $this->fail('请先设置域名');
  454 + }
  455 + $domain = 'https://' . $domainInfo['domain'] . '/';
  456 + $data = [];
  457 + ProjectServer::useProject($this->param['id']);
  458 + $productModel = new Product();
  459 + $this->processChunkedList($productModel, ['status' => $productModel::STATUS_ON], ['id', 'title', 'route'], $domain, $data, 'product');
  460 + $productCategoryModel = new Category();
  461 + $this->processChunkedList($productCategoryModel, ['status' => $productCategoryModel::STATUS_ACTIVE], ['id', 'title', 'route'], $domain, $data, 'product_category');
  462 + $productKeywordModel = new Keyword();
  463 + $this->processChunkedList($productKeywordModel, ['status' => $productKeywordModel::STATUS_ACTIVE], ['id', 'title', 'route'], $domain, $data, 'product_keyword');
  464 + DB::disconnect('custom_mysql');
  465 + $this->response('success', Code::SUCCESS, $data);
  466 + }
  467 +
  468 + /**
  469 + * @remark :分片查询
  470 + * @name :processChunkedList
  471 + * @author :lyh
  472 + * @method :post
  473 + * @time :2024/7/17 14:55
  474 + */
  475 + public function processChunkedList($model, $conditions, $fields, $domain, &$data, $key) {
  476 + $offset = 1;
  477 + $chunkSize = 5000; // 每次查询的记录数
  478 + while (true) {
  479 + $chunk = $model->lists($conditions,$offset,$chunkSize, 'id', $fields);
  480 + if (count($chunk['list']) == 0) {
  481 + break;
  482 + }
  483 + foreach ($chunk['list'] as $item) {
  484 + $data[$key][] = $domain . $item['route'] . '/{' . $item['title'] . '}';
  485 + }
  486 + $offset++;
  487 + }
  488 + }
429 } 489 }
@@ -16,6 +16,7 @@ class Keyword extends Base @@ -16,6 +16,7 @@ class Keyword extends Base
16 //连接数据库 16 //连接数据库
17 protected $connection = 'custom_mysql'; 17 protected $connection = 'custom_mysql';
18 18
  19 + const STATUS_ACTIVE = 1;
19 /** 20 /**
20 * @remark :视频 21 * @remark :视频
21 * @name :getKeywordVideoAttribute 22 * @name :getKeywordVideoAttribute
@@ -281,6 +281,7 @@ Route::middleware(['aloginauth'])->group(function () { @@ -281,6 +281,7 @@ Route::middleware(['aloginauth'])->group(function () {
281 Route::any('/setRobots', [Aside\Optimize\OptimizeController::class, 'setRobots'])->name('admin.optimize_setRobots');//设置robots开关 281 Route::any('/setRobots', [Aside\Optimize\OptimizeController::class, 'setRobots'])->name('admin.optimize_setRobots');//设置robots开关
282 Route::any('/editBacklink', [Aside\Optimize\OptimizeController::class, 'editBacklink'])->name('admin.optimize_editBacklink');//设置backlink开关 282 Route::any('/editBacklink', [Aside\Optimize\OptimizeController::class, 'editBacklink'])->name('admin.optimize_editBacklink');//设置backlink开关
283 Route::any('/setAiVideo', [Aside\Optimize\OptimizeController::class, 'setAiVideo'])->name('admin.optimize_setAiVideo');//设置backlink开关 283 Route::any('/setAiVideo', [Aside\Optimize\OptimizeController::class, 'setAiVideo'])->name('admin.optimize_setAiVideo');//设置backlink开关
  284 + Route::any('/anchorTextList', [Aside\Optimize\OptimizeController::class, 'anchorTextList'])->name('admin.optimize_anchorTextList');//设置backlink开关
284 Route::any('/editTranslateStatus', [Aside\Optimize\OptimizeController::class, 'editTranslateStatus'])->name('admin.optimize_editTranslateStatus');//设置robots开关 285 Route::any('/editTranslateStatus', [Aside\Optimize\OptimizeController::class, 'editTranslateStatus'])->name('admin.optimize_editTranslateStatus');//设置robots开关
285 }); 286 });
286 //生成关键字 287 //生成关键字