const mysql = require('mysql2/promise'); require('dotenv').config(); async function updateAndCompare() { const connection = await mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME, port: parseInt(process.env.DB_PORT || '3306') }); console.log('🚀 [Step 1 & 2] "undefined" 사번 및 빈 사용자명 정리 중...'); const [updateResult] = await connection.query(` UPDATE asset_core SET user_current = '공용', emp_no = NULL WHERE id LIKE "PC_20260615_%" AND (emp_no = 'undefined' OR emp_no IS NULL OR emp_no = '') `); console.log(`✅ 업데이트 완료: ${updateResult.affectedRows}건`); console.log('\n🔍 [Step 3] 엑셀 데이터와 DB asset_type 비교 분석 중...'); const XLSX = require('xlsx'); const workbook = XLSX.readFile('asset_pc (2026.06.15).xlsx'); const sheet = workbook.Sheets[workbook.SheetNames[0]]; const excelData = XLSX.utils.sheet_to_json(sheet); // DB 데이터 로드 const [dbRows] = await connection.query('SELECT id, asset_type, user_current, emp_no FROM asset_core WHERE id LIKE "PC_20260615_%"'); const dbMap = new Map(); dbRows.forEach(r => dbMap.set(r.id, r)); const mismatches = []; const publicButExcelPersonal = []; for (let i = 0; i < excelData.length; i++) { const excelRow = excelData[i]; const assetId = `PC_20260615_${String(i + 1).padStart(4, '0')}`; const dbRow = dbMap.get(assetId); if (!dbRow) continue; const excelType = excelRow.asset_type || '개인PC'; // 1. 단순 타입 불일치 체크 if (dbRow.asset_type !== excelType) { mismatches.push({ id: assetId, excel_type: excelType, db_type: dbRow.asset_type, user: dbRow.user_current }); } // 2. 엑셀은 '개인PC'인데 데이터는 공용(사번없음)인 경우 탐색 if (excelType === '개인PC' && (!dbRow.emp_no || dbRow.user_current === '공용')) { publicButExcelPersonal.push({ id: assetId, excel_user: excelRow.user_current, excel_dept: excelRow.current_dept, db_user: dbRow.user_current }); } } console.log(`\n📊 분석 결과:`); console.log(`- 엑셀과 DB의 asset_type 불일치: ${mismatches.length}건`); console.log(`- 엑셀은 '개인PC'이나 사번이 없어 '공용'으로 잡힌 항목: ${publicButExcelPersonal.length}건`); if (publicButExcelPersonal.length > 0) { console.log('\n⚠️ 엑셀은 개인PC이나 데이터가 미비한 항목 (상위 10개):'); console.table(publicButExcelPersonal.slice(0, 10)); } await connection.end(); } updateAndCompare().catch(console.error);