261 lines
7.8 KiB
PHP
261 lines
7.8 KiB
PHP
<?php
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
/* =========================
|
|
로그인 / 권한 가드
|
|
========================= */
|
|
require_once __DIR__ . '/adm_guard.php';
|
|
require_once __DIR__ . '/db_conn.php';
|
|
|
|
/* =========================
|
|
세션 기준 값 (중요)
|
|
========================= */
|
|
$login = $_SESSION['login'];
|
|
$auth_bc = $login['auth_bc']; // 권한코드
|
|
$member_id = $login['member_id']; // 회사ID
|
|
|
|
/* =========================
|
|
입력
|
|
========================= */
|
|
$input = json_decode(file_get_contents('php://input'), true) ?? [];
|
|
$action = $_GET['action'] ?? $input['action'] ?? 'list';
|
|
|
|
/* =========================
|
|
권한 플래그
|
|
========================= */
|
|
$isAdmin = in_array($auth_bc, ['BS100100','BS100200','BS100300'], true);
|
|
|
|
try {
|
|
|
|
switch ($action) {
|
|
|
|
/* =========================
|
|
0. 공통코드 조회 (콤보)
|
|
========================= */
|
|
case 'base_code':
|
|
|
|
$main_cd = $_GET['main_cd'] ?? $input['main_cd'] ?? '';
|
|
|
|
if (!$main_cd) {
|
|
throw new Exception('main_cd가 필요합니다.');
|
|
}
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT *
|
|
FROM kngil.fn_base_cd(:main_cd)
|
|
");
|
|
$stmt->execute([
|
|
':main_cd' => $main_cd
|
|
]);
|
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'items' => $rows // [{id, text}]
|
|
]);
|
|
break;
|
|
|
|
|
|
/* =========================
|
|
1. 사용자 목록 조회
|
|
========================= */
|
|
case 'list':
|
|
|
|
$schType = $_GET['sch_type'] ?? '';
|
|
$schKeyword = $_GET['sch_keyword'] ?? '';
|
|
$schUseYn = $_GET['sch_use_yn'] ?? '';
|
|
|
|
// 기본값
|
|
$sch_id = '';
|
|
$sch_nm = '';
|
|
$sch_dept = '';
|
|
|
|
if ($schKeyword !== '') {
|
|
switch ($schType) {
|
|
case 'id':
|
|
$sch_id = $schKeyword;
|
|
break;
|
|
case 'name':
|
|
$sch_nm = $schKeyword;
|
|
break;
|
|
case 'dept':
|
|
$sch_dept = $schKeyword;
|
|
break;
|
|
|
|
default: // 전체
|
|
$sch_id = $schKeyword;
|
|
$sch_nm = $schKeyword;
|
|
$sch_dept = $schKeyword;
|
|
}
|
|
}
|
|
|
|
$sql = "
|
|
SELECT *
|
|
FROM kngil.sp_users_r(
|
|
:member_id,
|
|
:user_nm,
|
|
:dept_nm,
|
|
:use_yn
|
|
);
|
|
";
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute([
|
|
':member_id' => $member_id,
|
|
':user_nm' => $_GET['user_nm'] ?? '',
|
|
':dept_nm' => $_GET['dept_nm'] ?? '',
|
|
':use_yn' => $_GET['use_yn'] ?? ''
|
|
]);
|
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
$i = 1;
|
|
foreach ($rows as &$r) {
|
|
$r['recid'] = $i++;
|
|
}
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'member_id' => $member_id,
|
|
'records' => $rows
|
|
]);
|
|
break;
|
|
|
|
|
|
/* =========================
|
|
2. 사용자 저장
|
|
========================= */
|
|
case 'save':
|
|
|
|
$inserts = $input['inserts'] ?? [];
|
|
$updates = $input['updates'] ?? [];
|
|
|
|
if (!$inserts && !$updates) {
|
|
throw new Exception('저장할 데이터가 없습니다.');
|
|
}
|
|
|
|
$pdo->beginTransaction();
|
|
|
|
// INSERT
|
|
if ($inserts) {
|
|
$stmtI = $pdo->prepare("
|
|
SELECT kngil.sp_users_i(
|
|
:member_id,:user_id,:user_pw,:user_nm,:dept_nm,
|
|
:posit_nm,:tel_no,:email,:auth_bc,:use_yn,:rmks,:cid
|
|
)
|
|
");
|
|
|
|
foreach ($inserts as $r) {
|
|
$stmtI->execute([
|
|
':member_id' => $member_id,
|
|
':user_id' => $r['user_id'],
|
|
':user_pw' => $r['user_pw'] ?? '0000',
|
|
':user_nm' => $r['user_nm'],
|
|
':dept_nm' => $r['dept_nm'],
|
|
':posit_nm' => $r['posit_nm'] ?? '',
|
|
':tel_no' => $r['tel_no'],
|
|
':email' => $r['email'],
|
|
':auth_bc' => $r['auth_bc'],
|
|
':use_yn' => $r['use_yn'],
|
|
':rmks' => $r['rmks'] ?? '',
|
|
':cid' => $r['cid'] ?? 'SYSTEM'
|
|
]);
|
|
}
|
|
}
|
|
|
|
// UPDATE
|
|
if ($updates) {
|
|
$stmtU = $pdo->prepare("
|
|
SELECT kngil.sp_users_u(
|
|
:member_id,:user_id,:user_pw,:user_nm,:dept_nm,
|
|
:posit_nm,:tel_no,:email,:auth_bc,:use_yn,:rmks,:mid
|
|
)
|
|
");
|
|
|
|
foreach ($updates as $r) {
|
|
$stmtU->execute([
|
|
':member_id' => $member_id,
|
|
':user_id' => $r['user_id'],
|
|
':user_pw' => null,
|
|
':user_nm' => $r['user_nm'],
|
|
':dept_nm' => $r['dept_nm'],
|
|
':posit_nm' => $r['posit_nm'] ?? '',
|
|
':tel_no' => $r['tel_no'],
|
|
':email' => $r['email'],
|
|
':auth_bc' => $r['auth_bc'],
|
|
':use_yn' => $r['use_yn'],
|
|
':rmks' => $r['rmks'] ?? '',
|
|
':mid' => $r['mid'] ?? 'SYSTEM'
|
|
]);
|
|
}
|
|
}
|
|
|
|
$pdo->commit();
|
|
echo json_encode(['status'=>'success']);
|
|
break;
|
|
|
|
|
|
|
|
/* =========================
|
|
3. 사용자 삭제 (비활성)
|
|
========================= */
|
|
case 'delete':
|
|
|
|
$ids = $input['ids'] ?? [];
|
|
if (!$ids) throw new Exception('삭제 대상이 없습니다.');
|
|
|
|
$sql = "SELECT kngil.sp_users_d(:member_id, :user_id)";
|
|
$stmt = $pdo->prepare($sql);
|
|
|
|
foreach ($ids as $uid) {
|
|
$stmt->execute([
|
|
':member_id' => $member_id,
|
|
':user_id' => $uid
|
|
]);
|
|
}
|
|
|
|
echo json_encode(['status'=>'success']);
|
|
break;
|
|
/* =========================
|
|
4. 회원 총 구매 면적 조회
|
|
========================= */
|
|
case 'total_area':
|
|
|
|
$sql = "
|
|
SELECT COALESCE(SUM(sum_area), 0) AS total_area
|
|
FROM kngil.sp_buy_item_history_r(:member_id, '', NULL, NULL)
|
|
";
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute([
|
|
':member_id' => $member_id
|
|
]);
|
|
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'member_id' => $member_id,
|
|
'total_area' => (int)$row['total_area']
|
|
]);
|
|
break;
|
|
|
|
default:
|
|
throw new Exception('잘못된 요청');
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
|
|
if ($pdo->inTransaction()) {
|
|
$pdo->rollBack();
|
|
}
|
|
|
|
http_response_code(500);
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => $e->getMessage()
|
|
]);
|
|
} |