jasan/migrate_data_v2.php
2026-03-04 21:24:22 +09:00

38 lines
2 KiB
PHP

<?php
try {
$db = new PDO('sqlite:d:\Docker\jasan\dda\assets.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "--- 🛠 데이터 일관성 점검 및 마이그레이션 중... ---\n";
// 1. 재고(STOCK) 상태인 자산의 배정사용자를 '업무용(TEMP_44666b)'으로 통합
// 기존에 비어있거나 다른 이름이었던 경우 업데이트
$stmt1 = $db->prepare("UPDATE laptop_assets
SET assigned_user_name = '업무용(TEMP_44666b)', current_user_id = NULL
WHERE status = 'stock' AND (assigned_user_name != '업무용(TEMP_44666b)' OR assigned_user_name IS NULL)");
$stmt1->execute();
echo "✅ 재고(STOCK) 자산의 배정사용자명을 '업무용(TEMP_44666b)'으로 동기화함. (수정건수: " . $stmt1->rowCount() . "건)\n";
// 2. 매각 대상자 ID 복구 시도 (문자열 이름 -> 정수 ID)
// 기존 disposal_recipient에 이름이 있는 경우 users 테이블과 대조하여 disposal_user_id 채우기
$allDisposed = $db->query("SELECT id, disposal_recipient FROM laptop_assets WHERE status = 'disposed' AND disposal_recipient IS NOT NULL AND disposal_user_id IS NULL")->fetchAll(PDO::FETCH_ASSOC);
$restoredCount = 0;
$userFinder = $db->prepare("SELECT id FROM users WHERE name = ? LIMIT 1");
$idUpdater = $db->prepare("UPDATE laptop_assets SET disposal_user_id = ? WHERE id = ?");
foreach ($allDisposed as $row) {
$userFinder->execute([$row['disposal_recipient']]);
$uid = $userFinder->fetchColumn();
if ($uid) {
$idUpdater->execute([$uid, $row['id']]);
$restoredCount++;
}
}
echo "✅ 매각 자산의 대상자 ID(disposal_user_id)를 사내 직원 데이터와 대조하여 복구함. (복구건수: $restoredCount 건)\n";
echo "--- 🎉 완료되었습니다. ---";
} catch (Exception $e) {
echo "❌ 오류: " . $e->getMessage() . "\n";
}