From afed14b0bdfc7a37f2ef3faefa9510bc03ddb19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 3 Jul 2026 22:43:58 +0300 Subject: [PATCH] =?UTF-8?q?feat(=D0=B0=D0=B2=D1=82=D0=BE=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B1=D0=BE=D1=80):=20=D1=82=D1=83=D0=BC=D0=B1=D0=BB=D0=B5?= =?UTF-8?q?=D1=80=20deep=5Fstudy=20+=20=D0=BF=D1=80=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=BE=D1=81=20is=5Ffederal=20=D0=B2=20=D1=88=D0=B0=D0=B3=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/Autopodbor/RunAutopodborStudyJob.php | 1 + app/config/autopodbor.php | 10 ++++++++ .../Autopodbor/RunAutopodborStudyJobTest.php | 24 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/app/app/Jobs/Autopodbor/RunAutopodborStudyJob.php b/app/app/Jobs/Autopodbor/RunAutopodborStudyJob.php index aa4d8a4b..c5d665e3 100644 --- a/app/app/Jobs/Autopodbor/RunAutopodborStudyJob.php +++ b/app/app/Jobs/Autopodbor/RunAutopodborStudyJob.php @@ -71,6 +71,7 @@ class RunAutopodborStudyJob implements ShouldQueue 'name' => $comp->name, 'site_url' => $comp->site_url, 'directory_urls' => $comp->directory_urls ?? [], + 'is_federal' => (bool) $comp->is_federal, ], regionCode: (int) $run->region_code, )); diff --git a/app/config/autopodbor.php b/app/config/autopodbor.php index 60ff0863..a53405ad 100644 --- a/app/config/autopodbor.php +++ b/app/config/autopodbor.php @@ -24,4 +24,14 @@ return [ | */ 'node_bin' => env('AUTOPODBOR_NODE_BIN', 'node'), + + /* + |-------------------------------------------------------------------------- + | Глубокий шаг 2 (движок «глобального сбора источников») + |-------------------------------------------------------------------------- + | true → studyCompetitor сам доищет след (EXA → площадки → якорный фильтр → + | 2ГИС по имени → Яндекс Playwright). false → старый путь по site_url + + | directory_urls из шага 1. По умолчанию ВЫКЛ — включается осознанно. + */ + 'deep_study' => env('AUTOPODBOR_DEEP_STUDY', false), ]; diff --git a/app/tests/Feature/Autopodbor/RunAutopodborStudyJobTest.php b/app/tests/Feature/Autopodbor/RunAutopodborStudyJobTest.php index b4414f07..aebc82e0 100644 --- a/app/tests/Feature/Autopodbor/RunAutopodborStudyJobTest.php +++ b/app/tests/Feature/Autopodbor/RunAutopodborStudyJobTest.php @@ -59,3 +59,27 @@ it('пустой результат: status=empty, без списания', fun ->and($run->fresh()->price_rub_charged)->toBeNull() ->and((string) $tenant->fresh()->balance_rub)->toBe('100000.00'); }); + +it('джоба передаёт is_federal в StudyCompetitorRequest', function () { + $captured = null; + $spy = new class($captured) implements CompetitorAgent { + public function __construct(public &$captured) {} + public function findCompetitors(\App\Services\Autopodbor\Agent\Dto\FindCompetitorsRequest $r): \App\Services\Autopodbor\Agent\Dto\FindCompetitorsResult { throw new \LogicException('n/a'); } + public function resolveByName(\App\Services\Autopodbor\Agent\Dto\ResolveByNameRequest $r): \App\Services\Autopodbor\Agent\Dto\ResolveByNameResult { throw new \LogicException('n/a'); } + public function studyCompetitor(\App\Services\Autopodbor\Agent\Dto\StudyCompetitorRequest $r): \App\Services\Autopodbor\Agent\Dto\StudyCompetitorResult { + $this->captured = $r->competitor; + return new \App\Services\Autopodbor\Agent\Dto\StudyCompetitorResult([]); + } + }; + app()->instance(CompetitorAgent::class, $spy); + $tenant = Tenant::factory()->create(['balance_rub' => '100000.00']); + DB::statement('SET app.current_tenant_id = '.$tenant->id); + SystemSetting::updateOrCreate(['key' => 'autopodbor_price_study_rub'], ['value' => '900', 'type' => 'decimal']); + $searchRun = AutopodborRun::create(['tenant_id' => $tenant->id, 'kind' => 'search', 'status' => 'done', 'region_code' => 29, 'params' => []]); + $comp = AutopodborCompetitor::create(['tenant_id' => $tenant->id, 'search_run_id' => $searchRun->id, 'name' => 'Банк ДОМ.РФ', 'dedup_key' => 'site:domrfbank.ru', 'site_url' => 'domrfbank.ru', 'is_federal' => true]); + $run = AutopodborRun::create(['tenant_id' => $tenant->id, 'kind' => 'study', 'status' => 'queued', 'region_code' => 29, 'competitor_id' => $comp->id, 'params' => []]); + + app()->call([new RunAutopodborStudyJob($run->id), 'handle']); + + expect($spy->captured['is_federal'])->toBeTrue(); +});