feat: improve asset code generation and re-sequence assets by year
- Enhanced backend asset code generation logic to handle multiple tables - Integrated asset code generation button in HWModal - Included utility scripts for asset code migration and DB synchronization - Resolved issues with missing purchase dates and duplicate asset codes
This commit is contained in:
49
server.js
49
server.js
@@ -134,19 +134,48 @@ app.get('/api/generate-asset-code', async (req, res) => {
|
||||
try {
|
||||
const { prefix } = req.query;
|
||||
if (!prefix) return res.status(400).json({ error: 'Prefix is required' });
|
||||
const tables = ['asset_pc', 'asset_server', 'asset_storage', 'asset_network', 'asset_survey', 'asset_pc_parts', 'asset_equipment', 'asset_office_supplies', 'asset_vip'];
|
||||
|
||||
// asset_code 컬럼이 있는 것으로 확인된 테이블 목록 (DESCRIBE 결과 기반)
|
||||
const tables = [
|
||||
'asset_pc', 'asset_server', 'asset_storage', 'asset_network',
|
||||
'asset_equipment', 'asset_office_supplies', 'asset_survey', 'asset_vip'
|
||||
];
|
||||
|
||||
let lastCode = '';
|
||||
let maxNum = 0;
|
||||
|
||||
for (const table of tables) {
|
||||
const [rows] = await pool.query(`SELECT asset_code FROM ${table} WHERE asset_code LIKE ? ORDER BY asset_code DESC LIMIT 1`, [`${prefix}%`]);
|
||||
if (rows.length > 0 && rows[0].asset_code > lastCode) lastCode = rows[0].asset_code;
|
||||
try {
|
||||
const [rows] = await pool.query(
|
||||
`SELECT asset_code FROM ${table} WHERE asset_code LIKE ? ORDER BY asset_code DESC LIMIT 1`,
|
||||
[`${prefix}%`]
|
||||
);
|
||||
|
||||
if (rows.length > 0) {
|
||||
const code = rows[0].asset_code;
|
||||
// 숫자 부분 추출 (예: SVR048 -> 48)
|
||||
const numMatch = code.match(/\d+/);
|
||||
if (numMatch) {
|
||||
const num = parseInt(numMatch[0]);
|
||||
if (num > maxNum) {
|
||||
maxNum = num;
|
||||
lastCode = code;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn(`[GENERATE CODE] Skipping ${table}: ${err.message}`);
|
||||
}
|
||||
}
|
||||
let nextNum = 1;
|
||||
if (lastCode) {
|
||||
const lastNum = parseInt(lastCode.split('-').pop() || '0');
|
||||
nextNum = lastNum + 1;
|
||||
}
|
||||
res.json({ nextCode: `${prefix}${String(nextNum).padStart(3, '0')}` });
|
||||
} catch (err) { handleError(res, err, 'GENERATE CODE'); }
|
||||
|
||||
const nextNum = maxNum + 1;
|
||||
const nextCode = `${prefix}${String(nextNum).padStart(3, '0')}`;
|
||||
|
||||
console.log(`🆕 [GENERATE CODE] Prefix: ${prefix}, Last: ${lastCode}, Next: ${nextCode}`);
|
||||
res.json({ nextCode });
|
||||
} catch (err) {
|
||||
handleError(res, err, 'GENERATE CODE');
|
||||
}
|
||||
});
|
||||
|
||||
// 6. Map Config API (Real-time Save)
|
||||
|
||||
Reference in New Issue
Block a user