187 lines
No EOL
7.1 KiB
PHP
187 lines
No EOL
7.1 KiB
PHP
<?php
|
|
/**
|
|
* db_init.php
|
|
* FKI 자산 관리 시스템 데이터베이스 초기화 및 레거시 데이터 이관
|
|
*/
|
|
|
|
require_once 'config.php';
|
|
|
|
// 실행 시간 제한 해제 (대량의 INSERT 처리 대비)
|
|
set_time_limit(300);
|
|
|
|
echo "<!DOCTYPE html><html lang='ko'><head><meta charset='utf-8'><title>System Init</title><style>body{font-family:sans-serif;background:#f4f4f5;padding:2rem;} .log{background:#fff;padding:1rem;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,0.1);}</style></head><body>";
|
|
echo "<h1>🛠 FKI Asset System Migration</h1>";
|
|
echo "<div class='log'>";
|
|
|
|
try {
|
|
$db->beginTransaction();
|
|
|
|
// --- 1. 테이블 스키마 정의 (spare_1~5 컬럼 포함) ---
|
|
|
|
// [A] 조직도 (departments)
|
|
$db->exec("DROP TABLE IF EXISTS departments");
|
|
$db->exec("CREATE TABLE departments (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
parent_id INTEGER DEFAULT NULL,
|
|
level INTEGER DEFAULT 1,
|
|
spare_1 TEXT, spare_2 TEXT, spare_3 TEXT, spare_4 TEXT, spare_5 TEXT,
|
|
FOREIGN KEY(parent_id) REFERENCES departments(id)
|
|
)");
|
|
|
|
// [B] 직원 마스터 (users)
|
|
$db->exec("DROP TABLE IF EXISTS users");
|
|
$db->exec("CREATE TABLE users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
emp_id TEXT UNIQUE,
|
|
name TEXT NOT NULL,
|
|
department_id INTEGER,
|
|
position TEXT,
|
|
email TEXT,
|
|
phone TEXT,
|
|
mobile TEXT,
|
|
status TEXT DEFAULT 'active',
|
|
accounting_type TEXT DEFAULT '일반회계',
|
|
spare_1 TEXT, spare_2 TEXT, spare_3 TEXT, spare_4 TEXT, spare_5 TEXT,
|
|
FOREIGN KEY(department_id) REFERENCES departments(id)
|
|
)");
|
|
|
|
// [C] 모델 마스터 (laptop_models)
|
|
$db->exec("DROP TABLE IF EXISTS laptop_models");
|
|
$db->exec("CREATE TABLE laptop_models (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
model_name TEXT NOT NULL,
|
|
manufacturer TEXT,
|
|
spare_1 TEXT, spare_2 TEXT, spare_3 TEXT, spare_4 TEXT, spare_5 TEXT
|
|
)");
|
|
|
|
// [D] 노트북 실물 (laptop_assets)
|
|
$db->exec("DROP TABLE IF EXISTS laptop_assets");
|
|
$db->exec("CREATE TABLE laptop_assets (
|
|
asset_tag TEXT PRIMARY KEY,
|
|
model_id INTEGER,
|
|
current_user_id INTEGER,
|
|
status TEXT DEFAULT 'stock',
|
|
serial_number TEXT,
|
|
purchase_date DATE,
|
|
spare_1 TEXT, spare_2 TEXT, spare_3 TEXT, spare_4 TEXT, spare_5 TEXT,
|
|
FOREIGN KEY(model_id) REFERENCES laptop_models(id),
|
|
FOREIGN KEY(current_user_id) REFERENCES users(id)
|
|
)");
|
|
|
|
// [E] 임시 출입증 (access_cards)
|
|
$db->exec("DROP TABLE IF EXISTS access_cards");
|
|
$db->exec("CREATE TABLE access_cards (
|
|
card_number TEXT PRIMARY KEY,
|
|
card_type TEXT,
|
|
nfc_id TEXT,
|
|
status TEXT DEFAULT 'available',
|
|
spare_1 TEXT, spare_2 TEXT, spare_3 TEXT, spare_4 TEXT, spare_5 TEXT
|
|
)");
|
|
|
|
// [F] 복합기 계정 (mfp_accounts)
|
|
$db->exec("DROP TABLE IF EXISTS mfp_accounts");
|
|
$db->exec("CREATE TABLE mfp_accounts (
|
|
account_id TEXT PRIMARY KEY,
|
|
account_pw TEXT,
|
|
purpose TEXT,
|
|
status TEXT DEFAULT 'active',
|
|
spare_1 TEXT, spare_2 TEXT, spare_3 TEXT, spare_4 TEXT, spare_5 TEXT
|
|
)");
|
|
|
|
echo "<p>✔ Tables created successfully with spare columns.</p>";
|
|
|
|
// --- 2. 레거시 데이터 주입 (CSV 기반 데이터) ---
|
|
|
|
// 2.1 부서 데이터 (ID, 이름, 레벨)
|
|
$depts = [
|
|
[1, '경제조사팀', 1],
|
|
[3, '연구총괄대표', 1],
|
|
[4, '기획혁신본부', 1],
|
|
[5, '미구주협력팀', 1],
|
|
[6, '기획혁신팀', 1],
|
|
[7, '글로벌리스크팀', 1],
|
|
[8, '아태협력팀', 1],
|
|
[10, '기업제도팀', 1],
|
|
[11, '자산운영팀', 1],
|
|
[12, '미래전략TF', 1],
|
|
[13, '인사·지원팀', 1],
|
|
[14, '미래전략팀', 1],
|
|
[16, '국제본부', 1],
|
|
[17, '회원서비스팀', 1],
|
|
[18, '대외협력팀', 1],
|
|
[21, '커뮤니케이션본부', 1],
|
|
[23, '경제산업본부', 1],
|
|
[24, '경영지원본부', 1],
|
|
[25, '산업정책팀', 1],
|
|
[26, '국제협력팀', 1],
|
|
[28, '총무팀', 1],
|
|
[30, 'ESG팀', 1],
|
|
[31, '홍보팀', 1],
|
|
[32, '전략기획실', 1],
|
|
[36, '회원팀', 1],
|
|
[39, '기업정책팀', 1],
|
|
[40, '인재경영팀', 1]
|
|
];
|
|
$stmt = $db->prepare("INSERT INTO departments (id, name, level) VALUES (?, ?, ?)");
|
|
foreach ($depts as $d)
|
|
$stmt->execute($d);
|
|
|
|
// 2.2 직원 데이터 (FKI_TEMP 발급 로직 포함)
|
|
$users_data = [
|
|
['FKI20426', '한호', 1, '책임', 'hanpodosa@fki.or.kr', '02-3771-0426', '010-8563-9285'],
|
|
['FKI24208', '정철', 3, '원장', 'cchung@fki.or.kr', NULL, NULL],
|
|
['FKI04454', '김주태', 36, '수석', 'equilia@fki.or.kr', '02-3771-0454', '010-8539-8217'],
|
|
['FKI00377', '이소원', 40, '수석', 'swlee@fki.or.kr', '02-3771-0377', '010-8720-8106'],
|
|
['FKI13517', '전종대', 21, '책임', 'jdjun@fki.or.kr', '02-3771-0443', '010-9016-2668'],
|
|
['FKI02001', '이태규', 18, '선임연구위원', 'tklee@fki.or.kr', '02-3771-0041', '010-3787-8269'],
|
|
['FKI11638', '김다미', 17, '연구원', 'sdamis@fki.or.kr', '02-3771-0389', '010-9006-7600']
|
|
];
|
|
|
|
$user_stmt = $db->prepare("INSERT INTO users (emp_id, name, department_id, position, email, phone, mobile) VALUES (?, ?, ?, ?, ?, ?, ?)");
|
|
foreach ($users_data as $u) {
|
|
$emp_id = $u[0];
|
|
if (!$emp_id) {
|
|
// 이후 시퀀스로 대체하거나 임시 발급
|
|
$emp_id = 'FKI_TEMP_' . bin2hex(random_bytes(4));
|
|
}
|
|
$user_stmt->execute([$emp_id, $u[1], $u[2], $u[3], $u[4], $u[5], $u[6]]);
|
|
}
|
|
|
|
// 2.3 노트북 모델
|
|
$models = [
|
|
['NT750XEV-G51AG', 'SAMSUNG'],
|
|
['DELL VOSTRO 3500', 'DELL'],
|
|
['NT950XGQ-A71AS', 'SAMSUNG'],
|
|
['15S-FQ1005TU', 'HP'],
|
|
['PROBOOK 450 G10', 'HP']
|
|
];
|
|
$model_stmt = $db->prepare("INSERT INTO laptop_models (model_name, manufacturer) VALUES (?, ?)");
|
|
foreach ($models as $m)
|
|
$model_stmt->execute($m);
|
|
|
|
// 2.4 노트북 자산
|
|
$assets = [
|
|
['160003779', 1, 1, 'assigned', 'KVGY99YTC001Q4', '2024-01-23'],
|
|
['160003774', 1, 2, 'assigned', 'KVGY99YTC001P1', '2024-01-23'],
|
|
['160003823', 3, 3, 'assigned', '593491HXC00078', '2024-05-19']
|
|
];
|
|
$asset_stmt = $db->prepare("INSERT INTO laptop_assets (asset_tag, model_id, current_user_id, status, serial_number, purchase_date) VALUES (?, ?, ?, ?, ?, ?)");
|
|
foreach ($assets as $a)
|
|
$asset_stmt->execute($a);
|
|
|
|
// 2.5 출입증 & 복합기
|
|
$db->exec("INSERT INTO access_cards (card_number, card_type, nfc_id) VALUES ('FKI_244', 'Research 01', 'A3D9D7CD')");
|
|
$db->exec("INSERT INTO mfp_accounts (account_id, account_pw, purpose) VALUES ('Audit03', 'Audit03', 'Audit Team')");
|
|
|
|
$db->commit();
|
|
echo "<p>✔ Migration completed successfully!</p>";
|
|
echo "<p><a href='index.php'>Go to Dashboard</a></p>";
|
|
|
|
} catch (Exception $e) {
|
|
if ($db->inTransaction())
|
|
$db->rollBack();
|
|
echo "<p style='color:red;'>❌ Error: " . $e->getMessage() . "</p>";
|
|
}
|
|
|
|
echo "</div></body></html>"; |