73 lines
2.7 KiB
JavaScript
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();
|
|
}
|
|
})();
|