const mysql = require('mysql2/promise'); require('dotenv').config(); async function rebuildAssetCodes() { 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] μ‹ κ·œ μžμ‚° ꡬ맀일 μ—…λ°μ΄νŠΈ (YYYY-12-01)...'); // 1. 였늘 μž…λ ₯ν•œ μžμ‚°λ“€ 쑰회 const [rows] = await connection.query( 'SELECT id, purchase_date FROM asset_core WHERE id LIKE "PC_20260615_%"' ); console.log(`λŒ€μƒ μžμ‚°: ${rows.length}건`); // 2. ꡬ맀일자 μ—…λ°μ΄νŠΈ (μ—°λ„λ§Œ μžˆλŠ” 경우 -12-01 μΆ”κ°€) for (const row of rows) { if (row.purchase_date && row.purchase_date.length === 4) { const newDate = `${row.purchase_date}-12-01`; await connection.query( 'UPDATE asset_core SET purchase_date = ? WHERE id = ?', [newDate, row.id] ); } } console.log('βœ… ꡬ맀일 μ—…λ°μ΄νŠΈ μ™„λ£Œ.'); console.log('\nπŸš€ [Step 2] μžμ‚°λ²ˆν˜Έ(asset_code) μž¬λ§€ν•‘ μ‹œμž‘...'); // 3. μ—°λ„λ³„λ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ μžμ‚°λ²ˆν˜Έ λΆ€μ—¬ // 연도 λͺ©λ‘ μΆ”μΆœ const [yearRows] = await connection.query( 'SELECT DISTINCT LEFT(purchase_date, 4) as year FROM asset_core WHERE id LIKE "PC_20260615_%" ORDER BY year' ); for (const yRow of yearRows) { const year = yRow.year; const yearMonth = `${year}12`; const pattern = `PC-${yearMonth}-%`; console.log(`--- [${year}λ…„] 처리 쀑 ---`); // ν•΄λ‹Ή 연도/μ›”μ˜ κΈ°μ‘΄ μ΅œλŒ€ 순번 쑰회 const [maxRows] = await connection.query( 'SELECT asset_code FROM asset_core WHERE asset_code LIKE ? AND id NOT LIKE "PC_20260615_%"', [pattern] ); let maxSeq = 0; maxRows.forEach(r => { const parts = r.asset_code.split('-'); const seq = parseInt(parts[2]); if (seq > maxSeq) maxSeq = seq; }); console.log(`κΈ°μ‘΄ μ΅œλŒ€ 순번: ${maxSeq}`); // ν•΄λ‹Ή 연도 μžμ‚°λ“€ 순차적으둜 번호 λΆ€μ—¬ const [assetsOfYear] = await connection.query( 'SELECT id FROM asset_core WHERE id LIKE "PC_20260615_%" AND purchase_date LIKE ? ORDER BY id', [`${year}-12%`] ); let currentSeq = maxSeq + 1; for (const asset of assetsOfYear) { const newCode = `PC-${yearMonth}-${String(currentSeq).padStart(4, '0')}`; await connection.query( 'UPDATE asset_core SET asset_code = ? WHERE id = ?', [newCode, asset.id] ); currentSeq++; } console.log(`μ‹ κ·œ λΆ€μ—¬ μ™„λ£Œ: ${assetsOfYear.length}건 (순번 ${maxSeq + 1} ~ ${currentSeq - 1})`); } console.log('\n✨ λͺ¨λ“  μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.'); await connection.end(); } rebuildAssetCodes().catch(console.error);