20260205 업데이트(컨텐츠 페이지 연결)
This commit is contained in:
@@ -1,41 +1,76 @@
|
||||
<?php
|
||||
// 1. DB 연결
|
||||
/**
|
||||
* 서비스 사용 이력 조회 API (Direct SQL 방식)
|
||||
*/
|
||||
require_once 'db_conn.php';
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
try {
|
||||
// JS의 URLSearchParams에서 보낸 키값과 일치시켜야 합니다.
|
||||
$p_member_id = $_POST['member_id'] ?? '';
|
||||
$p_user_nm = $_POST['user_nm'] ?? '';
|
||||
$p_dept_nm = $_POST['dept_nm'] ?? '';
|
||||
// 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']) : '';
|
||||
|
||||
// 2. 프로시저 호출
|
||||
// PostgreSQL 함수 호출 시 파라미터가 비어있으면 전체 조회가 되도록 설계됨
|
||||
$stmt = $pdo->prepare("SELECT * FROM kngil.sp_use_history(?, ?, ?)");
|
||||
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([
|
||||
$p_member_id,
|
||||
$p_user_nm,
|
||||
$p_dept_nm
|
||||
':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' 필드 주입
|
||||
// 3. W2UI용 recid 가공
|
||||
$records = [];
|
||||
foreach ($rows as $index => $row) {
|
||||
// user_id와 sq_no 조합으로 유일키 생성 (권장)
|
||||
// 만약 데이터가 없을 경우를 대비해 $index를 활용할 수도 있음
|
||||
$row['recid'] = ($row['user_id'] ?? 'unknown') . '_' . ($row['sq_no'] ?? $index);
|
||||
$row['recid'] = $row['user_id'] . '_' . ($row['sq_no'] ?? $index);
|
||||
$records[] = $row;
|
||||
}
|
||||
|
||||
// 4. 결과 출력
|
||||
echo json_encode($records, JSON_UNESCAPED_UNICODE); // 한글 깨짐 방지
|
||||
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()]);
|
||||
echo json_encode(['status' => 'error', 'message' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user