const XLSX = require('xlsx'); const mysql = require('mysql2/promise'); require('dotenv').config(); async function deepAudit() { 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); console.log('๐Ÿ“Š [Excel Audit] Total Rows:', excelData.length); // 1. ์—‘์…€ ๋‚ด asset_type ์ข…๋ฅ˜ ํ™•์ธ const excelTypes = new Set(); excelData.forEach(r => excelTypes.add(r.asset_type)); console.log('Excel Asset Types:', Array.from(excelTypes)); // 2. '๊ณต์šฉ' ํ‚ค์›Œ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ชจ๋“  ํ–‰ ์ถ”์ถœ const publicKeywords = ['๊ณต์šฉ', '๊ณตํ†ต', 'ํ…Œ์ŠคํŠธ', 'TEST']; const potentialPublicInExcel = excelData.filter(r => { const name = String(r.user_current || ''); const type = String(r.asset_type || ''); const memo = String(r.memo || ''); return publicKeywords.some(k => name.includes(k) || type.includes(k) || memo.includes(k)) || !r.emp_no; }); console.log(`\n๐Ÿ” [Potential Public/Issue Rows in Excel]: ${potentialPublicInExcel.length}๊ฑด`); console.table(potentialPublicInExcel.slice(0, 30).map(r => ({ emp_no: r.emp_no, user: r.user_current, dept: r.current_dept, type: r.asset_type, memo: r.memo }))); // 3. DB์™€ ๋Œ€์กฐ (ํŠนํžˆ ์—‘์…€์—” ์‚ฌ๋ฒˆ์ด ์žˆ๋Š”๋ฐ DB์—” ๊ณต์šฉ์œผ๋กœ ๋œ ๊ฒŒ ์žˆ๋Š”์ง€) 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') }); const [dbRows] = await connection.query('SELECT id, user_current, emp_no, asset_type FROM asset_core WHERE id LIKE "PC_20260615_%"'); // ์—‘์…€์€ ๊ฐœ์ธPC์ธ๋ฐ DB๋Š” ๊ณต์šฉ์ธ ๊ฒฝ์šฐ (๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€) const issues = []; for (let i = 0; i < excelData.length; i++) { const ex = excelData[i]; const id = `PC_20260615_${String(i + 1).padStart(4, '0')}`; const db = dbRows.find(r => r.id === id); if (!db) continue; const isExcelPublic = !ex.emp_no || String(ex.user_current).includes('๊ณต์šฉ'); const isDbPublic = !db.emp_no || String(db.user_current).includes('๊ณต์šฉ'); if (isExcelPublic !== isDbPublic) { issues.push({ id, excel_user: ex.user_current, db_user: db.user_current, excel_emp: ex.emp_no, db_emp: db.emp_no }); } } console.log(`\nโš ๏ธ [Consistency Issues]: ${issues.length}๊ฑด`); if (issues.length > 0) console.table(issues); await connection.end(); } deepAudit().catch(console.error);