Commit cc186b99 by Vladislav

#19474 Синхронизация фраз

1 parent a0734f0e
...@@ -58,7 +58,7 @@ class AdGroupsLoadKeywords extends Command ...@@ -58,7 +58,7 @@ class AdGroupsLoadKeywords extends Command
$ad_group_ids = $campaigns->pluck('groupsForKeywordsLoadable') $ad_group_ids = $campaigns->pluck('groupsForKeywordsLoadable')
->collapse() ->collapse()
->pluck('external_id') ->pluck('external_id')
->all(); ->toArray();
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
......
...@@ -7,6 +7,7 @@ use App\Models\Tokens; ...@@ -7,6 +7,7 @@ use App\Models\Tokens;
use App\Service\API\API; use App\Service\API\API;
use App\Service\Requests\APIRequest; use App\Service\Requests\APIRequest;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Builder;
class AdGroupsLoadUpdated extends Command class AdGroupsLoadUpdated extends Command
{ {
...@@ -41,7 +42,13 @@ class AdGroupsLoadUpdated extends Command ...@@ -41,7 +42,13 @@ class AdGroupsLoadUpdated extends Command
*/ */
public function handle() public function handle()
{ {
$adGroups = AdGroup::has('campaignForEnabledForManaged')->forUpdatedSelf()->get(); $adGroups = AdGroup::where(function (Builder $query) {
$query->where(function (Builder $query) {
$query->has('campaignForEnabledForManaged');
})->orWhere(function (Builder $query) {
$query->whereNull('campaign_id');
});
})->forUpdatedSelf()->get();
if ($adGroups->count()) { if ($adGroups->count()) {
...@@ -50,7 +57,7 @@ class AdGroupsLoadUpdated extends Command ...@@ -50,7 +57,7 @@ class AdGroupsLoadUpdated extends Command
throw new \Exception('Не найден токен блин'); throw new \Exception('Не найден токен блин');
} }
$ids = $adGroups->pluck('external_id')->all(); $ids = $adGroups->pluck('external_id')->toArray();
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
...@@ -68,6 +75,7 @@ class AdGroupsLoadUpdated extends Command ...@@ -68,6 +75,7 @@ class AdGroupsLoadUpdated extends Command
} }
/*
$tokens = Tokens::has('dictionaryCampaignsEnabledForExternalSynchronized.groupsForExternalForUpdatedSelf') $tokens = Tokens::has('dictionaryCampaignsEnabledForExternalSynchronized.groupsForExternalForUpdatedSelf')
->with('dictionaryCampaignsEnabledForExternalSynchronized.groupsForExternalForUpdatedSelf') ->with('dictionaryCampaignsEnabledForExternalSynchronized.groupsForExternalForUpdatedSelf')
->where('type', '!=', Tokens::MAIN) ->where('type', '!=', Tokens::MAIN)
...@@ -80,7 +88,7 @@ class AdGroupsLoadUpdated extends Command ...@@ -80,7 +88,7 @@ class AdGroupsLoadUpdated extends Command
$ids = $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('groupsForExternalForUpdatedSelf') $ids = $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('groupsForExternalForUpdatedSelf')
->collapse() ->collapse()
->pluck('external_id') ->pluck('external_id')
->all(); ->toArray();
$factory->getRequest('AdGroups', 'get')->call([ $factory->getRequest('AdGroups', 'get')->call([
'Ids' => $ids, 'Ids' => $ids,
...@@ -93,6 +101,7 @@ class AdGroupsLoadUpdated extends Command ...@@ -93,6 +101,7 @@ class AdGroupsLoadUpdated extends Command
'AdGroupIds' => $ids, 'AdGroupIds' => $ids,
]); ]);
} }
*/
return 0; return 0;
} }
......
...@@ -52,7 +52,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command ...@@ -52,7 +52,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command
$factory->setToken($token); $factory->setToken($token);
$factory->getRequest('Changes', 'check')->call([ $factory->getRequest('Changes', 'check')->call([
'CampaignIds' => Campaigns::forUpdatedChildren()->pluck('external_id')->all(), 'CampaignIds' => Campaigns::forUpdatedChildren()->pluck('external_id')->toArray(),
'FieldNames' => [ 'FieldNames' => [
'AdGroupIds', 'AdGroupIds',
], ],
...@@ -61,6 +61,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command ...@@ -61,6 +61,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command
} }
$tokens = Tokens::has('dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren') $tokens = Tokens::has('dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren')
->with('dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren') ->with('dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren')
->where('type', '!=', Tokens::MAIN) ->where('type', '!=', Tokens::MAIN)
...@@ -72,7 +73,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command ...@@ -72,7 +73,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command
$factory->getRequest('Changes', 'check')->call([ $factory->getRequest('Changes', 'check')->call([
'CampaignIds' => $token->dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren 'CampaignIds' => $token->dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren
->pluck('external_id')->all(), ->pluck('external_id')->toArray(),
'FieldNames' => [ 'FieldNames' => [
'AdGroupIds', 'AdGroupIds',
], ],
...@@ -80,6 +81,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command ...@@ -80,6 +81,7 @@ class CampaignsCheckUpdatedChildrenAdGroups extends Command
]); ]);
} }
return 0; return 0;
} }
} }
...@@ -56,7 +56,7 @@ class CampaignsLoadGroups extends Command ...@@ -56,7 +56,7 @@ class CampaignsLoadGroups extends Command
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
$campaign_ids = $campaigns->pluck('external_id')->all(); $campaign_ids = $campaigns->pluck('external_id')->toArray();
$factory->getRequest('AdGroups', 'get') $factory->getRequest('AdGroups', 'get')
->call([ ->call([
......
...@@ -56,7 +56,7 @@ class CampaignsLoadUpdated extends Command ...@@ -56,7 +56,7 @@ class CampaignsLoadUpdated extends Command
$factory->setToken($token); $factory->setToken($token);
$factory->getRequest('Campaigns', 'get')->call([ $factory->getRequest('Campaigns', 'get')->call([
'ids' => $campaigns->pluck('external_id')->all(), 'ids' => $campaigns->pluck('external_id')->toArray(),
]); ]);
} }
...@@ -72,7 +72,7 @@ class CampaignsLoadUpdated extends Command ...@@ -72,7 +72,7 @@ class CampaignsLoadUpdated extends Command
$factory->getRequest('Campaigns', 'get')->call([ $factory->getRequest('Campaigns', 'get')->call([
'ids' => $token->dictionaryCampaignsEnabledForExternalSynchronizedUpdatedSelf 'ids' => $token->dictionaryCampaignsEnabledForExternalSynchronizedUpdatedSelf
->pluck('external_id')->all(), ->pluck('external_id')->toArray(),
]); ]);
} }
......
...@@ -51,7 +51,7 @@ class CampaignsResume extends Command ...@@ -51,7 +51,7 @@ class CampaignsResume extends Command
$factory->getRequest('campaigns', 'resume') $factory->getRequest('campaigns', 'resume')
->call([ ->call([
'ids' => $token_main->campaignsEnabledDisabled->pluck('external_id')->all(), 'ids' => $token_main->campaignsEnabledDisabled->pluck('external_id')->toArray(),
]); ]);
} }
*/ */
...@@ -67,7 +67,7 @@ class CampaignsResume extends Command ...@@ -67,7 +67,7 @@ class CampaignsResume extends Command
$factory->getRequest('Campaigns', 'resume') $factory->getRequest('Campaigns', 'resume')
->call([ ->call([
'ids' => $token->dictionaryCampaignsEnabledForExternalDisabled->pluck('external_id')->all(), 'ids' => $token->dictionaryCampaignsEnabledForExternalDisabled->pluck('external_id')->toArray(),
]); ]);
} }
......
...@@ -51,7 +51,7 @@ class CampaignsSuspend extends Command ...@@ -51,7 +51,7 @@ class CampaignsSuspend extends Command
$factory->getRequest('campaigns', 'suspend') $factory->getRequest('campaigns', 'suspend')
->call([ ->call([
'ids' => $token_main->campaignsNotEnabledNotDisabled->pluck('external_id')->all(), 'ids' => $token_main->campaignsNotEnabledNotDisabled->pluck('external_id')->toArrayv(),
]); ]);
} }
*/ */
...@@ -67,7 +67,7 @@ class CampaignsSuspend extends Command ...@@ -67,7 +67,7 @@ class CampaignsSuspend extends Command
$factory->getRequest('Campaigns', 'suspend') $factory->getRequest('Campaigns', 'suspend')
->call([ ->call([
'ids' => $token->dictionaryCampaignsNotEnabledForExternalNotDisabled->pluck('external_id')->all(), 'ids' => $token->dictionaryCampaignsNotEnabledForExternalNotDisabled->pluck('external_id')->toArray(),
]); ]);
} }
......
<?php
namespace App\Console\Commands;
use App\Models\AdGroup;
use App\Models\Keyword;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Pivots\GoalKeyword;
use Illuminate\Console\Command;
class DictionaryCampaignsSyncByCampaign extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'dictionarycampaigns:sync';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Синхроннизиировать связанные данные основныйх РК с целевыми рк';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
DictionaryCampaign::with([
'campaign.groups',
])->synced()->needSynced()->get()->each(function (DictionaryCampaign $dictionaryCampaign) {
$dictionaryCampaign->campaign->groups->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
$goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
$adGroup->keywords->each(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) {
GoalKeyword::updateOrCreateByMain($keyword, $goalAdGroup, $dictionaryCampaign);
});
});
$dictionaryCampaign->update([
'synced_need' => null,
]);
});
return 0;
}
}
...@@ -51,7 +51,7 @@ class KeywordsAdd extends Command ...@@ -51,7 +51,7 @@ class KeywordsAdd extends Command
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
$factory->getRequest('Keyword', 'add') $factory->getRequest('Keywords', 'add')
->call([ ->call([
'goalKeywords' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalKeywordsForNotExternal') 'goalKeywords' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalKeywordsForNotExternal')
->collapse(), ->collapse(),
......
<?php
namespace App\Console\Commands;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
class KeywordsDelete extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'keywords:delete';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Удаление фраз с целевого аккаунта';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$tokens = Tokens::whereHas('dictionaryCampaignsForExternalWithTrashed.goalKeywordsForExternalOnlyTrashed')
->with([
'dictionaryCampaignsForExternalWithTrashed.goalKeywordsForExternalOnlyTrashed',
])
->where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
$factory->getRequest('Keywords', 'delete')
->call([
'ids' => $token->dictionaryCampaignsForExternalWithTrashed->pluck('goalKeywordsForExternalOnlyTrashed')
->collapse()
->pluck('external_id')
->toArray(),
]);
}
return 0;
}
}
...@@ -40,9 +40,9 @@ class KeywordsUpdate extends Command ...@@ -40,9 +40,9 @@ class KeywordsUpdate extends Command
*/ */
public function handle() public function handle()
{ {
$tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNeedUpdated') $tokens = Tokens::whereHas('dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated')
->with([ ->with([
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNeedUpdated.keyword', 'dictionaryCampaignsEnabledForExternalUpdated.goalKeywordsForNeedUpdated.keyword',
]) ])
->where('type', '!=', Tokens::MAIN) ->where('type', '!=', Tokens::MAIN)
->get(); ->get();
...@@ -51,9 +51,9 @@ class KeywordsUpdate extends Command ...@@ -51,9 +51,9 @@ class KeywordsUpdate extends Command
$factory = APIRequest::getInstance(API::YANDEX); $factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token); $factory->setToken($token);
$factory->getRequest('Keyword', 'update') $factory->getRequest('Keywords', 'update')
->call([ ->call([
'goalKeywords' => $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalKeywordsForNeedUpdated') 'goalKeywords' => $token->dictionaryCampaignsEnabledForExternalUpdated->pluck('goalKeywordsForNeedUpdated')
->collapse(), ->collapse(),
]); ]);
} }
......
...@@ -15,6 +15,7 @@ use App\Console\Commands\CampaignsSuspend; ...@@ -15,6 +15,7 @@ use App\Console\Commands\CampaignsSuspend;
use App\Console\Commands\CampaignsUpdate; use App\Console\Commands\CampaignsUpdate;
use App\Console\Commands\DictionariesLoad; use App\Console\Commands\DictionariesLoad;
use App\Console\Commands\CampaignsLoadUpdated; use App\Console\Commands\CampaignsLoadUpdated;
use App\Console\Commands\DictionaryCampaignsSyncByCampaign;
use App\Console\Commands\KeywordsAdd; use App\Console\Commands\KeywordsAdd;
use App\Console\Commands\KeywordsUpdate; use App\Console\Commands\KeywordsUpdate;
use App\Console\Commands\RefreshLimits; use App\Console\Commands\RefreshLimits;
...@@ -40,6 +41,7 @@ class Kernel extends ConsoleKernel ...@@ -40,6 +41,7 @@ class Kernel extends ConsoleKernel
*/ */
protected function schedule(Schedule $schedule) protected function schedule(Schedule $schedule)
{ {
$schedule->command(DictionaryCampaignsSyncByCampaign::class)->everyThirtyMinutes();
$schedule->command(RefreshLimits::class)->hourly(); $schedule->command(RefreshLimits::class)->hourly();
$schedule->command(DictionariesLoad::class)->saturdays()->at('05:00'); $schedule->command(DictionariesLoad::class)->saturdays()->at('05:00');
$schedule->command(CampaignsCheckChange::class)->hourlyAt(5); $schedule->command(CampaignsCheckChange::class)->hourlyAt(5);
...@@ -53,7 +55,7 @@ class Kernel extends ConsoleKernel ...@@ -53,7 +55,7 @@ class Kernel extends ConsoleKernel
$schedule->command(AdGroupsLoadUpdated::class)->hourlyAt(20); $schedule->command(AdGroupsLoadUpdated::class)->hourlyAt(20);
$schedule->command(AdGroupsLoadKeywords::class)->hourlyAt(20); $schedule->command(AdGroupsLoadKeywords::class)->hourlyAt(30);
//Это разовая загрука групп. В расписании она не нужна, по расипсниаю будем грузить уже только те, в которых были изменения //Это разовая загрука групп. В расписании она не нужна, по расипсниаю будем грузить уже только те, в которых были изменения
// через AdGroupsLoadUpdated // через AdGroupsLoadUpdated
......
...@@ -8,6 +8,7 @@ use App\Models\Pivots\DictionaryCampaign; ...@@ -8,6 +8,7 @@ use App\Models\Pivots\DictionaryCampaign;
use App\Models\Tokens; use App\Models\Tokens;
use App\Service\API\API; use App\Service\API\API;
use App\Service\Requests\APIRequest; use App\Service\Requests\APIRequest;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Redirect;
...@@ -189,23 +190,29 @@ class TokensController extends Controller ...@@ -189,23 +190,29 @@ class TokensController extends Controller
$token->cities()->save($dictionary); $token->cities()->save($dictionary);
if ($token_main->campaignsForManaged->count()) { if ($token_main->campaignsForManaged->count()) {
$dictionary->campaigns()->syncWithoutDetaching(
$token_main->campaignsForManaged->keyBy(Campaigns::getModel()->getKeyName())->transform(function (Campaigns $campaign) { $token_main->campaignsForManaged->each(function (Campaigns $campaign) use ($dictionary) {
return DictionaryCampaign::copyPropertyFromMain($campaign);
})->all() DictionaryCampaign::updateOrCreateByMain($campaign, $dictionary, true);
);
$dictionary->campaigns()->get()->each(function (Campaigns $campaign) {
$campaign->copyGroupInGoalGroup();
}); });
} }
DictionaryCampaign::where('dictionary_id', $dictionary->getKey())
->whereNotIn('campaign_id', $token_main->campaignsForManaged->pluck('id'))
->get()
->each(function (DictionaryCampaign $dictionaryCampaign) {
$dictionaryCampaign->delete();
});
DB::commit(); DB::commit();
return Redirect::route('token.edit', $token->getKey())->with('success', 'City added.'); return Redirect::route('token.edit', $token->getKey())->with('success', 'City added.');
} catch (\Exception $e) { } catch (\Exception $e) {
DB::rollBack(); DB::rollBack();
clock($e);
return Redirect::back()->withErrors($e->getMessage()); return Redirect::back()->withErrors($e->getMessage());
} }
} }
...@@ -274,6 +281,9 @@ class TokensController extends Controller ...@@ -274,6 +281,9 @@ class TokensController extends Controller
} }
$dictionary->token()->dissociate(); $dictionary->token()->dissociate();
$dictionary->dictionaryCampaigns->each(function (DictionaryCampaign $dictionaryCampaign) {
$dictionaryCampaign->delete();
});
$dictionary->save(); $dictionary->save();
return Redirect::route('token.edit', $token->getKey())->with('success', 'City deleted.'); return Redirect::route('token.edit', $token->getKey())->with('success', 'City deleted.');
......
...@@ -6,6 +6,7 @@ use App\Models\Pivots\GoalAdGroup; ...@@ -6,6 +6,7 @@ use App\Models\Pivots\GoalAdGroup;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
...@@ -74,6 +75,8 @@ use Illuminate\Support\Collection; ...@@ -74,6 +75,8 @@ use Illuminate\Support\Collection;
*/ */
class AdGroup extends Model class AdGroup extends Model
{ {
use SoftDeletes;
const STATUS_ACCEPTED = 'ACCEPTED'; const STATUS_ACCEPTED = 'ACCEPTED';
const STATUS_DRAFT = 'DRAFT'; const STATUS_DRAFT = 'DRAFT';
const STATUS_MODERATION = 'MODERATION'; const STATUS_MODERATION = 'MODERATION';
...@@ -164,6 +167,7 @@ class AdGroup extends Model ...@@ -164,6 +167,7 @@ class AdGroup extends Model
static::created(function (AdGroup $ad_group) { static::created(function (AdGroup $ad_group) {
if ($ad_group->campaign) { if ($ad_group->campaign) {
$ad_group->campaign->copyGroupInGoalGroup(); $ad_group->campaign->copyGroupInGoalGroup();
$ad_group->campaign->copyGroupInGoalKeyword();
} }
}); });
...@@ -174,6 +178,7 @@ class AdGroup extends Model ...@@ -174,6 +178,7 @@ class AdGroup extends Model
})) { })) {
if (!is_null($ad_group->campaign_id) && is_null($ad_group->getOriginal('campaign_id'))) { if (!is_null($ad_group->campaign_id) && is_null($ad_group->getOriginal('campaign_id'))) {
$ad_group->campaign->copyGroupInGoalGroup(); $ad_group->campaign->copyGroupInGoalGroup();
$ad_group->campaign->copyGroupInGoalKeyword();
} else { } else {
$ad_group->goalGroups()->update( $ad_group->goalGroups()->update(
GoalAdGroup::copyPropertyFromMain($ad_group) GoalAdGroup::copyPropertyFromMain($ad_group)
......
...@@ -181,8 +181,6 @@ class Campaigns extends Model ...@@ -181,8 +181,6 @@ class Campaigns extends Model
static::created(function (Campaigns $campaign) { static::created(function (Campaigns $campaign) {
if ($campaign->manage) { if ($campaign->manage) {
$campaign->copyInGoalCampaign(); $campaign->copyInGoalCampaign();
$campaign->copyGroupInGoalGroup();
$campaign->copyGroupInGoalKeyword();
} }
}); });
...@@ -191,21 +189,13 @@ class Campaigns extends Model ...@@ -191,21 +189,13 @@ class Campaigns extends Model
if ($campaign->manage !== $campaign->getOriginal('manage')) { if ($campaign->manage !== $campaign->getOriginal('manage')) {
if ($campaign->manage) { if ($campaign->manage) {
$campaign->copyInGoalCampaign(); $campaign->copyInGoalCampaign();
$campaign->copyGroupInGoalGroup();
$campaign->copyGroupInGoalKeyword();
} else { } else {
$campaign->dictionaries()->detach(); $campaign->dictionaryCampaigns()->get()->each(function (DictionaryCampaign $dictionaryCampaign) {
$dictionaryCampaign->delete();
});
} }
} }
if (DictionaryCampaign::getPropertiesCopyWithPivot()->first(function ($property_name) use ($campaign) {
return $campaign->{$property_name} !== $campaign->getOriginal($property_name);
})) {
$campaign->dictionaryCampaigns()->enabled()->forUpdated()->update(
DictionaryCampaign::copyPropertyFromMain($campaign)
);
}
if (self::getPropertiesWatch()->first(function ($property_name) use ($campaign) { if (self::getPropertiesWatch()->first(function ($property_name) use ($campaign) {
return $campaign->{$property_name} !== $campaign->getOriginal($property_name); return $campaign->{$property_name} !== $campaign->getOriginal($property_name);
})) { })) {
...@@ -217,15 +207,13 @@ class Campaigns extends Model ...@@ -217,15 +207,13 @@ class Campaigns extends Model
}); });
} }
private function copyInGoalCampaign() public function copyInGoalCampaign()
{ {
$campaign = $this; $campaign = $this;
Dictionary::whereNotNull('token_id')->get()->each(function (Dictionary $dictionary) use ($campaign) { Dictionary::whereNotNull('token_id')->get()->each(function (Dictionary $dictionary) use ($campaign) {
$campaign->dictionaries()->syncWithoutDetaching([ DictionaryCampaign::updateOrCreateByMain($campaign, $dictionary, true);
$dictionary->getKey() => DictionaryCampaign::copyPropertyFromMain($campaign),
]);
}); });
} }
...@@ -234,15 +222,11 @@ class Campaigns extends Model ...@@ -234,15 +222,11 @@ class Campaigns extends Model
{ {
$campaign = $this; $campaign = $this;
$campaign->dictionaryCampaigns()->get()->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) { $campaign->dictionaryCampaigns->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$campaign->groups()->get()->each(function (AdGroup $adGroup) use ($dictionaryCampaign) { $campaign->groups->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
GoalAdGroup::updateOrCreate([ GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
'dictionary_campaign_id' => $dictionaryCampaign->getKey(),
'dictionary_campaign_external_id' => $dictionaryCampaign->external_id,
'ad_group_id' => $adGroup->getKey(),
], GoalAdGroup::copyPropertyFromMain($adGroup));
}); });
...@@ -253,19 +237,14 @@ class Campaigns extends Model ...@@ -253,19 +237,14 @@ class Campaigns extends Model
{ {
$campaign = $this; $campaign = $this;
$campaign->dictionaryCampaigns()->get()->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$dictionaryCampaign->groups()->get()->each(function (GoalAdGroup $goalAdGroup) use ($campaign, $dictionaryCampaign) { $campaign->dictionaryCampaigns->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$dictionaryCampaign->groups->each(function (GoalAdGroup $goalAdGroup) use ($campaign, $dictionaryCampaign) {
$goalAdGroup->group->keywords()->where('campaign_id', $campaign->getKey())->get()->each(function (Keyword $keyword) use ($dictionaryCampaign, $goalAdGroup) { $goalAdGroup->group->keywords()->where('campaign_id', $campaign->getKey())->get()->each(function (Keyword $keyword) use ($dictionaryCampaign, $goalAdGroup) {
GoalKeyword::updateOrCreate([ GoalKeyword::updateOrCreateByMain($keyword, $goalAdGroup, $dictionaryCampaign);
'dictionary_campaign_id' => $dictionaryCampaign->getKey(),
'dictionary_campaign_external_id' => $dictionaryCampaign->external_id,
'goal_ad_group_id' => $goalAdGroup->getKey(),
'goal_ad_group_external_id' => $goalAdGroup->external_id,
'keyword_id' => $keyword->getKey(),
], GoalKeyword::copyPropertyFromMain($keyword));
}); });
......
...@@ -5,6 +5,7 @@ namespace App\Models; ...@@ -5,6 +5,7 @@ namespace App\Models;
use App\Models\Pivots\GoalKeyword; use App\Models\Pivots\GoalKeyword;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
...@@ -54,6 +55,8 @@ use Illuminate\Support\Collection; ...@@ -54,6 +55,8 @@ use Illuminate\Support\Collection;
*/ */
class Keyword extends Model class Keyword extends Model
{ {
use SoftDeletes;
const STRATEGY_PRIORITY_LOW = 'LOW'; const STRATEGY_PRIORITY_LOW = 'LOW';
const STRATEGY_PRIORITY_NORMAL = 'NORMAL'; const STRATEGY_PRIORITY_NORMAL = 'NORMAL';
const STRATEGY_PRIORITY_HIGH = 'HIGH'; const STRATEGY_PRIORITY_HIGH = 'HIGH';
...@@ -139,6 +142,14 @@ class Keyword extends Model ...@@ -139,6 +142,14 @@ class Keyword extends Model
} }
}); });
static::deleted(function (Keyword $keyword) {
if (!$keyword->isForceDeleting()) {
$keyword->goalKeywords->each(function (GoalKeyword $goalKeyword) {
$goalKeyword->delete();
});
}
});
} }
public function goalKeywords() public function goalKeywords()
......
...@@ -5,8 +5,10 @@ namespace App\Models\Pivots; ...@@ -5,8 +5,10 @@ namespace App\Models\Pivots;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Dictionary; use App\Models\Dictionary;
use App\Models\Variable; use App\Models\Variable;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
...@@ -16,10 +18,10 @@ use Illuminate\Support\Collection; ...@@ -16,10 +18,10 @@ use Illuminate\Support\Collection;
* @property-read Dictionary $dictionary * @property-read Dictionary $dictionary
* @property-read DictionaryCampaignVariable[] $dictionaryCampaignVariables * @property-read DictionaryCampaignVariable[] $dictionaryCampaignVariables
* @property-read Variable[] $variables * @property-read Variable[] $variables
* @property-read GoalAdGroup[] $groups * @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groups
* @property-read GoalAdGroup[] $groupsForNotExternal * @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForNotExternal
* @property-read GoalAdGroup[] $groupsForExternalForUpdatedSelf * @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForExternalForUpdatedSelf
* @property-read GoalAdGroup[] $groupsForExternalForNeedUpdated * @property-read \Illuminate\Database\Eloquent\Collection|GoalAdGroup[] $groupsForExternalForNeedUpdated
* @mixin \Eloquent * @mixin \Eloquent
* @property int $id * @property int $id
* @property int|null $external_id * @property int|null $external_id
...@@ -44,6 +46,8 @@ use Illuminate\Support\Collection; ...@@ -44,6 +46,8 @@ use Illuminate\Support\Collection;
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign needUpdated() * @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign needUpdated()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign enabled($value = true) * @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign enabled($value = true)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forUpdated($value = true) * @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forUpdated($value = true)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign needSynced()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign notNeedSynced()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign synced($value = true) * @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign synced($value = true)
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign synchronized() * @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign synchronized()
* @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forUpdatedSelf() * @method static \Illuminate\Database\Eloquent\Builder|DictionaryCampaign forUpdatedSelf()
...@@ -81,6 +85,7 @@ use Illuminate\Support\Collection; ...@@ -81,6 +85,7 @@ use Illuminate\Support\Collection;
*/ */
class DictionaryCampaign extends Pivot class DictionaryCampaign extends Pivot
{ {
use SoftDeletes;
protected $table = 'dictionary_campaigns'; protected $table = 'dictionary_campaigns';
...@@ -100,6 +105,8 @@ class DictionaryCampaign extends Pivot ...@@ -100,6 +105,8 @@ class DictionaryCampaign extends Pivot
'updated', 'updated',
'synced', 'synced',
'disabled_at', 'disabled_at',
'deleted_at',
'synced_need',
]; ];
protected $casts = [ protected $casts = [
...@@ -114,6 +121,7 @@ class DictionaryCampaign extends Pivot ...@@ -114,6 +121,7 @@ class DictionaryCampaign extends Pivot
'updated' => 'boolean', 'updated' => 'boolean',
'synced' => 'boolean', 'synced' => 'boolean',
'disabled_at' => 'datetime', 'disabled_at' => 'datetime',
'synced_need' => 'datetime',
]; ];
static public function getWithPivot() static public function getWithPivot()
...@@ -133,6 +141,7 @@ class DictionaryCampaign extends Pivot ...@@ -133,6 +141,7 @@ class DictionaryCampaign extends Pivot
'updated', 'updated',
'synced', 'synced',
'disabled_at', 'disabled_at',
'synced_need',
]; ];
} }
...@@ -173,6 +182,38 @@ class DictionaryCampaign extends Pivot ...@@ -173,6 +182,38 @@ class DictionaryCampaign extends Pivot
})->all(); })->all();
} }
static public function updateOrCreateByMain(Campaigns $campaign, Dictionary $dictionary, $syncedNeed = false)
{
$data = [];
if ($syncedNeed) {
$data['synced_need'] = Carbon::now();
}
return DictionaryCampaign::updateOrCreate([
'dictionary_id' => $dictionary->getKey(),
'campaign_id' => $campaign->getKey(),
'deleted_at' => null,
], array_merge(
DictionaryCampaign::copyPropertyFromMain($campaign),
$data
));
}
public static function boot()
{
parent::boot();
static::deleted(function (DictionaryCampaign $dictionaryCampaign) {
if (!$dictionaryCampaign->forceDeleting) {
$dictionaryCampaign->groups()->delete();
$dictionaryCampaign->goalKeywords()->delete();
}
});
}
/** /**
* @param Builder $query * @param Builder $query
* @return Builder * @return Builder
...@@ -233,6 +274,24 @@ class DictionaryCampaign extends Pivot ...@@ -233,6 +274,24 @@ class DictionaryCampaign extends Pivot
* @param Builder $query * @param Builder $query
* @return Builder * @return Builder
*/ */
public function scopeNeedSynced($query)
{
return $query->whereNotNull('synced_need');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeNotNeedSynced($query)
{
return $query->whereNull('synced_need');
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeNeedUpdated($query) public function scopeNeedUpdated($query)
{ {
return $query->whereNotNull('updated_need'); return $query->whereNotNull('updated_need');
...@@ -344,4 +403,9 @@ class DictionaryCampaign extends Pivot ...@@ -344,4 +403,9 @@ class DictionaryCampaign extends Pivot
return $this->goalKeywords()->needUpdated(); return $this->goalKeywords()->needUpdated();
} }
public function goalKeywordsForExternalOnlyTrashed()
{
return $this->goalKeywords()->forExternal()->onlyTrashed();
}
} }
...@@ -6,6 +6,7 @@ use App\Models\AdGroup; ...@@ -6,6 +6,7 @@ use App\Models\AdGroup;
use App\Models\Variable; use App\Models\Variable;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
...@@ -38,7 +39,7 @@ use Illuminate\Support\Collection; ...@@ -38,7 +39,7 @@ use Illuminate\Support\Collection;
* @method static Builder|GoalAdGroup newQuery() * @method static Builder|GoalAdGroup newQuery()
* @method static Builder|GoalAdGroup query() * @method static Builder|GoalAdGroup query()
* @method static Builder|GoalAdGroup whereAdGroupId($value) * @method static Builder|GoalAdGroup whereAdGroupId($value)
* @method static Builder|GoalAdGroup whereCampaignExternalId($value) * @method static Builder|GoalAdGroup whereDictionaryCampaignExternalId($value)
* @method static Builder|GoalAdGroup whereCreatedAt($value) * @method static Builder|GoalAdGroup whereCreatedAt($value)
* @method static Builder|GoalAdGroup whereDictionaryCampaignId($value) * @method static Builder|GoalAdGroup whereDictionaryCampaignId($value)
* @method static Builder|GoalAdGroup whereExternalId($value) * @method static Builder|GoalAdGroup whereExternalId($value)
...@@ -51,11 +52,10 @@ use Illuminate\Support\Collection; ...@@ -51,11 +52,10 @@ use Illuminate\Support\Collection;
* @method static Builder|GoalAdGroup whereUpdatedNeed($value) * @method static Builder|GoalAdGroup whereUpdatedNeed($value)
* @method static Builder|GoalAdGroup whereUpdatedSelf($value) * @method static Builder|GoalAdGroup whereUpdatedSelf($value)
* @mixin \Eloquent * @mixin \Eloquent
* @property-read \App\Models\Pivots\GoalKeyword $goalKeywords
* @method static Builder|GoalAdGroup whereDictionaryCampaignExternalId($value)
*/ */
class GoalAdGroup extends Pivot class GoalAdGroup extends Pivot
{ {
use SoftDeletes;
protected $table = 'goal_ad_groups'; protected $table = 'goal_ad_groups';
...@@ -108,6 +108,16 @@ class GoalAdGroup extends Pivot ...@@ -108,6 +108,16 @@ class GoalAdGroup extends Pivot
]); ]);
} }
static public function updateOrCreateByMain(AdGroup $adGroup, DictionaryCampaign $dictionaryCampaign)
{
return GoalAdGroup::updateOrCreate([
'dictionary_campaign_id' => $dictionaryCampaign->getKey(),
'dictionary_campaign_external_id' => $dictionaryCampaign->external_id,
'ad_group_id' => $adGroup->getKey(),
'deleted_at' => null,
], GoalAdGroup::copyPropertyFromMain($adGroup));
}
/** /**
* @param AdGroup|array $ad_group * @param AdGroup|array $ad_group
* *
...@@ -182,7 +192,7 @@ class GoalAdGroup extends Pivot ...@@ -182,7 +192,7 @@ class GoalAdGroup extends Pivot
public function goalKeywords() public function goalKeywords()
{ {
return $this->belongsTo(GoalKeyword::class, 'goal_ad_group_id'); return $this->hasMany(GoalKeyword::class, 'goal_ad_group_id');
} }
} }
...@@ -5,6 +5,7 @@ namespace App\Models\Pivots; ...@@ -5,6 +5,7 @@ namespace App\Models\Pivots;
use App\Models\Keyword; use App\Models\Keyword;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
...@@ -46,6 +47,8 @@ use Illuminate\Support\Collection; ...@@ -46,6 +47,8 @@ use Illuminate\Support\Collection;
class GoalKeyword extends Pivot class GoalKeyword extends Pivot
{ {
use SoftDeletes;
protected $table = 'goal_keywords'; protected $table = 'goal_keywords';
protected $fillable = [ protected $fillable = [
...@@ -117,6 +120,18 @@ class GoalKeyword extends Pivot ...@@ -117,6 +120,18 @@ class GoalKeyword extends Pivot
->all(); ->all();
} }
static public function updateOrCreateByMain(Keyword $keyword, GoalAdGroup $goalAdGroup, DictionaryCampaign $dictionaryCampaign)
{
return GoalKeyword::updateOrCreate([
'dictionary_campaign_id' => $dictionaryCampaign->getKey(),
'dictionary_campaign_external_id' => $dictionaryCampaign->external_id,
'goal_ad_group_id' => $goalAdGroup->getKey(),
'goal_ad_group_external_id' => $goalAdGroup->external_id,
'keyword_id' => $keyword->getKey(),
'deleted_at' => null,
], GoalKeyword::copyPropertyFromMain($keyword));
}
/** /**
* @param Builder $query * @param Builder $query
* @return Builder * @return Builder
......
...@@ -192,6 +192,11 @@ class Tokens extends Model ...@@ -192,6 +192,11 @@ class Tokens extends Model
return $this->dictionaryCampaigns()->forExternal(); return $this->dictionaryCampaigns()->forExternal();
} }
public function dictionaryCampaignsForExternalWithTrashed()
{
return $this->dictionaryCampaigns()->forExternal()->withTrashed();
}
public function dictionaryCampaignsEnabledForExternal() public function dictionaryCampaignsEnabledForExternal()
{ {
return $this->dictionaryCampaigns()->enabled()->forExternal(); return $this->dictionaryCampaigns()->enabled()->forExternal();
...@@ -224,7 +229,7 @@ class Tokens extends Model ...@@ -224,7 +229,7 @@ class Tokens extends Model
public function dictionaryCampaignsEnabledForExternalSynchronized() public function dictionaryCampaignsEnabledForExternalSynchronized()
{ {
return $this->dictionaryCampaigns()->enabled()->forExternal()->synchronized(); return $this->dictionaryCampaigns()->enabled()->forExternal()->notNeedSynced()->synchronized();
} }
public function dictionaryCampaignsEnabledForExternalSynchronizedUpdatedSelf() public function dictionaryCampaignsEnabledForExternalSynchronizedUpdatedSelf()
...@@ -234,7 +239,7 @@ class Tokens extends Model ...@@ -234,7 +239,7 @@ class Tokens extends Model
public function dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren() public function dictionaryCampaignsEnabledForExternalSynchronizedUpdatedChildren()
{ {
return $this->dictionaryCampaigns()->enabled()->forExternal()->synchronized()->forUpdatedChildren(); return $this->dictionaryCampaigns()->enabled()->forExternal()->notNeedSynced()->synchronized()->forUpdatedChildren();
} }
public function campaignsForManaged() public function campaignsForManaged()
......
...@@ -4,8 +4,10 @@ namespace App\Service\Requests\Direct; ...@@ -4,8 +4,10 @@ namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalKeyword; use App\Models\Pivots\GoalKeyword;
use App\Models\Variable;
use App\Service\Contract\APIRequest; use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
...@@ -48,6 +50,7 @@ class AddKeywords extends DirectRequest ...@@ -48,6 +50,7 @@ class AddKeywords extends DirectRequest
public function handle($response) public function handle($response)
{ {
try { try {
Log::debug($response);
if (!isset($response['result']['AddResults'])) { if (!isset($response['result']['AddResults'])) {
Log::debug($response); Log::debug($response);
Log::debug($this->getParams()); Log::debug($this->getParams());
...@@ -94,13 +97,17 @@ class AddKeywords extends DirectRequest ...@@ -94,13 +97,17 @@ class AddKeywords extends DirectRequest
$this->putParams($params); $this->putParams($params);
$variables = Variable::all();
$this->setParams([ $this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) { 'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionaryCampaign, $variables);
$keyword = $goalKeyword->keyword; $keyword = $goalKeyword->keyword;
$data = [ $data = [
'Keyword' => $keyword, 'Keyword' => StrReplaceByVariables::getInstance($keyword->keyword, $list)->get(),
'AdGroupId' => $goalKeyword->goal_ad_group_external_id, 'AdGroupId' => $goalKeyword->goal_ad_group_external_id,
]; ];
...@@ -116,14 +123,6 @@ class AddKeywords extends DirectRequest ...@@ -116,14 +123,6 @@ class AddKeywords extends DirectRequest
$data['StrategyPriority'] = $keyword->strategy_priority; $data['StrategyPriority'] = $keyword->strategy_priority;
} }
if ($keyword->state) {
$data['State'] = $keyword->state;
}
if ($keyword->state) {
$data['Status'] = $keyword->state;
}
if ($keyword->user_param_1) { if ($keyword->user_param_1) {
$data['UserParam1'] = $keyword->user_param_1; $data['UserParam1'] = $keyword->user_param_1;
} }
......
<?php
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Pivots\GoalKeyword;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Log;
class DeleteKeywords extends DirectRequest
{
protected $max_count = 10000;
protected $timestamp;
public function call($params = null)
{
$this->requestPrepare($params);
$process = new ProcessCallLimitedAPI($this);
dispatch($process)->onQueue('limits');
}
public function getObjectsCount()
{
return count($this->getParams()['SelectionCriteria']['Ids']);
}
public function slice($maxObjects): ?APIRequest
{
return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'Ids']);
}
public function handle($response)
{
try {
if (!isset($response['result']['DeleteResults'])) {
Log::debug($response);
Log::debug($this->getParams());
}
if (isset($response['result']['Errors'])) {
Log::debug($response['Errors']);
Log::debug($this->getParams());
}
foreach ($response['result']['DeleteResults'] as $key => $delete_result) {
if (!isset($delete_result['Id'])) {
Log::debug("DeleteKeywords, empty Id");
Log::debug($delete_result);
Log::debug($this->getParams());
continue;
}
$external_id = (string)$delete_result['Id'];
GoalKeyword::onlyTrashed()->where('external_id', $external_id)->forceDelete();
}
} catch (\Exception $e) {
Log::debug($e);
throw $e;
}
}
private function requestPrepare($params)
{
$this->setService('Keywords');
$this->setMethod('delete');
$params = [
'SelectionCriteria' => [
'Ids' => $params['ids'],
],
];
$this->setParams($params);
}
}
...@@ -90,9 +90,11 @@ class GetKeywords extends DirectRequest ...@@ -90,9 +90,11 @@ class GetKeywords extends DirectRequest
->keyBy('external_id'); ->keyBy('external_id');
} }
$ids = [];
foreach ($response['result']['Keywords'] as $keyword) { foreach ($response['result']['Keywords'] as $keyword) {
$ad_group = $ad_groups->firstWhere('external_id', $keyword['AdGroupId']); $ad_group = $ad_groups->get((string)$keyword['AdGroupId']);
if (!$ad_group) if (!$ad_group)
continue; continue;
...@@ -109,20 +111,22 @@ class GetKeywords extends DirectRequest ...@@ -109,20 +111,22 @@ class GetKeywords extends DirectRequest
'ad_group_id' => $ad_group->getKey(), 'ad_group_id' => $ad_group->getKey(),
'campaign_id' => $ad_group->campaign->getKey(), 'campaign_id' => $ad_group->campaign->getKey(),
'keyword' => $keyword['Keyword'], 'keyword' => $keyword['Keyword'],
'user_param_1' => $keyword['UserParam1'], 'user_param_1' => $keyword['UserParam1'] ?? null,
'user_param_2' => $keyword['UserParam2'], 'user_param_2' => $keyword['UserParam2'] ?? null,
'bid' => $keyword['Bid'], 'bid' => $keyword['Bid'],
'context_bid' => $keyword['ContextBid'], 'context_bid' => $keyword['ContextBid'],
'strategy_priority' => $keyword['StrategyPriority'], 'strategy_priority' => $keyword['StrategyPriority'] ?? null,
'state' => $keyword['State'], 'state' => $keyword['State'],
'status' => $keyword['Status'], 'status' => $keyword['Status'],
'serving_status' => $keyword['ServingStatus'], 'serving_status' => $keyword['ServingStatus'],
]; ];
Keyword::updateOrCreate([ $keyword = Keyword::updateOrCreate([
'external_id' => $external_id 'external_id' => $external_id
], $data); ], $data);
$ids[] = $keyword->getKey();
$ad_group->update([ $ad_group->update([
'keywords_loaded_at' => Carbon::now(), 'keywords_loaded_at' => Carbon::now(),
]); ]);
...@@ -133,6 +137,8 @@ class GetKeywords extends DirectRequest ...@@ -133,6 +137,8 @@ class GetKeywords extends DirectRequest
if (!$goalKeyword) if (!$goalKeyword)
continue; continue;
$ids[] = $goalKeyword->getKey();
$data = [ $data = [
'external_updated_at' => Carbon::now(), 'external_updated_at' => Carbon::now(),
]; ];
...@@ -147,6 +153,29 @@ class GetKeywords extends DirectRequest ...@@ -147,6 +153,29 @@ class GetKeywords extends DirectRequest
} }
if ($this->getToken()->isMain()) {
$keywordQuery = Keyword::query();
if (isset($this->getParams()['SelectionCriteria']['AdGroupIds'])) {
$keywordQuery->whereIn('ad_group_external_id', $this->getParams()['SelectionCriteria']['AdGroupIds']);
} else {
$keywordQuery->whereIn('ad_group_id', $ad_groups->pluck('id'));
}
} else {
$keywordQuery = GoalKeyword::query()
->whereIn('goal_ad_group_id', $ad_groups->pluck('id'));
}
if (count($ids)) {
$keywordQuery->whereNotIn('id', $ids);
}
$keywordQuery->get()->each(function ($goalKeyword) {
/* @var $goalKeyword GoalKeyword|Keyword */
$goalKeyword->delete();
});
} catch (\Exception $e) { } catch (\Exception $e) {
Log::debug($e); Log::debug($e);
throw $e; throw $e;
......
...@@ -3,15 +3,11 @@ ...@@ -3,15 +3,11 @@
namespace App\Service\Requests\Direct; namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Pivots\GoalKeyword; use App\Models\Pivots\GoalKeyword;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest; use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables; use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
...@@ -55,7 +51,7 @@ class UpdateKeywords extends DirectRequest ...@@ -55,7 +51,7 @@ class UpdateKeywords extends DirectRequest
foreach ($response['result']['UpdateResults'] as $key => $update_result) { foreach ($response['result']['UpdateResults'] as $key => $update_result) {
if (!isset($update_result['Id'])) { if (!isset($update_result['Id'])) {
Log::debug("UpdateAdGroup, empty Id"); Log::debug("UpdateKeywords, empty Id");
Log::debug($update_result); Log::debug($update_result);
Log::debug($this->getParams()); Log::debug($this->getParams());
continue; continue;
...@@ -81,14 +77,18 @@ class UpdateKeywords extends DirectRequest ...@@ -81,14 +77,18 @@ class UpdateKeywords extends DirectRequest
$this->setService('Keywords'); $this->setService('Keywords');
$this->setMethod('update'); $this->setMethod('update');
$variables = Variable::all();
$this->setParams([ $this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) { 'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionaryCampaign, $variables);
$keyword = $goalKeyword->keyword; $keyword = $goalKeyword->keyword;
$data = [ $data = [
'Id' => $goalKeyword->external_id, 'Id' => $goalKeyword->external_id,
'Keyword' => $keyword->keyword, 'Keyword' => StrReplaceByVariables::getInstance($keyword->keyword, $list)->get(),
]; ];
if ($keyword->user_param_1) { if ($keyword->user_param_1) {
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddKeywordsAndGoalKeywordsColumnDeletedAt extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('keywords', function (Blueprint $table) {
$table->softDeletes();
});
Schema::table('goal_keywords', function (Blueprint $table) {
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddDictionaryCampaignsColumnSyncedNeedAndDeletedAt extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('dictionary_campaigns', function (Blueprint $table) {
$table->timestamp('synced_need')->nullable();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddAdGroupsAndGoalAdGroupsColumnDeletedAt extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('ad_groups', function (Blueprint $table) {
$table->softDeletes();
});
Schema::table('goal_ad_groups', function (Blueprint $table) {
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!