init
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Accounting;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
use CodeIgniter\I18n\Time;
|
||||
|
||||
class WithDrawModel extends Model
|
||||
{
|
||||
protected $zenith, $gwdb;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->zenith = \Config\Database::connect();
|
||||
$this->gwdb = \Config\Database::connect('gwdb');
|
||||
}
|
||||
|
||||
public function typeList()
|
||||
{
|
||||
$builder = $this->zenith->table("deposit");
|
||||
$builder->select("type");
|
||||
$builder->groupBy("type");
|
||||
$result = $builder->get()->getResultArray();
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
public function userList()
|
||||
{
|
||||
$builder = $this->zenith->table("company_account AS ca");
|
||||
$builder->join("users AS u", "u.id = ca.user_id");
|
||||
$builder->select("u.nickname, u.id");
|
||||
$builder->groupBy("user_id");
|
||||
$result = $builder->get()->getResultArray();
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
public function getList($data)
|
||||
{
|
||||
$builder = $this->zenith->table("deposit AS d");
|
||||
$builder->select("d.seq, d.reg_date, u.nickname, d.type, a.company_name, a.bank, a.account, d.detail, d.total_price, d.memo, if(d.date IS NULL,'완료','진행중') status, d.date, d.doc_no");
|
||||
$builder->join("company_account AS ca", "d.seq=ca.deposit_seq", "left");
|
||||
$builder->join("account AS a", "d.account_seq=a.seq AND ca.user_id=a.user_id", "left");
|
||||
$builder->join("users AS u", "a.user_id=u.id", "left");
|
||||
$builder->where("d.updated_at >= ", $data["sdate"] . " 00:00:00");
|
||||
$builder->where("d.updated_at <= ", $data["edate"] . " 23:59:59");
|
||||
|
||||
if ($data["stx_opt"] && $data["stx"]) {
|
||||
if ($data["stx_opt"] == "company") {
|
||||
$builder->like("a.company_name", $data["stx"]);
|
||||
} else if ($data["stx_opt"] == "detail") {
|
||||
$builder->like("d.detail", $data["stx"]);
|
||||
}
|
||||
}
|
||||
|
||||
if($data["userid"]){
|
||||
$builder->where("u.id", $data["userid"]);
|
||||
}
|
||||
|
||||
if($data["type"]){
|
||||
$builder->where("d.type", $data["type"]);
|
||||
}
|
||||
|
||||
if($data["complete"]){
|
||||
if($data["complete"]==1){
|
||||
$builder->where("d.date IS NOT NULL", NULL, FALSE);
|
||||
}else if($data["complete"]==0){
|
||||
$builder->where("d.date IS NULL", NULL, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
$deposit_data = $builder->get()->getResultArray();
|
||||
$doc_no_arr=array();
|
||||
|
||||
for($i = 0; $i < count($deposit_data); $i++){
|
||||
$doc_no_arr[] = $deposit_data[$i]["doc_no"];
|
||||
}
|
||||
|
||||
$gwbuilder = $this->gwdb->table("viberc_gw AS a");
|
||||
$gwbuilder->join("viberc_gw_contents AS b","a.doc_id = b.doc_id","left");
|
||||
$gwbuilder->join("viberc_gw_line AS c","a.doc_id = c.doc_id","left");
|
||||
$gwbuilder->join("viberc_gw_interlock AS d","a.doc_id = d.doc_id","left");
|
||||
$gwbuilder->where("a.form_id",37);
|
||||
$gwbuilder->whereIn("doc_no", $doc_no_arr);
|
||||
$gwbuilder->groupBy("a.doc_id");
|
||||
$gwbuilder->orderBy("a.rep_dt","DESC");
|
||||
$gwbuilder->orderBy("c.doc_line_m_seq","ASC");
|
||||
$gw_result = $gwbuilder->get()->getResultArray();
|
||||
|
||||
$gw_data=array();
|
||||
|
||||
foreach($gw_result as $row){
|
||||
$row['doc_contents'] = str_replace(' ', ' ', $row['doc_contents']);
|
||||
$row['account_no'] = preg_match_all('@(<span[^>]*>.*(지급은행|계좌번호).+?\:\s+?(.+)[^<]*<\/span>)@m', $row['doc_contents'], $matches);
|
||||
$row['account_name'] = $matches[3][0] ?? '';
|
||||
$row['account_no'] = $matches[3][1] ?? '';
|
||||
$gw_data[] = $row;
|
||||
}
|
||||
|
||||
function searchForDocNo($id, $array) {
|
||||
foreach ($array as $key => $val) {
|
||||
if ($val['doc_no'] === $id) {
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
for($i=0; $i<count($deposit_data); $i++) {
|
||||
$gwKey = searchForDocNo($deposit_data[$i]["doc_no"],$gw_data);
|
||||
if($gwKey >= 0 && $gwKey != "") {
|
||||
$doc_id = $gw_data[$gwKey]['doc_id'];
|
||||
$doc_sts = $gw_data[$gwKey]['doc_sts'];
|
||||
$form_id = $gw_data[$gwKey]['form_id'];
|
||||
$doc_title = $gw_data[$gwKey]['doc_title'];
|
||||
$user_nm = preg_replace('/(바이브알씨_|씨랩_)/', '', $gw_data[$gwKey]['user_nm']);
|
||||
$grade_nm = $gw_data[$gwKey]['grade_nm'];
|
||||
switch($doc_sts) {
|
||||
case '10' : $status = $doc_title.'임시저장'; break;
|
||||
case '20' : $status = $doc_title.'기안'; break;
|
||||
case '30' : $status = $grade_nm.'('.$user_nm.') 진행중 '.$doc_title.'">진행중'; break;
|
||||
case '90' : $status = 'http://gw.carelabs.co.kr/eap/ea/docpop/EAAppDocViewPop.do?doc_id='.$doc_id.'&form_id='.$form_id; break;
|
||||
case '100' : $status = $doc_title.'반려'; break;
|
||||
default : $status = '문서 번호 없음'; break;
|
||||
}
|
||||
$deposit_data[$i]["gwstatus"] = $status;
|
||||
}
|
||||
}
|
||||
|
||||
return json_encode($deposit_data);
|
||||
}
|
||||
|
||||
public function accountList($data){
|
||||
$builder = $this->zenith->table("account AS a");
|
||||
$builder->join("users AS u","a.user_id = u.id","left");
|
||||
$builder->select("a.*,u.nickname");
|
||||
$builder->where("a.reg_date >= ", $data["sdate"] . " 00:00:00");
|
||||
$builder->where("a.reg_date <= ", $data["edate"] . " 23:59:59");
|
||||
|
||||
if ($data["stx_opt"] && $data["stx"]) {
|
||||
if ($data["stx_opt"] == "company") {
|
||||
$builder->like("a.company_name", $data["stx"]);
|
||||
} else if ($data["stx_opt"] == "no") {
|
||||
$builder->like("a.account", $data["stx"]);
|
||||
}
|
||||
}
|
||||
|
||||
if($data["userid"]){
|
||||
$builder->where("u.id",$data["userid"]);
|
||||
}
|
||||
|
||||
$builder->orderBy("reg_date","DESC");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,568 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Advertiser;
|
||||
|
||||
use App\Libraries\Calc;
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class AdvFacebookManagerModel extends Model
|
||||
{
|
||||
public function getAccounts($data)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_ad_insight_history A');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name
|
||||
');
|
||||
$builder->join('z_facebook.fb_ad B', 'A.ad_id = B.ad_id');
|
||||
$builder->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
|
||||
$builder->join('z_facebook.fb_campaign D', 'C.campaign_id = D.campaign_id');
|
||||
$builder->join('z_facebook.fb_ad_account E', 'D.account_id = E.ad_account_id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['facebookCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.campaign_id', $data['facebookCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.adset_id', $data['facebookCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.ad_id', $data['facebookCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getMediaAccounts($data)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_ad_insight_history A');
|
||||
$builder->select('
|
||||
"facebook" AS media,
|
||||
E.name AS media_account_name,
|
||||
E.ad_account_id AS media_account_id,
|
||||
E.status AS status,
|
||||
"" AS isAdminStop,
|
||||
"" AS is_exposed,
|
||||
E.db_count AS db_count,
|
||||
SUM(A.db_count) AS db_sum,
|
||||
COUNT(DISTINCT A.date) AS date_count
|
||||
');
|
||||
$builder->join('z_facebook.fb_ad B', 'A.ad_id = B.ad_id');
|
||||
$builder->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
|
||||
$builder->join('z_facebook.fb_campaign D', 'C.campaign_id = D.campaign_id');
|
||||
$builder->join('z_facebook.fb_ad_account E', 'D.account_id = E.ad_account_id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['facebookCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.campaign_id', $data['facebookCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.adset_id', $data['facebookCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.ad_id', $data['facebookCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$builder->groupBy('E.ad_account_id');
|
||||
$builder->groupBy('G.id');
|
||||
// dd($builder->getCompiledSelect());
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getOnlyAdAccount($data)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_ad_account');
|
||||
$builder->select('
|
||||
"facebook" AS media,
|
||||
name AS media_account_name,
|
||||
ad_account_id AS media_account_id,
|
||||
"" AS is_exposed,
|
||||
"" AS canManageClients,
|
||||
db_count AS db_count
|
||||
');
|
||||
$builder->where('status', 1);
|
||||
$builder->where('perm', 1);
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getCampaigns($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_facebook.fb_ad_insight_history A');
|
||||
$subQuery->select('
|
||||
D.account_id as customerId,
|
||||
D.campaign_id AS id,
|
||||
D.campaign_name AS name,
|
||||
D.status AS status,
|
||||
D.budget AS budget,
|
||||
D.create_date AS create_date,
|
||||
A.date AS date,
|
||||
A.hour AS hour,
|
||||
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,
|
||||
IFNULL(ROUND((A.margin/A.sales)*100, 1), 0) as margin_ratio');
|
||||
$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');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('D.campaign_id, A.date, A.hour');
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.ad_account_id as customerId,
|
||||
"facebook" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.status,
|
||||
sub.budget,
|
||||
0 AS bidamount,
|
||||
"" AS bidamount_type,
|
||||
"" AS biddingStrategyType,
|
||||
SUM(sub.impressions) AS impressions,
|
||||
SUM(sub.click) AS click,
|
||||
SUM(sub.spend) AS spend,
|
||||
SUM(sub.sales) AS sales,
|
||||
SUM(sub.unique_total) AS unique_total,
|
||||
SUM(sub.margin) AS margin,
|
||||
JSON_OBJECTAGG(CONCAT(sub.date, "_", sub.hour), JSON_OBJECT(
|
||||
"impressions", sub.impressions,
|
||||
"click", sub.click,
|
||||
"spend", sub.spend,
|
||||
"sales", sub.sales,
|
||||
"unique_total", sub.unique_total,
|
||||
"cpa", IFNULL(ROUND(sub.spend/sub.unique_total, 1), 0),
|
||||
"margin", sub.margin,
|
||||
"margin_ratio", IFNULL(ROUND((sub.margin/sub.sales)*100, 1), 0)
|
||||
)) AS metrics,
|
||||
sub.create_date');
|
||||
$builder->join("z_facebook.fb_ad_account AS E", 'sub.customerId = E.ad_account_id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "facebook" AND memo.type = "campaigns" AND is_done <> 1', 'left');
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.business_id', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.ad_account_id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.create_date', 'desc');
|
||||
// echo $builder->getCompiledSelect(); exit;
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdsets($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_facebook.fb_ad_insight_history A');
|
||||
$subQuery->select('
|
||||
C.campaign_id as campaign_id,
|
||||
C.adset_id AS id,
|
||||
C.adset_name AS name,
|
||||
C.status AS status,
|
||||
C.budget AS budget,
|
||||
C.create_date AS create_date,
|
||||
A.date AS date,
|
||||
A.hour AS hour,
|
||||
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->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('C.adset_id, A.date, A.hour');
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.ad_account_id as customerId,
|
||||
D.campaign_id AS campaign_id,
|
||||
"facebook" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.status AS status,
|
||||
sub.budget AS budget,
|
||||
"" AS biddingStrategyType,
|
||||
0 AS bidamount,
|
||||
0 AS campaign_bidamount,
|
||||
"" AS bidamount_type,
|
||||
SUM(sub.impressions) AS impressions,
|
||||
SUM(sub.click) AS click,
|
||||
SUM(sub.spend) AS spend,
|
||||
SUM(sub.sales) AS sales,
|
||||
SUM(sub.unique_total) AS unique_total,
|
||||
SUM(sub.margin) AS margin,
|
||||
JSON_OBJECTAGG(CONCAT(sub.date, "_", sub.hour), JSON_OBJECT(
|
||||
"impressions", sub.impressions,
|
||||
"click", sub.click,
|
||||
"spend", sub.spend,
|
||||
"sales", sub.sales,
|
||||
"unique_total", sub.unique_total,
|
||||
"cpa", IFNULL(ROUND(sub.spend/sub.unique_total, 1), 0),
|
||||
"margin", sub.margin,
|
||||
"margin_ratio", IFNULL(ROUND((sub.margin/sub.sales)*100, 1), 0)
|
||||
)) AS metrics,
|
||||
sub.create_date
|
||||
');
|
||||
$builder->join('z_facebook.fb_campaign D', 'sub.campaign_id = D.campaign_id');
|
||||
$builder->join('z_facebook.fb_ad_account E', 'D.account_id = E.ad_account_id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "facebook" AND memo.type = "adsets" AND is_done <> 1', 'left');
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.business_id', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.ad_account_id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.create_date', 'desc');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAds($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_facebook.fb_ad_insight_history A');
|
||||
$subQuery->select('
|
||||
B.adset_id as adset_id,
|
||||
B.ad_id AS id,
|
||||
B.ad_name AS name,
|
||||
B.code AS code,
|
||||
B.status AS status,
|
||||
B.effective_status AS approval_status,
|
||||
C.thumbnail AS thumbnail,
|
||||
C.link AS landingUrl,
|
||||
B.create_date AS create_date,
|
||||
A.date AS date,
|
||||
A.hour AS hour,
|
||||
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->join('z_facebook.fb_adcreative C', 'A.ad_id = C.ad_id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('B.ad_id, A.date, A.hour');
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.ad_account_id as customerId,
|
||||
D.campaign_id AS campaign_id,
|
||||
C.adset_id AS adset_id,
|
||||
"facebook" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.code AS code,
|
||||
sub.status AS status,
|
||||
sub.approval_status AS approval_status,
|
||||
"" AS policyTopic,
|
||||
sub.thumbnail AS thumbnail,
|
||||
"" AS assets,
|
||||
sub.landingUrl AS landingUrl,
|
||||
0 AS budget,
|
||||
0 AS bidamount,
|
||||
"" AS bidamount_type,
|
||||
SUM(sub.impressions) AS impressions,
|
||||
SUM(sub.click) AS click,
|
||||
SUM(sub.spend) AS spend,
|
||||
SUM(sub.sales) AS sales,
|
||||
SUM(sub.unique_total) AS unique_total,
|
||||
SUM(sub.margin) AS margin,
|
||||
JSON_OBJECTAGG(CONCAT(sub.date, "_", sub.hour), JSON_OBJECT(
|
||||
"impressions", sub.impressions,
|
||||
"click", sub.click,
|
||||
"spend", sub.spend,
|
||||
"sales", sub.sales,
|
||||
"unique_total", sub.unique_total,
|
||||
"cpa", IFNULL(ROUND(sub.spend/sub.unique_total, 1), 0),
|
||||
"margin", sub.margin,
|
||||
"margin_ratio", IFNULL(ROUND((sub.margin/sub.sales)*100, 1), 0)
|
||||
)) AS metrics,
|
||||
sub.create_date
|
||||
');
|
||||
$builder->join('z_facebook.fb_adset C', 'sub.adset_id = C.adset_id');
|
||||
$builder->join('z_facebook.fb_campaign D', 'C.campaign_id = D.campaign_id');
|
||||
$builder->join('z_facebook.fb_ad_account E', 'D.account_id = E.ad_account_id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "facebook" AND memo.type = "ads" AND is_done <> 1', 'left');
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.business_id', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.ad_account_id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.create_date', 'desc');
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getReport($data)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_ad_insight_history A');
|
||||
$builder->select('
|
||||
A.date,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.inline_link_clicks) AS click,
|
||||
(SUM(A.inline_link_clicks) / SUM(A.impressions)) * 100 AS click_ratio,
|
||||
(SUM(A.db_count) / SUM(A.inline_link_clicks)) * 100 AS conversion_ratio,
|
||||
SUM(A.spend) AS spend,
|
||||
SUM(A.db_count) AS unique_total,
|
||||
IFNULL(SUM(A.spend) / SUM(A.db_count), 0) AS unique_one_price,
|
||||
SUM(A.db_price) AS unit_price,
|
||||
SUM(A.sales) AS price,
|
||||
SUM(A.margin) AS profit,
|
||||
(SUM(A.db_price * A.db_count) - SUM(A.spend)) / SUM(A.db_price * A.db_count) * 100 AS per
|
||||
');
|
||||
$builder->join('z_facebook.fb_ad B', 'A.ad_id = B.ad_id');
|
||||
$builder->join('z_facebook.fb_adset C', 'B.adset_id = C.adset_id');
|
||||
$builder->join('z_facebook.fb_campaign D', 'C.campaign_id = D.campaign_id');
|
||||
$builder->join('z_facebook.fb_ad_account E', 'D.account_id = E.ad_account_id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.ad_account_id = F.ad_account_id AND F.media = "facebook"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['facebookCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.campaign_id', $data['facebookCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.adset_id', $data['facebookCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.ad_id', $data['facebookCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.business_id', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.ad_account_id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
$builder->groupBy('A.date');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getDisapproval()
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_ad_account acc');
|
||||
$builder->select('acc.ad_account_id');
|
||||
$builder->join('z_facebook.fb_campaign ac', 'acc.ad_account_id = ac.account_id', 'left');
|
||||
$builder->join('z_facebook.fb_adset ag', 'ac.campaign_id = ag.campaign_id', 'left');
|
||||
$builder->join('z_facebook.fb_ad ad', 'ag.adset_id = ag.adset_id', 'left');
|
||||
$builder->join('z_facebook.fb_adcreative as', 'ad.ad_id = as.ad_id', 'left');
|
||||
$builder->where('ad.effective_status', 'DISAPPROVED');
|
||||
$builder->where('acc.status', 1);
|
||||
$builder->where('ac.status', 'ACTIVE');
|
||||
$builder->where('ag.status', 'ACTIVE');
|
||||
$builder->where('ad.status', 'ACTIVE');
|
||||
// $builder->orderBy('ad.created_time', 'DESC');
|
||||
$builder->groupBy('acc.ad_account_id');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCampaignById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_campaign');
|
||||
$builder->select('"페이스북" as media, "캠페인" as type, campaign_id as id, campaign_name as name, status as status');
|
||||
$builder->whereIn('campaign_id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdgroupById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_adset');
|
||||
$builder->select('"페이스북" as media, "광고그룹" as type, adset_id as id, adset_name as name, status as status');
|
||||
$builder->whereIn('adset_id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_facebook.fb_ad');
|
||||
$builder->select('"페이스북" as media, "광고" as type, ad_id as id, ad_name as name, status as status');
|
||||
$builder->whereIn('ad_id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function updateCode($data) {
|
||||
$result = [];
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_facebook.fb_ad');
|
||||
$builder->set('code', $data['code']);
|
||||
$builder->where('ad_id', $data['id']);
|
||||
$builder->update();
|
||||
$queryResult = $this->db->transComplete();
|
||||
if($queryResult){
|
||||
$result['code'] = $data['code'] ?? '';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateDbCount($data) {
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_facebook.fb_ad_account');
|
||||
$builder->set('db_count', (integer)$data['db_count']);
|
||||
$builder->where('ad_account_id', $data['id']);
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setUpdatingByAds($campaignIds){
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_facebook.fb_campaign');
|
||||
$builder->whereIn('campaign_id', $campaignIds);
|
||||
$builder->set('is_updating', 1);
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,874 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Advertiser;
|
||||
|
||||
use App\Libraries\Calc;
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class AdvGoogleManagerModel extends Model
|
||||
{
|
||||
public function getManageAccounts() {
|
||||
$builder = $this->google->table('aw_ad_account');
|
||||
$builder->select('*');
|
||||
$builder->where('canManageClients', 1);
|
||||
$builder->where('status', 'ENABLED');
|
||||
//$builder->where('is_exposed', 1);
|
||||
$builder->orderBy('name', 'asc');
|
||||
$builder->orderBy('create_time', 'asc');
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAccounts($data)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_ad_report A');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name
|
||||
');
|
||||
$builder->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
|
||||
$builder->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
|
||||
$builder->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
|
||||
$builder->join('z_adwords.aw_ad_account E', 'D.customerId = E.customerId');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->where('D.status !=', 'NODATA');
|
||||
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['googleCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.id', $data['googleCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.id', $data['googleCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.id', $data['googleCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getMediaAccounts($data)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_ad_report A');
|
||||
$builder->select('
|
||||
"google" AS media,
|
||||
E.name AS media_account_name,
|
||||
E.customerId AS media_account_id,
|
||||
E.status AS status,
|
||||
"" AS isAdminStop,
|
||||
E.is_exposed AS is_exposed,
|
||||
E.db_count AS db_count,
|
||||
SUM(A.db_count) AS db_sum,
|
||||
COUNT(DISTINCT A.date) AS date_count
|
||||
');
|
||||
$builder->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
|
||||
$builder->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
|
||||
$builder->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
|
||||
$builder->join('z_adwords.aw_ad_account E', 'D.customerId = E.customerId');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->where('D.status !=', 'NODATA');
|
||||
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['googleCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.id', $data['googleCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.id', $data['googleCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.id', $data['googleCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$builder->groupBy('E.customerId');
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getOnlyAdAccount($data)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_ad_account');
|
||||
$builder->select('
|
||||
"google" AS media,
|
||||
name AS media_account_name,
|
||||
customerId AS media_account_id,
|
||||
is_exposed AS is_exposed,
|
||||
canManageClients AS canManageClients,
|
||||
db_count AS db_count
|
||||
');
|
||||
$builder->where('is_hidden', 0);
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getCampaigns($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_adwords.aw_ad_report A');
|
||||
$subQuery->select('
|
||||
D.customerId as customerId,
|
||||
D.id AS id,
|
||||
D.name AS name,
|
||||
D.status AS status,
|
||||
D.amount AS budget,
|
||||
D.cpaBidAmount AS bidamount,
|
||||
D.create_time AS create_date,
|
||||
C.biddingStrategyType AS biddingStrategyType,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) 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_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');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('D.id');
|
||||
|
||||
$metricsSubQuery = $this->db->table('z_adwords.aw_adgroup_report_history A');
|
||||
$metricsSubQuery->select('
|
||||
D.id as campaignId,
|
||||
A.date,
|
||||
A.hour,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) AS clicks,
|
||||
SUM(A.cost) AS cost,
|
||||
SUM(A.sales) AS sales,
|
||||
SUM(A.db_count) AS db_count,
|
||||
SUM(A.margin) AS margin
|
||||
');
|
||||
$metricsSubQuery->join('z_adwords.aw_adgroup C', 'A.adgroup_id = C.id');
|
||||
$metricsSubQuery->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$metricsSubQuery->where('A.date >=', $data['sdate']);
|
||||
$metricsSubQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$metricsSubQuery->groupBy(['D.id', 'A.date', 'A.hour']);
|
||||
|
||||
$metricsSubQuerySql = $metricsSubQuery->getCompiledSelect();
|
||||
|
||||
$finalMetricsSubQuery = $this->db->table("($metricsSubQuerySql) AS metrics");
|
||||
$finalMetricsSubQuery->select('
|
||||
metrics.campaignId,
|
||||
JSON_OBJECTAGG(
|
||||
CONCAT(metrics.date, "_", metrics.hour),
|
||||
JSON_OBJECT(
|
||||
"impressions", metrics.impressions,
|
||||
"click", metrics.clicks,
|
||||
"spend", metrics.cost,
|
||||
"sales", metrics.sales,
|
||||
"unique_total", metrics.db_count,
|
||||
"cpa", IFNULL(ROUND(metrics.cost/metrics.db_count, 1), 0),
|
||||
"margin", metrics.margin,
|
||||
"margin_ratio", IFNULL(ROUND((metrics.margin/metrics.sales)*100, 1), 0)
|
||||
)
|
||||
) AS metrics
|
||||
');
|
||||
$finalMetricsSubQuery->groupBy('metrics.campaignId');
|
||||
|
||||
$finalMetricsSubQuerySql = $finalMetricsSubQuery->getCompiledSelect();
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.customerId as customerId,
|
||||
"google" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.status,
|
||||
sub.budget,
|
||||
sub.bidamount,
|
||||
"" AS bidamount_type,
|
||||
sub.biddingStrategyType AS biddingStrategyType,
|
||||
sub.impressions,
|
||||
sub.click,
|
||||
sub.spend,
|
||||
sub.sales,
|
||||
sub.unique_total,
|
||||
sub.margin,
|
||||
metrics.metrics AS metrics,
|
||||
sub.create_date
|
||||
');
|
||||
$builder->join('z_adwords.aw_ad_account E', 'sub.customerId = E.customerId');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "google" AND memo.type = "campaigns" AND is_done <> 1', 'left');
|
||||
$builder->join("($finalMetricsSubQuerySql) metrics", 'metrics.campaignId = sub.id', 'left');
|
||||
$builder->where('sub.status !=', 'NODATA');
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.manageCustomer', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.customerId', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.name', 'asc');
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdsets($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_adwords.aw_ad_report A');
|
||||
$subQuery->select('
|
||||
C.campaignId as campaign_id,
|
||||
C.id AS id,
|
||||
C.name AS name,
|
||||
C.status AS status,
|
||||
C.biddingStrategyType AS biddingStrategyType,
|
||||
C.create_time AS create_date,
|
||||
CASE
|
||||
WHEN C.biddingStrategyType = "TARGET_CPA" THEN C.cpaBidAmount
|
||||
WHEN C.biddingStrategyType = "MANUAL_CPC" THEN C.cpcBidAmount
|
||||
ELSE 0
|
||||
END AS bidamount,
|
||||
CASE
|
||||
WHEN C.biddingStrategyType = "TARGET_CPA" THEN "cpa"
|
||||
WHEN C.biddingStrategyType = "MANUAL_CPC" THEN "cpc"
|
||||
ELSE ""
|
||||
END AS bidamount_type,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) AS click,
|
||||
SUM(A.cost) AS spend,
|
||||
SUM(A.sales) AS sales,
|
||||
SUM(A.db_count) AS unique_total,
|
||||
SUM(A.margin) AS margin
|
||||
', false);
|
||||
$subQuery->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
|
||||
$subQuery->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('C.id');
|
||||
|
||||
$metricsSubQuery = $this->db->table('z_adwords.aw_adgroup_report_history A');
|
||||
$metricsSubQuery->select('
|
||||
C.id as id,
|
||||
A.date,
|
||||
A.hour,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) AS clicks,
|
||||
SUM(A.cost) AS cost,
|
||||
SUM(A.sales) AS sales,
|
||||
SUM(A.db_count) AS db_count,
|
||||
SUM(A.margin) AS margin
|
||||
');
|
||||
$metricsSubQuery->join('z_adwords.aw_adgroup C', 'A.adgroup_id = C.id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$metricsSubQuery->where('A.date >=', $data['sdate']);
|
||||
$metricsSubQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$metricsSubQuery->groupBy(['C.id', 'A.date', 'A.hour']);
|
||||
$metricsSubQuerySql = $metricsSubQuery->getCompiledSelect();
|
||||
|
||||
$finalMetricsSubQuery = $this->db->table("($metricsSubQuerySql) AS metrics");
|
||||
$finalMetricsSubQuery->select('
|
||||
metrics.id,
|
||||
JSON_OBJECTAGG(
|
||||
CONCAT(metrics.date, "_", metrics.hour),
|
||||
JSON_OBJECT(
|
||||
"impressions", metrics.impressions,
|
||||
"click", metrics.clicks,
|
||||
"spend", metrics.cost,
|
||||
"sales", metrics.sales,
|
||||
"unique_total", metrics.db_count,
|
||||
"cpa", IFNULL(ROUND(metrics.cost/metrics.db_count, 1), 0),
|
||||
"margin", metrics.margin,
|
||||
"margin_ratio", IFNULL(ROUND((metrics.margin/metrics.sales)*100, 1), 0)
|
||||
)
|
||||
) AS metrics
|
||||
');
|
||||
$finalMetricsSubQuery->groupBy('metrics.id');
|
||||
$finalMetricsSubQuerySql = $finalMetricsSubQuery->getCompiledSelect();
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.customerId as customerId,
|
||||
D.id AS campaign_id,
|
||||
"google" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.status,
|
||||
0 AS budget,
|
||||
sub.biddingStrategyType AS biddingStrategyType,
|
||||
sub.bidamount AS bidamount,
|
||||
D.cpaBidAmount AS campaign_bidamount,
|
||||
sub.bidamount_type,
|
||||
sub.impressions,
|
||||
sub.click,
|
||||
sub.spend,
|
||||
sub.sales,
|
||||
sub.unique_total,
|
||||
sub.margin,
|
||||
metrics.metrics AS metrics,
|
||||
sub.create_date');
|
||||
$builder->join('z_adwords.aw_campaign D', 'sub.campaign_id = D.id');
|
||||
$builder->join('z_adwords.aw_ad_account E', 'D.customerId = E.customerId');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "google" AND memo.type = "adsets" AND is_done <> 1', 'left');
|
||||
$builder->join("($finalMetricsSubQuerySql) metrics", 'metrics.id = sub.id', 'left');
|
||||
$builder->where('D.status !=', 'NODATA');
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.manageCustomer', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.customerId', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.name', 'asc');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAds($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_adwords.aw_ad_report A');
|
||||
$subQuery->select('
|
||||
B.adgroupId as adgroupId,
|
||||
B.id AS id,
|
||||
B.name AS name,
|
||||
B.code AS code,
|
||||
B.status AS status,
|
||||
B.approvalStatus AS approval_status,
|
||||
B.policyTopic AS policyTopic,
|
||||
B.imageUrl AS thumbnail,
|
||||
B.assets AS assets,
|
||||
B.finalUrl AS landingUrl,
|
||||
B.create_time AS create_date,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) 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_adwords.aw_ad B', 'A.ad_id = B.id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('B.id');
|
||||
|
||||
$metricsSubQuery = $this->db->table('z_adwords.aw_ad_report_history A');
|
||||
$metricsSubQuery->select('
|
||||
B.id as id,
|
||||
A.date,
|
||||
A.hour,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) AS clicks,
|
||||
SUM(A.cost) AS cost,
|
||||
SUM(A.sales) AS sales,
|
||||
SUM(A.db_count) AS db_count,
|
||||
SUM(A.margin) AS margin
|
||||
');
|
||||
$metricsSubQuery->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$metricsSubQuery->where('A.date >=', $data['sdate']);
|
||||
$metricsSubQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$metricsSubQuery->groupBy(['B.id', 'A.date', 'A.hour']);
|
||||
$metricsSubQuerySql = $metricsSubQuery->getCompiledSelect();
|
||||
|
||||
$finalMetricsSubQuery = $this->db->table("($metricsSubQuerySql) AS metrics");
|
||||
$finalMetricsSubQuery->select('
|
||||
metrics.id,
|
||||
JSON_OBJECTAGG(
|
||||
CONCAT(metrics.date, "_", metrics.hour),
|
||||
JSON_OBJECT(
|
||||
"impressions", metrics.impressions,
|
||||
"click", metrics.clicks,
|
||||
"spend", metrics.cost,
|
||||
"sales", metrics.sales,
|
||||
"unique_total", metrics.db_count,
|
||||
"cpa", IFNULL(ROUND(metrics.cost/metrics.db_count, 1), 0),
|
||||
"margin", metrics.margin,
|
||||
"margin_ratio", IFNULL(ROUND((metrics.margin/metrics.sales)*100, 1), 0)
|
||||
)
|
||||
) AS metrics
|
||||
');
|
||||
$finalMetricsSubQuery->groupBy('metrics.id');
|
||||
$finalMetricsSubQuerySql = $finalMetricsSubQuery->getCompiledSelect();
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.customerId as customerId,
|
||||
D.id AS campaign_id,
|
||||
C.id AS adset_id,
|
||||
"google" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.code AS code,
|
||||
sub.status AS status,
|
||||
sub.approval_status AS approval_status,
|
||||
sub.policyTopic AS policyTopic,
|
||||
sub.thumbnail AS thumbnail,
|
||||
sub.assets AS assets,
|
||||
sub.landingUrl AS landingUrl,
|
||||
0 AS budget,
|
||||
0 AS bidamount,
|
||||
"" AS bidamount_type,
|
||||
sub.impressions,
|
||||
sub.click,
|
||||
sub.spend,
|
||||
sub.sales,
|
||||
sub.unique_total,
|
||||
sub.margin,
|
||||
metrics.metrics AS metrics,
|
||||
sub.create_date');
|
||||
$builder->join('z_adwords.aw_adgroup C', 'sub.adgroupId = C.id');
|
||||
$builder->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
|
||||
$builder->join('z_adwords.aw_ad_account E', 'D.customerId = E.customerId');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "google" AND memo.type = "ads" AND is_done <> 1', 'left');
|
||||
$builder->join("($finalMetricsSubQuerySql) metrics", 'metrics.id = sub.id', 'left');
|
||||
$builder->where('D.status !=', 'NODATA');
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.manageCustomer', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.customerId', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.name', 'asc');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getStatuses($param, $result, $dates)
|
||||
{
|
||||
foreach ($result as &$row) {
|
||||
/* $stat = $this->getStat($params, $row['id'], $dates[0], $dates[1]);
|
||||
$optimization_stat = $this->getOptimization($params, $row['id']);
|
||||
$optimization_budget = $this->getOptimization_budget($params, $row['id']);
|
||||
|
||||
$row['unique_total'] = $stat['unique_total']; //유효db
|
||||
$row['sales'] = $row['sales']; //매출액
|
||||
|
||||
// echo $stat['shortterm']."!<br/>";
|
||||
|
||||
// $row['margin'] = Calc::margin($row['sales'], $row['cost'], $stat['margin']); // 수익
|
||||
$row['margin'] = $stat['margin']; // 수익
|
||||
|
||||
if($params=="campaigns"){ // 캠페인단 ai
|
||||
$optimization_campaign = "OFF";
|
||||
$song_optimization_campaign = "OFF";
|
||||
$choi_optimization_campaign = "OFF";
|
||||
for($i=0;$i<sizeof($optimization_stat);$i++){
|
||||
if($optimization_stat[$i]['type'] =="901"){
|
||||
$optimization_campaign = "ON";
|
||||
}
|
||||
if($optimization_stat[$i]['type'] =="801" || $optimization_stat[$i]['type'] =="802" || $optimization_stat[$i]['type'] =="803"){
|
||||
$song_optimization_campaign = "Lv".substr($optimization_stat[$i]['type'],-1);
|
||||
}
|
||||
if($optimization_stat[$i]['type'] =="701"){
|
||||
$choi_optimization_campaign = "ON";
|
||||
}
|
||||
}
|
||||
$row['optimization_campaign'] = $optimization_campaign;
|
||||
$row['song_optimization_campaign'] = $song_optimization_campaign;
|
||||
$row['choi_optimization_campaign'] = $choi_optimization_campaign;
|
||||
}
|
||||
else if($params=="ads"){ // 광고 ai
|
||||
if($optimization_stat =="701"){
|
||||
$row['optimization_ad'] = "ON";
|
||||
}
|
||||
else {
|
||||
$row['optimization_ad'] = "OFF";
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
if($optimization_stat =="1"){
|
||||
$row['optimization'] = "ON"; //어른정파고
|
||||
$row['optimization_ch'] = "OFF"; // 어린이정파고
|
||||
}
|
||||
else if($optimization_stat =="2"){
|
||||
$row['optimization'] = "OFF"; //어른정파고
|
||||
$row['optimization_ch'] = "ON"; // 어린이정파고
|
||||
}
|
||||
else {
|
||||
$row['optimization'] = "OFF";
|
||||
$row['optimization_ch'] = "OFF";
|
||||
}
|
||||
}
|
||||
if($choi_optimization_campaign=="ON") $row['optimization_campaign_budget'] = $optimization_budget; // ai 예산 */
|
||||
|
||||
if($row['status'] == 'ENABLED'){
|
||||
$row['status'] = "ON";
|
||||
}else{
|
||||
$row['status'] = "OFF";
|
||||
}
|
||||
|
||||
$row['margin_ratio'] = Calc::margin_ratio($row['margin'], $row['sales']); // 수익률
|
||||
|
||||
|
||||
$row['cpc'] = Calc::cpc($row['spend'], $row['click']); // 클릭당단가 (1회 클릭당 비용)
|
||||
$row['ctr'] = Calc::ctr($row['click'], $row['impressions']); // 클릭율 (노출 대비 클릭한 비율)
|
||||
$row['cpa'] = Calc::cpa($row['unique_total'], $row['spend']); //DB단가(전환당 비용)
|
||||
$row['cvr'] = Calc::cvr($row['unique_total'], $row['click']); //전환율
|
||||
|
||||
switch (!empty($row['biddingStrategyType'])) {
|
||||
case 'TARGET_CPA' :
|
||||
$row['biddingStrategyType'] = '타겟 CPA';
|
||||
break;
|
||||
case 'TARGET_ROAS' :
|
||||
$row['biddingStrategyType'] = '타겟 광고 투자수익(ROAS)';
|
||||
break;
|
||||
case 'TARGET_SPEND' :
|
||||
$row['biddingStrategyType'] = '클릭수 최대화';
|
||||
break;
|
||||
case 'MAXIMIZE_CONVERSIONS' :
|
||||
$row['biddingStrategyType'] = '전환수 최대화';
|
||||
break;
|
||||
/* //값이 뭔지 모름ㅠㅠ
|
||||
case '' :
|
||||
$row['biddingStrategyType'] = '검색 결과 위치 타겟';
|
||||
break;
|
||||
case '' :
|
||||
$row['biddingStrategyType'] = '경쟁 광고보다 내 광고가 높은 순위에 게재되는 비율 타겟';
|
||||
break;
|
||||
case '' :
|
||||
$row['biddingStrategyType'] = '타겟 노출 점유율';
|
||||
break;
|
||||
*/
|
||||
case 'PAGE_ONE_PROMOTED' :
|
||||
$row['biddingStrategyType'] = '향상된 CPC 입찰기능';
|
||||
break;
|
||||
case 'MANUAL_CPM' :
|
||||
$row['biddingStrategyType'] = '수동 입찰 전략';
|
||||
break;
|
||||
case 'MANUAL_CPC' :
|
||||
$row['biddingStrategyType'] = '수동 CPC';
|
||||
break;
|
||||
case 'UNKNOWN' :
|
||||
$row['biddingStrategyType'] = '알수없음';
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
public function getReport($data)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_ad_report A');
|
||||
$builder->select('
|
||||
A.date,
|
||||
SUM(A.impressions) AS impressions,
|
||||
SUM(A.clicks) AS click,
|
||||
(SUM(A.clicks) / SUM(A.impressions)) * 100 AS click_ratio,
|
||||
(SUM(A.db_count) / SUM(A.clicks)) * 100 AS conversion_ratio,
|
||||
SUM(A.cost) AS spend,
|
||||
SUM(A.db_count) AS unique_total,
|
||||
IFNULL(SUM(A.cost) / SUM(A.db_count), 0) AS unique_one_price,
|
||||
SUM(A.db_price) AS unit_price,
|
||||
SUM(A.sales) AS price,
|
||||
SUM(A.margin) AS profit,
|
||||
(SUM(A.db_price * A.db_count) - SUM(A.cost)) / SUM(A.db_price * A.db_count) * 100 AS per
|
||||
');
|
||||
$builder->join('z_adwords.aw_ad B', 'A.ad_id = B.id');
|
||||
$builder->join('z_adwords.aw_adgroup C', 'B.adgroupId = C.id');
|
||||
$builder->join('z_adwords.aw_campaign D', 'C.campaignId = D.id');
|
||||
$builder->join('z_adwords.aw_ad_account E', 'D.customerId = E.customerId');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.customerId = F.ad_account_id AND F.media = "google"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->where('D.status !=', 'NODATA');
|
||||
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['googleCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.id', $data['googleCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.id', $data['googleCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.id', $data['googleCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($data['business'])){
|
||||
$builder->whereIn('E.manageCustomer', explode("|",$data['business']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.customerId', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
$builder->groupBy('A.date');
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getDisapproval()
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_ad_account acc');
|
||||
$builder->select('
|
||||
acc.customerId,
|
||||
acc.name AS customer_name,
|
||||
ac.id AS campaign_id,
|
||||
ac.name AS campaign_name,
|
||||
ag.id AS adgroup_id,
|
||||
ag.name AS adgroup_name,
|
||||
ad.id,
|
||||
ad.name,
|
||||
ad.code,
|
||||
ass.url,
|
||||
ad.status,
|
||||
ad.policyTopic,
|
||||
ad.reviewStatus,
|
||||
ad.approvalStatus,
|
||||
ad.adType,
|
||||
ad.finalUrl,
|
||||
ad.create_time,
|
||||
ad.update_time');
|
||||
$builder->join('z_adwords.aw_campaign ac', 'ac.customerId = acc.customerId', 'left');
|
||||
$builder->join('z_adwords.aw_adgroup ag', 'ag.campaignId = ac.id', 'left');
|
||||
$builder->join('z_adwords.aw_ad ad', 'ad.adgroupId = ag.id', 'left');
|
||||
$builder->join('z_adwords.aw_asset ass', "SUBSTRING_INDEX(ad.assets, ',', 1) = ass.id", 'left');
|
||||
$builder->where("(ad.approvalStatus = 'DISAPPROVED' OR ad.approvalStatus = 'AREA_OF_INTEREST_ONLY' OR ad.approvalStatus = 'APPROVED_LIMITED' OR (ad.approvalStatus = 'APPROVED' AND ad.policyTopic LIKE '%HEALTH_IN_PERSONALIZED_ADS%')) AND acc.is_exposed = 1 AND acc.status = 'ENABLED' AND ac.status = 'ENABLED' AND ag.status = 'ENABLED' AND ad.status = 'ENABLED'");
|
||||
// $builder->orderBy('ad.create_time', 'DESC');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCampaignById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_campaign');
|
||||
$builder->select('"구글" as media, "캠페인" as type, id, name, status');
|
||||
$builder->whereIn('id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdgroupById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_adgroup');
|
||||
$builder->select('"구글" as media, "광고그룹" as type, id, name, status');
|
||||
$builder->whereIn('id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_adwords.aw_ad');
|
||||
$builder->select('"구글" as media, "광고" as type, id, name, status');
|
||||
$builder->whereIn('id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function updateCode($data) {
|
||||
$result = [];
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_adwords.aw_ad');
|
||||
$builder->set('code', $data['code']);
|
||||
$builder->where('id', $data['id']);
|
||||
$builder->update();
|
||||
$queryResult = $this->db->transComplete();
|
||||
if($queryResult){
|
||||
$result['code'] = $data['code'] ?? '';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCustomerByCampaignId($campaignIds) {
|
||||
$builder = $this->db->table('z_adwords.aw_campaign A');
|
||||
$builder->select('A.id, B.customerId, B.manageCustomer');
|
||||
$builder->join('z_adwords.aw_ad_account B', 'A.customerId = B.customerId');
|
||||
$builder->whereIn('A.id', $campaignIds);
|
||||
$builder->groupBy('A.id');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setUpdatingByAds($campaignIds){
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_adwords.aw_campaign');
|
||||
$builder->whereIn('id', $campaignIds);
|
||||
$builder->set('is_updating', 1);
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateDbCount($data) {
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_adwords.aw_ad_account');
|
||||
$builder->set('db_count', (integer)$data['db_count']);
|
||||
$builder->where('customerId', $data['id']);
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateExposed($data) {
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_adwords.aw_ad_account');
|
||||
$builder->set('is_exposed', (integer)$data['is_exposed']);
|
||||
$builder->where('customerId', $data['id']);
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCustomerById($id, $type) {
|
||||
if(empty($type)){return false;}
|
||||
$builder = $this->db->table('z_adwords.aw_ad_account A');
|
||||
$builder->select('A.customerId');
|
||||
$builder->join('z_adwords.aw_campaign B', 'A.customerId = B.customerId');
|
||||
$builder->join('z_adwords.aw_adgroup C', 'B.id = C.campaignId');
|
||||
$builder->join('z_adwords.aw_ad D', 'C.id = D.adgroupId');
|
||||
|
||||
if($type == 'campaign'){
|
||||
$builder->where('B.id', $id);
|
||||
}else if($type == 'adgroup'){
|
||||
$builder->where('C.id', $id);
|
||||
}else if($type == 'ad'){
|
||||
$builder->where('D.id', $id);
|
||||
}
|
||||
|
||||
$builder->groupBy('A.customerId');
|
||||
$result = $builder->get()->getRowArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAsset($id) {
|
||||
$builder = $this->db->table('z_adwords.aw_asset');
|
||||
$builder->select('url');
|
||||
$builder->where('id', $id);
|
||||
$result = $builder->get()->getRowArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,530 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Advertiser;
|
||||
|
||||
use App\Libraries\Calc;
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class AdvKakaoManagerModel extends Model
|
||||
{
|
||||
public function getAccounts($data)
|
||||
{
|
||||
$builder = $this->db->table('z_moment.mm_creative_report_basic A');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name
|
||||
');
|
||||
$builder->join('z_moment.mm_creative B', 'A.id = B.id');
|
||||
$builder->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
|
||||
$builder->join('z_moment.mm_campaign D', 'C.campaign_id = D.id');
|
||||
$builder->join('z_moment.mm_ad_account E', 'D.ad_account_id = E.id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->where('A.cost IS NOT NULL AND A.imp !=', 0);
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['kakaoCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.id', $data['kakaoCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.id', $data['kakaoCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.id', $data['kakaoCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getMediaAccounts($data)
|
||||
{
|
||||
$builder = $this->db->table('z_moment.mm_creative_report_basic A');
|
||||
$builder->select('
|
||||
"kakao" AS media,
|
||||
E.name AS media_account_name,
|
||||
E.id AS media_account_id,
|
||||
E.config AS status,
|
||||
E.isAdminStop AS isAdminStop,
|
||||
"" AS is_exposed,
|
||||
"" AS db_count,
|
||||
"" AS db_sum,
|
||||
"" AS date_count
|
||||
');
|
||||
$builder->join('z_moment.mm_creative B', 'A.id = B.id');
|
||||
$builder->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
|
||||
$builder->join('z_moment.mm_campaign D', 'C.campaign_id = D.id');
|
||||
$builder->join('z_moment.mm_ad_account E', 'D.ad_account_id = E.id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->where('A.cost IS NOT NULL AND A.imp !=', 0);
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['kakaoCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.id', $data['kakaoCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.id', $data['kakaoCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.id', $data['kakaoCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
$builder->groupBy('E.id');
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getCampaigns($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_moment.mm_creative_report_basic A');
|
||||
$subQuery->select('
|
||||
D.ad_account_id as customerId,
|
||||
D.id AS id,
|
||||
D.name AS name,
|
||||
D.config AS status,
|
||||
D.dailyBudgetAmount AS budget,
|
||||
D.create_time AS create_date,
|
||||
A.date AS date,
|
||||
A.hour AS hour,
|
||||
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->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.imp !=', 0);
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('D.id, A.date, A.hour');
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.id as customerId,
|
||||
"kakao" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.status AS status,
|
||||
sub.budget AS budget,
|
||||
0 AS bidamount,
|
||||
"" AS bidamount_type,
|
||||
"" AS biddingStrategyType,
|
||||
SUM(sub.impressions) AS impressions,
|
||||
SUM(sub.click) AS click,
|
||||
SUM(sub.spend) AS spend,
|
||||
SUM(sub.sales) AS sales,
|
||||
SUM(sub.unique_total) AS unique_total,
|
||||
SUM(sub.margin) AS margin,
|
||||
JSON_OBJECTAGG(CONCAT(sub.date, "_", sub.hour), JSON_OBJECT(
|
||||
"impressions", sub.impressions,
|
||||
"click", sub.click,
|
||||
"spend", sub.spend,
|
||||
"sales", sub.sales,
|
||||
"unique_total", sub.unique_total,
|
||||
"cpa", IFNULL(ROUND(sub.spend/sub.unique_total, 1), 0),
|
||||
"margin", sub.margin,
|
||||
"margin_ratio", IFNULL(ROUND((sub.margin/sub.sales)*100, 1), 0)
|
||||
)) AS metrics,
|
||||
sub.create_date
|
||||
');
|
||||
$builder->join('z_moment.mm_ad_account E', 'sub.customerId = E.id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "kakao" AND memo.type = "campaigns" AND is_done <> 1', 'left');
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.name', 'asc');
|
||||
// echo $builder->getCompiledSelect(); exit;
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdsets($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_moment.mm_creative_report_basic A');
|
||||
$subQuery->select('
|
||||
C.campaign_id as campaign_id,
|
||||
C.id AS id,
|
||||
C.name AS name,
|
||||
C.config AS status,
|
||||
C.dailyBudgetAmount AS budget,
|
||||
C.bidAmount AS bidamount,
|
||||
C.create_time AS create_date,
|
||||
A.date AS date,
|
||||
A.hour AS hour,
|
||||
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->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
|
||||
$subQuery->where('A.cost IS NOT NULL AND A.imp !=', 0);
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('C.id, A.date, A.hour');
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.id as customerId,
|
||||
D.id AS campaign_id,
|
||||
"kakao" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.status AS status,
|
||||
sub.budget AS budget,
|
||||
"" AS biddingStrategyType,
|
||||
sub.bidamount AS bidamount,
|
||||
0 AS campaign_bidamount,
|
||||
"" AS bidamount_type,
|
||||
SUM(sub.impressions) AS impressions,
|
||||
SUM(sub.click) AS click,
|
||||
SUM(sub.spend) AS spend,
|
||||
SUM(sub.sales) AS sales,
|
||||
SUM(sub.unique_total) AS unique_total,
|
||||
SUM(sub.margin) AS margin,
|
||||
JSON_OBJECTAGG(CONCAT(sub.date, "_", sub.hour), JSON_OBJECT(
|
||||
"impressions", sub.impressions,
|
||||
"click", sub.click,
|
||||
"spend", sub.spend,
|
||||
"sales", sub.sales,
|
||||
"unique_total", sub.unique_total,
|
||||
"cpa", IFNULL(ROUND(sub.spend/sub.unique_total, 1), 0),
|
||||
"margin", sub.margin,
|
||||
"margin_ratio", IFNULL(ROUND((sub.margin/sub.sales)*100, 1), 0)
|
||||
)) AS metrics,
|
||||
sub.create_date
|
||||
');
|
||||
$builder->join('z_moment.mm_campaign D', 'sub.campaign_id = D.id');
|
||||
$builder->join('z_moment.mm_ad_account E', 'D.ad_account_id = E.id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "kakao" AND memo.type = "adsets" AND is_done <> 1', 'left');
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.name', 'asc');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAds($data)
|
||||
{
|
||||
$subQuery = $this->db->table('z_moment.mm_creative_report_basic A');
|
||||
$subQuery->select('
|
||||
B.adgroup_id as adgroup_id,
|
||||
B.id AS id,
|
||||
B.name AS name,
|
||||
B.code AS code,
|
||||
B.config AS status,
|
||||
B.reviewStatus AS approval_status,
|
||||
B.imageUrl AS thumbnail,
|
||||
B.landingUrl AS landingUrl,
|
||||
B.create_time AS create_date,
|
||||
A.date AS date,
|
||||
A.hour AS hour,
|
||||
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.imp !=', 0);
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$subQuery->where('A.date >=', $data['sdate']);
|
||||
$subQuery->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
$subQuery->groupBy('B.id, A.date, A.hour');
|
||||
|
||||
$builder = $this->db->newQuery()->fromSubquery($subQuery, 'sub');
|
||||
$builder->select('
|
||||
G.id AS company_id,
|
||||
G.name AS company_name,
|
||||
E.id as customerId,
|
||||
D.id AS campaign_id,
|
||||
C.id AS adset_id,
|
||||
"kakao" AS media,
|
||||
sub.id AS id,
|
||||
sub.name AS name,
|
||||
COUNT(DISTINCT memo.seq) AS memo_cnt,
|
||||
sub.code AS code,
|
||||
sub.status AS status,
|
||||
sub.approval_status AS approval_status,
|
||||
"" AS policyTopic,
|
||||
sub.thumbnail AS thumbnail,
|
||||
"" AS assets,
|
||||
sub.landingUrl AS landingUrl,
|
||||
0 AS budget,
|
||||
0 AS bidamount,
|
||||
"" AS bidamount_type,
|
||||
SUM(sub.impressions) AS impressions,
|
||||
SUM(sub.click) AS click,
|
||||
SUM(sub.spend) AS spend,
|
||||
SUM(sub.sales) AS sales,
|
||||
SUM(sub.unique_total) AS unique_total,
|
||||
SUM(sub.margin) AS margin,
|
||||
JSON_OBJECTAGG(CONCAT(sub.date, "_", sub.hour), JSON_OBJECT(
|
||||
"impressions", sub.impressions,
|
||||
"click", sub.click,
|
||||
"spend", sub.spend,
|
||||
"sales", sub.sales,
|
||||
"unique_total", sub.unique_total,
|
||||
"cpa", IFNULL(ROUND(sub.spend/sub.unique_total, 1), 0),
|
||||
"margin", sub.margin,
|
||||
"margin_ratio", IFNULL(ROUND((sub.margin/sub.sales)*100, 1), 0)
|
||||
)) AS metrics,
|
||||
sub.create_date
|
||||
');
|
||||
$builder->join('z_moment.mm_adgroup C', 'sub.adgroup_id = C.id');
|
||||
$builder->join('z_moment.mm_campaign D', 'C.campaign_id = D.id');
|
||||
$builder->join('z_moment.mm_ad_account E', 'D.ad_account_id = E.id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->join('zenith.advertisement_memo memo', 'sub.id = memo.id AND memo.media = "kakao" AND memo.type = "ads" AND is_done <> 1', 'left');
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('sub.name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('F.company_id');
|
||||
$builder->groupBy('sub.id');
|
||||
$builder->orderBy('sub.create_date', 'desc');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getReport($data)
|
||||
{
|
||||
$builder = $this->db->table('z_moment.mm_creative_report_basic A');
|
||||
$builder->select('
|
||||
A.date,
|
||||
SUM(A.imp) AS impressions,
|
||||
SUM(A.click) AS click,
|
||||
(SUM(A.click) / SUM(A.imp)) * 100 AS click_ratio,
|
||||
(SUM(A.db_count) / SUM(A.click)) * 100 AS conversion_ratio,
|
||||
SUM(A.cost) AS spend,
|
||||
SUM(A.db_count) AS unique_total,
|
||||
IFNULL(SUM(A.cost) / SUM(A.db_count),0) AS unique_one_price,
|
||||
SUM(A.db_price) AS unit_price,
|
||||
SUM(A.sales) AS price,
|
||||
SUM(A.margin) AS profit,
|
||||
(SUM(A.db_price * A.db_count) - SUM(A.cost)) / SUM(A.db_price * A.db_count) * 100 AS per
|
||||
');
|
||||
$builder->join('z_moment.mm_creative B', 'A.id = B.id');
|
||||
$builder->join('z_moment.mm_adgroup C', 'B.adgroup_id = C.id');
|
||||
$builder->join('z_moment.mm_campaign D', 'C.campaign_id = D.id');
|
||||
$builder->join('z_moment.mm_ad_account E', 'D.ad_account_id = E.id');
|
||||
$builder->join('zenith.company_adaccounts F', 'E.id = F.ad_account_id AND F.media = "kakao"');
|
||||
$builder->join('zenith.companies G', 'F.company_id = G.id');
|
||||
$builder->where('A.cost IS NOT NULL AND A.imp !=', 0);
|
||||
if(!empty($data['sdate']) && !empty($data['edate'])){
|
||||
$builder->where('A.date >=', $data['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['kakaoCheck'])){
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
$builder->whereIn('D.id', $data['kakaoCheck']);
|
||||
break;
|
||||
case 'adsets':
|
||||
$builder->whereIn('C.id', $data['kakaoCheck']);
|
||||
break;
|
||||
case 'ads':
|
||||
$builder->whereIn('B.id', $data['kakaoCheck']);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($data['resta'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['resta']));
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$builder->whereIn('G.id', explode("|",$data['company']));
|
||||
}
|
||||
|
||||
if(!empty($data['account'])){
|
||||
$builder->whereIn('E.id', explode("|",$data['account']));
|
||||
}
|
||||
|
||||
$builder->groupBy('A.date');
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getDisapproval()
|
||||
{
|
||||
$builder = $this->db->table('z_moment.mm_ad_account acc');
|
||||
$builder->select('acc.id AS account_id');
|
||||
$builder->join('z_moment.mm_campaign ac', 'ac.ad_account_id = acc.id', 'left');
|
||||
$builder->join('z_moment.mm_adgroup ag', 'ag.campaign_id = ac.id', 'left');
|
||||
$builder->join('z_moment.mm_creative ad', 'ad.adgroup_id = ag.id', 'left');
|
||||
$builder->where("(ad.reviewStatus = 'REJECTED' OR ad.reviewStatus = 'MODIFICATION_REJECTED')");
|
||||
$builder->where('ad.creativeStatus is NOT NULL', NULL);
|
||||
$builder->where('acc.config', 'ON');
|
||||
$builder->where('ac.config', 'ON');
|
||||
$builder->where('ag.config', 'ON');
|
||||
$builder->where('ad.config', 'ON');
|
||||
// $builder->orderBy('ad.create_time', 'DESC');
|
||||
$builder->groupBy('acc.id');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCampaignById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_moment.mm_campaign');
|
||||
$builder->select('"카카오" as media, "캠페인" as type, id, name, config as status');
|
||||
$builder->whereIn('id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdgroupById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_moment.mm_adgroup');
|
||||
$builder->select('"카카오" as media, "광고그룹" as type, id, name, config as status');
|
||||
$builder->whereIn('id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function getAdById($ids)
|
||||
{
|
||||
$builder = $this->db->table('z_moment.aw_ad');
|
||||
$builder->select('"카카오" as media, "광고" as type, id, name, config as status');
|
||||
$builder->whereIn('id', $ids);
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
public function updateCode($data) {
|
||||
$result = [];
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_moment.mm_creative');
|
||||
$builder->set('code', $data['code']);
|
||||
$builder->where('id', $data['id']);
|
||||
$builder->update();
|
||||
$queryResult = $this->db->transComplete();
|
||||
if($queryResult){
|
||||
$result['code'] = $data['code'] ?? '';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAccountByCampaignId($campaignIds) {
|
||||
$builder = $this->db->table('z_moment.mm_campaign A');
|
||||
$builder->select('id, ad_account_id');
|
||||
$builder->whereIn('id', $campaignIds);
|
||||
$builder->groupBy('id');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setUpdatingByAds($campaignIds){
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('z_moment.mm_campaign');
|
||||
$builder->whereIn('id', $campaignIds);
|
||||
$builder->set('is_updating', 1);
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,581 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Advertiser;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class AdvManagerModel extends Model
|
||||
{
|
||||
protected $zenith, $facebook, $google, $kakao;
|
||||
public function __construct()
|
||||
{
|
||||
$this->zenith = \Config\Database::connect();
|
||||
$this->facebook = model(AdvFacebookManagerModel::class);
|
||||
$this->google = model(AdvGoogleManagerModel::class);
|
||||
$this->kakao = model(AdvKakaoManagerModel::class);
|
||||
}
|
||||
|
||||
public function getAccounts($data)
|
||||
{
|
||||
return $this->getQueryResults($data, 'getAccounts');
|
||||
}
|
||||
|
||||
public function getMediaAccounts($data)
|
||||
{
|
||||
return $this->getQueryResults($data, 'getMediaAccounts');
|
||||
}
|
||||
|
||||
public function getCampaigns($data)
|
||||
{
|
||||
return $this->getQueryResults($data, 'getCampaigns');
|
||||
}
|
||||
|
||||
public function getAdSets($data)
|
||||
{
|
||||
return $this->getQueryResults($data, 'getAdsets');
|
||||
}
|
||||
|
||||
public function getAds($data)
|
||||
{
|
||||
return $this->getQueryResults($data, 'getAds');
|
||||
}
|
||||
|
||||
public function getOnlyAdAccount($data)
|
||||
{
|
||||
$data['searchData']['stx'] = $data['stx'] ?? '';
|
||||
$data['searchData']['media'] = 'facebook|google';
|
||||
return $this->getQueryResults($data, 'getOnlyAdAccount');
|
||||
}
|
||||
|
||||
public function getReport($data)
|
||||
{
|
||||
if(!empty($data['check'])){
|
||||
$data = $this->setArgs($data);
|
||||
}
|
||||
|
||||
return $this->getQueryResults($data, 'getReport');
|
||||
}
|
||||
|
||||
private function setArgs($data)
|
||||
{
|
||||
if (!isset($data['searchData']['data'])) {
|
||||
// data 키가 없을 경우 기본값 설정 또는 예외 처리
|
||||
return $data;
|
||||
}
|
||||
$kakaoNumbers = array();
|
||||
$googleNumbers = array();
|
||||
$facebookNumbers = array();
|
||||
foreach($data['searchData']['data'][$data['searchData']['type']] as $value) {
|
||||
$parts = explode('_', $value);
|
||||
$media = array_shift($parts);
|
||||
$id = end($parts);
|
||||
|
||||
switch ($media) {
|
||||
case 'kakao': $kakaoNumbers[] = $id; break;
|
||||
case 'google': $googleNumbers[] = $id; break;
|
||||
case 'facebook': $facebookNumbers[] = $id; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
$data['searchData']['facebookCheck'] = $facebookNumbers;
|
||||
$data['searchData']['googleCheck'] = $googleNumbers;
|
||||
$data['searchData']['kakaoCheck'] = $kakaoNumbers;
|
||||
unset($facebookNumbers, $googleNumbers, $kakaoNumbers, $data['searchData']['media']);
|
||||
$data['searchData']['media'] = [];
|
||||
|
||||
if(!empty($data['searchData']['facebookCheck'])){
|
||||
array_push($data['searchData']['media'], 'facebook');
|
||||
}
|
||||
|
||||
if(!empty($data['searchData']['googleCheck'])){
|
||||
array_push($data['searchData']['media'], 'google');
|
||||
}
|
||||
|
||||
if(!empty($data['searchData']['kakaoCheck'])){
|
||||
array_push($data['searchData']['media'], 'kakao');
|
||||
}
|
||||
|
||||
$data['searchData']['media'] = implode("|", $data['searchData']['media']);
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getQueryResults($data, $type)
|
||||
{
|
||||
// $cache = \Config\Services::cache();
|
||||
// $cacheName = $type."_".md5(json_encode($data['searchData']));
|
||||
// $cacheData = $cache->get($cacheName);
|
||||
// if($cacheName && $cacheData) return $cacheData;
|
||||
|
||||
$builders = [];
|
||||
if(!isset($data['searchData'])) {
|
||||
$data['searchData'] = [
|
||||
'media' => 'facebook|google|kakao',
|
||||
'sdate' => date('Y-m-d'),
|
||||
'edate' => date('Y-m-d'),
|
||||
];
|
||||
}
|
||||
if(!isset($data['searchData']['media']) || empty($data['searchData']['media'])){
|
||||
$media = ['facebook', 'google', 'kakao'];
|
||||
}else{
|
||||
$media = explode("|", $data['searchData']['media']);
|
||||
}
|
||||
|
||||
if (in_array('facebook', $media)) {
|
||||
$facebookBuilder = $this->facebook->$type($data['searchData']);
|
||||
$builders[] = $facebookBuilder;
|
||||
}
|
||||
|
||||
if (in_array('google', $media)) {
|
||||
$googleBuilder = $this->google->$type($data['searchData']);
|
||||
$builders[] = $googleBuilder;
|
||||
}
|
||||
|
||||
if (in_array('kakao', $media)) {
|
||||
$kakaoBuilder = $this->kakao->$type($data['searchData']);
|
||||
$builders[] = $kakaoBuilder;
|
||||
}
|
||||
|
||||
$unionBuilder = null;
|
||||
foreach ($builders as $builder) {
|
||||
if ($unionBuilder) {
|
||||
$unionBuilder->union($builder);
|
||||
} else {
|
||||
$unionBuilder = $builder;
|
||||
}
|
||||
}
|
||||
|
||||
if ($unionBuilder) {
|
||||
$resultQuery = $this->zenith->newQuery()->fromSubquery($unionBuilder, 'adv');
|
||||
if($type == 'getAccounts'){
|
||||
$resultQuery->groupBy('adv.company_id');
|
||||
$resultQuery->orderBy('adv.company_name', 'asc');
|
||||
}
|
||||
|
||||
if($type == 'getMediaAccounts'){
|
||||
$resultQuery->groupBy('adv.media_account_id');
|
||||
$resultQuery->orderBy('adv.media_account_name', 'asc');
|
||||
}
|
||||
|
||||
if($type == 'getAdsets' || $type == 'getAds') {
|
||||
$ids = [];
|
||||
if($type == 'getAdsets' && (isset($data['searchData']['data']['campaigns']) && count($data['searchData']['data']['campaigns']))) {
|
||||
$ids = array_map(function($v) { $v=explode('_', $v); return (integer)array_pop($v); }, $data['searchData']['data']['campaigns']);
|
||||
$resultQuery->whereIn('campaign_id', $ids);
|
||||
} else if($type == 'getAds') {
|
||||
if(isset($data['searchData']['data']['campaigns']) && count($data['searchData']['data']['campaigns'])) {
|
||||
$ids = array_map(function($v) { $v=explode('_', $v); return (integer)array_pop($v); }, $data['searchData']['data']['campaigns']);
|
||||
$resultQuery->whereIn('campaign_id', $ids);
|
||||
}
|
||||
if(isset($data['searchData']['data']['adsets']) && count($data['searchData']['data']['adsets'])) {
|
||||
$ids = array_map(function($v) { $v=explode('_', $v); return (integer)array_pop($v); }, $data['searchData']['data']['adsets']);
|
||||
$resultQuery->whereIn('adset_id', $ids);
|
||||
}
|
||||
}
|
||||
}
|
||||
if($type == 'getCampaigns' || $type == 'getAdsets' || $type == 'getAds'){
|
||||
$resultQuery->groupBy('id');
|
||||
$resultQuery->orderBy('create_date', 'desc');
|
||||
}
|
||||
// echo $resultQuery->getCompiledSelect(); exit;
|
||||
$result = $resultQuery->get()->getResultArray();
|
||||
} else {
|
||||
$result = null;
|
||||
}
|
||||
// if(!$cacheData)
|
||||
// $cache->save($cacheName, $result, 300);
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAccountStat($data)
|
||||
{
|
||||
if (empty($data['media'])) {
|
||||
$data['media'] = 'facebook|google|kakao';
|
||||
}
|
||||
if (empty($data['sdate'])) {
|
||||
$data['sdate'] = date('Y-m-d');
|
||||
}
|
||||
if (empty($data['edate'])) {
|
||||
$data['edate'] = date('Y-m-d');
|
||||
}
|
||||
$media = explode("|", $data['media']);
|
||||
|
||||
$sdate = $data['sdate'];
|
||||
$edate = $data['edate'];
|
||||
|
||||
$queries = [];
|
||||
|
||||
if (in_array('google', $media)) {
|
||||
$queries[] = "
|
||||
SELECT
|
||||
e.customerId, e.name,
|
||||
ROUND(SUM(a.cost) / SUM(a.db_count)) AS cpa,
|
||||
SUM(a.db_count) AS db_count,
|
||||
SUM(a.cost) AS cost,
|
||||
SUM(a.margin) AS margin,
|
||||
ROUND(SUM(a.margin) / SUM(a.sales) * 100, 2) AS margin_ratio,
|
||||
SUM(a.sales) AS sales,
|
||||
'google' AS source,
|
||||
ROUND(SUM(a.margin) / SUM(SUM(a.margin)) OVER () * 100, 2) AS total_margin_ratio
|
||||
FROM z_adwords.aw_adgroup_report_history AS a
|
||||
LEFT JOIN z_adwords.aw_adgroup AS c ON a.adgroup_id = c.id
|
||||
LEFT JOIN z_adwords.aw_campaign AS d ON c.campaignId = d.id
|
||||
LEFT JOIN z_adwords.aw_ad_account AS e ON d.customerId = e.customerId
|
||||
WHERE a.date BETWEEN '{$sdate}' AND '{$edate}' AND e.is_hidden = 0 AND e.is_exposed = 1
|
||||
GROUP BY e.customerId, e.name
|
||||
";
|
||||
}
|
||||
|
||||
if (in_array('facebook', $media)) {
|
||||
$queries[] = "
|
||||
SELECT
|
||||
E.ad_account_id AS customerId,
|
||||
E.name,
|
||||
ROUND(SUM(A.spend) / SUM(A.db_count)) AS cpa,
|
||||
SUM(A.db_count) AS db_count,
|
||||
SUM(A.spend) AS cost,
|
||||
SUM(A.margin) AS margin,
|
||||
ROUND(SUM(A.margin) / SUM(A.sales) * 100, 2) AS margin_ratio,
|
||||
SUM(A.sales) AS sales,
|
||||
'facebook' AS source,
|
||||
ROUND(SUM(A.margin) / SUM(SUM(A.margin)) OVER () * 100, 2) AS total_margin_ratio
|
||||
FROM z_facebook.fb_ad_insight_history AS A
|
||||
LEFT JOIN z_facebook.fb_ad AS B ON A.ad_id = B.ad_id
|
||||
LEFT JOIN z_facebook.fb_adset AS C ON B.adset_id = C.adset_id
|
||||
LEFT JOIN z_facebook.fb_campaign AS D ON C.campaign_id = D.campaign_id
|
||||
LEFT JOIN z_facebook.fb_ad_account AS E ON D.account_id = E.ad_account_id
|
||||
WHERE A.date BETWEEN '{$sdate}' AND '{$edate}' AND E.perm = 1 AND E.status = 1
|
||||
GROUP BY E.ad_account_id, E.name
|
||||
";
|
||||
}
|
||||
|
||||
if (in_array('kakao', $media)) {
|
||||
$queries[] = "
|
||||
SELECT
|
||||
E.id AS customerId,
|
||||
E.name,
|
||||
ROUND(SUM(A.cost) / SUM(A.db_count)) AS cpa,
|
||||
SUM(A.db_count) AS db_count,
|
||||
SUM(A.cost) AS cost,
|
||||
SUM(A.margin) AS margin,
|
||||
ROUND(SUM(A.margin) / SUM(A.sales) * 100, 2) AS margin_ratio,
|
||||
SUM(A.sales) AS sales,
|
||||
'kakao' AS source,
|
||||
ROUND(SUM(A.margin) / SUM(SUM(A.margin)) OVER () * 100, 2) AS total_margin_ratio
|
||||
FROM z_moment.mm_creative_report_basic AS A
|
||||
LEFT JOIN z_moment.mm_creative AS B ON A.id = B.id
|
||||
LEFT JOIN z_moment.mm_adgroup AS C ON B.adgroup_id = C.id
|
||||
LEFT JOIN z_moment.mm_campaign AS D ON C.campaign_id = D.id
|
||||
LEFT JOIN z_moment.mm_ad_account AS E ON D.ad_account_id = E.id
|
||||
WHERE A.date BETWEEN '{$sdate}' AND '{$edate}' AND E.config = 'ON' AND E.is_update = 1
|
||||
GROUP BY E.id, E.name
|
||||
";
|
||||
}
|
||||
|
||||
$combinedSql = implode(" UNION ALL ", $queries);
|
||||
$finalQuery = "
|
||||
WITH combined_data AS (
|
||||
{$combinedSql}
|
||||
)
|
||||
SELECT
|
||||
source, customerId, name, cpa, db_count, cost, margin, margin_ratio, sales, total_margin_ratio,
|
||||
ROUND(margin / SUM(margin) OVER () * 100, 2) AS source_margin_ratio
|
||||
FROM combined_data
|
||||
ORDER BY name ASC
|
||||
";
|
||||
|
||||
$query = $this->zenith->query($finalQuery);
|
||||
return $query->getResultArray();
|
||||
}
|
||||
|
||||
public function getMemo($data = null)
|
||||
{
|
||||
$fbBuilder = $this->zenith->table('z_facebook.fb_ad_account AS faa');
|
||||
$fbBuilder->select('am.*, faa.name AS account_name, fc.campaign_name AS campaign_name, fas.adset_name AS adset_name, fa.ad_name AS ad_name');
|
||||
$fbBuilder->join('z_facebook.fb_campaign AS fc', 'faa.ad_account_id = fc.account_id');
|
||||
$fbBuilder->join('z_facebook.fb_adset AS fas', 'fc.campaign_id = fas.campaign_id');
|
||||
$fbBuilder->join('z_facebook.fb_ad AS fa', 'fas.adset_id = fa.adset_id');
|
||||
$fbBuilder->join('zenith.advertisement_memo AS am', "am.media = 'facebook' AND ((fa.ad_id = am.id AND am.type = 'ads') OR (fas.adset_id = am.id AND am.type = 'adsets') OR (fc.campaign_id = am.id AND am.type = 'campaigns'))");
|
||||
|
||||
$ggBuilder = $this->zenith->table('z_adwords.aw_ad_account AS aaa');
|
||||
$ggBuilder->select('am.*, aaa.name AS account_name, ac.name AS campaign_name, aag.name AS adset_name, aa.name AS ad_name');
|
||||
$ggBuilder->join('z_adwords.aw_campaign ac', 'aaa.customerId = ac.customerId');
|
||||
$ggBuilder->join('z_adwords.aw_adgroup aag', 'ac.id = aag.campaignId');
|
||||
$ggBuilder->join('z_adwords.aw_ad aa', 'aag.id = aa.adgroupId');
|
||||
$ggBuilder->join('zenith.advertisement_memo AS am', "am.media = 'google' AND ((aa.id = am.id AND am.type = 'ads') OR (aag.id = am.id AND am.type = 'adsets') OR (ac.id = am.id AND am.type = 'campaigns'))");
|
||||
|
||||
$kkBuilder = $this->zenith->table('z_moment.mm_ad_account AS maa');
|
||||
$kkBuilder->select('am.*, maa.name AS account_name, mc.name AS campaign_name, mag.name AS adset_name, mct.name AS ad_name');
|
||||
$kkBuilder->join('z_moment.mm_campaign mc', 'maa.id = mc.ad_account_id');
|
||||
$kkBuilder->join('z_moment.mm_adgroup mag', 'mc.id = mag.campaign_id');
|
||||
$kkBuilder->join('z_moment.mm_creative mct', 'mag.id = mct.adgroup_id');
|
||||
$kkBuilder->join('zenith.advertisement_memo AS am', "am.media = 'kakao' AND ((mct.id = am.id AND am.type = 'ads') OR (mag.id = am.id AND am.type = 'adsets') OR (mc.id = am.id AND am.type = 'campaigns'))");
|
||||
|
||||
$fbBuilder->union($ggBuilder)->union($kkBuilder);
|
||||
$resultQuery = $this->zenith->newQuery()->fromSubquery($fbBuilder, 'memo');
|
||||
if(!empty($data['id'])){
|
||||
$resultQuery->where('memo.id', $data['id']);
|
||||
$resultQuery->where('memo.type', $data['type']);
|
||||
} else {
|
||||
$resultQuery->where("(memo.datetime >= DATE_SUB(NOW(), INTERVAL 3 DAY) OR (memo.datetime <= DATE_SUB(NOW(), INTERVAL 3 DAY) AND memo.is_done = 0))");
|
||||
}
|
||||
$resultQuery->groupBy('memo.seq');
|
||||
$resultQuery->orderBy('memo.datetime', 'desc');
|
||||
$result = $resultQuery->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function addMemo($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('advertisement_memo');
|
||||
$builder->insert($data);
|
||||
$result = $this->zenith->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function checkMemo($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('advertisement_memo');
|
||||
$builder->set('is_done', $data['is_done']);
|
||||
$builder->set('done_nickname', $data['done_nickname']);
|
||||
$builder->where('seq', $data['seq']);
|
||||
$builder->update();
|
||||
$result = $this->zenith->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAdvs($data)
|
||||
{
|
||||
$kakaoNumbers = array();
|
||||
$googleNumbers = array();
|
||||
$facebookNumbers = array();
|
||||
|
||||
foreach ($data['check'] as $value) {
|
||||
$parts = explode('_', $value);
|
||||
$id = $parts[1];
|
||||
|
||||
switch ($parts[0]) {
|
||||
case 'kakao':
|
||||
$kakaoNumbers[] = $id;
|
||||
break;
|
||||
case 'google':
|
||||
$googleNumbers[] = $id;
|
||||
break;
|
||||
case 'facebook':
|
||||
$facebookNumbers[] = $id;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$data['facebook'] = $facebookNumbers;
|
||||
$data['google'] = $googleNumbers;
|
||||
$data['kakao'] = $kakaoNumbers;
|
||||
|
||||
switch ($data['type']) {
|
||||
case 'campaigns':
|
||||
if(!empty($data['facebook'])){
|
||||
$facebookBuilder = $this->facebook->getCampaignById($data['facebook']);
|
||||
$builders[] = $facebookBuilder;
|
||||
}
|
||||
|
||||
if(!empty($data['google'])){
|
||||
$googleBuilder = $this->google->getCampaignById($data['google']);
|
||||
$builders[] = $googleBuilder;
|
||||
}
|
||||
|
||||
if(!empty($data['kakao'])){
|
||||
$kakaoBuilder = $this->kakao->getCampaignById($data['kakao']);
|
||||
$builders[] = $kakaoBuilder;
|
||||
}
|
||||
break;
|
||||
case 'adsets':
|
||||
if(!empty($data['facebook'])){
|
||||
$facebookBuilder = $this->facebook->getAdgroupById($data['facebook']);
|
||||
$builders[] = $facebookBuilder;
|
||||
}
|
||||
|
||||
if(!empty($data['google'])){
|
||||
$googleBuilder = $this->google->getAdgroupById($data['google']);
|
||||
$builders[] = $googleBuilder;
|
||||
}
|
||||
|
||||
if(!empty($data['kakao'])){
|
||||
$kakaoBuilder = $this->kakao->getAdgroupById($data['kakao']);
|
||||
$builders[] = $kakaoBuilder;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'ads':
|
||||
if(!empty($data['facebook'])){
|
||||
$facebookBuilder = $this->facebook->getAdById($data['facebook']);
|
||||
$builders[] = $facebookBuilder;
|
||||
}
|
||||
|
||||
if(!empty($data['google'])){
|
||||
$googleBuilder = $this->google->getAdById($data['google']);
|
||||
$builders[] = $googleBuilder;
|
||||
}
|
||||
|
||||
if(!empty($data['kakao'])){
|
||||
$kakaoBuilder = $this->kakao->getAdById($data['kakao']);
|
||||
$builders[] = $kakaoBuilder;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
$unionBuilder = null;
|
||||
foreach ($builders as $builder) {
|
||||
if ($unionBuilder) {
|
||||
$unionBuilder->union($builder);
|
||||
|
||||
} else {
|
||||
$unionBuilder = $builder;
|
||||
}
|
||||
}
|
||||
|
||||
$result = $unionBuilder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getChangeLogs($id = null, $dates = null)
|
||||
{
|
||||
$builder = $this->zenith->table('adv_change_logs');
|
||||
$builder->select('adv_change_logs.*, IFNULL(users.nickname, adv_change_logs.nickname) as nickname');
|
||||
$builder->join('users', 'adv_change_logs.nickname = users.username', 'left');
|
||||
|
||||
if (!empty($id)) {
|
||||
$builder->where('adv_change_logs.id', $id);
|
||||
}
|
||||
|
||||
if (!empty($dates)) {
|
||||
$builder->where('adv_change_logs.datetime >=', date('Y-m-d', strtotime($dates['sdate'])));
|
||||
$builder->where('adv_change_logs.datetime <', date('Y-m-d', strtotime($dates['edate']. '+1 day')));
|
||||
}
|
||||
$builder->orderBy('adv_change_logs.datetime', 'DESC');
|
||||
|
||||
$changeLogs = $builder->get()->getResultArray();
|
||||
|
||||
foreach ($changeLogs as &$log) {
|
||||
$media = $log['media'];
|
||||
$type = $log['type'];
|
||||
$id = $log['id'];
|
||||
$name = '';
|
||||
$accountName = '';
|
||||
|
||||
switch ($media) {
|
||||
case 'facebook':
|
||||
switch ($type) {
|
||||
case 'campaigns':
|
||||
case 'campaign':
|
||||
$name = $this->zenith->table('z_facebook.fb_campaign')->select('campaign_name')->where('campaign_id', $id)->get()->getRow()->campaign_name;
|
||||
$accountName = $this->zenith->table('z_facebook.fb_campaign')
|
||||
->select('z_facebook.fb_ad_account.name')
|
||||
->join('z_facebook.fb_ad_account', 'z_facebook.fb_campaign.account_id = z_facebook.fb_ad_account.ad_account_id')
|
||||
->where('z_facebook.fb_campaign.campaign_id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
case 'adsets':
|
||||
case 'adset':
|
||||
$name = $this->zenith->table('z_facebook.fb_adset')->select('adset_name')->where('adset_id', $id)->get()->getRow()->adset_name;
|
||||
$accountName = $this->zenith->table('z_facebook.fb_adset')
|
||||
->select('z_facebook.fb_ad_account.name')
|
||||
->join('z_facebook.fb_campaign', 'z_facebook.fb_adset.campaign_id = z_facebook.fb_campaign.campaign_id')
|
||||
->join('z_facebook.fb_ad_account', 'z_facebook.fb_campaign.account_id = z_facebook.fb_ad_account.ad_account_id')
|
||||
->where('z_facebook.fb_adset.adset_id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
case 'ads':
|
||||
case 'ad':
|
||||
$name = $this->zenith->table('z_facebook.fb_ad')->select('ad_name')->where('ad_id', $id)->get()->getRow()->ad_name;
|
||||
$accountName = $this->zenith->table('z_facebook.fb_ad')
|
||||
->select('z_facebook.fb_ad_account.name')
|
||||
->join('z_facebook.fb_adset', 'z_facebook.fb_ad.adset_id = z_facebook.fb_adset.adset_id')
|
||||
->join('z_facebook.fb_campaign', 'z_facebook.fb_adset.campaign_id = z_facebook.fb_campaign.campaign_id')
|
||||
->join('z_facebook.fb_ad_account', 'z_facebook.fb_campaign.account_id = z_facebook.fb_ad_account.ad_account_id')
|
||||
->where('z_facebook.fb_ad.ad_id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'google':
|
||||
switch ($type) {
|
||||
case 'campaigns':
|
||||
case 'campaign':
|
||||
$name = $this->zenith->table('z_adwords.aw_campaign')->select('name')->where('id', $id)->get()->getRow()->name;
|
||||
$accountName = $this->zenith->table('z_adwords.aw_campaign')
|
||||
->select('z_adwords.aw_ad_account.name')
|
||||
->join('z_adwords.aw_ad_account', 'z_adwords.aw_campaign.customerId = z_adwords.aw_ad_account.customerId')
|
||||
->where('z_adwords.aw_campaign.id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
case 'adsets':
|
||||
case 'adset':
|
||||
$name = $this->zenith->table('z_adwords.aw_adgroup')->select('name')->where('id', $id)->get()->getRow()->name;
|
||||
$accountName = $this->zenith->table('z_adwords.aw_adgroup')
|
||||
->select('z_adwords.aw_ad_account.name')
|
||||
->join('z_adwords.aw_campaign', 'z_adwords.aw_adgroup.campaignId = z_adwords.aw_campaign.id')
|
||||
->join('z_adwords.aw_ad_account', 'z_adwords.aw_campaign.customerId = z_adwords.aw_ad_account.customerId')
|
||||
->where('z_adwords.aw_adgroup.id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
case 'ads':
|
||||
case 'ad':
|
||||
$name = $this->zenith->table('z_adwords.aw_ad')->select('name')->where('id', $id)->get()->getRow()->name;
|
||||
$accountName = $this->zenith->table('z_adwords.aw_ad')
|
||||
->select('z_adwords.aw_ad_account.name')
|
||||
->join('z_adwords.aw_adgroup', 'z_adwords.aw_ad.adgroupId = z_adwords.aw_adgroup.id')
|
||||
->join('z_adwords.aw_campaign', 'z_adwords.aw_adgroup.campaignId = z_adwords.aw_campaign.id')
|
||||
->join('z_adwords.aw_ad_account', 'z_adwords.aw_campaign.customerId = z_adwords.aw_ad_account.customerId')
|
||||
->where('z_adwords.aw_ad.id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'kakao':
|
||||
switch ($type) {
|
||||
case 'campaigns':
|
||||
case 'campaign':
|
||||
$name = $this->zenith->table('z_moment.mm_campaign')->select('name')->where('id', $id)->get()->getRow()->name;
|
||||
$accountName = $this->zenith->table('z_moment.mm_campaign')
|
||||
->select('z_moment.mm_ad_account.name')
|
||||
->join('z_moment.mm_ad_account', 'z_moment.mm_campaign.ad_account_id = z_moment.mm_ad_account.id')
|
||||
->where('z_moment.mm_campaign.id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
case 'adsets':
|
||||
case 'adset':
|
||||
$name = $this->zenith->table('z_moment.mm_adgroup')->select('name')->where('id', $id)->get()->getRow()->name;
|
||||
$accountName = $this->zenith->table('z_moment.mm_adgroup')
|
||||
->select('z_moment.mm_ad_account.name')
|
||||
->join('z_moment.mm_campaign', 'z_moment.mm_adgroup.campaign_id = z_moment.mm_campaign.id')
|
||||
->join('z_moment.mm_ad_account', 'z_moment.mm_campaign.ad_account_id = z_moment.mm_ad_account.id')
|
||||
->where('z_moment.mm_adgroup.id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
case 'ads':
|
||||
case 'ad':
|
||||
$name = $this->zenith->table('z_moment.mm_creative')->select('name')->where('id', $id)->get()->getRow()->name;
|
||||
$accountName = $this->zenith->table('z_moment.mm_creative')
|
||||
->select('z_moment.mm_ad_account.name')
|
||||
->join('z_moment.mm_adgroup', 'z_moment.mm_creative.adgroup_id = z_moment.mm_adgroup.id')
|
||||
->join('z_moment.mm_campaign', 'z_moment.mm_adgroup.campaign_id = z_moment.mm_campaign.id')
|
||||
->join('z_moment.mm_ad_account', 'z_moment.mm_campaign.ad_account_id = z_moment.mm_ad_account.id')
|
||||
->where('z_moment.mm_creative.id', $id)
|
||||
->get()->getRow()->name;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
$log['item_name'] = $name;
|
||||
$log['account_name'] = $accountName;
|
||||
}
|
||||
return $changeLogs;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Advertiser;
|
||||
|
||||
use App\Libraries\Calc;
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class AdvNaverManagerModel extends Model
|
||||
{
|
||||
protected $naver, $ro_naver;
|
||||
public function __construct()
|
||||
{
|
||||
$this->naver = \Config\Database::connect('naver');
|
||||
$this->ro_naver = \Config\Database::connect('ro_naver');
|
||||
}
|
||||
|
||||
public function getCampaigns($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->naver->table('gfa_ad_report_history');
|
||||
$builder->select('"네이버" AS media, CONCAT("naver_", campaign_id) AS id, campaign_name AS name,
|
||||
COUNT(adset_id) AS adgroups, COUNT(ad_id) AS ads, SUM(impression) AS impressions, SUM(click) AS click, SUM(sales) AS spend, SUM(db_sales) AS sales, SUM(db_count) as unique_total, 0 AS budget, 0 AS status');
|
||||
|
||||
if(!empty($data['dates']['sdate']) && !empty($data['dates']['edate'])){
|
||||
$builder->where('date >=', $data['dates']['sdate']);
|
||||
$builder->where('date <=', date('Y-m-d', strtotime($data['dates']['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['accounts'])){
|
||||
$builder->whereIn('account_id', explode("|",$srch['accounts']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('campaign_id');
|
||||
$builder->orderBy('create_time', 'desc');
|
||||
$builder->orderBy('name', 'asc');
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAdsets($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->naver->table('gfa_ad_report_history');
|
||||
$builder->select('"네이버" AS media, CONCAT("naver_", adset_id) AS id, adset_name AS name,
|
||||
COUNT(ad_id) AS ads, SUM(impression) AS impressions,
|
||||
SUM(click) AS click, SUM(db_count) as unique_total, SUM(sales) AS spend, SUM(db_sales) AS sales, 0 AS budget, 0 AS status');
|
||||
|
||||
if(!empty($data['dates']['sdate']) && !empty($data['dates']['edate'])){
|
||||
$builder->where('date >=', $data['dates']['sdate']);
|
||||
$builder->where('date <=', date('Y-m-d', strtotime($data['dates']['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['accounts'])){
|
||||
$builder->whereIn('account_id', explode("|",$srch['accounts']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('adset_id');
|
||||
$builder->orderBy('create_time', 'desc');
|
||||
$builder->orderBy('adset_name', 'asc');
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAds($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->naver->table('gfa_ad_report_history');
|
||||
$builder->select('"네이버" AS media, CONCAT("naver_", ad_id) AS id, ad_name AS name, SUM(impression) AS impressions, SUM(click) AS click, SUM(db_count) as unique_total, SUM(sales) AS spend, SUM(db_sales) AS sales, 0 AS budget, 0 AS status');
|
||||
|
||||
if(!empty($data['dates']['sdate']) && !empty($data['dates']['edate'])){
|
||||
$builder->where('date >=', $data['dates']['sdate']);
|
||||
$builder->where('date <=', date('Y-m-d', strtotime($data['dates']['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['accounts'])){
|
||||
$builder->whereIn('account_id', explode("|",$srch['accounts']));
|
||||
}
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('name', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('ad_id');
|
||||
$builder->orderBy('create_time', 'desc');
|
||||
$builder->orderBy('ad_name', 'asc');
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getStatuses($param, $result, $dates)
|
||||
{
|
||||
foreach ($result as &$row) {
|
||||
|
||||
$row['cost_ori'] = $row['spend'];
|
||||
$row['spend'] = $row['spend']/1.1;
|
||||
$row['margin'] = $row['sales'] - $row['spend'];
|
||||
|
||||
$row['margin_ratio'] = Calc::margin_ratio($row['margin'], $row['sales']); // 수익률
|
||||
|
||||
$row['cpc'] = Calc::cpc($row['spend'], $row['click']); // 클릭당단가 (1회 클릭당 비용)
|
||||
$row['ctr'] = Calc::ctr($row['click'], $row['impressions']); // 클릭율 (노출 대비 클릭한 비율)
|
||||
$row['cpa'] = Calc::cpa($row['unique_total'], $row['spend']); //DB단가(전환당 비용)
|
||||
$row['cvr'] = Calc::cvr($row['unique_total'], $row['click']); //전환율
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAccounts($data)
|
||||
{
|
||||
$builder = $this->naver->table('gfa_ad_account A');
|
||||
$builder->select('A.account_id AS id, A.name');
|
||||
$builder->join('gfa_ad_report_history B', 'A.account_id = B.account_id', 'left');
|
||||
|
||||
if(!empty($data['dates']['sdate']) && !empty($data['dates']['edate'])){
|
||||
$builder->where('B.date >=', $data['dates']['sdate']);
|
||||
$builder->where('B.date <', date('Y-m-d', strtotime($data['dates']['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
$builder->where('A.name !=', '');
|
||||
$builder->groupBy('A.account_id');
|
||||
$builder->orderBy('A.name', 'asc');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getReport($data)
|
||||
{
|
||||
$builder = $this->naver->table('gfa_ad_report_history A');
|
||||
$builder->select('A.date, SUM(A.impression) AS impressions, SUM(A.click) AS click, (SUM(A.click) / SUM(A.impression)) * 100 AS click_ratio, (SUM(A.db_count) / SUM(A.click)) * 100 AS conversion_ratio, SUM(A.sales)/1.1 AS spend, FLOOR(SUM(A.sales)/1.1 * 0.85) AS spend_ratio, SUM(A.db_count) AS unique_total, IFNULL(SUM(A.sales)/1.1 / SUM(A.db_count),0) AS unique_one_price, SUM(A.db_price) AS unit_price, SUM(A.db_sales) AS price, SUM(A.margin) AS profit,
|
||||
(SUM(A.db_price * A.db_count) - SUM(A.sales)/1.1) / SUM(A.db_price * A.db_count) * 100 AS per');
|
||||
$builder->join('gfa_ad_account B', 'A.account_id = B.account_id', 'left');
|
||||
|
||||
if(!empty($data['dates']['sdate']) && !empty($data['dates']['edate'])){
|
||||
$builder->where('A.date >=', $data['dates']['sdate']);
|
||||
$builder->where('A.date <', date('Y-m-d', strtotime($data['dates']['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($data['accounts'])){
|
||||
$builder->whereIn('B.account_id', explode("|",$data['accounts']));
|
||||
}
|
||||
|
||||
$builder->groupBy('A.date');
|
||||
$builder->orderBy('A.date', 'ASC');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Api;
|
||||
|
||||
use CodeIgniter\Database\RawSql;
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class AdLeadModel extends Model
|
||||
{
|
||||
protected $facebook, $google, $kakao, $zenith;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->facebook = \Config\Database::connect('facebook');
|
||||
$this->google = \Config\Database::connect('google');
|
||||
$this->kakao = \Config\Database::connect('kakao');
|
||||
$this->zenith = \Config\Database::connect();
|
||||
}
|
||||
|
||||
public function getBizFormUserResponse()
|
||||
{
|
||||
$sql = "SELECT ur.*, mc.code, mc.name, mc.id
|
||||
FROM mm_creative AS mc
|
||||
JOIN mm_bizform_user_response AS ur ON mc.id = ur.creative_id
|
||||
WHERE ur.send_time IS NULL
|
||||
ORDER BY ur.create_time ASC";
|
||||
|
||||
$result = $this->kakao->query($sql);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getFBAdLead()
|
||||
{
|
||||
$sql = "SELECT * FROM fb_ad AS ad
|
||||
JOIN fb_ad_lead as LE on ad.ad_id = LE.ad_id
|
||||
WHERE LE.created_time >= '2018-05-03 10:20:00' and ad.ad_name REGEXP '#[0-9]+' and (LE.send_time IS NULL)
|
||||
ORDER BY LE.created_time ";
|
||||
|
||||
$result = $this->facebook->query($sql)->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getGoogleAdLead()
|
||||
{
|
||||
}
|
||||
|
||||
public function insertEventLeadFacebook($row)
|
||||
{
|
||||
$is_added = false;
|
||||
$age = (integer)$row['age'] ?? (integer)0;
|
||||
$sql = "SELECT * FROM event_leads WHERE event_seq = '{$row['event_seq']}' AND site='{$row['site']}' AND name='{$row['name']}' AND gender='{$row['gender']}' AND age='{$age}' AND phone=enc_data('{$row['phone']}') AND add1='{$row['add1']}' AND add2='{$row['add2']}' AND add3='{$row['add3']}' AND add4='{$row['add4']}' AND add5='{$row['add5']}' AND addr='{$row['addr']}' AND lead_id='{$row['id']}'";
|
||||
$result = $this->zenith->query($sql);
|
||||
$is_added = count($result->getResultArray());
|
||||
if (!$is_added) {
|
||||
$row['name'] = $this->zenith->escape($row['name']);
|
||||
$sql = "INSERT INTO event_leads SET event_seq = '{$row['event_seq']}', site='{$row['site']}', name={$row['name']}, gender='{$row['gender']}', age='{$age}', phone=ENC_DATA('{$row['phone']}'), add1='{$row['add1']}', add2='{$row['add2']}', add3='{$row['add3']}', add4='{$row['add4']}', add5='{$row['add5']}', addr='{$row['addr']}', reg_date='{$row['reg_date']}', is_deleted=0, lead_id='{$row['id']}', status=0, is_encryption=1, reg_timestamp=UNIX_TIMESTAMP(NOW())";
|
||||
$result = $this->zenith->query($sql);
|
||||
if ($result) {
|
||||
$sql = "UPDATE fb_ad_lead SET send_time=now() WHERE id='{$row['id']}'";
|
||||
$result = $this->facebook->query($sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function insertEventLeadKakao($row)
|
||||
{
|
||||
|
||||
$data = [
|
||||
'event_seq' => $row['event_seq'],
|
||||
'site' => $row['site'],
|
||||
'name' => $row['name'],
|
||||
'phone' => new RawSql("enc_data('{$row['phone']}')"),
|
||||
'gender' => $row['gender'],
|
||||
'age' => $row['age'],
|
||||
'addr' => $row['addr'],
|
||||
'email' => $row['email'],
|
||||
'agree' => 'Y',
|
||||
'add1' => $row['add1'],
|
||||
'add2' => $row['add2'],
|
||||
'add3' => $row['add3'],
|
||||
'add4' => $row['add4'],
|
||||
'add5' => $row['add5'],
|
||||
'status' => 0,
|
||||
'is_encryption' => 1,
|
||||
'lead_id' => $row['lead_id'],
|
||||
'reg_date' => date('Y-m-d H:i:s', $row['reg_timestamp']),
|
||||
'reg_timestamp' => new RawSql("UNIX_TIMESTAMP(NOW())")
|
||||
];
|
||||
$builder = $this->zenith->table('event_leads');
|
||||
$builder->set($data);
|
||||
$result = $builder->insert();
|
||||
|
||||
if ($result) {
|
||||
$builder = $this->kakao->table('mm_bizform_user_response');
|
||||
$builder->set('send_time', new RawSql('NOW()'));
|
||||
$builder->where(['encUserId'=>$row['encUserId'], 'bizFormId'=>$row['bizFormId']]);
|
||||
$builder->update();
|
||||
}
|
||||
}
|
||||
|
||||
public function insertEventLeadGoogle($row)
|
||||
{
|
||||
}
|
||||
|
||||
public function getBizformQuestion($bizformId, $itemId)
|
||||
{
|
||||
$sql = "SELECT bizform_id, id, title FROM mm_bizform_items WHERE bizform_id = '{$bizformId}' AND id = '{$itemId}'";
|
||||
$result = $this->kakao->query($sql)->getRowArray();
|
||||
if (!$result) return null;
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,342 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Api;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class CompanyModel extends Model
|
||||
{
|
||||
protected $zenith, $facebook, $google, $kakao;
|
||||
protected $allowedFields = [
|
||||
'type',
|
||||
'name',
|
||||
'nickname',
|
||||
'status',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'deleted_at',
|
||||
];
|
||||
protected $validationRules = [
|
||||
'name' => 'required',
|
||||
];
|
||||
protected $validationMessages = [
|
||||
'name' => [
|
||||
'required' => '이름은 필수 입력사항입니다.',
|
||||
],
|
||||
];
|
||||
protected $skipValidation = false;
|
||||
protected $cleanValidationRules = true;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->zenith = \Config\Database::connect();
|
||||
$this->facebook = \Config\Database::connect('facebook');
|
||||
$this->google = \Config\Database::connect('google');
|
||||
$this->kakao = \Config\Database::connect('kakao');
|
||||
}
|
||||
|
||||
public function getCompanies($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->zenith->table('companies AS c');
|
||||
$builder->select('c.*, ci.company_parent_id as p_id, parent_c.name as p_name');
|
||||
$builder->join('companies_idx AS ci', 'c.id = ci.company_id', 'left');
|
||||
$builder->join('companies AS parent_c', 'parent_c.id = ci.company_parent_id', 'left');
|
||||
$builder->where('c.status !=', 0);
|
||||
if(isset($srch['sdate']) && isset($srch['edate'])){
|
||||
$builder->where('c.created_at >=', $srch['sdate']);
|
||||
$builder->where('c.created_at <=', date('Y-m-d', strtotime($srch['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('c.type', $srch['stx']);
|
||||
$builder->orLike('c.name', $srch['stx']);
|
||||
$builder->orLike('c.nickname', $srch['stx']);
|
||||
$builder->orLike('parent_c.name', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
$builder->groupBy('c.id');
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
// limit 적용한 쿼리
|
||||
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "id 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
|
||||
];
|
||||
}
|
||||
|
||||
public function getCompany($id)
|
||||
{
|
||||
$builder = $this->zenith->table('companies AS c');
|
||||
$builder->select('c.*, GROUP_CONCAT(DISTINCT u.username) as username, ci.company_parent_id as p_id, parent_c.name as p_name');
|
||||
$builder->join('companies_users as cu', 'c.id = cu.company_id', 'left');
|
||||
$builder->join('users as u', 'cu.user_id = u.id', 'left');
|
||||
$builder->join('companies_idx as ci', 'c.id = ci.company_id', 'left');
|
||||
$builder->join('companies as parent_c', 'ci.company_parent_id = parent_c.id', 'left');
|
||||
$builder->where('c.id', $id);
|
||||
$builder->where('c.status !=', 0);
|
||||
$result = $builder->get()->getRowArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getSearchCompanies($stx = NULL)
|
||||
{
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->select('id, name');
|
||||
$builder->where('status !=', 0);
|
||||
if(!empty($stx)){
|
||||
$builder->like('name', $stx);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getSearchAgencies($stx = NULL)
|
||||
{
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->select('id, name');
|
||||
$builder->where('type', '광고대행사');
|
||||
$builder->where('status !=', 0);
|
||||
if(!empty($stx)){
|
||||
$builder->like('name', $stx);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAgencyByName($p_name)
|
||||
{
|
||||
if(empty($p_name)){
|
||||
return false;
|
||||
}
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->select('id, name');
|
||||
$builder->where('type', '광고대행사');
|
||||
$builder->where('status !=', 0);
|
||||
$builder->where('name', $p_name);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCompanyByName($p_name)
|
||||
{
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->select('id, name');
|
||||
$builder->where('status !=', 0);
|
||||
if(!empty($p_name)){
|
||||
$builder->where('name', $p_name);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCompaniesByName($names)
|
||||
{
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->select('id');
|
||||
$builder->where('status !=', 0);
|
||||
$builder->whereIn('name', $names);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createCompany($data, $agency)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder_1 = $this->zenith->table('companies');
|
||||
$builder_1->set('type', $data['type']);
|
||||
$builder_1->set('name', $data['name']);
|
||||
$builder_1->set('nickname', auth()->user()->nickname ?? '');
|
||||
$builder_1->set('status', 1);
|
||||
$result_1 = $builder_1->insert();
|
||||
if(!empty($agency)){
|
||||
$insertId = $this->zenith->insertID();
|
||||
$builder_2 = $this->zenith->table('companies_idx');
|
||||
$newRecord = [
|
||||
'company_id' => $insertId,
|
||||
'company_parent_id' => $agency['id']
|
||||
];
|
||||
$builder_2->insert($newRecord);
|
||||
}
|
||||
|
||||
$result = $this->zenith->transComplete();
|
||||
|
||||
// sql error 구문이 찍히지 않아서 select
|
||||
if($result===false){
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->select('name');
|
||||
$builder->set('name', $data['name']);
|
||||
$cnt = $builder->get()->getNumRows();
|
||||
if($cnt>0) $result = "duplicate";
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setCompany($data, $agency)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder_1 = $this->zenith->table('companies');
|
||||
$builder_1->set('name', $data['name']);
|
||||
$builder_1->where('id', $data['id']);
|
||||
$builder_1->update();
|
||||
|
||||
$builder_2 = $this->zenith->table('companies_idx');
|
||||
$builder_2->where('company_id', $data['id']);
|
||||
$result = $builder_2->get()->getResult();
|
||||
|
||||
if(!empty($agency)){
|
||||
if (empty($result)) {
|
||||
$newRecord = [
|
||||
'company_id' => $data['id'],
|
||||
'company_parent_id' => $agency['id']
|
||||
];
|
||||
$result_2 = $builder_2->insert($newRecord);
|
||||
} else {
|
||||
$builder_2->set('company_parent_id', $agency['id']);
|
||||
$builder_2->where('company_id', $data['id']);
|
||||
$result_2 = $builder_2->update();
|
||||
}
|
||||
}
|
||||
$result = $this->zenith->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function deleteCompany($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('companies');
|
||||
$builder->where('id', $data['id']);
|
||||
$builder->delete();
|
||||
|
||||
$builder = $this->zenith->table('company_adaccounts');
|
||||
$builder->where('company_id', $data['id']);
|
||||
$builder->delete();
|
||||
$result = $this->zenith->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getSearchAdAccounts($stx = NULL)
|
||||
{
|
||||
if(!$this->facebook->tableExists('fb_ad_account') || !$this->google->tableExists('aw_ad_account') || !$this->kakao->tableExists('mm_ad_account')){
|
||||
return false;
|
||||
}
|
||||
|
||||
$facebookBuilder = $this->facebook->table('fb_ad_account');
|
||||
$kakaoBuilder = $this->kakao->table('mm_ad_account');
|
||||
$googleBuilder = $this->google->table('aw_ad_account');
|
||||
|
||||
$facebookBuilder->select('"facebook" AS media, name, ad_account_id AS account_id, status AS status');
|
||||
$facebookBuilder->like('name', $stx);
|
||||
$facebookResult = $facebookBuilder->get()->getResultArray();
|
||||
|
||||
$kakaoBuilder->select('"kakao" AS media, name, id AS account_id, config AS status');
|
||||
$kakaoBuilder->like('name', $stx);
|
||||
$kakaoResult = $kakaoBuilder->get()->getResultArray();
|
||||
|
||||
$googleBuilder->select('"google" AS media, name, , customerId AS account_id, status AS status');
|
||||
$googleBuilder->like('name', $stx);
|
||||
$googleResult = $googleBuilder->get()->getResultArray();
|
||||
|
||||
$mergedResults = array_merge($facebookResult, $kakaoResult, $googleResult);
|
||||
|
||||
return $mergedResults;
|
||||
}
|
||||
|
||||
public function getCompanyAdAccounts($data)
|
||||
{
|
||||
if(!$this->facebook->tableExists('fb_ad_account') || !$this->google->tableExists('aw_ad_account') || !$this->kakao->tableExists('mm_ad_account')){
|
||||
return false;
|
||||
}
|
||||
|
||||
$zenithBuilder = $this->zenith->table('company_adaccounts AS ca');
|
||||
|
||||
$facebookBuilder = clone $zenithBuilder;
|
||||
$facebookBuilder->join('z_facebook.fb_ad_account AS fa', 'ca.ad_account_id = fa.ad_account_id');
|
||||
$facebookBuilder->select('ca.ad_account_id AS accountId, "facebook" AS media, fa.name AS name, fa.status AS status');
|
||||
$facebookBuilder->where('ca.company_id', $data['company_id']);
|
||||
$facebookResult = $facebookBuilder->get()->getResultArray();
|
||||
|
||||
$kakaoBuilder = clone $zenithBuilder;
|
||||
$kakaoBuilder->join('z_moment.mm_ad_account AS ma', 'ca.ad_account_id = ma.id');
|
||||
$kakaoBuilder->select('ca.ad_account_id AS accountId, "kakao" AS media, ma.name AS name, ma.config AS status');
|
||||
$kakaoBuilder->where('ca.company_id', $data['company_id']);
|
||||
$kakaoResult = $kakaoBuilder->get()->getResultArray();
|
||||
|
||||
$googleBuilder = clone $zenithBuilder;
|
||||
$googleBuilder->join('z_adwords.aw_ad_account AS awa', 'ca.ad_account_id = awa.customerId');
|
||||
$googleBuilder->select('ca.ad_account_id AS accountId, "google" AS media, awa.name AS name, awa.status AS status');
|
||||
$googleBuilder->where('ca.company_id', $data['company_id']);
|
||||
$googleResult = $googleBuilder->get()->getResultArray();
|
||||
|
||||
$mergedResults = array_merge($facebookResult, $kakaoResult, $googleResult);
|
||||
return $mergedResults;
|
||||
}
|
||||
|
||||
public function getCompanyAdAccount($data)
|
||||
{
|
||||
$builder = $this->zenith->table('company_adaccounts');
|
||||
$builder->where('company_id', $data['company_id']);
|
||||
$builder->where('ad_account_id', $data['ad_account_id']);
|
||||
$builder->where('media', $data['media']);
|
||||
$result = $builder->get()->getResult();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setCompanyAdAccount($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('company_adaccounts');
|
||||
$newRecord = [
|
||||
'company_id' => $data['company_id'],
|
||||
'ad_account_id' => $data['ad_account_id'],
|
||||
'media' => $data['media']
|
||||
];
|
||||
$builder->insert($newRecord);
|
||||
$result = $this->zenith->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function exceptCompanyAdAccount($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('company_adaccounts');
|
||||
$builder->where('company_id', $data['company_id']);
|
||||
$builder->where('ad_account_id', $data['ad_account_id']);
|
||||
$builder->where('media', $data['media']);
|
||||
$builder->delete();
|
||||
$result = $this->zenith->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Api;
|
||||
|
||||
use CodeIgniter\Shield\Models\UserIdentityModel as ShieldUserIdentityModelModel;
|
||||
|
||||
class IdentityModel extends ShieldUserIdentityModelModel
|
||||
{
|
||||
protected $allowedFields = [
|
||||
'user_id',
|
||||
'type',
|
||||
'name',
|
||||
'secret',
|
||||
'secret2',
|
||||
'expires',
|
||||
'extra',
|
||||
'force_reset',
|
||||
'password_changed_at',
|
||||
'last_used_at',
|
||||
];
|
||||
|
||||
public function setPasswordChangedAt($id, $date)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('auth_identities');
|
||||
$builder->set('password_changed_at', $date);
|
||||
$builder->where('user_id', $id);
|
||||
$builder->where('type', 'email_password');
|
||||
$builder->update();
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
<?php
|
||||
namespace App\Models\Api;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
use CodeIgniter\Shield\Models\UserModel as ShieldUserModel;
|
||||
|
||||
class UserModel extends ShieldUserModel
|
||||
{
|
||||
protected $table = 'users';
|
||||
protected $primaryKey = 'id';
|
||||
|
||||
protected $useTimestaps = true;
|
||||
protected $createdField = 'created_at';
|
||||
protected $updatedField = 'updated_at';
|
||||
protected $deletedField = 'deleted_at';
|
||||
|
||||
protected $allowedFields = [
|
||||
'username',
|
||||
'active',
|
||||
'last_active',
|
||||
'deleted_at',
|
||||
];
|
||||
|
||||
// Validation
|
||||
protected $validationRules = [
|
||||
'username' => 'required',
|
||||
'groups' => 'required',
|
||||
'permission' => 'required',
|
||||
];
|
||||
protected $validationMessages = [
|
||||
'username' => [
|
||||
'required' => '이름은 필수 입력사항입니다.',
|
||||
],
|
||||
'groups' => [
|
||||
'required' => '그룹은 필수 선택사항입니다.',
|
||||
],
|
||||
'permission' => [
|
||||
'required' => '세부 권한은 필수 선택사항입니다.',
|
||||
],
|
||||
];
|
||||
protected $skipValidation = false;
|
||||
protected $cleanValidationRules = true;
|
||||
|
||||
public function getUsers($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('users AS u');
|
||||
$builder->select('c.name AS belong, u.id AS user_id, u.username, u.nickname, ai.secret AS email, u.active as active, GROUP_CONCAT(DISTINCT agu.group) as `groups`, u.created_at');
|
||||
$builder->join('companies_users as cu', 'u.id = cu.user_id', 'left');
|
||||
$builder->join('companies as c', 'c.id = cu.company_id', 'left');
|
||||
$builder->join('auth_identities as ai', 'u.id = ai.user_id', 'left');
|
||||
$builder->join('auth_groups_users as agu', 'u.id = agu.user_id', 'left');
|
||||
$builder->where('u.deleted_at =', NULL);
|
||||
if(isset($srch['sdate']) && isset($srch['edate'])){
|
||||
$builder->where('u.created_at >=', $srch['sdate']);
|
||||
$builder->where('u.created_at <=', date('Y-m-d', strtotime($srch['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('u.username', $srch['stx']);
|
||||
$builder->orLike('c.name', $srch['stx']);
|
||||
$builder->orLike('u.nickname', $srch['stx']);
|
||||
$builder->orLike('ai.secret', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
$builder->groupBy('u.id');
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
// limit 적용한 쿼리
|
||||
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "created_at 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
|
||||
];
|
||||
}
|
||||
|
||||
public function getUser($data)
|
||||
{
|
||||
$builder = $this->db->table('users AS u');
|
||||
$builder->select('cu.company_id AS company_id, c.name AS belong, u.id AS user_id, u.username, u.nickname, up.division, up.team, up.position, ai.secret AS email, u.active, GROUP_CONCAT(DISTINCT agu.group) AS `groups`, GROUP_CONCAT(DISTINCT apu.permission) AS permissions, u.created_at');
|
||||
$builder->join('companies_users as cu', 'u.id = cu.user_id', 'left');
|
||||
$builder->join('companies as c', 'c.id = cu.company_id', 'left');
|
||||
$builder->join('auth_identities as ai', 'u.id = ai.user_id', 'left');
|
||||
$builder->join('auth_groups_users as agu', 'u.id = agu.user_id', 'left');
|
||||
$builder->join('auth_permissions_users as apu', 'u.id = apu.user_id', 'left');
|
||||
$builder->join('users_department AS up', 'u.id = up.user_id', 'left');
|
||||
$builder->where('u.id', $data['user_id']);
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getSearchUsers($data)
|
||||
{
|
||||
$builder = $this->db->table('users');
|
||||
$builder->select('id, username, nickname');
|
||||
if(!empty($data['stx'])){
|
||||
$builder->like('username', $data['stx']);
|
||||
$builder->orLike('nickname', $data['stx']);
|
||||
$builder->limit(10);
|
||||
}
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getBelongUsers($companyId)
|
||||
{
|
||||
$builder = $this->db->table('users AS u');
|
||||
$builder->select('u.id, u.username, u.nickname, u.created_at');
|
||||
$builder->join('companies_users as cu', 'u.id = cu.user_id', 'left');
|
||||
$builder->where('cu.company_id', $companyId);
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getBelongUser($data)
|
||||
{
|
||||
$builder = $this->db->table('companies_users');
|
||||
$builder->select('company_id, user_id');
|
||||
$builder->where('user_id', $data['user_id']);
|
||||
$builder->where('company_id', $data['company_id']);
|
||||
$result = $builder->get()->getResult();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setUser($data)
|
||||
{
|
||||
$user = $this->findById($data['user_id']);
|
||||
$this->db->transStart();
|
||||
if(isset($data['active'])){
|
||||
$builder_1 = $this->db->table('users');
|
||||
$builder_1->set('active', $data['active']);
|
||||
$builder_1->where('id', $data['user_id']);
|
||||
$builder_1->update();
|
||||
}
|
||||
|
||||
if(!empty($data['company_id'])){
|
||||
$builder_2 = $this->db->table('companies_users');
|
||||
$builder_2->where('company_id', $data['company_id']);
|
||||
$builder_2->where('user_id', $data['user_id']);
|
||||
$result = $builder_2->get()->getResult();
|
||||
|
||||
if(empty($result)){
|
||||
$newRecord = [
|
||||
'company_id' => $data['company_id'],
|
||||
'user_id' => $data['user_id']
|
||||
];
|
||||
$builder_2->insert($newRecord);
|
||||
}
|
||||
$builder_2->set('company_id', $data['company_id']);
|
||||
$builder_2->where('company_id', $data['company_id']);
|
||||
$builder_2->where('user_id', $data['user_id']);
|
||||
$builder_2->update();
|
||||
}
|
||||
|
||||
if(empty($data['company_name'])){
|
||||
$builder_2 = $this->db->table('companies_users');
|
||||
$builder_2->where('user_id', $data['user_id']);
|
||||
$builder_2->delete();
|
||||
}
|
||||
|
||||
|
||||
if(!empty($data['group'])){
|
||||
if ($user->inGroup('superadmin')) {
|
||||
array_push($data['group'], 'superadmin');
|
||||
}
|
||||
$user->syncGroups(...$data['group']);
|
||||
}else{
|
||||
$groups = array_values($user->getGroups());
|
||||
if ($user->inGroup('superadmin')) {
|
||||
$user->removeGroup('admin', 'developer', 'user', 'agency', 'advertiser', 'guest');
|
||||
}else{
|
||||
$user->removeGroup(...$groups);
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($data['permission'])){
|
||||
$user->syncPermissions(...$data['permission']);
|
||||
}else{
|
||||
$permissions = array_values($user->getPermissions());
|
||||
$user->removePermission(...$permissions);
|
||||
}
|
||||
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setBelongUser($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('companies_users');
|
||||
$newRecord = [
|
||||
'company_id' => $data['company_id'],
|
||||
'user_id' => $data['user_id'],
|
||||
];
|
||||
$builder->insert($newRecord);
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function exceptBelongUser($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('companies_users');
|
||||
$builder->where('user_id', $data['user_id']);
|
||||
$builder->where('company_id', $data['company_id']);
|
||||
$builder->delete();
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getUserByName($name)
|
||||
{
|
||||
$builder = $this->db->table('users AS u');
|
||||
$builder->select('u.id, u.username, u.nickname, ai.secret as email, u.created_at');
|
||||
$builder->join('auth_identities as ai', 'u.id = ai.user_id', 'left');
|
||||
$builder->join('auth_groups_users as agu', 'u.id = agu.user_id', 'left');
|
||||
$builder->where('u.nickname', $name);
|
||||
$builder->where('ai.type', 'email_password');
|
||||
$builder->where('agu.`group`', 'user');
|
||||
$result = $builder->get()->getRowArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,279 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
use App\Libraries\SMS;
|
||||
|
||||
class AdvertiserModel extends Model
|
||||
{
|
||||
public function getAdvertisers($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('(SELECT info.seq AS info_seq, adv.*, SUM(db.db_count) as db_count, SUM(db.db_count)* info.db_price as price
|
||||
FROM event_advertiser AS adv
|
||||
LEFT JOIN event_information AS info ON info.advertiser = adv.seq
|
||||
LEFT JOIN event_leads_count AS db ON db.seq = info.seq AND db.date BETWEEN LAST_DAY(NOW() - interval 1 month) + interval 1 DAY AND LAST_DAY(NOW())
|
||||
WHERE 1
|
||||
GROUP BY adv.seq, info.seq, db.seq
|
||||
ORDER BY adv.seq DESC) AS advertiser');
|
||||
$builder->select('advertiser.*, COUNT(advertiser.info_seq) AS total, SUM(advertiser.db_count) AS sum_db, SUM(advertiser.price) AS sum_price, (advertiser.account_balance - SUM(advertiser.price)) as remain_balance');
|
||||
$builder->groupBy('advertiser.seq');
|
||||
|
||||
if (!empty($srch['stx'])) {
|
||||
$builder->groupStart();
|
||||
$builder->like('advertiser.name', $srch['stx']);
|
||||
$builder->orLike('advertiser.agent', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
// limit 적용하지 않은 쿼리
|
||||
$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[] = "advertiser.seq desc";
|
||||
$builder->orderBy(implode(",", $orderBy), '', true);
|
||||
if (isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getAdvertiser($data)
|
||||
{
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('*');
|
||||
$builder->where('seq', $data['seq']);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAdvertiserByName($data)
|
||||
{
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('*');
|
||||
$builder->where('name', $data['name']);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCompanies($stx)
|
||||
{
|
||||
$builder = $this->db->table('companies');
|
||||
$builder->select('*');
|
||||
$builder->like('name', $stx);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getOverwatchByAdvertiser($seq)
|
||||
{
|
||||
$builder = $this->db->table('event_overwatch');
|
||||
$builder->select('*');
|
||||
$builder->where('advertiser', $seq);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getMedia($data)
|
||||
{
|
||||
$subBuilder = $this->db->table('event_information');
|
||||
$subBuilder->select('media');
|
||||
$subBuilder->where('advertiser', $data['seq']);
|
||||
$subResult = $subBuilder->getCompiledSelect();
|
||||
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('*');
|
||||
$builder->where("seq IN($subResult)");
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createAdv($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->insert($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateAdv($data, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function evtOverwatch()
|
||||
{
|
||||
$fp = fopen(WRITEPATH.'/logs/sms_log', 'w');
|
||||
$logText = '---------------------------'."\n";
|
||||
$logText .= '요청 시간: '.date('Y-m-d H:i:s')."\n";
|
||||
|
||||
$monitor = []; // $monitor[휴대폰번호][seq] = 메세지
|
||||
$update_sql = [];
|
||||
$contact_check_by_media = []; // $contact_check_by_media[seq][media] = date('Y-m-d')
|
||||
|
||||
$builder = $this->db->table('event_overwatch');
|
||||
$builder->select("*");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
for ($i = 0; $i < count($result); $i++) {
|
||||
$media = json_decode($result[$i]['watch_list'], true);
|
||||
$last_send = json_decode($result[$i]['last_send'] ?? '', true);
|
||||
if ($result[$i]['watch_all'] != NULL && $result[$i]['watch_all'] > 0) {
|
||||
|
||||
if ($last_send && array_key_exists('all', $last_send) && $last_send['all'] == date('Y-m-d')) continue; // 해당 당일자 알림 이력이 있으면 passvar_dump($result[$i]);
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->select('seq');
|
||||
$builder->where('advertiser', $result[$i]['advertiser']);
|
||||
$ei_result = $builder->get()->getResultArray();
|
||||
|
||||
$ei_arr = array();
|
||||
for ($num = 0; $num < count($ei_result); $num++) {
|
||||
$ei_arr[$num] = $ei_result[$num]['seq'];
|
||||
}
|
||||
|
||||
$builder = $this->db->table('event_leads');
|
||||
$builder->select('event_seq, count(seq) AS count');
|
||||
$builder->whereIn('event_seq', $ei_arr);
|
||||
$builder->where('status', 1);
|
||||
$builder->where('reg_date >= ', date('Y-m-d 00:00:00'));
|
||||
$builder->where('reg_date <= ', date('Y-m-d 23:59:59'));
|
||||
$cnt = $builder->get()->getResultArray();
|
||||
|
||||
if ($cnt[0]['count'] >= $result[$i]['watch_all']) {
|
||||
$logText .= 'event_advertiser seq : '.$result[$i]['advertiser'].' === watch_all o , 목표 수량 표기 check o, count check o ==='."\n";
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('name');
|
||||
$builder->where('seq', $result[$i]['advertiser']);
|
||||
$tmp_result = $builder->get()->getResultArray();
|
||||
$message = "[{$tmp_result[0]['name']}]{$cnt[0]['count']}건으로 전체 목표 수량 도달하였습니다.\n";
|
||||
|
||||
// 전화번호 별 sms 배열
|
||||
$contact_array = explode(';', $result[$i]['contact']);
|
||||
for ($j = 0; $j < sizeof($contact_array); $j++) {
|
||||
if ($contact_array[$j]) $monitor[$contact_array[$j]][$result[$i]['seq']] = $message;
|
||||
}
|
||||
|
||||
// seq 별 발송 내역 배열
|
||||
$contact_check_by_media[$result[$i]['seq']] = $last_send;
|
||||
$contact_check_by_media[$result[$i]['seq']]['all'] = date('Y-m-d');
|
||||
}
|
||||
} else {
|
||||
foreach ($media as $key => $val) {
|
||||
if ($val == 0) continue; // 목표 DB 수량 미표기 시 pass
|
||||
if ($last_send && array_key_exists($key, $last_send) && $last_send[$key] == date('Y-m-d')) continue; // 해당 매체의 당일자 알림 이력이 있으면 pass
|
||||
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->select('seq');
|
||||
$builder->where('advertiser', $result[$i]['advertiser']);
|
||||
$builder->where('media', $key);
|
||||
$ei_result = $builder->get()->getResultArray();
|
||||
|
||||
$ei_arr = array();
|
||||
for ($num = 0; $num < count($ei_result); $num++) {
|
||||
$ei_arr[$num] = $ei_result[$num]['seq'];
|
||||
}
|
||||
|
||||
$builder = $this->db->table('event_leads');
|
||||
$builder->select('event_seq, count(seq) AS count');
|
||||
$builder->whereIn('event_seq', $ei_arr);
|
||||
$builder->where('status', 1);
|
||||
$builder->where('reg_date >= ', date('Y-m-d 00:00:00'));
|
||||
$builder->where('reg_date <= ', date('Y-m-d 23:59:59'));
|
||||
$cnt = $builder->get()->getResultArray();
|
||||
|
||||
if ($cnt[0]['count'] >= $val) {
|
||||
$logText .= 'event_advertiser seq : '.$result[$i]['advertiser'].'watch_all x , 목표 수량 표기 check o, count check o'."\n";
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('name');
|
||||
$builder->where('seq', $result[$i]['advertiser']);
|
||||
$tmp_result = $builder->get()->getResultArray();
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('media');
|
||||
$builder->where('seq', $key);
|
||||
$med = $builder->get()->getResultArray();
|
||||
$message = "[{$tmp_result[0]['name']}][{$med[0]['media']}][{$cnt[0]['count']}]\n";
|
||||
|
||||
// 전화번호 별 sms 배열
|
||||
$contact_array = explode(';', $result[$i]['contact']);
|
||||
for ($j = 0; $j < sizeof($contact_array); $j++) {
|
||||
if ($contact_array[$j]) $monitor[$contact_array[$j]][$result[$i]['seq']] = $message;
|
||||
}
|
||||
// seq 별 발송 내역 배열
|
||||
$contact_check_by_media[$result[$i]['seq']] = $last_send;
|
||||
$contact_check_by_media[$result[$i]['seq']][$key] = date('Y-m-d');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$logText .= '생성 리스트: '.json_encode($monitor, JSON_UNESCAPED_UNICODE)."\n";
|
||||
|
||||
$l = 0;
|
||||
foreach ($monitor as $key => $val) {
|
||||
$msg = '';
|
||||
foreach ($val as $k => $v) {
|
||||
$last_send_txt = json_encode($contact_check_by_media[$k]);
|
||||
$builder = $this->db->table('event_overwatch');
|
||||
$setData = [
|
||||
'last_contact' => date('Y-m-d H:i:s'),
|
||||
'last_send' => $last_send_txt,
|
||||
];
|
||||
$builder->set($setData);
|
||||
$builder->where('seq', $k);
|
||||
$upd = $builder->getCompiledUpdate();
|
||||
|
||||
$data[$l] = [
|
||||
'last_contact' => date('Y-m-d H:i:s'),
|
||||
'last_send' => $last_send_txt,
|
||||
'seq' => $k,
|
||||
];
|
||||
|
||||
if (array_search($upd, $update_sql) === false) array_push($update_sql, $upd);
|
||||
$msg .= $v;
|
||||
$l++;
|
||||
$logText .= "문자 내용[{$l}]: ".$msg."\n";
|
||||
}
|
||||
|
||||
$strDest = array($key); // 문자 수신번호 배열
|
||||
$nCount = 1; // 문자 수신번호 갯수
|
||||
// 문자 발송에 필요한 항목을 배열에 추가
|
||||
$sms_result = SMS::Add($strDest, '01040010000', '', '', '', $msg, '', $nCount);
|
||||
// 패킷이 정상적이라면 발송에 시도합니다.
|
||||
if (!$sms_result = SMS::Send()) {
|
||||
$logText .= '문자전송 실패: '.date('Y-m-d H:i:s').PHP_EOL."\n";
|
||||
}
|
||||
}
|
||||
if (isset($data)) {
|
||||
$builder->updateBatch($data, 'seq');
|
||||
}
|
||||
|
||||
$logText .= 'update sql: '.json_encode($update_sql, JSON_UNESCAPED_UNICODE)."\n";
|
||||
$logText .= '데이터: '.json_encode($data, JSON_UNESCAPED_UNICODE)."\n";
|
||||
$logText .= '요청 종료 시간: '.date('Y-m-d H:i:s')."\n";
|
||||
fwrite($fp, print_r($logText,true).PHP_EOL);
|
||||
fclose($fp);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class BlackListModel extends Model
|
||||
{
|
||||
public function getBlackLists($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->select('*');
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->like('data', $srch['stx']);
|
||||
$builder->orLike('memo', $srch['stx']);
|
||||
}
|
||||
|
||||
// limit 적용하지 않은 쿼리
|
||||
$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[] = "datetime desc";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if(isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getBlackList($data)
|
||||
{
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->select('*');
|
||||
$builder->where('seq', $data);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createBlackList($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->insert($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function deleteBlackList($seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->delete();
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ChangeModel extends Model
|
||||
{
|
||||
public function getChanges($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->select('*, COUNT(id) AS total');
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('id', $srch['stx']);
|
||||
$builder->orLike('name', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
$builder->groupBy('id');
|
||||
// limit 적용하지 않은 쿼리
|
||||
$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[] = "ec_datetime desc";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if(isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getChange($id)
|
||||
{
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->select('*');
|
||||
$builder->where('id', $id);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createChange($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->insert($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateChange($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->set('id', $data['id']);
|
||||
$builder->set('name', $data['name']);
|
||||
$builder->set('token', $data['token']);
|
||||
if($data['old_id'] != $data['id']){
|
||||
$builder->where('id', $data['old_id']);
|
||||
}else{
|
||||
$builder->where('id', $data['id']);
|
||||
}
|
||||
$builder->update();
|
||||
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class EventModel extends Model
|
||||
{
|
||||
protected $facebook, $google, $kakao;
|
||||
public function __construct()
|
||||
{
|
||||
$this->db = \Config\Database::connect();
|
||||
$this->facebook = \Config\Database::connect('facebook');
|
||||
$this->google = \Config\Database::connect('google');
|
||||
$this->kakao = \Config\Database::connect('kakao');
|
||||
}
|
||||
|
||||
public function getInformation($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_information AS info');
|
||||
$builder->select('IFNULL(db.db_count, 0) AS db, adv.name AS advertiser_name, med.media AS media_name, SUM(imp.impressions) AS impressions, info.*');
|
||||
$builder->join('event_advertiser AS adv', 'info.advertiser = adv.seq', 'left');
|
||||
$builder->join('event_media AS med', 'info.media = med.seq', 'left');
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->join('event_keyword_idx AS eki', 'eki.ei_seq = info.seq', 'left');
|
||||
$builder->join('event_keyword AS ek', 'ek.seq = eki.ek_seq', 'left');
|
||||
}
|
||||
$builder->join('(SELECT seq, SUM(db_count) AS db_count FROM event_leads_count GROUP BY seq) AS db', 'info.seq = db.seq', 'left');
|
||||
$builder->join('event_impressions_history AS imp', 'info.seq = imp.seq', 'left');
|
||||
|
||||
if(!empty($srch['sdate']) && !empty($srch['edate'])){
|
||||
$builder->where('info.ei_datetime >=', $srch['sdate']);
|
||||
$builder->where('info.ei_datetime <', date('Y-m-d', strtotime($srch['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$stx[] = $srch['stx'];
|
||||
if(preg_match('/\s/', $srch['stx']))
|
||||
$stx = @explode(" ", $srch['stx']);
|
||||
foreach($stx as $v) {
|
||||
$builder->orLike('ek.keyword', trim($v));
|
||||
$builder->orLike('info.title', trim($v));
|
||||
$builder->orLike('adv.name', trim($v));
|
||||
$builder->orLike('med.media', trim($v));
|
||||
$builder->orLike('info.description', trim($v));
|
||||
$builder->orLike('info.seq', trim($v));
|
||||
}
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('info.seq');
|
||||
|
||||
// limit 적용하지 않은 쿼리
|
||||
$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[] = "info.seq DESC";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if($data['length'] > 0) $builder->limit($data['length'], $data['start']);
|
||||
// exit($builder->getCompiledSelect());
|
||||
// 결과 반환
|
||||
$_result = $builder->get();
|
||||
$result = $_result->getResultArray();
|
||||
//->getResultArray();
|
||||
// var_dump($builderNoLimit->countAll()); exit;
|
||||
$resultNoLimit = $builderNoLimit->countAll();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getInformationAll()
|
||||
{
|
||||
$builder = $this->db->table('event_information AS info');
|
||||
$builder->select('*');
|
||||
$builder->where('(designer IS NULL OR designer = "") OR (developer IS NULL OR developer = "")');
|
||||
$builder->orderBy('seq', 'desc');
|
||||
$builder->limit(200);
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getIssuesFromMantis()
|
||||
{
|
||||
$builder = $this->db->table('mantis.mantis_bug_table AS A');
|
||||
$builder->select('A.id, B.text, D.realname AS developer, C.value AS designer');
|
||||
$builder->join('mantis.mantis_custom_field_string_table AS B', 'A.id = B.bug_id AND B.field_id = "20" AND B.text LIKE "%//%"', 'left');
|
||||
$builder->join('mantis.mantis_custom_field_string_table AS C', 'A.id = C.bug_id AND C.field_id = "10"', 'left');
|
||||
$builder->join('mantis.mantis_user_table AS D', 'A.handler_id = D.id', 'left');
|
||||
$builder->where('B.text IS NOT NULL');
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEnabledAds()
|
||||
{
|
||||
// if($this->facebook->getConnection() == false || $this->google->getConnection() == false || $this->kakao->getConnection() == false) return false;
|
||||
if(null === ($result = cache("getEnabledAds"))) {
|
||||
$fbSubQuery = $this->db->table('z_facebook.fb_ad AS ad');
|
||||
$fbSubQuery->select('ad.ad_name AS name, cr.link AS link');
|
||||
$fbSubQuery->join('z_facebook.fb_adcreative AS cr', 'cr.ad_id = ad.ad_id', 'left');
|
||||
$fbSubQuery->where('ad.effective_status', 'ACTIVE');
|
||||
$fbSubQuery->groupStart();
|
||||
$fbSubQuery->like('ad.ad_name', '#');
|
||||
$fbSubQuery->orLike('ad.code', '#');
|
||||
$fbSubQuery->orGroupStart();
|
||||
$fbSubQuery->where('cr.link !=', '');
|
||||
$fbSubQuery->groupEnd();
|
||||
$fbSubQuery->groupEnd();
|
||||
|
||||
$awSubQuery = $this->db->table('z_adwords.aw_ad AS ad');
|
||||
$awSubQuery->select("IF(INSTR(code, '#')>0, ad.code, ad.name) AS name, ad.finalUrl AS link");
|
||||
$awSubQuery->join('z_adwords.aw_adgroup AS ag', 'ad.adgroupId = ag.id', 'left');
|
||||
$awSubQuery->join('z_adwords.aw_campaign AS ac', 'ag.campaignId = ac.id', 'left');
|
||||
$awSubQuery->where('ad.status', 'ENABLED');
|
||||
$awSubQuery->where('ag.status', 'ENABLED');
|
||||
$awSubQuery->where('ac.status', 'ENABLED');
|
||||
$awSubQuery->groupStart();
|
||||
$awSubQuery->like('ad.name', '#');
|
||||
$awSubQuery->orLike('ad.code', '#');
|
||||
$awSubQuery->orGroupStart();
|
||||
$awSubQuery->where('ad.finalUrl !=', '');
|
||||
$awSubQuery->groupEnd();
|
||||
$awSubQuery->groupEnd();
|
||||
|
||||
$mmSubQuery = $this->db->table('z_moment.mm_creative AS ad');
|
||||
$mmSubQuery->select('ad.name, ad.landingUrl AS link');
|
||||
$mmSubQuery->join('z_moment.mm_adgroup AS ag', 'ad.adgroup_id = ag.id', 'left');
|
||||
$mmSubQuery->join('z_moment.mm_campaign AS ac', 'ag.campaign_id = ac.id', 'left');
|
||||
$mmSubQuery->where('ad.config', 'ON');
|
||||
$mmSubQuery->where('ag.config', 'ON');
|
||||
$mmSubQuery->where('ac.config', 'ON');
|
||||
$mmSubQuery->groupStart();
|
||||
$mmSubQuery->like('ad.name', '#');
|
||||
$mmSubQuery->orLike('ad.code', '#');
|
||||
$mmSubQuery->orGroupStart();
|
||||
$mmSubQuery->where('ad.landingUrl !=', '');
|
||||
$mmSubQuery->groupEnd();
|
||||
$mmSubQuery->groupEnd();
|
||||
|
||||
$fbSubQuery->union($awSubQuery)->union($mmSubQuery);
|
||||
$resultQuery = $this->db->newQuery()->fromSubquery($fbSubQuery, 'tb');
|
||||
$resultQuery->where("tb.name REGEXP('^.*#([0-9]+).*') OR tb.link REGEXP('.+(kr|com|event)\/([0-9]+)')");
|
||||
$result = $resultQuery->get()->getResultArray();
|
||||
cache()->save("getEnabledAds", $result, 1800); //save to cache
|
||||
}
|
||||
|
||||
foreach($result as $row) {
|
||||
if(preg_match('/^.+(kr|com|event)\/([0-9]{3,6})(\?.+)?$/', $row['link'])) {
|
||||
$data[] = preg_replace('/^.+(kr|com|event)\/([0-9]{3,6})(\?.+)?/', '$2', $row['link']);
|
||||
} else if(preg_match('/^.*\#([0-9]+).*/', $row['name'])) {
|
||||
$data[] = preg_replace('/^.*\#([0-9]+).*/', '$1', $row['name']);
|
||||
}
|
||||
}
|
||||
|
||||
$data = array_unique($data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getAdv($stx)
|
||||
{
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('seq as id, name as value');
|
||||
if(!empty($stx)){
|
||||
$builder->like('name', $stx);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getMedia($stx)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('seq as id, media as value');
|
||||
if(!empty($stx)){
|
||||
$builder->like('media', $stx);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createEvent($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$keyword = $data['keyword'];
|
||||
unset($data['keyword']);
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->insert($data);
|
||||
$seq = $this->db->insertID();
|
||||
$event = $builder->getWhere(['seq' => $seq])->getRowArray();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
if(!empty($event)){
|
||||
$this->syncKeyword($keyword, $event['seq']);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
public function updateEvent($data, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$keyword = $data['keyword'];
|
||||
unset($data['keyword']);
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
$result = $this->db->transComplete();
|
||||
if($result){
|
||||
$this->syncKeyword($keyword, $seq);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateEventWorker($data, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function copyEvent($seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$data = $this->db->table('event_information')->select('advertiser, media, lead, title, description, subtitle, object, object_items, interlock, partner_id, partner_name, paper_code, paper_name, pixel_id, view_script, done_script, db_price, check_gender, check_age_min, check_age_max, duplicate_term, check_phone, check_name, check_cookie, custom')
|
||||
->where('seq', $seq)
|
||||
->get()->getRowArray();
|
||||
|
||||
$data['is_stop'] = 0;
|
||||
$data['username'] = auth()->user()->nickname;
|
||||
$data['ei_datetime'] = date('Y-m-d H:i:s');
|
||||
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->insert($data);
|
||||
$insert_id = $this->db->insertID();
|
||||
$result = $this->db->transComplete();
|
||||
if($result) {
|
||||
return $insert_id;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEvent($seq)
|
||||
{
|
||||
$builder = $this->db->table('event_information AS info');
|
||||
$builder->select('info.*, adv.name AS advertiser_name, med.media AS media_name, GROUP_CONCAT(ek.keyword) AS keywords');
|
||||
$builder->join('event_advertiser AS adv', 'info.advertiser = adv.seq', 'left');
|
||||
$builder->join('event_media AS med', 'info.media = med.seq', 'left');
|
||||
$builder->join('event_keyword_idx AS ki', 'info.seq = ki.ei_seq', 'left');
|
||||
$builder->join('event_keyword AS ek', 'ki.ek_seq = ek.seq', 'left');
|
||||
$builder->where('info.seq', $seq);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEventImpressions($seq)
|
||||
{
|
||||
$builder = $this->db->table('event_impressions_history');
|
||||
$builder->select('seq, code, site, SUM(impressions) AS impressions');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->groupBy(['seq', 'code', 'site']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function deleteEvent($seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->where('seq', $seq);
|
||||
$result = $builder->delete();
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function syncKeyword($keywords, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder_3 = $this->db->table('event_keyword_idx');
|
||||
$builder_3->where('ei_seq', $seq);
|
||||
$builder_3->delete();
|
||||
if(!empty($keywords)){
|
||||
$keywords = explode(',', $keywords);
|
||||
foreach ($keywords as $keyword) {
|
||||
$builder_1 = $this->db->table('event_keyword');
|
||||
$builder_1->select('seq, keyword');
|
||||
$builder_1->where('keyword', $keyword);
|
||||
$existRow = $builder_1->get()->getRowArray();
|
||||
|
||||
if(empty($existRow)){
|
||||
$builder_2 = $this->db->table('event_keyword');
|
||||
$builder_2->set('keyword', $keyword);
|
||||
$builder_2->insert();
|
||||
$existRow = $builder_2->getWhere(['seq' => $this->db->insertID()])->getRowArray();
|
||||
}
|
||||
|
||||
$builder_4 = $this->db->table('event_keyword_idx');
|
||||
$builder_4->set('ei_seq', $seq);
|
||||
$builder_4->set('ek_seq', $existRow['seq']);
|
||||
$builder_4->insert();
|
||||
|
||||
}
|
||||
}
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ExcelModel extends Model
|
||||
{
|
||||
public function status_check($name, $phone, $landing_no)
|
||||
{
|
||||
$status = 1;
|
||||
$msg = '';
|
||||
|
||||
// NAME CHECK
|
||||
if (preg_match('/(테스트|테스트|test)/i', $name)) { //테스트 체크
|
||||
$status = 7;
|
||||
$msg = '테스트';
|
||||
} else {
|
||||
$builder = $this->db->table('app_subscribe');
|
||||
$builder->select('eid');
|
||||
$builder->where('group_id', $landing_no);
|
||||
$builder->where('name', $name);
|
||||
$builder->where('deleted', 0);
|
||||
$builder->where('status !=', 0);
|
||||
|
||||
$name_result = $$builder->get();
|
||||
|
||||
if ($name_result->getNumRows()) {
|
||||
$status = 2;
|
||||
$msg = '이름 중복';
|
||||
}
|
||||
}
|
||||
// RESULT CHECK
|
||||
if ($status != 1) {
|
||||
$data = ['status' => $status, 'status_memo' => $msg];
|
||||
return $data;
|
||||
}
|
||||
|
||||
//PHONE CHECK
|
||||
$number = substr($phone, 3, 8);
|
||||
if (!preg_match('/^[\d]{11}$/', $phone)) {
|
||||
$status = 6;
|
||||
$msg = '전화번호 길이 불량';
|
||||
} else if (in_array($number, ['00000000', '11111111', '22222222', '33333333', '44444444', '55555555', '66666666', '77777777', '88888888', '99999999'])) {
|
||||
$status = 6;
|
||||
$msg = '8자리 같은번호';
|
||||
} else {
|
||||
$phone_sql = "SELECT eid FROM app_subscribe WHERE group_id = '$landing_no' AND phone = enc_data('$phone') AND deleted = 0 AND status <> 0 ";
|
||||
$phone_result = $this->db->query($phone_sql);
|
||||
if ($phone_result->db->num_rows) {
|
||||
$status = 2;
|
||||
$msg = '전화번호 중복';
|
||||
}
|
||||
}
|
||||
// RESULT CHECK
|
||||
if ($status != 1) {
|
||||
$data = ['status' => $status, 'status_memo' => $msg];
|
||||
return $data;
|
||||
}
|
||||
|
||||
$data = ['status' => $status, 'status_memo' => $msg];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class MediaModel extends Model
|
||||
{
|
||||
public function getMedias($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_media AS med');
|
||||
$builder->select('med.*, COUNT(info.seq) AS total');
|
||||
$builder->join('event_information AS info', 'info.media = med.seq', 'left');
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('med.media', $srch['stx']);
|
||||
$builder->orLike('med.target', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
$builder->groupBy('med.seq');
|
||||
// limit 적용하지 않은 쿼리
|
||||
$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[] = "med.seq desc";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if(isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getMedia($data)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('*');
|
||||
$builder->where('seq', $data['seq']);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createMedia($data)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->insert($data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function updateMedia($data, $seq)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\HumanResource;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
use CodeIgniter\I18n\Time;
|
||||
use Mpdf\Tag\P;
|
||||
|
||||
class HumanResourceModel extends Model
|
||||
{
|
||||
protected $zenith, $gwdb;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->zenith = \Config\Database::connect();
|
||||
$this->gwdb = \Config\Database::connect('gwdb');
|
||||
}
|
||||
|
||||
public function getMemberList()
|
||||
{
|
||||
$builder = $this->zenith->table('users as usr');
|
||||
$builder->select('usr.*, ai.secret, up.*');
|
||||
$builder->join('auth_identities as ai', 'usr.id = ai.user_id AND ai.type = "email_password"', 'left');
|
||||
$builder->join('users_department as up', 'usr.id = up.user_id');
|
||||
$builder->groupBy('usr.id');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getUserByEmail($email)
|
||||
{
|
||||
$builder = $this->zenith->table('users as usr');
|
||||
$builder->select('usr.*, ai.secret, up.*');
|
||||
$builder->join('auth_identities as ai', 'usr.id = ai.user_id AND ai.type = "email_password"', 'left');
|
||||
$builder->join('users_department as up', 'usr.id = up.user_id', 'left');
|
||||
$builder->where('ai.secret', $email);
|
||||
$builder->groupBy('usr.id');
|
||||
$result = $builder->get()->getRowArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateUserByEmail($data)
|
||||
{
|
||||
$usr = $this->getUserByEmail($data['email']);
|
||||
if (is_null($usr)) return;
|
||||
if (is_null($usr)) return;
|
||||
$name = $data['name'];
|
||||
$data = [
|
||||
'user_id' => $usr['id'],
|
||||
'division' => $data['division'],
|
||||
'team' => $data['team'],
|
||||
'position' => $data['position']
|
||||
];
|
||||
$builder = $this->zenith->table('users_department');
|
||||
$builder->setData($data)->upsert();
|
||||
$builder = $this->zenith->table('users');
|
||||
$result = $builder->set('nickname', $name)->where('id', $usr['id'])->update();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getHourTicketUse()
|
||||
{
|
||||
$builder = $this->zenith->table('chainsaw_old.hourticket_use AS hu');
|
||||
$builder->select('mem.mb_email AS email, mem.mb_name AS name, mem.hourticket_issue, mem.hourticket_use, (mem.hourticket_issue - mem.hourticket_use) as remain, hu.*');
|
||||
$builder->join('chainsaw_old.g5_member AS mem', 'hu.mb_id = mem.mb_id');
|
||||
$builder->where('hu.date >= DATE_SUB(NOW(), INTERVAL 2 DAY)');
|
||||
$builder->orderBy("hu.seq", "DESC");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function gwData()
|
||||
{
|
||||
$builder = $this->zenith->table("users AS u");
|
||||
$builder->join("users_department AS ud", "u.id=ud.user_id", "left");
|
||||
$builder->join("users_groupware AS ug", "u.id=ug.user_id", "left");
|
||||
$builder->select('*');
|
||||
$builder->where("u.nickname IS NOT NULL", NULL, FALSE);
|
||||
|
||||
$builder->groupStart();
|
||||
$builder->where("ud.user_id IS NULL", NULL, FALSE);
|
||||
$builder->orWhere("ug.gw_user IS NULL", NULL, FALSE);
|
||||
$builder->groupEnd();
|
||||
|
||||
$dvList = $builder->get()->getNumRows();
|
||||
|
||||
if ($dvList > 0) {
|
||||
$builder = $this->gwdb->table("v_user_info");
|
||||
$builder->select("emp_seq, email_addr, SUBSTRING_INDEX(emp_name, '_', -1) AS emp_name, path_name ");
|
||||
$builder->where("work_status <> ", "001");
|
||||
$builder->like("path_name", "DM 사업부%");
|
||||
$builder->orderBy("CAST(emp_seq AS int)");
|
||||
$gwDvList = $builder->get()->getResultArray();
|
||||
|
||||
$not_members = [2315, 2418, 2416, 2419, 2508, 2123, 2127, 2411];
|
||||
|
||||
for ($i = 0; $i < count($gwDvList); $i++) {
|
||||
if (!in_array($gwDvList[$i]['emp_seq'], $not_members)) {
|
||||
$builder = $this->zenith->table("users");
|
||||
$builder->select("id");
|
||||
$builder->like("nickname", "{$gwDvList[$i]['emp_name']}");
|
||||
$selectUserID = $builder->get()->getResultArray();
|
||||
|
||||
// gw_user insert
|
||||
$builder = $this->zenith->table("users_groupware");
|
||||
$builder->select("*");
|
||||
$builder->where("user_id", $selectUserID[0]['id']);
|
||||
$ugselect = $builder->get()->getNumRows();
|
||||
|
||||
if($ugselect==0) {
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table("users_groupware");
|
||||
$builder->set("user_id", $selectUserID[0]["id"]);
|
||||
$builder->set("gw_user", $gwDvList[$i]['emp_seq']);
|
||||
$builder->insert();
|
||||
$this->zenith->transComplete();
|
||||
}
|
||||
|
||||
$builder = $this->zenith->table("users_department");
|
||||
$builder->select("*");
|
||||
$builder->where("user_id", $selectUserID[0]['id']);
|
||||
$gdselect = $builder->get()->getNumRows();
|
||||
|
||||
if($gdselect==0) {
|
||||
// users_department insert
|
||||
$path = explode('|', $gwDvList[$i]['path_name'] ?? '');
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table("users_department");
|
||||
$builder->set("user_id", $selectUserID[0]["id"]);
|
||||
$builder->set("division", $path[1] ?? "-");
|
||||
$builder->set("team", $path[2] ?? "-");
|
||||
$builder->set("position", "-");
|
||||
$builder->insert();
|
||||
$this->zenith->transComplete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$builder = $this->zenith->table("hourticket_issue");
|
||||
$builder->select("GROUP_CONCAT(doc_no) AS doc_nos");
|
||||
$builder->where("rep_datetime >= DATE_SUB(NOW(), INTERVAL 1 DAY)", null, false);
|
||||
$recentDocList = $builder->get()->getResultArray();
|
||||
$doc_no = explode(",", $recentDocList[0]['doc_nos'] ?? "");
|
||||
|
||||
$builder = $this->gwdb->table("viberc_gw AS gw");
|
||||
$builder->join("viberc_gw_contents AS vgc", "gw.doc_id=vgc.doc_id", "left");
|
||||
$builder->join("viberc_gw_interlock AS vgi", "gw.doc_id=vgi.doc_id", "left");
|
||||
$builder->select("gw.*, vgc.doc_contents, vgi.doc_xml");
|
||||
$builder->where("gw.form_id", "18");
|
||||
$builder->where("gw.doc_sts", "90");
|
||||
$builder->where("gw.end_dt >= DATE_SUB(NOW(), INTERVAL 2 DAY)", null, false);
|
||||
|
||||
if (count($doc_no)) {
|
||||
$builder->whereNotIn("gw.doc_no", $doc_no);
|
||||
}
|
||||
|
||||
$builder->groupBy("gw.doc_no");
|
||||
$builder->orderBy("gw.rep_dt", "DESC");
|
||||
$gwDocList = $builder->get()->getResultArray();
|
||||
$gwDocCnt = $builder->get()->getNumRows();
|
||||
|
||||
if ($gwDocCnt > 0) {
|
||||
for ($i = 0; $i < count($gwDocList); $i++) {
|
||||
$gwDocList[$i]["doc_contents"] = str_replace(' ', ' ', $gwDocList[$i]["doc_contents"]);
|
||||
$gwDocList[$i]['is_break_hour'] = preg_match('/시간차/m', $gwDocList[$i]['doc_contents']);
|
||||
preg_match_all('@(연차차감)\s+?\:\s+?([0-9\.]+)@m', $gwDocList[$i]['doc_xml'], $matches);
|
||||
$gwDocList[$i]['break_balance'] = $matches[2][0];
|
||||
if ($gwDocList[$i]['is_break_hour']) {
|
||||
if (!isset($gwDocList[$i]['user_id'])) continue;
|
||||
$data[] = $gwDocList[$i];
|
||||
}
|
||||
}
|
||||
|
||||
if (count($data)) {
|
||||
echo '<pre>' . print_r($data, 1) . '</pre>';
|
||||
for ($i = 0; $i < count($data); $i++) {
|
||||
$builder = $this->zenith->table("users AS u");
|
||||
$builder->join("users_groupware AS ug","u.id=ug.user_id","left");
|
||||
$builder->select("id");
|
||||
$builder->where("ug.gw_user", $data[$i]['user_id']);
|
||||
$issueInsertData = $builder->get()->getResultArray();
|
||||
if (isset($issueInsertData[0]['id'])) {
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table("hourticket_issue");
|
||||
$setData=[
|
||||
"gw_user"=> $data[$i]['user_id'],
|
||||
"doc_id"=> $data[$i]['doc_id'],
|
||||
"doc_no"=> $data[$i]['doc_no'],
|
||||
"doc_title"=> $data[$i]['doc_title'],
|
||||
"rep_datetime"=> $data[$i]['rep_dt'],
|
||||
"user_id"=> $issueInsertData[0]['id'],
|
||||
"break_balance"=> $data[$i]['break_balance'],
|
||||
"hour_ticket"=>$data[$i]['is_break_hour']*8
|
||||
];
|
||||
|
||||
$builder->set($setData);
|
||||
$sql = $builder->getCompiledInsert();
|
||||
$result = $builder->set($setData)->insert();
|
||||
$this->zenith->transComplete();
|
||||
|
||||
echo "result:".$result;
|
||||
echo "sql:".$sql;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getGwData($data)
|
||||
{
|
||||
$builder = $this->gwdb->table("viberc_gw as gw");
|
||||
$builder->select("gw.*, vgc.doc_contents, vgi.doc_xml");
|
||||
$builder->join("viberc_gw_contents as vgc", "gw.doc_id=vgc.doc_id", "left");
|
||||
$builder->join("viberc_gw_interlock as vgi", "gw.doc_id=vgi.doc_id", "left");
|
||||
$builder->where("gw.form_id", 18);
|
||||
$builder->where("doc_no", $data["doc_no"]);
|
||||
$builder->groupBy("gw.doc_id");
|
||||
$builder->orderBy("gw.rep_dt", "DESC");
|
||||
$gw_result = $builder->get()->getResultArray();
|
||||
|
||||
$builder = $this->zenith->table("users AS u");
|
||||
$builder->select("u.id, u.nickname");
|
||||
$builder->join("users_groupware AS ug", "u.id = ug.user_id", "left");
|
||||
$builder->where("ug.gw_user", $gw_result[0]["user_id"]);
|
||||
$users_result = $builder->get()->getResultArray();
|
||||
|
||||
$result = array();
|
||||
$result["gw_user"] = $gw_result[0]["user_id"];
|
||||
$result["user_id"] = $users_result[0]["id"];
|
||||
$result["nickname"] = $users_result[0]["nickname"];
|
||||
$result["rep_datetime"] = $gw_result[0]["rep_dt"];
|
||||
$result["doc_id"] = $gw_result[0]["doc_id"];
|
||||
$result["doc_title"] = $gw_result[0]["doc_title"];
|
||||
// $result["doc_contents"]=str_replace(' ', ' ', $gw_result[0]['doc_contents']);
|
||||
// $result["break_hour"]=preg_match('/시간차/m', $gw_result[0]['doc_contents']);
|
||||
$_balance = preg_match_all('@(연차차감)\s+?\:\s+?([0-9\.]+)@m', $gw_result[0]['doc_xml'], $matches);
|
||||
$result['break_balance'] = $matches[2][0];
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function issueProc($data)
|
||||
{
|
||||
if ($data["seq"] != "") {
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('hourticket_issue');
|
||||
$builder->set('apr_user_id', auth()->user()->id);
|
||||
$builder->set('apr_datetime', Time::now());
|
||||
$builder->where('seq', $data['seq']);
|
||||
$builder->update();
|
||||
$result = $builder->get()->getResultArray();
|
||||
$this->zenith->transComplete();
|
||||
} else {
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table("hourticket_issue");
|
||||
$builder->set("gw_user", $data["gw_user"]);
|
||||
$builder->set("user_id", $data["user_id"]);
|
||||
$builder->set("doc_id", $data["doc_id"]);
|
||||
$builder->set("doc_no", $data["doc_no"]);
|
||||
$builder->set("doc_title", $data["doc_title"]);
|
||||
$builder->set("break_balance", $data["break_balance"]);
|
||||
$builder->set("rep_datetime", $data["rep_datetime"]);
|
||||
$builder->set("hour_ticket", $data["hourticket"]);
|
||||
$builder->set("apr_user_id", auth()->user()->id);
|
||||
$builder->set("apr_datetime", Time::now());
|
||||
$result = $builder->insert();
|
||||
$this->zenith->transComplete();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function hourTicketConfirm($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
|
||||
if ($data["type"] === "use") {
|
||||
$builder = $this->zenith->table('hourticket_use');
|
||||
if ($data["method"] === "agree") {
|
||||
$builder->set('apr_user_id', auth()->user()->id);
|
||||
$builder->set('apr_datetime', Time::now());
|
||||
$builder->where('seq', $data['seq']);
|
||||
$builder->update();
|
||||
} elseif ($data["method"] === "reject") {
|
||||
$builder->where('seq', $data['seq']);
|
||||
$builder->delete();
|
||||
}
|
||||
} else if ($data["type"] === "issue") {
|
||||
$builder = $this->zenith->table('hourticket_issue');
|
||||
if ($data["method"] === "agree") {
|
||||
$builder->set('apr_user_id', auth()->user()->id);
|
||||
$builder->set('apr_datetime', Time::now());
|
||||
$builder->where('doc_id', $data['seq']);
|
||||
$builder->update();
|
||||
} elseif ($data["method"] === "reject") {
|
||||
$builder->where('doc_id', $data['seq']);
|
||||
$builder->delete();
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->zenith->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function hourTicketReg($data)
|
||||
{
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table("hourticket_use");
|
||||
$builder->set("user_id", auth()->user()->id);
|
||||
$builder->set("hour_ticket", $data["hour_ticket"]);
|
||||
$builder->set("date", $data["date"]);
|
||||
$builder->set("time", $data["time"]);
|
||||
$builder->set("reg_datetime", Time::now());
|
||||
$builder->insert();
|
||||
$result = $this->zenith->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getHourTicketAll($data)
|
||||
{
|
||||
$builder = $this->zenith->table("users AS u");
|
||||
$builder->select("u.id, u.nickname,
|
||||
IFNULL(hi.hour_ticket,0) AS hourticket_issue,
|
||||
IFNULL(hu.hour_ticket,0) AS hourticket_use,
|
||||
IFNULL(issued, 0 ) AS issued,
|
||||
IFNULL(used, 0 ) AS used,
|
||||
(IFNULL(issued, 0 )- IFNULL(used, 0 )) AS total");
|
||||
$builder->join("(select user_id, gw_user, hour_ticket, SUM(hour_ticket) AS issued FROM hourticket_issue
|
||||
WHERE apr_datetime IS NOT NULL AND DATE(rep_datetime) BETWEEN '{$data["sdate"]}' AND '{$data["edate"]}' GROUP BY user_id) AS hi", "u.id = hi.user_id", "left");
|
||||
$builder->join("(select user_id, hour_ticket, SUM(hour_ticket) as used from hourticket_use
|
||||
WHERE apr_datetime IS NOT NULL AND date BETWEEN '{$data["sdate"]}' AND '{$data["edate"]}' GROUP BY user_id) AS hu", "u.id = hu.user_id", "left");
|
||||
$builder->join("users_groupware AS ug", "u.id = ug.user_id and AND hi.gw_user = ug.gw_user", "left");
|
||||
|
||||
$builder->where("u.nickname IS NOT NULL", NULL, FALSE);
|
||||
|
||||
if (!auth()->user()->hasPermission('humanresource.management')) {
|
||||
$builder->where("u.id", auth()->user()->id);
|
||||
}
|
||||
|
||||
if ($data["stx"]) {
|
||||
$builder->like("u.nickname", $data["stx"]);
|
||||
}
|
||||
|
||||
$builder->groupBy("u.id");
|
||||
$builder->orderBy("u.id", "ASC");
|
||||
$builder->orderBy("ug.gw_user", "ASC");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getHourTicketUseNew($data)
|
||||
{
|
||||
$builder = $this->zenith->table('hourticket_use AS hu');
|
||||
$builder->select('u.nickname, hu.hour_ticket, hu.date,
|
||||
CONCAT(
|
||||
DATE_FORMAT(hu.time, \'%H시%i\'),
|
||||
\'분 ~ \',
|
||||
DATE_FORMAT(DATE_ADD(hu.time, INTERVAL hu.hour_ticket HOUR), \'%H시%i\'),
|
||||
\'분\'
|
||||
) AS time,
|
||||
if(apr_user_id, \'완료\', hu.seq) AS seq');
|
||||
$builder->join('users AS u', 'hu.user_id=u.id', "left");
|
||||
if ($data["sdate"] && $data["edate"]) {
|
||||
$builder->where("hu.reg_datetime >=", $data["sdate"] . " 00:00:00");
|
||||
$builder->where("hu.reg_datetime <=", $data["edate"] . " 23:59:59");
|
||||
}
|
||||
if ($data["stx"]) {
|
||||
$builder->Like("u.nickname", $data["stx"]);
|
||||
}
|
||||
|
||||
$builder->orderBy("hu.reg_datetime", "DESC");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getHourTicketIssue($data)
|
||||
{
|
||||
$builder = $this->zenith->table("hourticket_issue AS hi");
|
||||
$builder->select("u.nickname, DATE_FORMAT(hi.rep_datetime,'%Y-%m-%d') as rep_datetime, hi.doc_id, hi.doc_no, hi.break_balance, hi.hour_ticket, if(hi.apr_user_id, '완료', '진행중') apr_user_id");
|
||||
$builder->join("users AS u", "hi.user_id = u.id", "left");
|
||||
$builder->join("users_groupware AS ug", "u.id = ug.user_id and AND hi.gw_user = ug.gw_user", "left");
|
||||
if ($data["sdate"] && $data["edate"]) {
|
||||
$builder->where("hi.rep_datetime >=", $data["sdate"] . " 00:00:00");
|
||||
$builder->where("hi.rep_datetime <=", $data["edate"] . " 23:59:59");
|
||||
}
|
||||
if ($data["stx"]) {
|
||||
$builder->groupStart();
|
||||
$builder->like("doc_no", $data["stx"]);
|
||||
$builder->orLike("u.nickname", $data["stx"]);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
if (!auth()->user()->hasPermission('humanresource.management')) {
|
||||
$builder->where("hi.user_id", auth()->user()->id);
|
||||
}
|
||||
$builder->orderBy('hi.rep_datetime', 'DESC');
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,378 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Integrate;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
use CodeIgniter\Database\RawSql;
|
||||
|
||||
class IntegrateModel extends Model
|
||||
{
|
||||
protected $zenith;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->zenith = \Config\Database::connect();
|
||||
}
|
||||
|
||||
public function getEventLead($searchParams)
|
||||
{
|
||||
if (!empty($searchParams['sdate'])) {
|
||||
$searchSDate = (new \DateTime($searchParams['sdate']))->format('Y-m-d');
|
||||
}
|
||||
if (!empty($searchParams['edate'])) {
|
||||
$searchEDate = (new \DateTime($searchParams['edate']))->format('Y-m-d');
|
||||
}
|
||||
|
||||
$builder = $this->zenith->table('event_leads as el');
|
||||
$builder->select("
|
||||
info.seq as info_seq,
|
||||
adv.name AS advertiser,
|
||||
med.media, adv.is_stop,
|
||||
info.description AS description,
|
||||
info.partner_company as company,
|
||||
info.another_url as another_url,
|
||||
dec_data(el.phone) as dec_phone,
|
||||
el.seq,
|
||||
el.name,
|
||||
el.reg_date,
|
||||
el.gender,
|
||||
el.age,
|
||||
el.branch,
|
||||
el.addr,
|
||||
el.email,
|
||||
el.site,
|
||||
el.add1,
|
||||
el.add2,
|
||||
el.add3,
|
||||
el.add4,
|
||||
el.add5,
|
||||
el.add6,
|
||||
el.status,
|
||||
count(lm.leads_seq) as memo_cnt,
|
||||
GROUP_CONCAT(
|
||||
DISTINCT CONCAT(lm.memo,'[',lm.username,']','[',lm.reg_date,']')
|
||||
ORDER BY lm.reg_date DESC
|
||||
SEPARATOR '\n'
|
||||
) AS memos
|
||||
");
|
||||
$builder->join('event_information as info', "info.seq = el.event_seq", 'left');
|
||||
$builder->join('event_advertiser as adv', "info.advertiser = adv.seq AND adv.is_stop = 0", 'left');
|
||||
$builder->join('event_media as med', 'info.media = med.seq', 'left');
|
||||
$builder->join('event_leads_memo as lm', 'el.seq = lm.leads_seq', 'left');
|
||||
|
||||
if(!auth()->user()->inGroup('superadmin', 'admin', 'developer', 'user')){
|
||||
$builder->join('companies_users as cu', "adv.company_seq = cu.company_id", 'left');
|
||||
$builder->where('cu.user_id', auth()->user()->id);
|
||||
}
|
||||
|
||||
$builder->where('el.is_deleted', 0);
|
||||
$builder->where('el.reg_date >=', $searchSDate. " 00:00:00");
|
||||
$builder->where('el.reg_date <=', $searchEDate. " 23:59:59");
|
||||
|
||||
$builder->groupBy(['el.seq','lm.leads_seq'], true);
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "seq DESC";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
// echo ($builder->getCompiledSelect()); exit;
|
||||
// 결과 반환
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
];
|
||||
}
|
||||
|
||||
public function getEventLeadCount($data)
|
||||
{
|
||||
$builder = $this->zenith->table('event_leads as el');
|
||||
$builder->select("
|
||||
el.seq,
|
||||
el.status,
|
||||
adv.name as advertiser,
|
||||
med.media as media,
|
||||
info.description as description,
|
||||
info.partner_company as company
|
||||
");
|
||||
$builder->join('event_information as info', "info.seq = el.event_seq", 'left');
|
||||
$builder->join('event_advertiser as adv', "info.advertiser = adv.seq AND adv.is_stop = 0", 'left');
|
||||
$builder->join('event_media as med', 'info.media = med.seq', 'left');
|
||||
|
||||
if(!auth()->user()->inGroup('superadmin', 'admin', 'developer', 'user')){
|
||||
$builder->join('companies_users as cu', "adv.company_seq = cu.company_id", 'left');
|
||||
$builder->where('cu.user_id', auth()->user()->id);
|
||||
}
|
||||
|
||||
$builder->where('el.is_deleted', 0);
|
||||
$builder->where('el.reg_date >=', $data['sdate']);
|
||||
$builder->where('el.reg_date <=', $data['edate']);
|
||||
|
||||
$filteredBuilder = clone $builder;
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('adv.name', $data['stx']);
|
||||
$builder->orLike('info.seq', $data['stx']);
|
||||
$builder->orLike('med.media', $data['stx']);
|
||||
$builder->orLike('info.description', $data['stx']);
|
||||
$builder->orLike('el.name', $data['stx']);
|
||||
$builder->orLike('el.branch', $data['stx']);
|
||||
$builder->orLike('el.add1', $data['stx']);
|
||||
$builder->orLike('el.add2', $data['stx']);
|
||||
$builder->orLike('el.add3', $data['stx']);
|
||||
$builder->orLike('el.add4', $data['stx']);
|
||||
$builder->orLike('el.add5', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$company = explode("|",$data['company']);
|
||||
$index = array_search('리스타', $company);
|
||||
if($index !== false){
|
||||
$company[$index] = '';
|
||||
}
|
||||
$builder->whereIn('info.partner_company', $company);
|
||||
}
|
||||
|
||||
if(!empty($data['advertiser'])){
|
||||
$builder->whereIn('adv.name', explode("|",$data['advertiser']));
|
||||
}
|
||||
|
||||
if(!empty($data['media'])){
|
||||
$builder->whereIn('med.media', explode("|",$data['media']));
|
||||
}
|
||||
|
||||
if(!empty($data['description'])){
|
||||
$builder->whereIn('info.description', explode("|",$data['description']));
|
||||
}
|
||||
if($builder == $filteredBuilder) {
|
||||
$filteredResult = $builder->get()->getResultArray();
|
||||
$noFilteredResult = $filteredResult;
|
||||
} else {
|
||||
$filteredResult = $builder->get()->getResultArray();
|
||||
$noFilteredResult = $filteredBuilder->get()->getResultArray();
|
||||
}
|
||||
|
||||
$result = [
|
||||
'filteredResult' => $filteredResult,
|
||||
'noFilteredResult' => $noFilteredResult
|
||||
];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEventLeadRow($data)
|
||||
{
|
||||
$builder = $this->zenith->table('event_leads as el');
|
||||
$builder->select("
|
||||
el.seq, el.event_seq, el.site, el.name, DEC_DATA(el.phone) as phone, el.age, el.gender, el.branch, el.addr, el.email, el.add1, el.add2, el.add3, el.add4, el.add5, el.add6, el.status, el.ip, el.reg_date,
|
||||
adv.name as advertiser,
|
||||
med.media as media,
|
||||
info.description as description,
|
||||
info.partner_company as company,
|
||||
count(lm.leads_seq) as memo_cnt,
|
||||
GROUP_CONCAT(
|
||||
DISTINCT CONCAT(lm.memo,'[',lm.username,']','[',lm.reg_date,']')
|
||||
ORDER BY lm.reg_date DESC
|
||||
SEPARATOR '\n'
|
||||
) AS memos
|
||||
");
|
||||
$builder->join('event_information as info', "info.seq = el.event_seq", 'left');
|
||||
$builder->join('event_advertiser as adv', "info.advertiser = adv.seq AND adv.is_stop = 0", 'left');
|
||||
$builder->join('event_media as med', 'info.media = med.seq', 'left');
|
||||
$builder->join('event_leads_memo as lm', 'el.seq = lm.leads_seq', 'left');
|
||||
|
||||
if(!auth()->user()->inGroup('superadmin', 'admin', 'developer', 'user')){
|
||||
$builder->join('companies_users as cu', "adv.company_seq = cu.company_id", 'left');
|
||||
$builder->where('cu.user_id', auth()->user()->id);
|
||||
}
|
||||
|
||||
$builder->where('el.is_deleted', 0);
|
||||
$builder->where('el.reg_date >=', $data['sdate']." 00:00:00");
|
||||
$builder->where('el.reg_date <=', $data['edate']." 23:59:59");
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('adv.name', $data['stx']);
|
||||
$builder->orLike('info.seq', $data['stx']);
|
||||
$builder->orLike('med.media', $data['stx']);
|
||||
$builder->orLike('info.description', $data['stx']);
|
||||
$builder->orLike('el.name', $data['stx']);
|
||||
$builder->orLike('el.branch', $data['stx']);
|
||||
$builder->orLike('el.add1', $data['stx']);
|
||||
$builder->orLike('el.add2', $data['stx']);
|
||||
$builder->orLike('el.add3', $data['stx']);
|
||||
$builder->orLike('el.add4', $data['stx']);
|
||||
$builder->orLike('el.add5', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$company = explode("|",$data['company']);
|
||||
$index = array_search('리스타', $company);
|
||||
if($index !== false){
|
||||
$company[$index] = '';
|
||||
}
|
||||
$builder->whereIn('info.partner_company', $company);
|
||||
}
|
||||
|
||||
if(!empty($data['advertiser'])){
|
||||
$builder->whereIn('adv.name', explode("|",$data['advertiser']));
|
||||
}
|
||||
|
||||
if(!empty($data['media'])){
|
||||
$builder->whereIn('med.media', explode("|",$data['media']));
|
||||
}
|
||||
|
||||
if(!empty($data['description'])){
|
||||
$builder->whereIn('info.description', explode("|",$data['description']));
|
||||
}
|
||||
$builder->groupBy(['el.seq','lm.leads_seq'], true);
|
||||
$builder->orderBy('el.seq DESC',true);
|
||||
|
||||
// echo $builder->getCompiledSelect(); exit;
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function saveDownloadData($data)
|
||||
{
|
||||
$builder = $this->zenith->table('event_leads_download');
|
||||
$builder->insert($data);
|
||||
}
|
||||
|
||||
|
||||
public function getStatusCount($data)
|
||||
{
|
||||
$builder = $this->zenith->table('event_leads as el');
|
||||
$builder->select("
|
||||
COUNT(CASE WHEN el.status=1 then 1 end) as 인정,
|
||||
COUNT(CASE WHEN el.status=2 then 1 end) as 중복,
|
||||
COUNT(CASE WHEN el.status=3 then 1 end) as 성별불량,
|
||||
COUNT(CASE WHEN el.status=4 then 1 end) as 나이불량,
|
||||
COUNT(CASE WHEN el.status=5 then 1 end) as 콜불량,
|
||||
COUNT(CASE WHEN el.status=6 then 1 end) as 번호불량,
|
||||
COUNT(CASE WHEN el.status=7 then 1 end) as 테스트,
|
||||
COUNT(CASE WHEN el.status=8 then 1 end) as 이름불량,
|
||||
COUNT(CASE WHEN el.status=9 then 1 end) as 지역불량,
|
||||
COUNT(CASE WHEN el.status=10 then 1 end) as 업체불량,
|
||||
COUNT(CASE WHEN el.status=11 then 1 end) as 미성년자,
|
||||
COUNT(CASE WHEN el.status=12 then 1 end) as 본인아님,
|
||||
COUNT(CASE WHEN el.status=13 then 1 end) as 쿠키중복,
|
||||
COUNT(CASE WHEN el.status=99 then 1 end) as 확인");
|
||||
$builder->join('event_information as info', "info.seq = el.event_seq", 'left');
|
||||
$builder->join('event_advertiser as adv', "info.advertiser = adv.seq AND adv.is_stop = 0", 'left');
|
||||
$builder->join('event_media as med', 'info.media = med.seq', 'left');
|
||||
|
||||
if(!auth()->user()->inGroup('superadmin', 'admin', 'developer', 'user')){
|
||||
$builder->join('companies_users as cu', "adv.company_seq = cu.company_id", 'left');
|
||||
$builder->where('cu.user_id', auth()->user()->id);
|
||||
}
|
||||
|
||||
$builder->where('el.is_deleted', 0);
|
||||
$builder->where('el.reg_date >=', $data['sdate']);
|
||||
$builder->where('el.reg_date <', date('Y-m-d', strtotime($data['edate'].' +1 day')));
|
||||
|
||||
if(!empty($data['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('adv.name', $data['stx']);
|
||||
$builder->orLike('info.seq', $data['stx']);
|
||||
$builder->orLike('med.media', $data['stx']);
|
||||
$builder->orLike('info.description', $data['stx']);
|
||||
$builder->orLike('el.name', $data['stx']);
|
||||
$builder->orLike('el.branch', $data['stx']);
|
||||
$builder->orLike('el.add1', $data['stx']);
|
||||
$builder->orLike('el.add2', $data['stx']);
|
||||
$builder->orLike('el.add3', $data['stx']);
|
||||
$builder->orLike('el.add4', $data['stx']);
|
||||
$builder->orLike('el.add5', $data['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
if(!empty($data['company'])){
|
||||
$company = explode("|",$data['company']);
|
||||
$index = array_search('리스타', $company);
|
||||
if($index !== false){
|
||||
$company[$index] = '';
|
||||
}
|
||||
$builder->whereIn('info.partner_company', $company);
|
||||
}
|
||||
|
||||
if(!empty($data['advertiser'])){
|
||||
$builder->whereIn('adv.name', explode("|",$data['advertiser']));
|
||||
}
|
||||
|
||||
if(!empty($data['media'])){
|
||||
$builder->whereIn('med.media', explode("|",$data['media']));
|
||||
}
|
||||
|
||||
if(!empty($data['description'])){
|
||||
$builder->whereIn('info.description', explode("|",$data['description']));
|
||||
}
|
||||
$result = $builder->get()->getRowArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getMemo($data)
|
||||
{
|
||||
$builder = $this->zenith->table('event_leads_memo');
|
||||
$builder->select("*");
|
||||
$builder->where("leads_seq", $data['seq']);
|
||||
$builder->orderBy("reg_date", "desc");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function addMemo($data) {
|
||||
$builder = $this->zenith->table('event_leads');
|
||||
$builder->select("event_seq");
|
||||
$builder->where("seq", $data['leads_seq']);
|
||||
$row = $builder->get()->getRowArray();
|
||||
$data['event_seq'] = $row['event_seq'];
|
||||
if(!$data['event_seq']) return null;
|
||||
$data['reg_date'] = date('Y-m-d H:i:s');
|
||||
$data['username'] = auth()->user()->username;
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('event_leads_memo');
|
||||
$builder->set('leads_seq', $data['leads_seq']);
|
||||
$builder->set('event_seq', $data['event_seq']);
|
||||
$builder->set('username', $data['username']);
|
||||
$builder->set('memo', $data['memo']);
|
||||
$builder->set('reg_date', $data['reg_date']);
|
||||
$result = $builder->insert();
|
||||
$insertId = $this->zenith->insertID();
|
||||
$this->zenith->transComplete();
|
||||
|
||||
|
||||
$result = [
|
||||
'result' => $result,
|
||||
'data' => [$data]
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setStatus($data) {
|
||||
if(!$data['seq']) return null;
|
||||
$this->zenith->transStart();
|
||||
$builder = $this->zenith->table('event_leads');
|
||||
$builder->set('status', $data['status']);
|
||||
$builder->where('seq', $data['seq']);
|
||||
$result = $builder->update();
|
||||
$this->zenith->transComplete();
|
||||
|
||||
$result = [
|
||||
'result' => $result,
|
||||
'data' => $data
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user