76 lines
2.6 KiB
PHP
76 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* 서비스 사용 이력 조회 API (Direct SQL 방식)
|
|
*/
|
|
require_once 'db_conn.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
try {
|
|
// 1. 파라미터 수집
|
|
$p_member_id = isset($_POST['member_id']) ? trim($_POST['member_id']) : '';
|
|
$p_user_nm = isset($_POST['user_nm']) ? trim($_POST['user_nm']) : '';
|
|
$p_dept_nm = isset($_POST['dept_nm']) ? trim($_POST['dept_nm']) : '';
|
|
$p_fuse_dt = isset($_POST['fuse_dt']) ? trim($_POST['fuse_dt']) : '';
|
|
$p_tuse_dt = isset($_POST['tuse_dt']) ? trim($_POST['tuse_dt']) : '';
|
|
|
|
if ($p_fuse_dt === '') {
|
|
$p_fuse_dt = '1999-01-01';
|
|
}
|
|
if ($p_tuse_dt === '') {
|
|
$p_tuse_dt = '2099-12-31';
|
|
}
|
|
|
|
// 2. 직접 SQL 쿼리 작성 (함수 내부 로직을 그대로 가져옴)
|
|
$sql = "
|
|
SELECT
|
|
b.member_id::character varying,
|
|
a.use_dt, -- DATE 타입
|
|
a.user_id::character varying,
|
|
a.sq_no,
|
|
b.user_nm::character varying,
|
|
b.dept_nm::character varying,
|
|
b.posit_nm::character varying,
|
|
b.use_yn::character varying,
|
|
a.use_area,
|
|
kngil.fn_base_nm(a.ser_bc)::character varying as ser_bc,
|
|
a.cdt
|
|
FROM kngil.use_history a
|
|
INNER JOIN kngil.users b ON a.user_id = b.user_id
|
|
WHERE (:member_id = '' OR b.member_id = :member_id) -- ID가 없어도 나오게
|
|
-- 검색 조건: 값이 있을 때만 필터링
|
|
AND (:user_nm = '' OR b.user_nm LIKE '%' || :user_nm || '%')
|
|
AND (:dept_nm = '' OR b.dept_nm LIKE '%' || :dept_nm || '%')
|
|
AND a.use_dt::date >= :fuse_dt::date
|
|
AND a.use_dt::date <= :tuse_dt::date
|
|
ORDER BY a.use_dt DESC, a.sq_no DESC
|
|
";
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
|
|
// 파라미터 바인딩 (이름 기반 바인딩이 더 직관적입니다)
|
|
$stmt->execute([
|
|
':member_id' => $p_member_id,
|
|
':user_nm' => $p_user_nm,
|
|
':dept_nm' => $p_dept_nm,
|
|
':fuse_dt' => $p_fuse_dt,
|
|
':tuse_dt' => $p_tuse_dt
|
|
]);
|
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// 3. W2UI용 recid 가공
|
|
$records = [];
|
|
foreach ($rows as $index => $row) {
|
|
$row['recid'] = $row['user_id'] . '_' . ($row['sq_no'] ?? $index);
|
|
$records[] = $row;
|
|
}
|
|
|
|
echo json_encode($records, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);
|
|
|
|
} catch (PDOException $e) {
|
|
error_log("DB Error: " . $e->getMessage());
|
|
http_response_code(500);
|
|
echo json_encode(['status' => 'error', 'message' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
|
|
}
|
|
?>
|