Commit 6a102696 by Евгений

Улучшение #19474

Синхронизация фраз и групп
1 parent d3ae55a0
......@@ -79,10 +79,13 @@ class KeywordsAdd extends Command
])
->get();
GoalKeyword::whereIn('id', $goalKeywords->pluck('id')->toArray())
->update([
'reserve_create_at' => Carbon::now(),
]);
foreach (array_chunk($goalKeywords->pluck('id')->toArray(), 1000) as $items){
GoalKeyword::whereIn('id', $items)
->update([
'reserve_create_at' => Carbon::now(),
]);
}
$factory->getRequest('Keywords', 'add')
->call([
......
......@@ -15,7 +15,7 @@ use Illuminate\Support\Facades\Log;
class GetAdGroups extends DirectRequest
{
protected $max_count = -1;
protected $max_count = 10000;
protected $max_count_CampaignIds = 10;
protected $max_count_Ids = 10000;
......@@ -29,13 +29,10 @@ class GetAdGroups extends DirectRequest
public function getObjectsCount()
{
$params = $this->getParams();
if (isset($params['SelectionCriteria']['CampaignIds'])) {
return -1;
}
if (isset($params['SelectionCriteria']['Ids'])) {
return count($params['SelectionCriteria']['Ids']);
}
return -1;
return $this->getMaxCount();
}
public function slice($maxObjects): ?APIRequest
......@@ -87,9 +84,9 @@ class GetAdGroups extends DirectRequest
$external_id = (string)$ad_group['CampaignId'];
$campaign = $campaigns->firstWhere('external_id', $external_id);
//$campaigns->firstWhere('external_id', $external_id);
if (!$campaign) {
if (!$campaign = $campaigns[$external_id] ?? false) {
continue;
}
......@@ -136,7 +133,7 @@ class GetAdGroups extends DirectRequest
]);
}
} else {
} /*else {
$goalAdGroup = GoalAdGroup::firstWhere('external_id', $external_id);
if (!$goalAdGroup)
......@@ -151,7 +148,7 @@ class GetAdGroups extends DirectRequest
}
$goalAdGroup->update($data);
}
}*/
}
......
......@@ -16,7 +16,7 @@ use Illuminate\Support\Facades\Log;
class GetKeywords extends DirectRequest
{
protected $max_count = -1;
protected $max_count = 10000;
protected $max_count_CampaignIds = 10;
protected $max_count_AdGroupIds = 1000;
protected $max_count_Ids = 10000;
......@@ -59,6 +59,10 @@ class GetKeywords extends DirectRequest
try {
$external_ids = [];
if (!$this->getToken()->isMain()) {
return;//добавлять фразы будем только по основному. По цеелвым будем наоборот выгружать.
}
if (!isset($response['result']['Keywords'])) {
return;
}
......@@ -80,14 +84,11 @@ class GetKeywords extends DirectRequest
$ad_groups = AdGroup::whereIn('external_id', array_keys($external_ids))
->get()
->keyBy('external_id');
} else {
$ad_groups = GoalAdGroup::whereIn('external_id', array_keys($external_ids))
->get()
->keyBy('external_id');
}
$ids = [];
$campaign_ids_synced_need = [];
// $ids = [];
// $campaign_ids_synced_need = [];
$insertData = [];
foreach ($response['result']['Keywords'] as $keyword) {
......@@ -97,67 +98,53 @@ class GetKeywords extends DirectRequest
continue;
}
$external_id = (string)$keyword['Id'];
if ($this->getToken()->isMain()) {
$data = [
'external_id' => $external_id,
'campaign_external_id' => $ad_group->campaign->external_id,
'ad_group_external_id' => $ad_group->external_id,
'ad_group_id' => $ad_group->getKey(),
'campaign_id' => $ad_group->campaign->getKey(),
'keyword' => $keyword['Keyword'],
'user_param_1' => $keyword['UserParam1'] ?? null,
'user_param_2' => $keyword['UserParam2'] ?? null,
'bid' => $keyword['Bid'],
'context_bid' => $keyword['ContextBid'],
'strategy_priority' => $keyword['StrategyPriority'] ?? null,
'state' => $keyword['State'],
'status' => $keyword['Status'],
'serving_status' => $keyword['ServingStatus'],
'deleted_at' => null//не забыть убрать признак удаления, если вдруг опять пришла удаленная ранее фраза
];
$keyword = Keyword::updateOrCreate([
'external_id' => $external_id
], $data);
if ($keyword->wasRecentlyCreated) {
$campaign_ids_synced_need[$keyword->campaign_id] = true;
} elseif ($keyword->wasChanged(['campaign_id'])) {
$campaign_ids_synced_need[$keyword->campaign_id] = true;
} elseif ($keyword->wasChanged($keyword::getPropertiesWatch()->toArray())) {
$keyword->goalKeywords()->has('dictionaryCampaign')->forExternal()->update([
'updated_need' => Carbon::now(),
]);
}
$ids[] = $keyword->getKey();
} else {
$goalKeyword = GoalKeyword::firstWhere('external_id', $external_id);
if (!$goalKeyword)
continue;
$ids[] = $goalKeyword->getKey();
$data = [
'external_updated_at' => Carbon::now(),
];
if ($goalKeyword->dictionaryCampaign->updated) {
$data['updated_need'] = Carbon::now();
}
$goalKeyword->update($data);
}
//идентификатор фразы у нас уникален. Если такая фраза уже есть, нет смысла ее менять, т.к. данные в общем то неизменны.
//если будет изменена фраза, то на самом деле будет фраза с новым идентификатором
//поэтому будем всегда новые добавлять и игонрить те что уже есть
$data = [
'external_id' => $external_id,
'campaign_external_id' => $ad_group->campaign_external_id,
'ad_group_external_id' => $ad_group->external_id,
'ad_group_id' => $ad_group->getKey(),
'campaign_id' => $ad_group->campaign_id,
'keyword' => $keyword['Keyword'],
'user_param_1' => $keyword['UserParam1'] ?? null,
'user_param_2' => $keyword['UserParam2'] ?? null,
'bid' => $keyword['Bid'],
'context_bid' => $keyword['ContextBid'],
'strategy_priority' => $keyword['StrategyPriority'] ?? null,
'state' => $keyword['State'],
'status' => $keyword['Status'],
'serving_status' => $keyword['ServingStatus'],
'deleted_at' => null//не забыть убрать признак удаления, если вдруг опять пришла удаленная ранее фраза
];
$insertData[] = $data;
// $keyword = Keyword::updateOrCreate([
// 'external_id' => $external_id
// ], $data);
// if ($keyword->wasRecentlyCreated) {
// $campaign_ids_synced_need[$keyword->campaign_id] = true;
// } elseif ($keyword->wasChanged(['campaign_id'])) {
// $campaign_ids_synced_need[$keyword->campaign_id] = true;
// } elseif ($keyword->wasChanged($keyword::getPropertiesWatch()->toArray())) {
// $keyword->goalKeywords()->has('dictionaryCampaign')->forExternal()->update([
// 'updated_need' => Carbon::now(),
// ]);
// }
}
foreach (array_chunk($insertData, 1000) as $data) {
Keyword::insertOrIgnore($data);
}
// if ($this->getToken()->isMain()) {
//
// if (isset($this->getParams()['SelectionCriteria']['AdGroupIds'])) {
......
......@@ -32,7 +32,7 @@ class CreateKeywordsTable extends Migration
Schema::create('keywords', function (Blueprint $table) {
$table->id();
$table->bigInteger('external_id');
$table->bigInteger('external_id')->unique();
$table->bigInteger('ad_group_external_id');
$table->bigInteger('campaign_external_id');
$table->bigInteger('ad_group_id')->unsigned();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!