docs: add work log for 2026-06-15 and update DB deletion policy in README
This commit is contained in:
85
scratch/rebuild_asset_codes_final.cjs
Normal file
85
scratch/rebuild_asset_codes_final.cjs
Normal file
@@ -0,0 +1,85 @@
|
||||
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);
|
||||
Reference in New Issue
Block a user