Fix: Excel upload logic, field mapping for servers, and date format synchronization
This commit is contained in:
23
server.js
23
server.js
@@ -56,7 +56,7 @@ async function ensureTables() {
|
||||
manager_main VARCHAR(100), manager_sub VARCHAR(100), ip_address VARCHAR(50),
|
||||
remote_tool VARCHAR(100), server_id VARCHAR(100), server_pw VARCHAR(100),
|
||||
model_name VARCHAR(255), mainboard VARCHAR(255), os VARCHAR(100), cpu VARCHAR(100), ram VARCHAR(100), gpu VARCHAR(100),
|
||||
storage1 VARCHAR(100), storage2 VARCHAR(100), storage3 VARCHAR(100), monitoring VARCHAR(100), price VARCHAR(100), remarks TEXT,
|
||||
storage1 VARCHAR(100), storage2 VARCHAR(100), storage3 VARCHAR(100), monitoring VARCHAR(100), price VARCHAR(100), vendor VARCHAR(100), remarks TEXT,
|
||||
storage_location VARCHAR(255), status VARCHAR(50)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
@@ -102,6 +102,14 @@ async function ensureTables() {
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
`);
|
||||
|
||||
// 기존 테이블들에 vendor 컬럼이 없는 경우 추가 (Migration)
|
||||
const [cols] = await pool.query("SHOW COLUMNS FROM pc_assets LIKE 'vendor'");
|
||||
if (cols.length === 0) {
|
||||
for (const table of ['pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets']) {
|
||||
await pool.query(`ALTER TABLE ${table} ADD COLUMN vendor VARCHAR(100) AFTER price`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log('✅ All ITAM tables ensured.');
|
||||
} finally {
|
||||
connection.release();
|
||||
@@ -121,6 +129,7 @@ async function batchSave(tableName, assets, getQuery) {
|
||||
await connection.commit();
|
||||
return { success: true, count: assets.length };
|
||||
} catch (err) {
|
||||
console.error(`❌ Batch Save Error (${tableName}):`, err.message);
|
||||
await connection.rollback();
|
||||
throw err;
|
||||
} finally {
|
||||
@@ -134,16 +143,16 @@ const hardwareInsertSQL = (table) => `
|
||||
id, corp, asset_code, purchase_date, type, detail_purpose, purpose, details,
|
||||
current_org, prev_org, location, manager_main, manager_sub, ip_address,
|
||||
remote_tool, server_id, server_pw, model_name, mainboard, os, cpu, ram, gpu,
|
||||
storage1, storage2, storage3, monitoring, price, remarks,
|
||||
storage1, storage2, storage3, monitoring, price, vendor, remarks,
|
||||
storage_location, status
|
||||
) VALUES ?
|
||||
`;
|
||||
|
||||
const getHardwareValues = (a) => [
|
||||
a.id, a.법인||'', a.자산코드||'', a.구매연월||'', a.type||'', a.상세용도||'', a.용도||'', a.상세||'',
|
||||
a.id, a.법인||'', a.자산코드||'', a.구매연월||'', a.type||'', a.상세용도||'', a['사용자']||a.용도||'', a.상세||'',
|
||||
a.현사용조직||'', a.이전사용조직||'', a.위치||'', a.담당자_정||'', a.담당자_부||'', a.IP주소||'',
|
||||
a.원격접속||'', a.서버ID||'', a.서버PW||'', a.모델명||'', a.메인보드||'', a.OS||'', a.CPU||'', a.RAM||'', a.GPU||'',
|
||||
a.SSD1||'', a.SSD2||'', a.HDD1||'', a.모니터링||'', a.금액||'', a.비고||'',
|
||||
a.SSD1||'', a.SSD2||'', a.SSD3||'', a.모니터링||'', a.금액||'', a.납품업체||a.vendor||'', a.비고||'',
|
||||
a.보관위치||'', a.현재상태||''
|
||||
];
|
||||
|
||||
@@ -157,7 +166,8 @@ const mapHardware = (r, defaultType) => {
|
||||
구매일: r.purchase_date,
|
||||
type: type,
|
||||
상세용도: (type !== '개인PC' && !r.detail_purpose) ? type : r.detail_purpose,
|
||||
용도: r.purpose,
|
||||
용도: (type !== '개인PC' && !r.detail_purpose) ? type : r.detail_purpose,
|
||||
사용자: r.purpose,
|
||||
상세: r.details,
|
||||
현사용조직: r.current_org,
|
||||
이전사용조직: r.prev_org,
|
||||
@@ -176,9 +186,10 @@ const mapHardware = (r, defaultType) => {
|
||||
GPU: r.gpu,
|
||||
SSD1: r.storage1,
|
||||
SSD2: r.storage2,
|
||||
HDD1: r.storage3,
|
||||
SSD3: r.storage3,
|
||||
모니터링: r.monitoring,
|
||||
금액: r.price,
|
||||
납품업체: r.vendor,
|
||||
비고: r.remarks,
|
||||
보관위치: r.storage_location,
|
||||
현재상태: r.status
|
||||
|
||||
Reference in New Issue
Block a user