86 lines
2.9 KiB
JavaScript
86 lines
2.9 KiB
JavaScript
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);
|