Commit dae731c7 by Vladislav

#19500 Синхронизация модификаторов.

1 parent 9996781e
...@@ -66,11 +66,11 @@ class AdGroupsLoadUpdated extends Command ...@@ -66,11 +66,11 @@ class AdGroupsLoadUpdated extends Command
'Ids' => $ids, 'Ids' => $ids,
]); ]);
$request = new GetBidModifiers(); /*$request = new GetBidModifiers();
$request->setToken($token) $request->setToken($token)
->call([ ->call([
'AdGroupIds' => $ids, 'AdGroupIds' => $ids,
]); ]);*/
foreach (array_chunk($ids, 1000) as $ids_limit) { foreach (array_chunk($ids, 1000) as $ids_limit) {
$request = new GetKeywords(); $request = new GetKeywords();
......
...@@ -17,7 +17,7 @@ class BidModifiersAdd extends Command ...@@ -17,7 +17,7 @@ class BidModifiersAdd extends Command
* *
* @var string * @var string
*/ */
protected $signature = 'bidModifiers:add'; protected $signature = 'bidmodifiers:add';
/** /**
* The console command description. * The console command description.
......
<?php
namespace App\Console\Commands;
use App\Models\Pivots\GoalBidModifier;
use App\Models\Tokens;
use App\Service\Requests\Direct\SetBidModifiers;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class BidModifiersUpdate extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'bidmodifiers:update';
/**
* 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::where('type', '!=', Tokens::MAIN)
->get();
foreach ($tokens as $token) {
$goalBidModifiers = DB::table('goal_bid_modifiers')
->join('bid_modifiers', 'goal_bid_modifiers.bid_modifier_id', '=', 'bid_modifiers.id')
->whereNull('bid_modifiers.deleted_at')
->whereNotNull('goal_bid_modifiers.external_id')
->whereNotNull('goal_bid_modifiers.external_id')
->whereNotNull('goal_bid_modifiers.updated_need')
->whereNull('goal_bid_modifiers.reserve_update_at')
->select([
'goal_bid_modifiers.external_id as external_id',
DB::raw(
'CASE' .
' WHEN bid_modifiers.mobile_adjustment IS NOT NULL AND JSON_VALID(bid_modifiers.mobile_adjustment) THEN bid_modifiers.mobile_adjustment->"$.BidModifier"' .
' WHEN bid_modifiers.desktop_adjustment IS NOT NULL AND JSON_VALID(bid_modifiers.desktop_adjustment) THEN bid_modifiers.desktop_adjustment->"$.BidModifier"' .
' WHEN bid_modifiers.demographics_adjustment IS NOT NULL AND JSON_VALID(bid_modifiers.demographics_adjustment) THEN bid_modifiers.demographics_adjustment->"$.BidModifier"' .
' WHEN bid_modifiers.retargeting_adjustment IS NOT NULL AND JSON_VALID(bid_modifiers.retargeting_adjustment) THEN bid_modifiers.retargeting_adjustment->"$.BidModifier"' .
' END as bidModifierValue'
)
])
->get();
if (!$goalBidModifiers->count()) {
continue;
}
foreach (array_chunk($goalBidModifiers->pluck('external_id')->toArray(), 1000) as $items) {
GoalBidModifier::whereIn('external_id', $items)
->update([
'reserve_update_at' => Carbon::now(),
]);
}
$request = new SetBidModifiers();
$request->setToken($token)
->call([
'goalBidModifiers' => $goalBidModifiers,
]);
}
return 0;
}
}
...@@ -56,11 +56,11 @@ class CampaignsLoadUpdated extends Command ...@@ -56,11 +56,11 @@ class CampaignsLoadUpdated extends Command
'ids' => $campaigns->pluck('external_id')->toArray(), 'ids' => $campaigns->pluck('external_id')->toArray(),
]); ]);
$request = new GetBidModifiers(); /* $request = new GetBidModifiers();
$request->setToken($token) $request->setToken($token)
->call([ ->call([
'CampaignIds' => $campaigns->pluck('external_id')->toArray(), 'CampaignIds' => $campaigns->pluck('external_id')->toArray(),
]); ]);*/
} }
......
...@@ -11,9 +11,11 @@ use App\Console\Commands\AdvertisementsAdd; ...@@ -11,9 +11,11 @@ use App\Console\Commands\AdvertisementsAdd;
use App\Console\Commands\AdvertisementsLoadUpdated; use App\Console\Commands\AdvertisementsLoadUpdated;
use App\Console\Commands\AdvertisementsUpdate; use App\Console\Commands\AdvertisementsUpdate;
use App\Console\Commands\BidModifiersAdd; use App\Console\Commands\BidModifiersAdd;
use App\Console\Commands\BidModifiersUpdate;
use App\Console\Commands\CampaignsAdd; use App\Console\Commands\CampaignsAdd;
use App\Console\Commands\CampaignsCheckChange; use App\Console\Commands\CampaignsCheckChange;
use App\Console\Commands\CampaignsCheckUpdatedChildren; use App\Console\Commands\CampaignsCheckUpdatedChildren;
use App\Console\Commands\CampaignsLoadBidModifiers;
use App\Console\Commands\CampaignsLoadGroups; use App\Console\Commands\CampaignsLoadGroups;
use App\Console\Commands\AdGroupsLoadKeywords; use App\Console\Commands\AdGroupsLoadKeywords;
use App\Console\Commands\CampaignsResume; use App\Console\Commands\CampaignsResume;
...@@ -77,6 +79,7 @@ class Kernel extends ConsoleKernel ...@@ -77,6 +79,7 @@ class Kernel extends ConsoleKernel
$schedule->command(CampaignsResume::class)->hourlyAt(15); $schedule->command(CampaignsResume::class)->hourlyAt(15);
$schedule->command(CampaignsSuspend::class)->hourlyAt(15); $schedule->command(CampaignsSuspend::class)->hourlyAt(15);
$schedule->command(CampaignsLoadBidModifiers::class)->hourlyAt(20);
$schedule->command(CampaignsLoadGroups::class)->hourlyAt(20); $schedule->command(CampaignsLoadGroups::class)->hourlyAt(20);
$schedule->command(AdGroupsLoadUpdated::class)->hourlyAt(20); $schedule->command(AdGroupsLoadUpdated::class)->hourlyAt(20);
$schedule->command(AdvertisementsLoadUpdated::class)->hourlyAt(20); $schedule->command(AdvertisementsLoadUpdated::class)->hourlyAt(20);
...@@ -93,6 +96,7 @@ class Kernel extends ConsoleKernel ...@@ -93,6 +96,7 @@ class Kernel extends ConsoleKernel
$schedule->command(AdGroupsUpdate::class)->hourlyAt(35); $schedule->command(AdGroupsUpdate::class)->hourlyAt(35);
$schedule->command(BidModifiersAdd::class)->hourlyAt(35); $schedule->command(BidModifiersAdd::class)->hourlyAt(35);
$schedule->command(BidModifiersUpdate::class)->hourlyAt(35);
$schedule->command(KeywordsAdd::class)->hourlyAt(40); $schedule->command(KeywordsAdd::class)->hourlyAt(40);
$schedule->command(KeywordsUpdate::class)->hourlyAt(40); $schedule->command(KeywordsUpdate::class)->hourlyAt(40);
......
...@@ -51,30 +51,17 @@ class BidModifier extends Model ...@@ -51,30 +51,17 @@ class BidModifier extends Model
'updated_self' => 'datetime', 'updated_self' => 'datetime',
]; ];
public function getBidModifierValueAttribute() /**
{ * @return Collection
if ($this->mobile_adjustment) { */
return $this->mobile_adjustment['BidModifier']; static public function getPropertiesWatch()
} elseif ($this->desktop_adjustment) {
return $this->desktop_adjustment['BidModifier'];
} elseif ($this->demographics_adjustment) {
return $this->demographics_adjustment['BidModifier'];
} elseif ($this->retargeting_adjustment) {
return $this->retargeting_adjustment['BidModifier'];
}
}
public function getOriginalBidModifierValueAttribute()
{ {
if ($this->mobile_adjustment) { return collect([
return $this->getOriginal('mobile_adjustment')['BidModifier']; 'mobile_adjustment',
} elseif ($this->desktop_adjustment) { 'desktop_adjustment',
return $this->getOriginal('desktop_adjustment')['BidModifier']; 'demographics_adjustment',
} elseif ($this->demographics_adjustment) { 'retargeting_adjustment',
return $this->getOriginal('demographics_adjustment')['BidModifier']; ]);
} elseif ($this->retargeting_adjustment) {
return $this->getOriginal('retargeting_adjustment')['BidModifier'];
}
} }
/** /**
......
...@@ -81,6 +81,7 @@ class GoalBidModifier extends Pivot ...@@ -81,6 +81,7 @@ class GoalBidModifier extends Pivot
'external_updated_at', 'external_updated_at',
'updated_need', 'updated_need',
'reserve_create_at', 'reserve_create_at',
'reserve_update_at',
]; ];
protected $casts = [ protected $casts = [
...@@ -93,6 +94,7 @@ class GoalBidModifier extends Pivot ...@@ -93,6 +94,7 @@ class GoalBidModifier extends Pivot
'external_updated_at' => 'datetime', 'external_updated_at' => 'datetime',
'updated_need' => 'datetime', 'updated_need' => 'datetime',
'reserve_create_at' => 'datetime', 'reserve_create_at' => 'datetime',
'reserve_update_at' => 'datetime',
]; ];
public $incrementing = true; public $incrementing = true;
...@@ -120,6 +122,7 @@ class GoalBidModifier extends Pivot ...@@ -120,6 +122,7 @@ class GoalBidModifier extends Pivot
'external_updated_at', 'external_updated_at',
'updated_need', 'updated_need',
'reserve_create_at', 'reserve_create_at',
'reserve_update_at',
]; ];
} }
......
...@@ -130,17 +130,16 @@ class GetBidModifiers extends DirectRequest ...@@ -130,17 +130,16 @@ class GetBidModifiers extends DirectRequest
'updated_self' => null, 'updated_self' => null,
]; ];
$bid_modifier = BidModifier::updateOrCreate([ $bidModifier = BidModifier::updateOrCreate([
'external_id' => $external_id 'external_id' => $external_id
], $data); ], $data);
if (!$bid_modifier->wasRecentlyCreated && $bid_modifier->bidModifierValue !== $bid_modifier->originalBidModifierValue) { if (!$bidModifier->wasRecentlyCreated && $bidModifier->wasChanged($bidModifier::getPropertiesWatch()->toArray())) {
$bid_modifier->goalBidModifiers()->has('dictionaryCampaign')->forExternal()->update([ $bidModifier->goalBidModifiers()->has('dictionaryCampaign')->forExternal()->update([
'updated_need' => Carbon::now(), 'updated_need' => Carbon::now(),
]); ]);
} }
} else { } else {
// //
} }
......
<?php
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Pivots\GoalBidModifier;
use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class SetBidModifiers extends DirectRequest
{
protected $max_count = 1000;
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()['BidModifiers']);
}
public function slice($maxObjects): ?APIRequest
{
return $this->sliceByKey($maxObjects, 'BidModifiers');
}
public function handle($response)
{
try {
if (!isset($response['result']['SetResults'])) {
return;
}
foreach ($response['result']['SetResults'] as $key => $set_result) {
if (!isset($set_result['Id'])) {
Log::debug("UpdateBidModifier, empty Id");
Log::debug($set_result);
Log::debug($this->getParams()['BidModifiers'][$key]);
GoalBidModifier::whereExternalId($this->getParams()['BidModifiers'][$key]['Id'])
->update([
'reserve_update_at' => null,
]);
continue;
}
$external_id = (string)$set_result['Id'];
GoalBidModifier::forExternal()->needUpdated()
->where('external_id', $external_id)
->update([
'updated_need' => null,
'reserve_update_at' => null,
]);
}
} catch (\Exception $e) {
Log::debug($e);
throw $e;
}
}
public function failed()
{
GoalBidModifier::whereIn('external_id', array_column($this->getParams()['BidModifiers'], 'Id'))
->update([
'reserve_update_at' => null,
]);
}
private function requestPrepare($params)
{
$this->setService('BidModifiers');
$this->setMethod('set');
$this->setParams([
'BidModifiers' => $params['goalBidModifiers']->map(function ($goalBidModifier) {
return [
'Id' => $goalBidModifier->external_id,
'BidModifier' => $goalBidModifier->bidModifierValue,
];
})->toArray(),
]);
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddGoalBidModifiersReserveUpdateAtColumn extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('goal_bid_modifiers', function (Blueprint $table) {
$table->timestamp('reserve_update_at')->nullable();
});
}
/**
* 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!