Commit c3851246 by Евгений

Доработал синхрон данных в кеше БД из основных в целевые

1 parent 8a52ff1b
...@@ -4,11 +4,13 @@ namespace App\Console\Commands; ...@@ -4,11 +4,13 @@ namespace App\Console\Commands;
use App\Models\AdGroup; use App\Models\AdGroup;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Keyword; use App\Models\Keyword;
use App\Models\Pivots\DictionaryCampaign; use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup; use App\Models\Pivots\GoalAdGroup;
use App\Models\Pivots\GoalKeyword; use App\Models\Pivots\GoalKeyword;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class DictionaryCampaignsSyncByCampaign extends Command class DictionaryCampaignsSyncByCampaign extends Command
{ {
...@@ -43,56 +45,92 @@ class DictionaryCampaignsSyncByCampaign extends Command ...@@ -43,56 +45,92 @@ class DictionaryCampaignsSyncByCampaign extends Command
*/ */
public function handle() public function handle()
{ {
Campaigns::has('dictionaryCampaignSynchronizedNeedSynced')->forManaged()->get()->each(function (Campaigns $campaign) { // Campaigns::has('dictionaryCampaignSynchronizedNeedSynced')->forManaged()->get()->each(function (Campaigns $campaign) {
$campaign->load([ // $campaign->load([
'groupsForNotKeywordsLoadable.keywords', // 'groupsForNotKeywordsLoadable.keywords',
'dictionaryCampaignSynchronizedNeedSynced' // 'dictionaryCampaignSynchronizedNeedSynced'
]); // ]);
////хоть и есть нужные, а тут они не выберутся. Видимо потому что был сбой, а в кампании записано что все хорошо
$campaign->dictionaryCampaignSynchronizedNeedSynced->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) { // $campaign->dictionaryCampaignSynchronizedNeedSynced->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
//
$campaign->groupsForNotKeywordsLoadable->each(function (AdGroup $adGroup) use ($dictionaryCampaign) { // $campaign->groupsForNotKeywordsLoadable->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
//
$goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign); // $goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
//
$data_keywords = $adGroup->keywords->map(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) { // $data_keywords = $adGroup->keywords->map(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) {
return GoalKeyword::getDataByMain($keyword, $goalAdGroup, $dictionaryCampaign); // return GoalKeyword::getDataByMain($keyword, $goalAdGroup, $dictionaryCampaign);
})->toArray(); // })->toArray();
//
GoalKeyword::upsert($data_keywords, [ // GoalKeyword::upsert($data_keywords, [
'dictionary_campaign_id', // 'dictionary_campaign_id',
'goal_ad_group_id', // 'goal_ad_group_id',
'keyword_id', // 'keyword_id',
], [ // ], [
'dictionary_campaign_id', // 'dictionary_campaign_id',
'dictionary_campaign_external_id', // 'dictionary_campaign_external_id',
'goal_ad_group_id', // 'goal_ad_group_id',
'goal_ad_group_external_id', // 'goal_ad_group_external_id',
'keyword_id', // 'keyword_id',
]); // ]);
//
$goalKeywordQuery = GoalKeyword::where('dictionary_campaign_id', $dictionaryCampaign->getKey()) // $goalKeywordQuery = GoalKeyword::where('dictionary_campaign_id', $dictionaryCampaign->getKey())
->where('goal_ad_group_id', $goalAdGroup->getKey()); // ->where('goal_ad_group_id', $goalAdGroup->getKey());
//
if (count($data_keywords)) { // if (count($data_keywords)) {
$goalKeywordQuery->whereNotIn('keyword_id', array_column($data_keywords, 'keyword_id')); // $goalKeywordQuery->whereNotIn('keyword_id', array_column($data_keywords, 'keyword_id'));
} // }
//
$goalKeywords = $goalKeywordQuery->get(); // $goalKeywords = $goalKeywordQuery->get();
//
$goalKeywords->each(function (GoalKeyword $goalKeyword) { // $goalKeywords->each(function (GoalKeyword $goalKeyword) {
$goalKeyword->delete(); // $goalKeyword->delete();
}); // });
//
}); // });
//
$dictionaryCampaign->update([ // $dictionaryCampaign->update([
'synced_need' => null, // 'synced_need' => null,
]); // ]);
//
}); // });
//
}); // });
$cities = Dictionary::where('token_id', '>', 0)->get();
foreach ($cities as $city){
//грузиим РК которых по какой то причне нет в целевых.
DB::insert("
INSERT INTO dictionary_campaigns(campaign_id, dictionary_id, name, negative_keywords, excluded_sites)
SELECT c.id, {$city->id}, c.name, c.negative_keywords, c.excluded_sites
FROM campaigns c
LEFT JOIN dictionary_campaigns dc on c.id = dc.campaign_id AND dc.dictionary_id={$city->id}
WHERE dc.campaign_id is null AND c.manage=1
");
}
//грузим группы которых по какой то причне нет в целевых.
DB::insert("
INSERT INTO goal_ad_groups(ad_group_id, dictionary_campaign_external_id, dictionary_campaign_id, name, negative_keywords)
SELECT a.id, dc.external_id, dc.id, a.name, a.negative_keywords
FROM ad_groups a
INNER JOIN campaigns c on a.campaign_id = c.id
INNER JOIN dictionary_campaigns dc on c.id = dc.campaign_id
LEFT JOIN goal_ad_groups gag on a.id = gag.ad_group_id
WHERE gag.ad_group_id is null
");
//грузим ключевые фразы которых по какой то причне нет в целевых.
DB::insert("
INSERT INTO goal_keywords(dictionary_campaign_external_id, goal_ad_group_external_id, dictionary_campaign_id,
goal_ad_group_id, keyword_id)
SELECT gag.dictionary_campaign_id, gag.external_id, gag.dictionary_campaign_id, gag.id, k.id
FROM keywords k
INNER JOIN ad_groups ag on k.ad_group_id = ag.id
INNER JOIN goal_ad_groups gag on ag.id = gag.ad_group_id
LEFT JOIN goal_keywords gk on k.id = gk.keyword_id
WHERE gk.keyword_id is null
");
return 0; return 0;
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!