import { MasterAssetData, HardwareAsset, SoftwareAsset, SWUser } from './excelHandler'; const corps = ['한맥', '삼안', '바론']; const users = ['홍길동', '김철수', '이영희', '박지훈', '김팀장', '신유진', '윤대웅', '마리아']; const depts = ['설계팀', '기술팀', '경영지원팀', '영업팀']; function rand(arr: any[]) { return arr[Math.floor(Math.random() * arr.length)]; } function randDate(startYear: number, endYear: number) { const y = Math.floor(Math.random() * (endYear - startYear + 1)) + startYear; const m = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); const d = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0'); return `${y}-${m}-${d}`; } function randUser() { // 25% 확률로 유휴자산 할당 return Math.random() < 0.25 ? '' : rand(users); } export function generateDummyData(): MasterAssetData { const hw: HardwareAsset[] = []; const sw: SoftwareAsset[] = []; const swUsers: SWUser[] = []; // 1. 개인PC 50개 for (let i = 1; i <= 50; i++) { const purchaseYear = Math.floor(Math.random() * 8) + 2017; // 2017~2024 hw.push({ id: Math.random().toString(36).substring(2, 9), type: '개인PC', 법인: rand(corps), 자산코드: `HM-PC-${purchaseYear}-${String(i).padStart(3, '0')}`, 명칭: '', 위치: `${rand(['본사', '지사'])} ${Math.floor(Math.random()*5)+1}층`, 사용자: randUser(), CPU: rand(['i5-10400', 'i7-12700', 'Ryzen 5', 'Ryzen 7']), GPU: rand(['-', 'GTX 1660', 'RTX 3060', 'RTX 4070']), RAM: rand(['16GB', '32GB']), SSD1: rand(['256GB', '512GB', '1TB']), SSD2: '', HDD1: rand(['-', '1TB', '2TB']), HDD2: '', 구매일: randDate(purchaseYear, purchaseYear), 금액: String(Math.floor(Math.random()*100 + 50) * 10000).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','), 납품업체: rand(['다나와', '컴퓨존', '오피스디포']), 품의서명: '', 관리자: '', IP주소: '', MACaddress: '', OS: '', HW사양: '' }); } // 2. 서버 20개 for (let i = 1; i <= 20; i++) { const purchaseYear = Math.floor(Math.random() * 8) + 2017; // 2017~2024 hw.push({ id: Math.random().toString(36).substring(2, 9), type: '서버', 법인: rand(corps), 자산코드: `HM-SV-${purchaseYear}-${String(i).padStart(3, '0')}`, 명칭: `웹/DB 서버 #${i}`, 위치: 'IDC / 전산실', 관리자: randUser(), IP주소: `192.168.10.${i}`, MACaddress: '00:11:22:33:44:' + String(i).padStart(2, '0'), OS: rand(['Windows Server 2019', 'Ubuntu 22.04 LTS', 'CentOS 7']), HW사양: 'Xeon 16Core, 64GB RAM', 구매일: randDate(purchaseYear, purchaseYear), 금액: '5,000,000', 납품업체: '서버뱅크', 품의서명: '' }); } // 3. 스토리지 20개 for (let i = 1; i <= 20; i++) { const purchaseYear = Math.floor(Math.random() * 8) + 2017; // 2017~2024 hw.push({ id: Math.random().toString(36).substring(2, 9), type: '스토리지', 법인: rand(corps), storage유형: rand(['NAS', 'DAS']), 자산코드: `HM-ST-${purchaseYear}-${String(i).padStart(3, '0')}`, 명칭: `백업 스토리지 #${i}`, 위치: '전산실', 모델명: rand(['Synology DS920+', 'QNAP TS-453D']), 용량: rand(['16TB', '32TB', '64TB']), 담당자_정: randUser(), 담당자_부: rand(users), IP주소: `192.168.20.${i}`, MACaddress: '', 구매일: randDate(purchaseYear, purchaseYear), 금액: '1,500,000', 납품업체: '스토리지넷', 품의서명: '', 관리자: '', OS: '', HW사양: '' }); } // 4. 전산비품 (노트북, 태블릿, 휴대폰 각각 5개씩) const equips = [ { type: '노트북', code: 'NB', name: 'LG 그램 16인치', price: '1,800,000' }, { type: '태블릿', code: 'TB', name: '아이패드 프로 12.9', price: '1,500,000' }, { type: '휴대폰', code: 'PH', name: '갤럭시 S24', price: '1,200,000' } ]; equips.forEach((eq) => { for (let i = 1; i <= 5; i++) { const purchaseYear = Math.floor(Math.random() * 6) + 2019; // 2019~2024 hw.push({ id: Math.random().toString(36).substring(2, 9), type: '전산비품', 법인: rand(corps), 비품유형: eq.type, 자산코드: `HM-${eq.code}-${purchaseYear}-${String(i).padStart(3, '0')}`, 명칭: eq.name, 위치: rand(['본사', '지사']), 관리자: randUser(), 구매일: randDate(purchaseYear, purchaseYear), 금액: eq.price, 납품업체: '브랜드 총판', 품의서명: '', IP주소: '', MACaddress: '', OS: '', HW사양: '' }); } }); // 5. 구독형 S/W 40개 for (let i = 1; i <= 40; i++) { const swId = Math.random().toString(36).substring(2, 9); let isExpiring = Math.random() < 0.25; let endDt = new Date(); if (isExpiring) { endDt.setDate(endDt.getDate() + Math.floor(Math.random() * 25) + 1); // 1~25일 뒤 만료 } else { endDt.setMonth(endDt.getMonth() + Math.floor(Math.random() * 11) + 2); // 넉넉히 남음 } const endStr = `${endDt.getFullYear()}.${String(endDt.getMonth()+1).padStart(2,'0')}.${String(endDt.getDate()).padStart(2,'0')}`; sw.push({ id: swId, type: '구독SW', 법인: rand(corps), 제품명: rand(['Adobe CC All Apps', 'Microsoft 365', 'Slack Pro', 'Notion Team']), 구매일: '2024-01-01', 구독일: `2024.01.01 ~ ${endStr}`, 금액: '600,000', 수량: Math.floor(Math.random() * 5) + 3, // 3~7 계정명: `user${i}@hm.com`, 납품업체: '총판', 비고: '연간구독' }); const assignCount = Math.floor(Math.random() * 2) + 1; for (let j=0; j