Files
2025-03-05 14:02:29 +09:00

1995 lines
84 KiB
PHP

<?php
namespace App\Models\Advertiser;
use CodeIgniter\Model;
class AutomationModel extends Model
{
protected $zenith, $test,$t;
public function __construct()
{
$this->zenith = \Config\Database::connect();
}
public function getAutomationList($data)
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select('
aa.seq as aa_seq,
aa.subject as aa_subject,
aa.nickname as aa_nickname,
aa.status as aa_status,
aa.mod_datetime as aa_mod_datetime,
aas.schedule_value as aas_schedule_value,
aas.exec_once as aas_exec_once,
aar_max.aar_exec_timestamp_success
');
$builder->join('aa_schedule_new aas', 'aas.idx = aa.seq', 'left');
$builder->join(
'(SELECT idx, MAX(exec_timestamp) as aar_exec_timestamp_success
FROM aa_result
WHERE result = "success"
GROUP BY idx) aar_max',
'aar_max.idx = aa.seq',
'left'
);
if (!empty($data['searchData']['sdate']) && !empty($data['searchData']['edate'])) {
$builder->where('aa.mod_datetime >=', $data['searchData']['sdate']);
$builder->where('aa.mod_datetime <', date('Y-m-d', strtotime($data['searchData']['edate'] . ' + 1 day')));
}
if (!empty($data['searchData']['stx'])) {
$builder->groupStart();
$builder->like('aa.subject', $data['searchData']['stx']);
$builder->orLike('aa.description', $data['searchData']['stx']);
$builder->groupEnd();
}
$builder->groupBy('aa.seq');
$orderBy = [];
if (!empty($data['order'])) {
foreach ($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if ($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$orderBy[] = "aa.seq DESC";
$builder->orderBy(implode(",", $orderBy), '', true);
$result = $builder->get()->getResultArray();
return [
'data' => $result,
];
}
public function getAutomationBySeq($seq)
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select('
aa.seq as aa_seq,
aa.slack_webhook as aa_slack_webhook,
aa.slack_msg as aa_slack_msg,
');
$builder->where('aa.seq', $seq);
$result = $builder->get()->getRowArray();
return $result;
}
public function getSearchCompanies($data)
{
$builder = $this->zenith->table('companies A');
$builder->select('A.id, "광고주" AS media, A.type, A.name, A.status AS status');
$builder->join('company_adaccounts AS B', 'A.id = B.company_id');
if(!empty($data['stx'])){
$builder->groupStart();
$builder->like('A.name', $data['stx']);
$builder->orLike('A.id', $data['stx']);
$builder->groupEnd();
}
$builder->groupBy('A.id');
$builderNoLimit = clone $builder;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$builder->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $builder->limit($data['length'], $data['start']);
$result = $builder->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchCompaniesById($id)
{
$builder = $this->zenith->table('companies A');
$builder->select('A.id, "광고주" AS media, A.type, A.name, A.status AS status');
$builder->where('A.id', $id);
$result = $builder->get()->getRowArray();
return $result;
}
public function getSearchCompaniesWithAdv($data)
{
if(empty($data['adv'])){return false;}
list($media, $type, $id) = explode("_", $data['adv'][0]);
$builder = $this->zenith->table('companies A');
$builder->select('A.id, "광고주" AS media, A.type, A.name, A.status AS status');
if($media == '광고주'){
$builder->where('A.id', $id);
}else{
$builder->join('company_adaccounts AS B', 'A.id = B.company_id');
if($media == '페이스북'){
$builder->join('z_facebook.fb_ad_account AS C', 'B.ad_account_id = C.ad_account_id', 'left');
$builder->join('z_facebook.fb_campaign AS D', 'C.ad_account_id = D.account_id', 'left');
$builder->join('z_facebook.fb_adset AS E', 'D.campaign_id = E.campaign_id', 'left');
$builder->join('z_facebook.fb_ad AS F', 'E.adset_id = F.adset_id', 'left');
if($type == '매체광고주'){
$builder->where('C.ad_account_id', $id);
}else if($type == '캠페인'){
$builder->where('D.campaign_id', $id);
}else if($type == '광고그룹'){
$builder->where('E.adset_id', $id);
}else if($type == '광고'){
$builder->where('F.ad_id', $id);
}
}
if($media == '구글'){
$builder->join('z_adwords.aw_ad_account AS C', 'B.ad_account_id = C.customerId', 'left');
$builder->join('z_adwords.aw_campaign AS D', 'C.customerId = D.customerId', 'left');
$builder->join('z_adwords.aw_adgroup AS E', 'D.id = E.campaignId', 'left');
$builder->join('z_adwords.aw_ad AS F', 'E.id = F.adgroupId', 'left');
if($type == '매체광고주'){
$builder->where('C.customerId', $id);
}else if($type == '캠페인'){
$builder->where('D.id', $id);
}else if($type == '광고그룹'){
$builder->where('E.id', $id);
}else if($type == '광고'){
$builder->where('F.id', $id);
}
}
if($media == '카카오'){
$builder->join('z_moment.mm_ad_account AS C', 'B.ad_account_id = C.id', 'left');
$builder->join('z_moment.mm_campaign AS D', 'C.id = D.ad_account_id', 'left');
$builder->join('z_moment.mm_adgroup AS E', 'D.id = E.campaign_id', 'left');
$builder->join('z_moment.mm_creative AS F', 'E.id = F.adgroup_id', 'left');
if($type == '매체광고주'){
$builder->where('C.id', $id);
}else if($type == '캠페인'){
$builder->where('D.id', $id);
}else if($type == '광고그룹'){
$builder->where('E.id', $id);
}else if($type == '광고'){
$builder->where('F.id', $id);
}
}
}
$builder->groupBy('A.id');
$builderNoLimit = clone $builder;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$builder->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $builder->limit($data['length'], $data['start']);
$result = $builder->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchAccounts($data)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_ad_account A');
$facebookBuilder->select('A.ad_account_id AS id, "페이스북" AS media, "매체광고주" AS type, A.name AS name, A.status AS status');
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.name', $data['stx']);
$facebookBuilder->orLike('A.ad_account_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_ad_account A');
$googleBuilder->select('A.customerId as id, "구글" AS media, "매체광고주" AS type, A.name, A.status AS status');
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.customerId', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_ad_account A');
$kakaoBuilder->select('A.id, "카카오" AS media, "매체광고주" AS type, A.name, A.config AS status');
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchAccountsById($id)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_ad_account A');
$facebookBuilder->select('A.ad_account_id AS id, "페이스북" AS media, "매체광고주" AS type, A.name AS name, A.status AS status');
$facebookBuilder->where('A.ad_account_id', $id);
$googleBuilder = $this->zenith->table('z_adwords.aw_ad_account A');
$googleBuilder->select('A.customerId as id, "구글" AS media, "매체광고주" AS type, A.name, A.status AS status');
$googleBuilder->where('A.customerId', $id);
$kakaoBuilder = $this->zenith->table('z_moment.mm_ad_account A');
$kakaoBuilder->select('A.id, "카카오" AS media, "매체광고주" AS type, A.name, A.config AS status');
$kakaoBuilder->where('A.id', $id);
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$result = $resultQuery->get()->getRowArray();
return $result;
}
public function getSearchAccountsWithAdv($data)
{
if(!empty($data['adv'])){
list($media, $type, $id) = explode("_", $data['adv'][0]);
}else{
return false;
}
$facebookBuilder = $this->zenith->table('z_facebook.fb_ad_account A');
$facebookBuilder->select('A.ad_account_id AS id, "페이스북" AS media, "매체광고주" AS type, A.name AS name, A.status AS status');
if($type == '광고주'){
$facebookBuilder->join('zenith.company_adaccounts AS E', 'A.ad_account_id = E.ad_account_id', 'left');
$facebookBuilder->where('E.company_id', $id);
}else{
$facebookBuilder->join('z_facebook.fb_campaign AS B', 'A.ad_account_id = B.account_id', 'left');
$facebookBuilder->join('z_facebook.fb_adset AS C', 'B.campaign_id = C.campaign_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad AS D', 'C.adset_id = D.adset_id', 'left');
if($media == '페이스북'){
if($type == '매체광고주'){
$facebookBuilder->where('A.ad_account_id', $id);
}else if($type == '캠페인'){
$facebookBuilder->where('B.campaign_id', $id);
}else if($type == '광고그룹'){
$facebookBuilder->where('C.adset_id', $id);
}else if($type == '광고'){
$facebookBuilder->where('D.ad_id', $id);
}
}else{
$facebookBuilder->where('1 = 2');
}
}
$googleBuilder = $this->zenith->table('z_adwords.aw_ad_account A');
$googleBuilder->select('A.customerId as id, "구글" AS media, "매체광고주" AS type, A.name, A.status AS status');
if($type == '광고주'){
$googleBuilder->join('zenith.company_adaccounts AS E', 'A.customerId = E.ad_account_id', 'left');
$googleBuilder->where('E.company_id', $id);
}else{
$googleBuilder->join('z_adwords.aw_campaign AS B', 'A.customerId = B.customerId', 'left');
$googleBuilder->join('z_adwords.aw_adgroup AS C', 'B.id = C.campaignId', 'left');
$googleBuilder->join('z_adwords.aw_ad AS D', 'C.id = D.adgroupId', 'left');
if($media == '구글'){
if($type == '매체광고주'){
$googleBuilder->where('A.customerId', $id);
}else if($type == '캠페인'){
$googleBuilder->where('B.id', $id);
}else if($type == '광고그룹'){
$googleBuilder->where('C.id', $id);
}else if($type == '광고'){
$googleBuilder->where('D.id', $id);
}
}else{
$googleBuilder->where('1 = 2');
}
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_ad_account A');
$kakaoBuilder->select('A.id, "카카오" AS media, "매체광고주" AS type, A.name, A.config AS status');
if($type == '광고주'){
$kakaoBuilder->join('zenith.company_adaccounts AS E', 'A.id = E.ad_account_id', 'left');
$kakaoBuilder->where('E.company_id', $id);
}else{
$kakaoBuilder->join('z_moment.mm_campaign AS B', 'A.id = B.ad_account_id', 'left');
$kakaoBuilder->join('z_moment.mm_adgroup AS C', 'B.id = C.campaign_id', 'left');
$kakaoBuilder->join('z_moment.mm_creative AS D', 'C.id = D.adgroup_id', 'left');
if($media == '카카오'){
if($type == '매체광고주'){
$kakaoBuilder->where('A.id', $id);
}else if($type == '캠페인'){
$kakaoBuilder->where('B.id', $id);
}else if($type == '광고그룹'){
$kakaoBuilder->where('C.id', $id);
}else if($type == '광고'){
$kakaoBuilder->where('D.id', $id);
}
}else{
$kakaoBuilder->where('1 = 2');
}
}
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchCampaigns($data)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_campaign A');
$facebookBuilder->select('A.campaign_id AS id, "페이스북" AS media, "캠페인" AS type, A.campaign_name AS name, A.status AS status');
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.campaign_name', $data['stx']);
$facebookBuilder->orLike('A.campaign_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_campaign A');
$googleBuilder->select('A.id, "구글" AS media, "캠페인" AS type, A.name, A.status AS status');
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.id', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_campaign A');
$kakaoBuilder->select('A.id, "카카오" AS media, "캠페인" AS type, A.name, A.config AS status');
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchCampaignsById($id)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_campaign A');
$facebookBuilder->select('A.campaign_id AS id, "페이스북" AS media, "캠페인" AS type, A.campaign_name AS name, A.status AS status');
$facebookBuilder->where('A.campaign_id', $id);
$googleBuilder = $this->zenith->table('z_adwords.aw_campaign A');
$googleBuilder->select('A.id, "구글" AS media, "캠페인" AS type, A.name, A.status AS status');
$googleBuilder->where('A.id', $id);
$kakaoBuilder = $this->zenith->table('z_moment.mm_campaign A');
$kakaoBuilder->select('A.id, "카카오" AS media, "캠페인" AS type, A.name, A.config AS status');
$kakaoBuilder->where('A.id', $id);
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$result = $resultQuery->get()->getRowArray();
return $result;
}
public function getSearchCampaignsWithAdv($data)
{
$unionBuilder = null;
foreach ($data['adv'] as $adv) {
list($media, $type, $id) = explode("_", $adv);
$facebookBuilder = $this->zenith->table('z_facebook.fb_campaign A');
$facebookBuilder->select('A.campaign_id AS id, "페이스북" AS media, "캠페인" AS type, A.campaign_name AS name, A.status AS status');
if($type == '광고주'){
$facebookBuilder->join('z_facebook.fb_ad_account AS D', 'A.account_id = D.ad_account_id', 'left');
$facebookBuilder->join('zenith.company_adaccounts AS E', 'D.ad_account_id = E.ad_account_id', 'left');
$facebookBuilder->where('E.company_id', $id);
}else{
$facebookBuilder->join('z_facebook.fb_ad_account AS F', 'A.account_id = F.ad_account_id', 'left');
$facebookBuilder->join('z_facebook.fb_adset AS B', 'A.campaign_id = B.campaign_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad AS C', 'B.adset_id = C.adset_id', 'left');
if($media == '페이스북'){
if($type == '매체광고주'){
$facebookBuilder->where('F.ad_account_id', $id);
}else if($type == '캠페인'){
$facebookBuilder->where('A.campaign_id', $id);
}else if($type == '광고그룹'){
$facebookBuilder->where('B.adset_id', $id);
}else if($type == '광고'){
$facebookBuilder->where('C.ad_id', $id);
}
}else{
$facebookBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.campaign_name', $data['stx']);
$facebookBuilder->orLike('A.campaign_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_campaign A');
$googleBuilder->select('A.id, "구글" AS media, "캠페인" AS type, A.name, A.status AS status');
if($type == '광고주'){
$googleBuilder->join('z_adwords.aw_ad_account AS D', 'A.customerId = D.customerId', 'left');
$googleBuilder->join('zenith.company_adaccounts AS E', 'D.customerId = E.ad_account_id', 'left');
$googleBuilder->where('E.company_id', $id);
}else{
$googleBuilder->join('z_adwords.aw_ad_account AS F', 'A.customerId = F.customerId', 'left');
$googleBuilder->join('z_adwords.aw_adgroup AS B', 'A.id = B.campaignId', 'left');
$googleBuilder->join('z_adwords.aw_ad AS C', 'B.id = C.adgroupId', 'left');
if($media == '구글'){
if($type == '매체광고주'){
$googleBuilder->where('F.customerId', $id);
}else if($type == '캠페인'){
$googleBuilder->where('A.id', $id);
}else if($type == '광고그룹'){
$googleBuilder->where('B.id', $id);
}else if($type == '광고'){
$googleBuilder->where('C.id', $id);
}
}else{
$googleBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.id', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_campaign A');
$kakaoBuilder->select('A.id, "카카오" AS media, "캠페인" AS type, A.name, A.config AS status');
if($type == '광고주'){
$kakaoBuilder->join('z_moment.mm_ad_account AS D', 'A.ad_account_id = D.id', 'left');
$kakaoBuilder->join('zenith.company_adaccounts AS E', 'D.id = E.ad_account_id', 'left');
$kakaoBuilder->where('E.company_id', $id);
}else{
$kakaoBuilder->join('z_moment.mm_ad_account AS F', 'A.ad_account_id = F.id', 'left');
$kakaoBuilder->join('z_moment.mm_adgroup AS B', 'A.id = B.campaign_id', 'left');
$kakaoBuilder->join('z_moment.mm_creative AS C', 'B.id = C.adgroup_id', 'left');
if($media == '카카오'){
if($type == '매체광고주'){
$kakaoBuilder->where('F.id', $id);
}else if($type == '캠페인'){
$kakaoBuilder->where('A.id', $id);
}else if($type == '광고그룹'){
$kakaoBuilder->where('B.id', $id);
}else if($type == '광고'){
$kakaoBuilder->where('C.id', $id);
}
}else{
$kakaoBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
if ($unionBuilder === null) {
$unionBuilder = $facebookBuilder;
} else {
$unionBuilder = $unionBuilder->union($facebookBuilder);
}
$unionBuilder = $unionBuilder->union($googleBuilder);
$unionBuilder = $unionBuilder->union($kakaoBuilder);
}
$resultQuery = $this->zenith->newQuery()->fromSubquery($unionBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchAdsets($data)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_adset A');
$facebookBuilder->select('A.adset_id AS id, "페이스북" AS media, "광고그룹" AS type, A.adset_name AS name, A.status AS status');
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.adset_name', $data['stx']);
$facebookBuilder->orLike('A.adset_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_adgroup A');
$googleBuilder->select('A.id, "구글" AS media, "광고그룹" AS type, A.name, A.status AS status');
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.id', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_adgroup A');
$kakaoBuilder->select('A.id, "카카오" AS media, "광고그룹" AS type, A.name, A.config AS status');
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchAdsetsById($id)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_adset A');
$facebookBuilder->select('A.adset_id AS id, "페이스북" AS media, "광고그룹" AS type, A.adset_name AS name, A.status AS status');
$facebookBuilder->where('A.adset_id', $id);
$googleBuilder = $this->zenith->table('z_adwords.aw_adgroup A');
$googleBuilder->select('A.id, "구글" AS media, "광고그룹" AS type, A.name, A.status AS status');
$googleBuilder->where('A.id', $id);
$kakaoBuilder = $this->zenith->table('z_moment.mm_adgroup A');
$kakaoBuilder->select('A.id, "카카오" AS media, "광고그룹" AS type, A.name, A.config AS status');
$kakaoBuilder->where('A.id', $id);
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$result = $resultQuery->get()->getRowArray();
return $result;
}
public function getSearchAdsetsWithAdv($data)
{
$unionBuilder = null;
foreach ($data['adv'] as $adv) {
list($media, $type, $id) = explode("_", $adv);
$facebookBuilder = $this->zenith->table('z_facebook.fb_adset A');
$facebookBuilder->select('A.adset_id AS id, "페이스북" AS media, "광고그룹" AS type, A.adset_name AS name, A.status AS status');
if($type == '광고주'){
$facebookBuilder->join('z_facebook.fb_campaign AS B', 'A.campaign_id = B.campaign_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad_account AS D', 'B.account_id = D.ad_account_id', 'left');
$facebookBuilder->join('zenith.company_adaccounts AS E', 'D.ad_account_id = E.ad_account_id', 'left');
$facebookBuilder->where('E.company_id', $id);
}else{
$facebookBuilder->join('z_facebook.fb_campaign AS B', 'A.campaign_id = B.campaign_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad_account AS D', 'B.account_id = D.ad_account_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad AS C', 'A.adset_id = C.adset_id', 'left');
if($media == '페이스북'){
if($type == '매체광고주'){
$facebookBuilder->where('D.ad_account_id', $id);
}else if($type == '캠페인'){
$facebookBuilder->where('B.campaign_id', $id);
}else if($type == '광고그룹'){
$facebookBuilder->where('A.adset_id', $id);
}else if($type == '광고'){
$facebookBuilder->where('C.ad_id', $id);
}
}else{
$facebookBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.adset_name', $data['stx']);
$facebookBuilder->orLike('A.adset_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_adgroup A');
$googleBuilder->select('A.id, "구글" AS media, "광고그룹" AS type, A.name, A.status AS status');
if($type == '광고주'){
$googleBuilder->join('z_adwords.aw_campaign AS B', 'A.campaignId = B.id', 'left');
$googleBuilder->join('z_adwords.aw_ad_account AS D', 'B.customerId = D.customerId', 'left');
$googleBuilder->join('zenith.company_adaccounts AS E', 'D.customerId = E.ad_account_id', 'left');
$googleBuilder->where('E.company_id', $id);
}else{
$googleBuilder->join('z_adwords.aw_campaign AS B', 'A.campaignId = B.id', 'left');
$googleBuilder->join('z_adwords.aw_ad_account AS F', 'B.customerId = F.customerId', 'left');
$googleBuilder->join('z_adwords.aw_ad AS C', 'A.id = C.adgroupId', 'left');
if($media == '구글'){
if($type == '매체광고주'){
$googleBuilder->where('F.customerId', $id);
}else if($type == '캠페인'){
$googleBuilder->where('B.id', $id);
}else if($type == '광고그룹'){
$googleBuilder->where('A.id', $id);
}else if($type == '광고'){
$googleBuilder->where('C.id', $id);
}
}else{
$googleBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.id', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_adgroup A');
$kakaoBuilder->select('A.id, "카카오" AS media, "광고그룹" AS type, A.name, A.config AS status');
if($type == '광고주'){
$kakaoBuilder->join('z_moment.mm_campaign AS B', 'A.campaign_id = B.id', 'left');
$kakaoBuilder->join('z_moment.mm_ad_account AS D', 'B.ad_account_id = D.id', 'left');
$kakaoBuilder->join('zenith.company_adaccounts AS E', 'D.id = E.ad_account_id', 'left');
$kakaoBuilder->where('E.company_id', $id);
}else{
$kakaoBuilder->join('z_moment.mm_campaign AS B', 'A.campaign_id = B.id', 'left');
$kakaoBuilder->join('z_moment.mm_ad_account AS F', 'B.ad_account_id = F.id', 'left');
$kakaoBuilder->join('z_moment.mm_creative AS C', 'A.id = C.adgroup_id', 'left');
if($media == '카카오'){
if($type == '매체광고주'){
$kakaoBuilder->where('F.id', $id);
}else if($type == '캠페인'){
$kakaoBuilder->where('B.id', $id);
}else if($type == '광고그룹'){
$kakaoBuilder->where('A.id', $id);
}else if($type == '광고'){
$kakaoBuilder->where('C.id', $id);
}
}else{
$kakaoBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
if ($unionBuilder === null) {
$unionBuilder = $facebookBuilder;
} else {
$unionBuilder = $unionBuilder->union($facebookBuilder);
}
$unionBuilder = $unionBuilder->union($googleBuilder);
$unionBuilder = $unionBuilder->union($kakaoBuilder);
}
$resultQuery = $this->zenith->newQuery()->fromSubquery($unionBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchAds($data)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_ad A');
$facebookBuilder->select('A.ad_id AS id, "페이스북" AS media, "광고" AS type, A.ad_name AS name, A.status AS status');
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.ad_name', $data['stx']);
$facebookBuilder->orLike('A.ad_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_ad A');
$googleBuilder->select('A.id, "구글" AS media, "광고" AS type, A.name, A.status AS status');
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.id', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_creative A');
$kakaoBuilder->select('A.id, "카카오" AS media, "광고" AS type, A.name, A.config AS status');
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getSearchAdsById($id)
{
$facebookBuilder = $this->zenith->table('z_facebook.fb_ad A');
$facebookBuilder->select('A.ad_id AS id, "페이스북" AS media, "광고" AS type, A.ad_name AS name, A.status AS status');
$facebookBuilder->where('A.ad_id', $id);
$googleBuilder = $this->zenith->table('z_adwords.aw_ad A');
$googleBuilder->select('A.id, "구글" AS media, "광고" AS type, A.name, A.status AS status');
$googleBuilder->where('A.id', $id);
$kakaoBuilder = $this->zenith->table('z_moment.mm_creative A');
$kakaoBuilder->select('A.id, "카카오" AS media, "광고" AS type, A.name, A.config AS status');
$kakaoBuilder->where('A.id', $id);
$facebookBuilder->union($googleBuilder)->union($kakaoBuilder);
$resultQuery = $this->zenith->newQuery()->fromSubquery($facebookBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$result = $resultQuery->get()->getRowArray();
return $result;
}
public function getSearchAdsWithAdv($data)
{
$unionBuilder = null;
foreach ($data['adv'] as $adv) {
list($media, $type, $id) = explode("_", $adv);
$facebookBuilder = $this->zenith->table('z_facebook.fb_ad A');
$facebookBuilder->select('A.ad_id AS id, "페이스북" AS media, "광고" AS type, A.ad_name AS name, A.status AS status');
if($type == '광고주'){
$facebookBuilder->join('z_facebook.fb_adset AS B', 'A.adset_id = B.adset_id', 'left');
$facebookBuilder->join('z_facebook.fb_campaign AS C', 'B.campaign_id = C.campaign_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad_account AS D', 'C.account_id = D.ad_account_id', 'left');
$facebookBuilder->join('zenith.company_adaccounts AS E', 'D.ad_account_id = E.ad_account_id', 'left');
$facebookBuilder->where('E.company_id', $id);
}else{
$facebookBuilder->join('z_facebook.fb_adset AS B', 'A.adset_id = B.adset_id', 'left');
$facebookBuilder->join('z_facebook.fb_campaign AS C', 'B.campaign_id = C.campaign_id', 'left');
$facebookBuilder->join('z_facebook.fb_ad_account AS D', 'C.account_id = D.ad_account_id', 'left');
if($media == '페이스북'){
if($type == '매체광고주'){
$facebookBuilder->where('D.ad_account_id', $id);
}else if($type == '캠페인'){
$facebookBuilder->where('C.campaign_id', $id);
}else if($type == '광고그룹'){
$facebookBuilder->where('B.adset_id', $id);
}else if($type == '광고'){
$facebookBuilder->where('A.ad_id', $id);
}
}else{
$facebookBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$facebookBuilder->groupStart();
$facebookBuilder->like('A.ad_name', $data['stx']);
$facebookBuilder->orLike('A.ad_id', $data['stx']);
$facebookBuilder->groupEnd();
}
$googleBuilder = $this->zenith->table('z_adwords.aw_ad A');
$googleBuilder->select('A.id, "구글" AS media, "광고" AS type, A.name, A.status AS status');
if($type == '광고주'){
$googleBuilder->join('z_adwords.aw_adgroup AS B', 'A.adgroupId = B.id', 'left');
$googleBuilder->join('z_adwords.aw_campaign AS C', 'B.campaignId = C.id', 'left');
$googleBuilder->join('z_adwords.aw_ad_account AS D', 'C.customerId = D.customerId', 'left');
$googleBuilder->join('zenith.company_adaccounts AS E', 'D.customerId = E.ad_account_id', 'left');
$googleBuilder->where('E.company_id', $id);
}else{
$googleBuilder->join('z_adwords.aw_adgroup AS B', 'A.adgroupId = B.id', 'left');
$googleBuilder->join('z_adwords.aw_campaign AS C', 'B.campaignId = C.id', 'left');
$googleBuilder->join('z_adwords.aw_ad_account AS F', 'C.customerId = F.customerId', 'left');
if($media == '구글'){
if($type == '매체광고주'){
$googleBuilder->where('F.customerId', $id);
}else if($type == '캠페인'){
$googleBuilder->where('C.id', $id);
}else if($type == '광고그룹'){
$googleBuilder->where('B.id', $id);
}else if($type == '광고'){
$googleBuilder->where('A.id', $id);
}
}else{
$googleBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$googleBuilder->groupStart();
$googleBuilder->like('A.name', $data['stx']);
$googleBuilder->orLike('A.id', $data['stx']);
$googleBuilder->groupEnd();
}
$kakaoBuilder = $this->zenith->table('z_moment.mm_creative A');
$kakaoBuilder->select('A.id, "카카오" AS media, "광고" AS type, A.name, A.config AS status');
if($type == '광고주'){
$kakaoBuilder->join('z_moment.mm_adgroup AS B', 'A.adgroup_id = B.id', 'left');
$kakaoBuilder->join('z_moment.mm_campaign AS C', 'B.campaign_id = C.id', 'left');
$kakaoBuilder->join('z_moment.mm_ad_account AS D', 'C.ad_account_id = D.id', 'left');
$kakaoBuilder->join('zenith.company_adaccounts AS E', 'D.id = E.ad_account_id', 'left');
$kakaoBuilder->where('E.company_id', $id);
}else{
$kakaoBuilder->join('z_moment.mm_adgroup AS B', 'A.adgroup_id = B.id', 'left');
$kakaoBuilder->join('z_moment.mm_campaign AS C', 'B.campaign_id = C.id', 'left');
$kakaoBuilder->join('z_moment.mm_ad_account AS F', 'C.ad_account_id = F.id', 'left');
if($media == '카카오'){
if($type == '매체광고주'){
$kakaoBuilder->where('F.id', $id);
}else if($type == '캠페인'){
$kakaoBuilder->where('C.id', $id);
}else if($type == '광고그룹'){
$kakaoBuilder->where('B.id', $id);
}else if($type == '광고'){
$kakaoBuilder->where('A.id', $id);
}
}else{
$kakaoBuilder->where('1 = 2');
}
}
if(!empty($data['stx'])){
$kakaoBuilder->groupStart();
$kakaoBuilder->like('A.name', $data['stx']);
$kakaoBuilder->orLike('A.id', $data['stx']);
$kakaoBuilder->groupEnd();
}
if ($unionBuilder === null) {
$unionBuilder = $facebookBuilder;
} else {
$unionBuilder = $unionBuilder->union($facebookBuilder);
}
$unionBuilder = $unionBuilder->union($googleBuilder);
$unionBuilder = $unionBuilder->union($kakaoBuilder);
}
$resultQuery = $this->zenith->newQuery()->fromSubquery($unionBuilder, 'adv');
$resultQuery->groupBy('adv.id');
$builderNoLimit = clone $resultQuery;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$resultQuery->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $resultQuery->limit($data['length'], $data['start']);
$result = $resultQuery->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
}
public function getAutomation($data)
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select('
aa.seq as aa_seq,
aa.subject as aa_subject,
aa.description as aa_description,
aa.slack_webhook as aa_slack_webhook,
aa.slack_msg as aa_slack_msg,
aas.schedule_value as aas_schedule_value,
aas.exec_once as aas_exec_once,
');
$builder->join('aa_schedule_new aas', 'aas.idx = aa.seq', 'left');
$builder->join('aa_target aat', 'aat.idx = aa.seq', 'left');
$builder->where('aa.seq', $data['id']);
$builder->groupBy('aa.seq');
$result = $builder->get()->getRowArray();
$targetBuilder = $this->zenith->table('aa_target aat');
$targetBuilder->where('aat.idx', $result['aa_seq']);
$result['targets'] = $targetBuilder->get()->getResultArray();
if(!empty($result['targets'])){
foreach ($result['targets'] as &$target) {
switch ($target['type']) {
case 'advertiser':
$targetResult = $this->getSearchCompaniesById($target['id']);
$target['name'] = $targetResult['name'];
$target['status'] = $targetResult['status'];
break;
case 'account':
$targetResult = $this->getSearchAccountsById($target['id']);
$target['name'] = $targetResult['name'];
$target['status'] = $targetResult['status'];
break;
case 'campaign':
$targetResult = $this->getSearchCampaignsById($target['id']);
$target['name'] = $targetResult['name'];
$target['status'] = $targetResult['status'];
break;
case 'adgroup':
$targetResult = $this->getSearchAdsetsById($target['id']);
$target['name'] = $targetResult['name'];
$target['status'] = $targetResult['status'];
break;
case 'ad':
$targetResult = $this->getSearchAdsById($target['id']);
$target['name'] = $targetResult['name'];
$target['status'] = $targetResult['status'];
break;
default:
break;
}
}
}
$conditionsBuilder = $this->zenith->table('aa_conditions aac');
$conditionsBuilder->where('aac.idx', $result['aa_seq']);
$result['conditions'] = $conditionsBuilder->get()->getResultArray();
$executionsBuilder = $this->zenith->table('aa_executions aae');
$executionsBuilder->where('aae.idx', $result['aa_seq']);
$result['executions'] = $executionsBuilder->get()->getResultArray();
if(!empty($result['executions'])){
foreach ($result['executions'] as &$execution) {
switch ($execution['type']) {
case 'campaign':
$executionResult = $this->getSearchCampaignsById($execution['id']);
$execution['name'] = $executionResult['name'];
$execution['status'] = $executionResult['status'];
break;
case 'adgroup':
$executionResult = $this->getSearchAdsetsById($execution['id']);
$execution['name'] = $executionResult['name'];
$execution['status'] = $executionResult['status'];
break;
case 'ad':
$executionResult = $this->getSearchAdsById($execution['id']);
$execution['name'] = $executionResult['name'];
$execution['status'] = $executionResult['status'];
break;
default:
break;
}
}
}
return $result;
}
public function getAutomations()
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select('
aa.seq as aa_seq,
aa.subject as aa_subject,
aa.nickname as aa_nickname,
aa.status as aa_status,
aa.mod_datetime as aa_mod_datetime,
aas.schedule_value as aas_schedule_value,
aas.exec_once as aas_exec_once,
aar_max.aar_exec_timestamp_success
');
$builder->join('aa_schedule_new aas', 'aas.idx = aa.seq', 'left');
$builder->join(
'(SELECT idx, MAX(exec_timestamp) as aar_exec_timestamp_success
FROM aa_result
WHERE result = "success"
GROUP BY idx) aar_max',
'aar_max.idx = aa.seq',
'left'
);
$builder->where('aa.status', 1);
$result = $builder->get()->getResultArray();
return $result;
}
public function getAutomationTargets($seq)
{
$builder = $this->zenith->table('aa_target');
$builder->select('
idx as aat_idx,
type as aat_type,
media as aat_media,
id as aat_id
');
$builder->where('idx', $seq);
$result = $builder->get()->getResultArray();
return $result;
}
public function getAutomationResultCount($seq)
{
$builder = $this->zenith->table('aa_result');
$builder->where('idx', $seq);
$result = $builder->countAllResults();
return $result;
}
public function getTargetCompany($data)
{
$companyBuilder = $this->zenith->table('companies c');
$companyBuilder->select('c.id, c.status, ca.media, GROUP_CONCAT(DISTINCT ca.ad_account_id) as ad_account_id');
$companyBuilder->join('company_adaccounts ca', 'c.id = ca.company_id');
$companyBuilder->where('c.id', $data['aat_id']);
$companyBuilder->groupBy('ca.media');
$companies = $companyBuilder->get()->getResultArray();
$builders = [];
foreach ($companies as $company) {
if(!empty($company['media'])){
switch ($company['media']) {
case 'facebook':
$facebookBuilder = $this->getFacebookByCompany($data, $company);
$builders[] = $facebookBuilder;
break;
case 'google':
$googleBuilder = $this->getGoogleByCompany($data, $company);
$builders[] = $googleBuilder;
break;
case 'kakao':
$kakaoBuilder = $this->getKakaoByCompany($data, $company);
$builders[] = $kakaoBuilder;
break;
default:
break;
}
}
}
if(empty($builders)){return false;}
$unionBuilder = null;
foreach ($builders as $builder) {
if ($unionBuilder) {
$unionBuilder->union($builder);
} else {
$unionBuilder = $builder;
}
}
$builder = $this->zenith->newQuery()->fromSubquery($unionBuilder, 'adv');
$result = $builder->get()->getResultArray();
return $result;
}
private function getFacebookByCompany($data, $company)
{
$subQuery = $this->zenith->table('z_facebook.fb_ad_insight_history A');
$subQuery->select('
D.account_id AS customerId,
D.campaign_id AS id,
D.budget AS budget,
SUM(A.db_count) AS unique_total,
SUM(A.spend) AS spend,
SUM(A.margin) AS margin,
SUM(A.sales) AS sales,
SUM(A.impressions) AS impressions,
SUM(A.inline_link_clicks) AS click,
');
$subQuery->join('z_facebook.fb_ad B', 'A.ad_id = B.ad_id');
$subQuery->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
$subQuery->join('z_facebook.fb_campaign D', 'C.campaign_id = D.campaign_id');
$subQuery->where('A.date >=', date('Y-m-d'));
$subQuery->where('A.date <', date('Y-m-d', strtotime('+ 1day')));
$subQuery->groupBy('D.campaign_id');
$facebookBuilder = $this->zenith->newQuery()->fromSubquery($subQuery, 'sub');
$facebookBuilder->select('
SUM(sub.budget) as budget,
SUM(sub.unique_total) as unique_total,
SUM(sub.spend) as spend,
SUM(sub.margin) as margin,
SUM(sub.sales) as sales,
SUM(sub.impressions) as impressions,
SUM(sub.click) as click');
$facebookBuilder->join('z_facebook.fb_ad_account E', 'sub.customerId = E.ad_account_id');
$facebookBuilder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
$facebookBuilder->join('zenith.companies G', 'F.company_id = G.id');
$facebookBuilder->whereIn('E.ad_account_id', explode(",",$company['ad_account_id']));
$facebookBuilder->where('G.id', $data['aat_id']);
$facebookBuilder->groupBy('G.id');
return $facebookBuilder;
}
private function getGoogleByCompany($data, $company)
{
$subQuery = $this->zenith->table('z_adwords.aw_ad_report_history A');
$subQuery->select('
D.customerId AS customerId,
D.id AS id,
D.amount AS budget,
SUM(A.db_count) AS unique_total,
SUM(A.cost) AS spend,
SUM(A.margin) AS margin,
SUM(A.sales) AS sales,
SUM(A.impressions) AS impressions,
SUM(A.clicks) AS click,
');
$subQuery->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
$subQuery->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
$subQuery->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
$subQuery->where('D.status !=', 'NODATA');
$subQuery->where('A.date >=', date('Y-m-d'));
$subQuery->where('A.date <', date('Y-m-d', strtotime('+ 1day')));
$subQuery->groupBy('D.id');
$googleBuilder = $this->zenith->newQuery()->fromSubquery($subQuery, 'sub');
$googleBuilder->select('
SUM(sub.budget) as budget,
SUM(sub.unique_total) as unique_total,
SUM(sub.spend) as spend,
SUM(sub.margin) as margin,
SUM(sub.sales) as sales,
SUM(sub.impressions) as impressions,
SUM(sub.click) as click
');
$googleBuilder->join('z_adwords.aw_ad_account E', 'sub.customerId = E.customerId');
$googleBuilder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
$googleBuilder->join('zenith.companies G', 'F.company_id = G.id');
$googleBuilder->whereIn('E.customerId', explode(",",$company['ad_account_id']));
$googleBuilder->where('G.id', $data['aat_id']);
$googleBuilder->groupBy('G.id');
return $googleBuilder;
}
private function getKakaoByCompany($data, $company)
{
$subQuery = $this->zenith->table('z_moment.mm_creative_report_basic A');
$subQuery->select('
D.ad_account_id AS customerId,
D.id AS id,
D.dailyBudgetAmount AS budget,
SUM(A.db_count) AS unique_total,
SUM(A.cost) AS spend,
SUM(A.margin) AS margin,
SUM(A.sales) AS sales,
SUM(A.imp) AS impressions,
SUM(A.click) AS click,
');
$subQuery->join('z_moment.mm_creative B', 'A.id = B.id');
$subQuery->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
$subQuery->join('z_moment.mm_campaign D', 'C.campaign_id = D.id');
$subQuery->where('A.date >=', date('Y-m-d'));
$subQuery->where('A.date <', date('Y-m-d', strtotime('+ 1day')));
$subQuery->groupBy('D.id');
$kakaoBuilder = $this->zenith->newQuery()->fromSubquery($subQuery, 'sub');
$kakaoBuilder->select('
SUM(sub.budget) as budget,
SUM(sub.unique_total) as unique_total,
SUM(sub.spend) as spend,
SUM(sub.margin) as margin,
SUM(sub.sales) as sales,
SUM(sub.impressions) as impressions,
SUM(sub.click) as click
');
$kakaoBuilder->join('z_moment.mm_ad_account E', 'sub.customerId = E.id');
$kakaoBuilder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
$kakaoBuilder->join('zenith.companies G', 'F.company_id = G.id');
$kakaoBuilder->whereIn('E.id', explode(",",$company['ad_account_id']));
$kakaoBuilder->where('G.id', $data['aat_id']);
$kakaoBuilder->groupBy('G.id');
return $kakaoBuilder;
}
public function getTargetFacebook($data)
{
$subQuery = $this->zenith->table('z_facebook.fb_ad_insight_history A');
$subQuery->select('
SUM(A.impressions) AS impressions,
SUM(A.inline_link_clicks) AS click,
SUM(A.spend) AS spend,
SUM(A.sales) as sales,
SUM(A.db_count) as unique_total,
SUM(A.margin) as margin');
$subQuery->join('z_facebook.fb_ad B', 'A.ad_id = B.ad_id');
$subQuery->where('A.date >=', date('Y-m-d'));
$subQuery->where('A.date <', date('Y-m-d', strtotime('+ 1day')));
if($data['aat_type'] === 'account' || $data['aat_type'] === 'campaign'){
$subQuery->select('D.account_id as customerId,
D.campaign_id AS id, D.status AS status, D.budget AS budget');
$subQuery->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
$subQuery->join('z_facebook.fb_campaign D', 'C.campaign_id = D.campaign_id');
$subQuery->groupBy('D.campaign_id');
}else if($data['aat_type'] === 'adgroup'){
$subQuery->select('C.campaign_id as campaign_id,
C.adset_id AS id, C.status AS status, C.budget AS budget ');
$subQuery->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
$subQuery->groupBy('C.adset_id');
}else if($data['aat_type'] === 'ad'){
$subQuery->select('B.adset_id as adset_id,
B.ad_id AS id, B.status AS status, 0 AS budget');
$subQuery->where('B.ad_id', $data['aat_id']);
$subQuery->groupBy('B.ad_id');
}
$builder = $this->zenith->newQuery()->fromSubquery($subQuery, 'sub');
if($data['aat_type'] === 'account'){
$builder->select('
SUM(sub.budget) as budget,
SUM(sub.unique_total) as unique_total,
SUM(sub.spend) as spend,
SUM(sub.margin) as margin,
SUM(sub.sales) as sales,
SUM(sub.impressions) as impressions,
SUM(sub.click) as click,
E.status AS status
');
$builder->join('z_facebook.fb_ad_account E', 'sub.customerId = E.ad_account_id');
$builder->where('E.ad_account_id', $data['aat_id']);
$builder->groupBy('E.ad_account_id');
}else{
$builder->select('
sub.budget as budget,
sub.unique_total as unique_total,
sub.spend as spend,
sub.margin as margin,
sub.sales as sales,
sub.impressions as impressions,
sub.click as click,
sub.status AS status
');
$builder->where('sub.id', $data['aat_id']);
$builder->groupBy('sub.id');
}
$result = $builder->get()->getResultArray();
return $result;
}
public function getTargetGoogle($data)
{
$subQuery = $this->zenith->table('z_adwords.aw_ad_report_history A');
$subQuery->select('
SUM(A.db_count) AS unique_total,
SUM(A.cost) AS spend,
SUM(A.margin) AS margin,
SUM(A.sales) AS sales,
SUM(A.impressions) AS impressions,
SUM(A.clicks) AS click,');
$subQuery->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
$subQuery->where('A.date >=', date('Y-m-d'));
$subQuery->where('A.date <', date('Y-m-d', strtotime('+ 1day')));
if($data['aat_type'] === 'account' || $data['aat_type'] === 'campaign'){
$subQuery->select('D.customerId as customerId,
D.id AS id, D.status AS status, D.amount AS budget');
$subQuery->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
$subQuery->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
$subQuery->groupBy('D.id');
}else if($data['aat_type'] === 'adgroup'){
$subQuery->select('C.campaignId as campaign_id,
C.id AS id, C.status AS status, 0 AS budget');
$subQuery->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
$subQuery->groupBy('C.id');
}else if($data['aat_type'] === 'ad'){
$subQuery->select('B.adgroupId as adgroupId,
B.id AS id, B.status AS status, 0 AS budget');
$subQuery->where('B.id', $data['aat_id']);
$subQuery->groupBy('B.id');
}
$builder = $this->zenith->newQuery()->fromSubquery($subQuery, 'sub');
if($data['aat_type'] === 'account'){
$builder->select('
SUM(sub.budget) as budget,
SUM(sub.unique_total) as unique_total,
SUM(sub.spend) as spend,
SUM(sub.margin) as margin,
SUM(sub.sales) as sales,
SUM(sub.impressions) as impressions,
SUM(sub.click) as click,
E.status AS status
');
$builder->join('z_adwords.aw_ad_account E', 'sub.customerId = E.customerId');
$builder->where('E.customerId', $data['aat_id']);
$builder->groupBy('E.customerId');
}else{
$builder->select('
sub.budget as budget,
sub.unique_total as unique_total,
sub.spend as spend,
sub.margin as margin,
sub.sales as sales,
sub.impressions as impressions,
sub.click as click,
sub.status AS status
');
$builder->where('sub.id', $data['aat_id']);
$builder->groupBy('sub.id');
}
$result = $builder->get()->getResultArray();
return $result;
}
public function getTargetKakao($data)
{
$subQuery = $this->zenith->table('z_moment.mm_creative_report_basic A');
$subQuery->select('
SUM(A.imp) AS impressions,
SUM(A.click) AS click,
SUM(A.cost) AS spend,
SUM(A.sales) AS sales,
SUM(A.db_count) as unique_total,
SUM(A.margin) as margin');
$subQuery->join('z_moment.mm_creative B', 'A.id = B.id');
$subQuery->where('A.date >=', date('Y-m-d'));
$subQuery->where('A.date <', date('Y-m-d', strtotime('+ 1day')));
if($data['aat_type'] === 'account' || $data['aat_type'] === 'campaign'){
$subQuery->select('D.ad_account_id as customerId,
D.id AS id, D.config AS status, D.dailyBudgetAmount AS budget');
$subQuery->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
$subQuery->join('z_moment.mm_campaign D', 'C.campaign_id = D.id');
$subQuery->groupBy('D.id');
}else if($data['aat_type'] === 'adgroup'){
$subQuery->select('C.campaign_id as campaign_id,
C.id AS id, C.config AS status, C.dailyBudgetAmount AS budget');
$subQuery->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
$subQuery->groupBy('C.id');
}else if($data['aat_type'] === 'ad'){
$subQuery->select('B.adgroup_id as adgroup_id,
B.id AS id, B.config AS status, 0 AS budget');
$subQuery->where('B.id', $data['aat_id']);
$subQuery->groupBy('B.id');
}
$builder = $this->zenith->newQuery()->fromSubquery($subQuery, 'sub');
if($data['aat_type'] === 'account'){
$builder->select('
SUM(sub.budget) as budget,
SUM(sub.unique_total) as unique_total,
SUM(sub.spend) as spend,
SUM(sub.margin) as margin,
SUM(sub.sales) as sales,
SUM(sub.impressions) as impressions,
SUM(sub.click) as click,
E.config AS status
');
$builder->join('z_moment.mm_ad_account E', 'sub.customerId = E.id');
$builder->where('E.id', $data['aat_id']);
$builder->groupBy('E.id');
}else{
$builder->select('
sub.budget as budget,
sub.unique_total as unique_total,
sub.spend as spend,
sub.margin as margin,
sub.sales as sales,
sub.impressions as impressions,
sub.click as click,
sub.status AS status
');
$builder->where('sub.id', $data['aat_id']);
$builder->groupBy('sub.id');
}
$result = $builder->get()->getResultArray();
return $result;
}
public function getAutomationConditionBySeq($seq)
{
$builder = $this->zenith->table('aa_conditions');
$builder->select('*');
$builder->where('idx', $seq);
$builder->orderBy('order', 'asc');
$result = $builder->get()->getResultArray();
return $result;
}
public function getExecution($seq)
{
$builder = $this->zenith->table('aa_executions');
$builder->select('order, media, type, id, exec_type, exec_value, exec_budget_type');
$builder->where('idx', $seq);
$builder->orderBy('order', 'asc');
$result = $builder->get()->getResultArray();
return $result;
}
public function getLogs($data)
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select('aa.seq, aa.subject, aa.nickname, aar.result, aar.exec_timestamp, aarl.schedule_desc, aarl.target_desc, aarl.conditions_desc, aarl.executions_desc');
$builder->join('aa_result aar', 'aa.seq = aar.idx', 'left');
$builder->join('aa_result_logs aarl', 'aar.seq = aarl.idx', 'left');
if(!empty($data['seq'])){
$builder->where('aa.seq', $data['seq']);
}
if (!empty($data['dates']['sdate']) && !empty($data['dates']['edate'])) {
$builder->where('aar.exec_timestamp >=', $data['dates']['sdate']);
$builder->where('aar.exec_timestamp <', date('Y-m-d', strtotime($data['dates']['edate'] . ' + 1 day')));
}
$builder->groupBy('aar.seq');
$orderBy = [];
$orderBy[] = "aar.exec_timestamp DESC";
$builder->orderBy(implode(",", $orderBy),'',true);
$result = $builder->get()->getResultArray();
return [
'data' => $result,
];
return $result;
}
public function getAutomationByAdv($id)
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select("
aa.seq as aa_seq,
aa.subject as aa_subject,
");
$builder->join('aa_target aat', 'aa.seq = aat.idx');
$builder->join('aa_executions aae', 'aa.seq = aae.idx');
$builder->where('aat.id', $id);
$builder->orWhere('aae.id', $id);
$builder->groupBy('aa.seq');
$result = $builder->get()->getResultArray();
return $result;
}
public function getLogsByAdv($data, $id)
{
$builder = $this->zenith->table('aa_result aar');
$builder->select("
aa.seq as seq,
aa.subject as subject,
aa.nickname as nickname,
IF(aat.id = $id, 'true', 'false') as aat_exist,
IF(aae.id = $id, 'true', 'false') as aae_exist,
aar.result as result,
aar.exec_timestamp as exec_timestamp,
aarl.schedule_desc as schedule_desc,
aarl.target_desc as target_desc,
aarl.conditions_desc as conditions_desc,
aarl.executions_desc as executions_desc
");
$builder->join('aa_result_logs aarl', 'aar.seq = aarl.idx', 'left');
$builder->join('aa_executions aae', 'aar.idx = aae.idx');
$builder->join('aa_conditions aac', 'aar.idx = aac.idx');
$builder->join('aa_target aat', 'aar.idx = aat.idx');
$builder->join('aa_schedule aas', 'aar.idx = aas.idx');
$builder->join('admanager_automation aa', 'aar.idx = aa.seq');
if(!empty($data['aa_seq'])){
$builder->whereIn('aa.seq', $data['aa_seq']);
}else{
$builder->where('aat.id', $id);
$builder->orWhere('aae.id', $id);
}
$builder->groupBy('aar.seq');
$builderNoLimit = clone $builder;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$orderBy[] = "aar.exec_timestamp DESC";
$builder->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $builder->limit($data['length'], $data['start']);
$result = $builder->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
return $result;
}
public function getLog($data)
{
$builder = $this->zenith->table('admanager_automation aa');
$builder->select('aa.seq, aa.subject, aa.nickname, aar.result, aar.exec_timestamp, aarl.schedule_desc, aarl.target_desc, aarl.conditions_desc, aarl.executions_desc');
$builder->join('aa_result aar', 'aa.seq = aar.idx');
$builder->join('aa_result_logs aarl', 'aar.seq = aarl.idx');
if(!empty($data['stx'])){
$builder->groupStart();
$builder->like('aa.subject', $data['stx']);
$builder->orLike('aa.nickname', $data['stx']);
$builder->groupEnd();
}
if(!empty($data['seq'])){
$builder->where('aa.seq', $data['seq']);
}
$builder->groupBy('aar.seq');
$builderNoLimit = clone $builder;
$orderBy = [];
if(!empty($data['order'])) {
foreach($data['order'] as $row) {
$col = $data['columns'][$row['column']]['data'];
if($col) $orderBy[] = "{$col} {$row['dir']}";
}
}
$orderBy[] = "aar.exec_timestamp DESC";
$builder->orderBy(implode(",", $orderBy),'',true);
if($data['length'] > 0) $builder->limit($data['length'], $data['start']);
$result = $builder->get()->getResultArray();
$resultNoLimit = $builderNoLimit->countAllResults();
return [
'data' => $result,
'allCount' => $resultNoLimit
];
return $result;
}
public function createAutomation($data)
{
$data['detail']['nickname'] = auth()->user()->nickname ?? '';
$data['detail']['status'] = 1;
$data['detail']['mod_datetime'] = date('Y-m-d H:i:s');
$this->zenith->transStart();
$aaBuilder = $this->zenith->table('admanager_automation');
$result = $aaBuilder->insert($data['detail']);
$seq = $this->zenith->insertID();
$data['schedule'] = array_filter($data['schedule']);
$data['schedule']['idx'] = $seq;
$aasBuilder = $this->zenith->table('aa_schedule_new');
$aasBuilder->insert($data['schedule']);
if(!empty($data['target'])){
foreach ($data['target'] as $target) {
$data['target'] = array_filter($data['target']);
$target['idx'] = $seq;
$aatBuilder = $this->zenith->table('aa_target');
$aatBuilder->insert($target);
}
}
if(!empty($data['condition'])){
foreach ($data['condition'] as $condition) {
$data['condition'] = array_filter($data['condition']);
$condition['idx'] = $seq;
$aacBuilder = $this->zenith->table('aa_conditions');
$aacBuilder->insert($condition);
}
}
foreach ($data['execution'] as $execution) {
$data['execution'] = array_filter($data['execution']);
$execution['idx'] = $seq;
$aaeBuilder = $this->zenith->table('aa_executions');
$aaeBuilder->insert($execution);
}
$result = $this->zenith->transComplete();
return $result;
}
public function copyAutomation($data)
{
$this->zenith->transStart();
$aaGetBuilder = $this->zenith->table('admanager_automation aa');
$aaGetBuilder->select('
aa.seq as aa_seq,
aa.subject as aa_subject,
aa.description as aa_description,
aa.status as aa_status,
aa.slack_webhook as aa_slack_webhook,
aa.slack_msg as aa_slack_msg,
aas.schedule_value as schedule_value,
aas.exec_once as exec_once,
');
$aaGetBuilder->join('aa_schedule_new aas', 'aas.idx = aa.seq', 'left');
$aaGetBuilder->where('aa.seq', $data['seq']);
$aaGetResult = $aaGetBuilder->get()->getRowArray();
$aatGetBuilder = $this->zenith->table('aa_target');
$aatGetBuilder->select('type, media, id');
$aatGetBuilder->where('idx', $data['seq']);
$aatGetResult = $aatGetBuilder->get()->getResultArray();
$aacGetBuilder = $this->zenith->table('aa_conditions');
$aacGetBuilder->select('order, type, type_value, compare, operation');
$aacGetBuilder->where('idx', $data['seq']);
$aacGetResult = $aacGetBuilder->get()->getResultArray();
$aaeGetBuilder = $this->zenith->table('aa_executions');
$aaeGetBuilder->select('order, media, type, id, exec_type, exec_value, exec_budget_type');
$aaeGetBuilder->where('idx', $data['seq']);
$aaeGetResult = $aaeGetBuilder->get()->getResultArray();
$aaData = [
'subject' => $aaGetResult['aa_subject']." - 복제",
'description' => $aaGetResult['aa_description'] ?? null,
'nickname' => auth()->user()->nickname ?? '',
'status' => $aaGetResult['aa_status'],
'slack_webhook' =>$aaGetResult['aa_slack_webhook'],
'slack_msg' =>$aaGetResult['aa_slack_msg'],
'mod_datetime' => date('Y-m-d H:i:s'),
];
$aaBuilder = $this->zenith->table('admanager_automation');
$aaBuilder->insert($aaData);
$seq = $this->zenith->insertID();
$aasData = [
'idx' => $seq,
'schedule_value' => $aaGetResult['schedule_value'],
'exec_once' => $aaGetResult['exec_once'],
];
$aasBuilder = $this->zenith->table('aa_schedule_new');
$aasBuilder->insert($aasData);
if(!empty($aatGetResult)){
foreach ($aatGetResult as $target) {
$aatData = [
'idx' => $seq,
'type' => $target['type'],
'media' => $target['media'],
'id' => $target['id'],
];
$aatBuilder = $this->zenith->table('aa_target');
$aatBuilder->insert($aatData);
}
}
if(!empty($aacGetResult)){
foreach ($aacGetResult as $condition) {
$aacData = [
'idx' => $seq,
'type' => $condition['type'],
'type_value' => $condition['type_value'] ?? '',
'compare' => $condition['compare'],
'operation' => $condition['operation'],
];
$aacBuilder = $this->zenith->table('aa_conditions');
$aacBuilder->insert($aacData);
}
}
foreach ($aaeGetResult as $execution) {
$aaeData = [
'idx' => $seq,
'order' => $execution['order'] ?? 0,
'media' => $execution['media'],
'type' => $execution['type'],
'id' => $execution['id'],
'exec_type' => $execution['exec_type'],
'exec_value' => $execution['exec_value'] ?? '',
'exec_budget_type' => $execution['exec_budget_type'] ?? '',
];
$aaeBuilder = $this->zenith->table('aa_executions');
$aaeBuilder->insert($aaeData);
}
$result = $this->zenith->transComplete();
return $result;
}
public function updateAutomation($data)
{
$aaData = [
'subject' => $data['detail']['subject'],
'description' => $data['detail']['description'],
'slack_webhook' =>$data['detail']['slack_webhook'],
'slack_msg' =>$data['detail']['slack_msg'],
'nickname' => auth()->user()->nickname ?? '',
'mod_datetime' => date('Y-m-d H:i:s'),
];
$this->zenith->transStart();
$aaBuilder = $this->zenith->table('admanager_automation');
$aaBuilder->where('seq', $data['seq']);
$result = $aaBuilder->update($aaData);
$aasBuilder = $this->zenith->table('aa_schedule_new');
$aasBuilder->where('idx', $data['seq']);
$aasBuilder->update($data['schedule']);
if(!empty($data['target'])){
$aatBuilder = $this->zenith->table('aa_target');
$aatBuilder->where('idx', $data['seq']);
$aatBuilder->delete();
foreach ($data['target'] as $target) {
$data['target'] = array_filter($data['target']);
$target['idx'] = $data['seq'];
$aatBuilder->insert($target);
}
}
if(!empty($data['condition'])){
$aacBuilder = $this->zenith->table('aa_conditions');
$aacBuilder->where('idx', $data['seq']);
$aacBuilder->delete();
foreach ($data['condition'] as $condition) {
$data['condition'] = array_filter($data['condition']);
$condition['idx'] = $data['seq'];
$aacBuilder->insert($condition);
}
}
if(!empty($data['execution'])){
$aaeBuilder = $this->zenith->table('aa_executions');
$aaeBuilder->where('idx', $data['seq']);
$aaeBuilder->delete();
foreach ($data['execution'] as $execution) {
$data['execution'] = array_filter($data['execution']);
$execution['idx'] = $data['seq'];
$aaeBuilder->insert($execution);
}
}
$result = $this->zenith->transComplete();
return $result;
}
public function deleteAutomation($data)
{
$this->zenith->transStart();
$builder = $this->zenith->table('admanager_automation');
$builder->where('seq', $data['seq']);
$builder->delete();
$result = $this->zenith->transComplete();
return $result;
}
public function setAutomationStatus($data)
{
$this->zenith->transStart();
$builder = $this->zenith->table('admanager_automation');
$builder->set('status', $data['status']);
$builder->where('seq', $data['seq']);
$builder->update();
$result = $this->zenith->transComplete();
return $result;
}
public function recodeResult($data)
{
$this->zenith->transStart();
if ($data['result'] == 'not_execution') {
$builder = $this->zenith->table('aa_result');
$builder->select('seq, reg_datetime');
$builder->where('idx', $data['idx']);
$builder->where('result', 'not_execution');
$builder->where('reg_datetime >=', date('Y-m-d'));
$builder->where('reg_datetime <', date('Y-m-d', strtotime('+ 1day')));
$builder->orderBy('reg_datetime', 'DESC');
$existingRow = $builder->get()->getRowArray();
if ($existingRow) {
$builder->resetQuery();
$builder->where('seq', $existingRow['seq']);
$builder->update(['exec_timestamp' => $data['exec_timestamp']]);
$this->zenith->transComplete();
return $existingRow;
}
}
$builder = $this->zenith->table('aa_result');
$builder->insert($data);
$seq = $this->zenith->insertID();
$result = $this->zenith->transComplete();
if($result == true){
$builder = $this->zenith->table('aa_result');
$builder->select('seq, reg_datetime');
$builder->where('seq', $seq);
$row = $builder->get()->getRowArray();
}else{
return false;
}
return $row;
}
public function recodeLog($data)
{
$this->zenith->transStart();
$builder = $this->zenith->table('aa_result_logs');
$builder->upsert($data);
$result = $this->zenith->transComplete();
return $result;
}
private function setAccountData($datas)
{
$total['budget'] = $total['unique_total'] = $total['spend'] = $total['margin'] = $total['sales'] = $total['impressions'] = $total['click'] = 0;
foreach($datas as $data){
$total['budget'] +=$data['budget'];
$total['unique_total'] +=$data['unique_total'];
$total['spend'] +=$data['spend'];
$total['margin'] +=$data['margin'];
$total['sales'] +=$data['sales'];
$total['impressions'] +=$data['impressions'];
$total['click'] +=$data['click'];
}
$total['status'] = $datas[0]['status'];
return $total;
}
}