Files
ITAM/rebuild_asset_codes.cjs

73 lines
2.7 KiB
JavaScript

const mysql = require('mysql2/promise');
require('dotenv').config({ override: true });
const TYPE_PREFIX_MAP = {
'서버': 'SVR', '워크스테이션': 'SVR', '개인PC': 'PC', '공용PC': 'PC', '서버PC': 'PC',
'저장시스템_렉(NAS)': 'DSS', '저장시스템_렉(DAS)': 'DSS', '저장시스템_미니(NAS)': 'DSS', '저장시스템_미니(DAS)':'DSS',
'저장매체': 'STM', 'HDD': 'HDD', 'SSD': 'SSD',
'노트북': 'NBK', '태블릿': 'TAB',
'드론': 'DRO', '측량장비': 'SUR', '보조기기': 'SUR', '허브': 'NET',
'구독SW': 'SW', '영구SW': 'SW', '내부' : 'SW_INT', '외부':'SW_EXT'
};
const CAT_PREFIX_MAP = {
'서버': 'SVR', 'PC': 'PC', '저장매체': 'STM', '네트워크': 'NET',
'공간정보장비': 'SUR', 'PC부품': 'PRT', '업무지원장비': 'EQP', '시설자산': 'FUR'
};
function getPrefix(cat, type) {
return TYPE_PREFIX_MAP[type] || TYPE_PREFIX_MAP[cat] || CAT_PREFIX_MAP[cat] || 'ETC';
}
(async () => {
const pool = mysql.createPool({
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 connection = await pool.getConnection();
try {
const [rows] = await connection.query('SELECT id, category, asset_type, purchase_date, asset_code FROM asset_core ORDER BY purchase_date ASC, id ASC');
console.log(`Found ${rows.length} assets to process.`);
// Grouping by prefix and YYMM
const groups = {};
rows.forEach(row => {
const prefix = getPrefix(row.category, row.asset_type);
const datePart = (row.purchase_date && row.purchase_date.length >= 7)
? row.purchase_date.replace(/-/g, '').substring(0, 6) // YYYYMM
: '000000';
const groupKey = `${prefix}-${datePart}`;
if (!groups[groupKey]) groups[groupKey] = [];
groups[groupKey].push(row);
});
let updatedCount = 0;
for (const groupKey in groups) {
const groupAssets = groups[groupKey];
for (let i = 0; i < groupAssets.length; i++) {
const asset = groupAssets[i];
const nextNum = i + 1;
const newCode = `${groupKey}-${String(nextNum).padStart(4, '0')}`;
if (asset.asset_code !== newCode) {
await connection.query('UPDATE asset_core SET asset_code = ? WHERE id = ?', [newCode, asset.id]);
updatedCount++;
}
}
}
console.log(`✅ Successfully rebuilt asset codes. Total updated: ${updatedCount}`);
} catch (err) {
console.error('❌ Error rebuilding asset codes:', err);
} finally {
connection.release();
await pool.end();
}
})();