Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Письменов Дмитрий Иванович
/
yourroomads
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit f544823d
authored
Aug 09, 2021
by
Vladislav
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#20695 Отключение объявлений
1 parent
6314cf0c
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
439 additions
and
3 deletions
app/Console/Commands/AdvertisementsArchive.php
app/Console/Commands/AdvertisementsCheckArchive.php
app/Console/Commands/AdvertisementsLoadUpdated.php
app/Console/Commands/DictionaryCampaignsSyncByCampaign.php
app/Models/Advertisement.php
app/Models/Pivots/DictionaryCampaign.php
app/Models/Pivots/GoalAdvertisement.php
app/Service/Requests/Direct/ArchiveAds.php
app/Service/Requests/Direct/GetAds.php
database/migrations/2021_08_09_140729_add_advertisements_archive_column.php
readme.md
app/Console/Commands/AdvertisementsArchive.php
0 → 100644
View file @
f544823
<?php
namespace
App\Console\Commands
;
use
App\Models\Advertisement
;
use
App\Models\Pivots\GoalAdvertisement
;
use
App\Models\Tokens
;
use
App\Service\Requests\Direct\ArchiveAds
;
use
Carbon\Carbon
;
use
Illuminate\Console\Command
;
use
Illuminate\Database\Eloquent\Builder
;
class
AdvertisementsArchive
extends
Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected
$signature
=
'ads:archive'
;
/**
* 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
()
{
$token
=
Tokens
::
has
(
'goalAdvertisementsForNeedArchivedForNotReserveArchiveForNotArchived'
)
->
firstWhere
(
'type'
,
'!='
,
Tokens
::
MAIN
);
if
(
$token
)
{
$this
->
sendRequest
(
$token
,
Advertisement
::
forNotArchived
()
->
notNeedArchived
()
->
forNotReserveArchive
()
->
get
());
}
$tokens
=
Tokens
::
has
(
'dictionaryCampaignsEnabledForExternalSynchronized.goalAdvertisementsForNeedArchivedForNotReserveArchiveForNotArchived'
)
->
where
(
'type'
,
Tokens
::
MAIN
)
->
get
();
foreach
(
$tokens
as
$token
)
{
$this
->
sendRequest
(
$token
,
$token
->
dictionaryCampaignsEnabledForExternalSynchronized
->
pluck
(
'goalAdvertisementsForNeedArchivedForNotReserveArchiveForNotArchived'
));
}
return
0
;
}
private
function
sendRequest
(
$token
,
$ads
)
{
/* @var $ads Advertisement[]|GoalAdvertisement[] */
if
(
!
$ads
->
count
())
{
return
;
}
foreach
(
array_chunk
(
$ads
->
pluck
(
'external_id'
)
->
toArray
(),
1000
)
as
$items
)
{
if
(
$token
->
isMain
())
{
Advertisement
::
whereIn
(
'external_id'
,
$items
)
->
update
([
'reserve_archive_at'
=>
Carbon
::
now
(),
]);
}
else
{
GoalAdvertisement
::
whereIn
(
'external_id'
,
$items
)
->
update
([
'reserve_archive_at'
=>
Carbon
::
now
(),
]);
}
}
$request
=
new
ArchiveAds
();
$request
->
setToken
(
$token
)
->
call
([
'ids'
=>
$ads
->
pluck
(
'external_id'
)
->
toArray
(),
]);
}
}
app/Console/Commands/AdvertisementsCheckArchive.php
0 → 100644
View file @
f544823
<?php
namespace
App\Console\Commands
;
use
App\Models\Advertisement
;
use
App\Models\Tokens
;
use
App\Service\Requests\Direct\GetAds
;
use
Illuminate\Console\Command
;
use
Illuminate\Database\Eloquent\Builder
;
class
AdvertisementsCheckArchive
extends
Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected
$signature
=
'ads:loadArchive'
;
/**
* 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
()
{
$advertisements
=
Advertisement
::
forNotArchived
()
->
notNeedArchived
()
->
get
();
if
(
$advertisements
->
count
())
{
$token
=
Tokens
::
where
(
'type'
,
Tokens
::
MAIN
)
->
first
();
if
(
!
$token
)
{
throw
new
\Exception
(
'Не найден токен блин'
);
}
$ids
=
$advertisements
->
pluck
(
'external_id'
)
->
toArray
();
$request
=
new
GetAds
();
$request
->
setToken
(
$token
)
->
call
([
'Ids'
=>
$ids
,
'States'
=>
[
Advertisement
::
STATE_ARCHIVED
,
],
]);
}
return
0
;
}
}
app/Console/Commands/AdvertisementsLoadUpdated.php
View file @
f544823
...
...
@@ -47,7 +47,7 @@ class AdvertisementsLoadUpdated extends Command
})
->
orWhere
(
function
(
Builder
$query
)
{
$query
->
whereNull
(
'campaign_id'
);
});
})
->
forUpdatedSelf
()
->
get
();
})
->
forUpdatedSelf
()
->
forNotArchived
()
->
notNeedArchived
()
->
get
();
if
(
$advertisements
->
count
())
{
...
...
app/Console/Commands/DictionaryCampaignsSyncByCampaign.php
View file @
f544823
...
...
@@ -221,7 +221,7 @@ class DictionaryCampaignsSyncByCampaign extends Command
LEFT JOIN goal_v_cards gvc on vc.id = gvc.v_card_id and gag.dictionary_campaign_id = gvc.dictionary_campaign_id
LEFT JOIN sitelinks s on ad.sitelink_external_id = s.external_id
LEFT JOIN goal_sitelinks gs on s.id = gs.sitelink_id and gs.token_id = d.token_id
WHERE gad.advertisement_id is null
and ad.campaign_id is not null
WHERE gad.advertisement_id is null and ad.archive_at is not and ad.archived_need is not
and ad.campaign_id is not null
and (ad.sitelink_external_id is null or (ad.sitelink_external_id is not null and s.id is not null))
and (ad.v_card_external_id is null or (ad.v_card_external_id is not null and vc.id is not null))
"
);
...
...
app/Models/Advertisement.php
View file @
f544823
...
...
@@ -99,6 +99,9 @@ class Advertisement extends Model
'prefer_v_card_over_business'
,
'updated_self'
,
'archived_need'
,
'reserve_archive_at'
,
'archive_at'
,
];
protected
$casts
=
[
...
...
@@ -113,6 +116,9 @@ class Advertisement extends Model
'price_extension'
=>
'json'
,
'turbo_page_moderation'
=>
'json'
,
'prefer_v_card_over_business'
=>
'boolean'
,
'archived_need'
=>
'datetime'
,
'reserve_archive_at'
=>
'datetime'
,
'archive_at'
=>
'datetime'
,
];
/**
...
...
@@ -149,6 +155,51 @@ class Advertisement extends Model
return
$query
->
whereNotNull
(
"
{
$query
->
getModel
()
->
getTable
()
}
.updated_self"
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeForArchived
(
$query
)
{
return
$query
->
whereNotNull
(
'archive_at'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeForNotArchived
(
$query
)
{
return
$query
->
whereNull
(
'archive_at'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeNeedArchived
(
$query
)
{
return
$query
->
whereNotNull
(
'archived_need'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeNotNeedArchived
(
$query
)
{
return
$query
->
whereNull
(
'archived_need'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeForNotReserveArchive
(
$query
)
{
return
$query
->
whereNull
(
'reserve_archive_at'
);
}
public
function
groups
()
{
return
$this
->
hasMany
(
AdGroup
::
class
,
'ad_group_id'
);
...
...
app/Models/Pivots/DictionaryCampaign.php
View file @
f544823
...
...
@@ -501,6 +501,11 @@ class DictionaryCampaign extends Pivot
return
$this
->
goalAdvertisements
()
->
needUpdated
()
->
forNotReserveUpdate
();
}
public
function
goalAdvertisementsForNeedArchivedForNotReserveArchiveForNotArchived
()
{
return
$this
->
goalAdvertisements
()
->
needArchived
()
->
forNotReserveArchive
()
->
forNotArchived
();
}
public
function
goalBidModifiers
()
{
return
$this
->
hasMany
(
GoalBidModifier
::
class
,
'dictionary_campaign_id'
);
...
...
app/Models/Pivots/GoalAdvertisement.php
View file @
f544823
...
...
@@ -22,6 +22,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property \Illuminate\Support\Carbon|null $external_upload_at
* @property \Illuminate\Support\Carbon|null $external_updated_at
* @property \Illuminate\Support\Carbon|null $updated_need
* @property \Illuminate\Support\Carbon|null $archived_need
* @property \Illuminate\Support\Carbon|null $reserve_archive_at
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read Advertisement $advertisement
...
...
@@ -29,7 +31,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static Builder|GoalAdvertisement forNotExternal()
* @method static Builder|GoalAdvertisement forNotReserveCreate()
* @method static Builder|GoalAdvertisement forNotReserveUpdate()
* @method static Builder|GoalAdvertisement forNotReserveArchive()
* @method static Builder|GoalAdvertisement needUpdated()
* @method static Builder|GoalAdvertisement needArchived()
* @method static Builder|GoalAdvertisement newModelQuery()
* @method static Builder|GoalAdvertisement newQuery()
* @method static Builder|GoalAdvertisement query()
...
...
@@ -69,6 +73,9 @@ class GoalAdvertisement extends Pivot
'updated_need'
,
'reserve_create_at'
,
'reserve_update_at'
,
'archive_at'
,
'archived_need'
,
'reserve_archive_at'
,
];
protected
$casts
=
[
...
...
@@ -77,6 +84,9 @@ class GoalAdvertisement extends Pivot
'updated_need'
=>
'datetime'
,
'reserve_create_at'
=>
'datetime'
,
'reserve_update_at'
=>
'datetime'
,
'archive_at'
=>
'datetime'
,
'archived_need'
=>
'datetime'
,
'reserve_archive_at'
=>
'datetime'
,
];
public
$incrementing
=
true
;
...
...
@@ -100,6 +110,9 @@ class GoalAdvertisement extends Pivot
'updated_need'
,
'reserve_create_at'
,
'reserve_update_at'
,
'archived_need'
,
'reserve_archive_at'
,
'archive_at'
,
];
}
...
...
@@ -148,6 +161,42 @@ class GoalAdvertisement extends Pivot
return
$query
->
whereNotNull
(
'updated_need'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeForArchived
(
$query
)
{
return
$query
->
whereNotNull
(
'archive_at'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeForNotArchived
(
$query
)
{
return
$query
->
whereNull
(
'archive_at'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeNeedArchived
(
$query
)
{
return
$query
->
whereNotNull
(
'archived_need'
);
}
/**
* @param Builder $query
* @return Builder
*/
public
function
scopeForNotReserveArchive
(
$query
)
{
return
$query
->
whereNull
(
'reserve_archive_at'
);
}
public
function
advertisement
()
{
return
$this
->
belongsTo
(
Advertisement
::
class
,
'advertisement_id'
);
...
...
app/Service/Requests/Direct/ArchiveAds.php
0 → 100644
View file @
f544823
<?php
namespace
App\Service\Requests\Direct
;
use
App\Jobs\ProcessCallLimitedAPI
;
use
App\Models\Advertisement
;
use
App\Models\Pivots\GoalAdvertisement
;
use
App\Service\Contract\APIRequest
;
use
App\Service\Requests\DirectRequest
;
use
Carbon\Carbon
;
use
Illuminate\Support\Facades\Log
;
class
ArchiveAds
extends
DirectRequest
{
protected
$max_count
=
10000
;
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
()[
'SelectionCriteria'
][
'Ads'
]);
}
public
function
slice
(
$maxObjects
)
:
?
APIRequest
{
return
$this
->
sliceByKey
(
$maxObjects
,
'Ads'
);;
}
public
function
handle
(
$response
)
{
try
{
if
(
!
isset
(
$response
[
'result'
][
'ArchiveResults'
]))
{
return
;
}
foreach
(
$response
[
'result'
][
'ArchiveResults'
]
as
$key
=>
$archive_result
)
{
if
(
!
isset
(
$archive_result
[
'Id'
]))
{
Log
::
debug
(
"ArchiveAds, empty Id"
);
Log
::
debug
(
$archive_result
);
Log
::
debug
(
$this
->
getParams
()[
'Ads'
][
$key
]);
if
(
$this
->
getToken
()
->
isMain
())
{
Advertisement
::
whereExternalId
(
$this
->
getParams
()[
'SelectionCriteria'
][
'Ads'
][
'Ids'
][
$key
])
->
update
([
'reserve_archive_at'
=>
null
,
]);
}
else
{
GoalAdvertisement
::
whereExternalId
(
$this
->
getParams
()[
'SelectionCriteria'
][
'Ads'
][
'Ids'
][
$key
])
->
update
([
'reserve_archive_at'
=>
null
,
]);
}
continue
;
}
$external_id
=
(
string
)
$archive_result
[
'Id'
];
if
(
$this
->
getToken
()
->
isMain
())
{
Advertisement
::
needArchived
()
->
where
(
'external_id'
,
$external_id
)
->
update
([
'archive_at'
=>
Carbon
::
now
(),
'archived_need'
=>
null
,
'reserve_archive_at'
=>
null
,
]);
}
else
{
GoalAdvertisement
::
forExternal
()
->
needArchived
()
->
where
(
'external_id'
,
$external_id
)
->
update
([
'archive_at'
=>
Carbon
::
now
(),
'archived_need'
=>
null
,
'reserve_archive_at'
=>
null
,
]);
}
}
}
catch
(
\Exception
$e
)
{
Log
::
debug
(
$e
);
throw
$e
;
}
}
public
function
failed
()
{
if
(
$this
->
getToken
()
->
isMain
())
{
Advertisement
::
whereIn
(
'external_id'
,
$this
->
getParams
()[
'SelectionCriteria'
][
'Ads'
][
'Ids'
])
->
update
([
'reserve_archive_at'
=>
null
,
]);
}
else
{
GoalAdvertisement
::
whereIn
(
'external_id'
,
$this
->
getParams
()[
'SelectionCriteria'
][
'Ads'
][
'Ids'
])
->
update
([
'reserve_archive_at'
=>
null
,
]);
}
}
private
function
requestPrepare
(
$params
)
{
$this
->
setService
(
'Ads'
);
$this
->
setMethod
(
'archive'
);
$this
->
setParams
([
'SelectionCriteria'
=>
[
'Ids'
=>
$params
[
'ids'
],
],
]);
}
}
app/Service/Requests/Direct/GetAds.php
View file @
f544823
...
...
@@ -111,6 +111,9 @@ class GetAds extends DirectRequest
'sub_type'
=>
$ad
[
'Subtype'
],
'updated_self'
=>
null
,
'archived_need'
=>
$ad
[
'State'
]
===
Advertisement
::
STATE_ARCHIVED
?
Carbon
::
now
()
:
null
,
];
if
(
isset
(
$ad
[
'TextAd'
]))
{
...
...
@@ -161,6 +164,12 @@ class GetAds extends DirectRequest
'external_id'
=>
$external_id
],
$data
);
if
(
$advertisement
->
archived_need
)
{
$advertisement
->
goalAdvertisements
()
->
update
([
'archived_need'
=>
Carbon
::
now
(),
]);
}
$adExtensions_sync
=
$advertisement
->
adExtensions
()
->
sync
(
$ad_extensions
->
pluck
(
'id'
));
if
(
$advertisement
->
wasRecentlyCreated
)
{
...
...
@@ -224,6 +233,11 @@ class GetAds extends DirectRequest
"Price"
,
"OldPrice"
,
"PriceCurrency"
,
"PriceQualifier"
,
],
];
if
(
isset
(
$filter
[
'States'
]))
{
$params
[
'SelectionCriteria'
][
'States'
]
=
$filter
[
'States'
];
}
if
(
isset
(
$filter
[
'CampaignIds'
]))
{
$params
[
'SelectionCriteria'
][
'CampaignIds'
]
=
$filter
[
'CampaignIds'
];
}
...
...
database/migrations/2021_08_09_140729_add_advertisements_archive_column.php
0 → 100644
View file @
f544823
<?php
use
Illuminate\Database\Migrations\Migration
;
use
Illuminate\Database\Schema\Blueprint
;
use
Illuminate\Support\Facades\Schema
;
class
AddAdvertisementsArchiveColumn
extends
Migration
{
/**
* Run the migrations.
*
* @return void
*/
public
function
up
()
{
Schema
::
table
(
'advertisements'
,
function
(
Blueprint
$table
)
{
$table
->
timestamp
(
'archive_at'
)
->
nullable
();
$table
->
timestamp
(
'archived_need'
)
->
nullable
();
$table
->
timestamp
(
'reserve_archive_at'
)
->
nullable
();
});
Schema
::
table
(
'goal_advertisements'
,
function
(
Blueprint
$table
)
{
$table
->
timestamp
(
'archive_at'
)
->
nullable
();
$table
->
timestamp
(
'archived_need'
)
->
nullable
();
$table
->
timestamp
(
'reserve_archive_at'
)
->
nullable
();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public
function
down
()
{
//
}
}
readme.md
View file @
f544823
# Developer
Generate local ide helper meta PHPDoc
```
sh
ell script
```
sh
php artisan ide-helper:generate
php artisan ide-helper:meta
php artisan ide-helper:models
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment