78 lines
2.8 KiB
JavaScript
78 lines
2.8 KiB
JavaScript
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);
|