Commit dae731c7 by Vladislav

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

1 parent 9996781e
......@@ -66,11 +66,11 @@ class AdGroupsLoadUpdated extends Command
'Ids' => $ids,
]);
$request = new GetBidModifiers();
/*$request = new GetBidModifiers();
$request->setToken($token)
->call([
'AdGroupIds' => $ids,
]);
]);*/
foreach (array_chunk($ids, 1000) as $ids_limit) {
$request = new GetKeywords();
......
......@@ -17,7 +17,7 @@ class BidModifiersAdd extends Command
*
* @var string
*/
protected $signature = 'bidModifiers:add';
protected $signature = 'bidmodifiers:add';
/**
* 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
'ids' => $campaigns->pluck('external_id')->toArray(),
]);
$request = new GetBidModifiers();
/* $request = new GetBidModifiers();
$request->setToken($token)
->call([
'CampaignIds' => $campaigns->pluck('external_id')->toArray(),
]);
]);*/
}
......
......@@ -11,9 +11,11 @@ use App\Console\Commands\AdvertisementsAdd;
use App\Console\Commands\AdvertisementsLoadUpdated;
use App\Console\Commands\AdvertisementsUpdate;
use App\Console\Commands\BidModifiersAdd;
use App\Console\Commands\BidModifiersUpdate;
use App\Console\Commands\CampaignsAdd;
use App\Console\Commands\CampaignsCheckChange;
use App\Console\Commands\CampaignsCheckUpdatedChildren;
use App\Console\Commands\CampaignsLoadBidModifiers;
use App\Console\Commands\CampaignsLoadGroups;
use App\Console\Commands\AdGroupsLoadKeywords;
use App\Console\Commands\CampaignsResume;
......@@ -77,6 +79,7 @@ class Kernel extends ConsoleKernel
$schedule->command(CampaignsResume::class)->hourlyAt(15);
$schedule->command(CampaignsSuspend::class)->hourlyAt(15);
$schedule->command(CampaignsLoadBidModifiers::class)->hourlyAt(20);
$schedule->command(CampaignsLoadGroups::class)->hourlyAt(20);
$schedule->command(AdGroupsLoadUpdated::class)->hourlyAt(20);
$schedule->command(AdvertisementsLoadUpdated::class)->hourlyAt(20);
......@@ -93,6 +96,7 @@ class Kernel extends ConsoleKernel
$schedule->command(AdGroupsUpdate::class)->hourlyAt(35);
$schedule->command(BidModifiersAdd::class)->hourlyAt(35);
$schedule->command(BidModifiersUpdate::class)->hourlyAt(35);
$schedule->command(KeywordsAdd::class)->hourlyAt(40);
$schedule->command(KeywordsUpdate::class)->hourlyAt(40);
......
......@@ -51,30 +51,17 @@ class BidModifier extends Model
'updated_self' => 'datetime',
];
public function getBidModifierValueAttribute()
{
if ($this->mobile_adjustment) {
return $this->mobile_adjustment['BidModifier'];
} 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()
/**
* @return Collection
*/
static public function getPropertiesWatch()
{
if ($this->mobile_adjustment) {
return $this->getOriginal('mobile_adjustment')['BidModifier'];
} elseif ($this->desktop_adjustment) {
return $this->getOriginal('desktop_adjustment')['BidModifier'];
} elseif ($this->demographics_adjustment) {
return $this->getOriginal('demographics_adjustment')['BidModifier'];
} elseif ($this->retargeting_adjustment) {
return $this->getOriginal('retargeting_adjustment')['BidModifier'];
}
return collect([
'mobile_adjustment',
'desktop_adjustment',
'demographics_adjustment',
'retargeting_adjustment',
]);
}
/**
......
......@@ -81,6 +81,7 @@ class GoalBidModifier extends Pivot
'external_updated_at',
'updated_need',
'reserve_create_at',
'reserve_update_at',
];
protected $casts = [
......@@ -93,6 +94,7 @@ class GoalBidModifier extends Pivot
'external_updated_at' => 'datetime',
'updated_need' => 'datetime',
'reserve_create_at' => 'datetime',
'reserve_update_at' => 'datetime',
];
public $incrementing = true;
......@@ -120,6 +122,7 @@ class GoalBidModifier extends Pivot
'external_updated_at',
'updated_need',
'reserve_create_at',
'reserve_update_at',
];
}
......
......@@ -130,17 +130,16 @@ class GetBidModifiers extends DirectRequest
'updated_self' => null,
];
$bid_modifier = BidModifier::updateOrCreate([
$bidModifier = BidModifier::updateOrCreate([
'external_id' => $external_id
], $data);
if (!$bid_modifier->wasRecentlyCreated && $bid_modifier->bidModifierValue !== $bid_modifier->originalBidModifierValue) {
$bid_modifier->goalBidModifiers()->has('dictionaryCampaign')->forExternal()->update([
if (!$bidModifier->wasRecentlyCreated && $bidModifier->wasChanged($bidModifier::getPropertiesWatch()->toArray())) {
$bidModifier->goalBidModifiers()->has('dictionaryCampaign')->forExternal()->update([
'updated_need' => Carbon::now(),
]);
}
} 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!