114 lines
4.5 KiB
PHP
114 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Models\Advertiser;
|
|
|
|
use CodeIgniter\Model;
|
|
|
|
class AdvEtcManagerModel extends Model
|
|
{
|
|
public function getList($searchParams)
|
|
{
|
|
$whereConditions = [];
|
|
|
|
if (!empty($searchParams['sdate'])) {
|
|
$searchSDate = (new \DateTime($searchParams['sdate']))->format('Y-m-d');
|
|
$whereConditions[] = "el.reg_date >= '{$searchSDate} 00:00:00'";
|
|
}
|
|
if (!empty($searchParams['edate'])) {
|
|
$searchEDate = (new \DateTime($searchParams['edate']))->format('Y-m-d');
|
|
$whereConditions[] = "el.reg_date <= '{$searchEDate} 23:59:59'";
|
|
}
|
|
|
|
$whereSQL = '';
|
|
if (!empty($whereConditions)) {
|
|
$whereSQL = 'WHERE ' . implode(' AND ', $whereConditions);
|
|
}
|
|
$includeMedia = ['카카오광고','카카오비즈폼','카카오플러스친구','토스','틱톡','당근마켓','타불라','유튜브']; //표시 할 광고주
|
|
$excludeMedia = ['유튜브', '틱톡', '토스', '타불라']; //부가세 제외 광고주
|
|
if($searchSDate != $searchEDate) {
|
|
$groupBy = 'GROUP BY el.event_seq, el.site';
|
|
} else {
|
|
$groupBy = 'GROUP BY date, el.event_seq, el.site';
|
|
}
|
|
$sql = "
|
|
SELECT
|
|
evt.*,
|
|
IFNULL(ROUND(db.goal, 2), 0) as goal,
|
|
IFNULL(db.unitprice, 0) as unitprice,
|
|
IFNULL(
|
|
CASE WHEN evt.media_name IN ('" . implode("', '", $excludeMedia) . "')
|
|
THEN db.total_price
|
|
ELSE db.total_price / 1.1
|
|
END, 0
|
|
) as total_price,
|
|
IFNULL(ROUND(
|
|
CASE WHEN evt.media_name IN ('" . implode("', '", $excludeMedia) . "')
|
|
THEN db.total_price / evt.db_unique
|
|
ELSE db.total_price / 1.1 / evt.db_unique
|
|
END, 0
|
|
), 0) as now_unitprice,
|
|
IFNULL(ROUND(
|
|
(db.unitprice - (
|
|
CASE WHEN evt.media_name IN ('" . implode("', '", $excludeMedia) . "')
|
|
THEN db.total_price / evt.db_unique
|
|
ELSE db.total_price / 1.1 / evt.db_unique
|
|
END
|
|
)) * evt.db_unique, 0
|
|
), 0) as profit,
|
|
IFNULL(ROUND(
|
|
((db.unitprice - (
|
|
CASE WHEN evt.media_name IN ('" . implode("', '", $excludeMedia) . "')
|
|
THEN db.total_price / evt.db_unique
|
|
ELSE db.total_price / 1.1 / evt.db_unique
|
|
END
|
|
)) * evt.db_unique) / (db.unitprice * evt.db_unique) * 100, 1
|
|
), 0) as profit_rate,
|
|
db.confirm,
|
|
db.reg_date
|
|
FROM
|
|
(
|
|
SELECT
|
|
ea.name as advertiser_name,
|
|
em.media as media_name,
|
|
ei.seq as event_seq,
|
|
el.site,
|
|
ei.description,
|
|
DATE(el.reg_date) as date,
|
|
COUNT(el.seq) as db_total,
|
|
SUM(CASE WHEN el.status=1 THEN 1 ELSE 0 END) as db_unique,
|
|
SUM(CASE WHEN el.status<>1 THEN 1 ELSE 0 END) as db_invalid
|
|
FROM event_leads as el
|
|
LEFT JOIN event_information as ei ON el.event_seq = ei.seq
|
|
LEFT JOIN event_advertiser as ea ON ei.advertiser = ea.seq
|
|
LEFT JOIN event_media as em ON ei.media = em.seq
|
|
$whereSQL
|
|
$groupBy
|
|
) as evt
|
|
LEFT JOIN db_price as db ON evt.event_seq = db.event_seq AND evt.site = db.site AND evt.date = db.date
|
|
WHERE evt.db_unique > 0 AND evt.media_name IN ('" . implode("', '", $includeMedia) . "')
|
|
ORDER BY evt.date DESC, evt.advertiser_name, evt.event_seq, evt.site
|
|
";
|
|
// echo $sql; exit;
|
|
|
|
$query = $this->db->query($sql);
|
|
return $query->getResult();
|
|
}
|
|
|
|
public function updateOrInsertEventData($data)
|
|
{
|
|
$builder = $this->db->table('db_price');
|
|
$builder->where('date', $data['date']);
|
|
$builder->where('event_seq', $data['event_seq']);
|
|
$builder->where('site', $data['site']);
|
|
$exists = $builder->countAllResults(false);
|
|
if ($exists) {
|
|
// 데이터가 존재하면 업데이트
|
|
return $builder->update($data);
|
|
} else {
|
|
// 데이터가 존재하지 않으면 삽입
|
|
return $builder->insert($data);
|
|
}
|
|
}
|
|
}
|
|
|