init
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user