"; echo "

🛠 FKI Asset System Migration

"; echo "
"; 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 "

✔ Tables created successfully with spare columns.

"; // --- 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 "

✔ Migration completed successfully!

"; echo "

Go to Dashboard

"; } catch (Exception $e) { if ($db->inTransaction()) $db->rollBack(); echo "

❌ Error: " . $e->getMessage() . "

"; } echo "
";