Files
confirms/app/Models/manage/SmsModel.php
2025-12-12 10:30:50 +09:00

268 lines
9.1 KiB
PHP

<?php
namespace App\Models\manage;
use CodeIgniter\Model;
class SmsModel extends Model
{
public function getTotalCount($data)
{
$params = [];
$sql = "SELECT
COUNT(*) AS cnt
FROM
ums_log a
LEFT OUTER JOIN result b ON a.etc1 = b.rsrv_sq
LEFT OUTER JOIN departments c ON b.dept_sq = c.dept_sq
LEFT OUTER JOIN users d ON b.usr_sq = d.usr_sq
WHERE
a.`status` IS NOT NULL ";
if (!empty($data['start_dt']) && !empty($data['end_dt'])) {
$nextDay = date('Y-m-d', strtotime($data['end_dt'] . ' +1 day'));
$sql .= " AND a.send_time >= ? ";
$sql .= " AND a.send_time < ? ";
array_push($params, $data['start_dt'] . " 00:00:00");
array_push($params, $nextDay . " 00:00:00");
} else {
if (!empty($data['start_dt'])) {
$sql .= "AND a.send_time >= DATE(?) ";
array_push($params, $data['start_dt'] . " 00:00:00");
}
if (!empty($data['end_dt'])) {
$nextDay = date('Y-m-d', strtotime($data['end_dt'] . ' +1 day'));
$sql .= " AND a.send_time < ? ";
array_push($params, $nextDay . " 00:00:00");
}
}
if (!empty($data['srchTxt'])) {
switch ($data['srchType']) {
case '1':
$sql .= "AND a.send_name LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
case '2':
$sql .= "AND a.dest_name LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
case '3':
$sql .= "AND a.dest_phone LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
default:
$sql .= "AND (
a.send_name LIKE CONCAT('%', ?, '%')
OR a.dest_name LIKE CONCAT('%', ?, '%')
OR a.dest_phone LIKE CONCAT('%', ?, '%')
)";
array_push($params, $data['srchTxt']);
array_push($params, $data['srchTxt']);
array_push($params, $data['srchTxt']);
break;
}
}
$query = $this->db->query($sql, $params ?: []);
return $query->getRow()->cnt;
}
public function getSmsList($start, $end, $data)
{
$params = [];
$sql = "SELECT
a.cmid
, a.dest_phone
, a.dest_name
, a.send_phone
, a.send_name
, a.request_time
, a.send_time
, a.report_time
, a.subject
, a.msg_body
, (select cd_nm from codes where category = 'SMS_STATUS' AND cd = a.status) as status_nm
, (CASE WHEN a.status = 1 THEN '성공' ELSE '실패' END) AS status_nm
, status
, a.etc1
, a.etc2
, (SELECT category_nm FROM codes WHERE category = 'SMS_MSG_TYPE' AND cd = a.etc2) as cate_nm
, a.etc3
, b.rsrv_sq
, c.dept_nm
, d.usr_nm
FROM
ums_log a
LEFT OUTER JOIN result b ON a.etc1 = b.rsrv_sq
LEFT OUTER JOIN departments c ON b.dept_sq = c.dept_sq
LEFT OUTER JOIN users d ON b.usr_sq = d.usr_sq
WHERE
a.`status` IS NOT NULL ";
if (!empty($data['start_dt']) && !empty($data['end_dt'])) {
$nextDay = date('Y-m-d', strtotime($data['end_dt'] . ' +1 day'));
$sql .= " AND a.send_time >= ? ";
$sql .= " AND a.send_time < ? ";
array_push($params, $data['start_dt'] . " 00:00:00");
array_push($params, $nextDay . " 00:00:00");
} else {
if (!empty($data['start_dt'])) {
$sql .= "AND a.send_time >= DATE(?) ";
array_push($params, $data['start_dt'] . " 00:00:00");
}
if (!empty($data['end_dt'])) {
$nextDay = date('Y-m-d', strtotime($data['end_dt'] . ' +1 day'));
$sql .= " AND a.send_time < ? ";
array_push($params, $nextDay . " 00:00:00");
}
}
if (!empty($data['srchTxt'])) {
switch ($data['srchType']) {
case '1':
$sql .= "AND a.send_name LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
case '2':
$sql .= "AND a.dest_name LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
case '3':
$sql .= "AND a.dest_phone LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
default:
$sql .= "AND (
a.send_name LIKE CONCAT('%', ?, '%')
OR a.dest_name LIKE CONCAT('%', ?, '%')
OR a.dest_phone LIKE CONCAT('%', ?, '%')
)";
array_push($params, $data['srchTxt']);
array_push($params, $data['srchTxt']);
array_push($params, $data['srchTxt']);
break;
}
}
$sql .= "
ORDER BY a.request_time DESC
LIMIT ?, ? ";
$params[] = (int) $start;
$params[] = (int) $end;
$query = $this->db->query($sql, $params ?: []);
return $query->getResultArray();
}
public function getExcelList($data)
{
$params = [];
$sql = "SELECT
a.send_name AS '발신자'
, a.dest_name AS '수신자'
, a.send_time AS '발송일자'
, (SELECT category_nm FROM codes WHERE category = 'SMS_MSG_TYPE' AND cd = a.etc2) AS '발송구분'
, a.send_phone AS '발신번호'
, a.dest_phone AS '수신번호'
, (select cd_nm from codes where category = 'SMS_STATUS' AND cd = a.status) AS '발송상태'
FROM
ums_log a
LEFT OUTER JOIN result b ON a.etc1 = b.rsrv_sq
LEFT OUTER JOIN departments c ON b.dept_sq = c.dept_sq
LEFT OUTER JOIN users d ON b.usr_sq = d.usr_sq
WHERE
a.`status` IS NOT NULL ";
if (!empty($data['start_dt']) && !empty($data['end_dt'])) {
$nextDay = date('Y-m-d', strtotime($data['end_dt'] . ' +1 day'));
$sql .= " AND a.send_time >= ? ";
$sql .= " AND a.send_time < ? ";
array_push($params, $data['start_dt'] . " 00:00:00");
array_push($params, $nextDay . " 00:00:00");
} else {
if (!empty($data['start_dt'])) {
$sql .= "AND a.send_time >= DATE(?) ";
array_push($params, $data['start_dt'] . " 00:00:00");
}
if (!empty($data['end_dt'])) {
$nextDay = date('Y-m-d', strtotime($data['end_dt'] . ' +1 day'));
$sql .= " AND a.send_time < ? ";
array_push($params, $nextDay . " 00:00:00");
}
}
if (!empty($data['srchTxt'])) {
switch ($data['srchType']) {
case '1':
$sql .= "AND a.send_name LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
case '2':
$sql .= "AND a.dest_name LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
case '3':
$sql .= "AND a.dest_phone LIKE CONCAT('%', ?, '%') ";
array_push($params, $data['srchTxt']);
break;
default:
$sql .= "AND (
a.send_name LIKE CONCAT('%', ?, '%')
OR a.dest_name LIKE CONCAT('%', ?, '%')
OR a.dest_phone LIKE CONCAT('%', ?, '%')
)";
array_push($params, $data['srchTxt']);
array_push($params, $data['srchTxt']);
array_push($params, $data['srchTxt']);
break;
}
}
$sql .= "
ORDER BY a.request_time DESC
";
$query = $this->db->query($sql, $params ?: []);
return $query->getResultArray();
}
}