Commit fc95f60a by Vladislav

Оптимизация добавления фраз

1 parent f811963b
......@@ -6,7 +6,8 @@ use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\DB;
class KeywordsAdd extends Command
{
......@@ -48,21 +49,48 @@ class KeywordsAdd extends Command
foreach ($tokens as $token) {
$token->load([
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal' => function (HasMany $query) {
return $query->has('keyword');
'dictionaryCampaignsEnabledForExternalSynchronized' => function (HasManyThrough $query) {
return $query->has('goalKeywordsForNotExternal.keyword');
},
'dictionaryCampaignsEnabledForExternalSynchronized.goalKeywordsForNotExternal.keyword',
]);
$goalKeywords = $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('goalKeywordsForNotExternal')
->collapse();
$factory = APIRequest::getInstance(API::YANDEX);
$factory->setToken($token);
dd(DB::table('goal_keywords')
->join('keywords', 'goal_keywords.keyword_id', '=', 'keywords.id')
->whereNull('keywords.deleted_at')
->whereNull('goal_keywords.external_id')
->whereIn('goal_keywords.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_keywords.dictionary_campaign_id as dictionary_campaign_id',
'goal_keywords.goal_ad_group_external_id as goal_ad_group_external_id',
'keywords.keyword as keyword',
'keywords.bid as bid',
'keywords.context_bid as context_bid',
'keywords.strategy_priority as strategy_priority',
'keywords.user_param_1 as user_param_1',
'keywords.user_param_2 as user_param_2',
])
->get());
$factory->getRequest('Keywords', 'add')
->call([
'goalKeywords' => $goalKeywords,
'goalKeywords' => DB::table('goal_keywords')
->join('keywords', 'goal_keywords.keyword_id', '=', 'keywords.id')
->whereNull('keywords.deleted_at')
->whereNull('goal_keywords.external_id')
->whereIn('goal_keywords.dictionary_campaign_id', $token->dictionaryCampaignsEnabledForExternalSynchronized->pluck('id'))
->select([
'goal_keywords.dictionary_campaign_id as dictionary_campaign_id',
'goal_keywords.goal_ad_group_external_id as goal_ad_group_external_id',
'keywords.keyword as keyword',
'keywords.bid as bid',
'keywords.context_bid as context_bid',
'keywords.user_param_1 as user_param_1',
'keywords.user_param_2 as user_param_2',
])
->get(),
]);
}
......
......@@ -3,13 +3,11 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
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 AddKeywords extends DirectRequest
......@@ -17,7 +15,7 @@ class AddKeywords extends DirectRequest
protected $max_count = 1000;
protected $timestamp;
/* @var Collection|GoalKeyword[] */
/* @var array */
protected $goalKeywords;
public function call($params = null)
......@@ -37,11 +35,11 @@ class AddKeywords extends DirectRequest
$splinter = $this->sliceByKey($maxObjects, 'Keywords');
$splinter->putParams([
'goalKeywords' => $this->goalKeywords->slice($maxObjects)->values(),
'goalKeywords' => array_values(array_slice($this->goalKeywords, $maxObjects)),
]);
$this->putParams([
'goalKeywords' => $this->goalKeywords->slice(0, $maxObjects),
'goalKeywords' => array_values(array_slice($this->goalKeywords, 0, $maxObjects)),
]);
return $splinter;
......@@ -70,7 +68,7 @@ class AddKeywords extends DirectRequest
$external_id = (string)$add_result['Id'];
$goalKeyword = $this->goalKeywords->get($key);
$goalKeyword = $this->goalKeywords[$key];
$goalKeyword->update([
'external_id' => $external_id,
......@@ -100,44 +98,38 @@ class AddKeywords extends DirectRequest
$lists = [];
$this->setParams([
'Keywords' => $this->goalKeywords->map(function (GoalKeyword $goalKeyword) use ($variables, $lists) {
'Keywords' => array_map(function (array $goalKeyword) use ($variables, $lists) {
if (!isset($lists[$goalKeyword->dictionary_campaign_id])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword->dictionary_campaign_id, $variables);
$lists[$goalKeyword->dictionary_campaign_id] = $list;
if (!isset($lists[$goalKeyword['dictionary_campaign_id']])) {
$list = Variable::getListVariablesByDictionaryCampaign($goalKeyword['dictionary_campaign_id'], $variables);
$lists[$goalKeyword['dictionary_campaign_id']] = $list;
} else {
$list = $lists[$goalKeyword->dictionary_campaign_id];
$list = $lists[$goalKeyword['dictionary_campaign_id']];
}
$keyword = $goalKeyword->keyword;
$data = [
'Keyword' => StrReplaceByVariables::getInstance($keyword->keyword, $list)->get(),
'AdGroupId' => $goalKeyword->goal_ad_group_external_id,
'Keyword' => StrReplaceByVariables::getInstance($goalKeyword['keyword'], $list)->get(),
'AdGroupId' => $goalKeyword['goal_ad_group_external_id'],
];
if ($keyword->bid) {
$data['Bid'] = $keyword->bid;
}
if ($keyword->context_bid) {
$data['ContextBid'] = $keyword->context_bid;
if ($goalKeyword['bid']) {
$data['Bid'] = $goalKeyword['bid'];
}
if ($keyword->strategy_priority) {
$data['StrategyPriority'] = $keyword->strategy_priority;
if ($goalKeyword['context_bid']) {
$data['ContextBid'] = $goalKeyword['context_bid'];
}
if ($keyword->user_param_1) {
$data['UserParam1'] = $keyword->user_param_1;
if ($goalKeyword['user_param_1']) {
$data['UserParam1'] = $goalKeyword['user_param_1'];
}
if ($keyword->user_param_2) {
$data['UserParam2'] = $keyword->user_param_2;
if ($goalKeyword['user_param_2']) {
$data['UserParam2'] = $goalKeyword['user_param_2'];
}
return $data;
})->toArray(),
}, $this->goalKeywords),
]);
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!