diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-07 01:44:45 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-07 01:44:45 +0000 |
| commit | 90f79a7a691943a496f67f01c1e493256070e4de (patch) | |
| tree | 37275fde3ae08c2bca384fbbc8eb378de7e39230 /lib/vendor-document-list/import-service.ts | |
| parent | fbb3b7f05737f9571b04b0a8f4f15c0928de8545 (diff) | |
(대표님) 변경사항 20250707 10시 43분 - unstaged 변경사항 추가
Diffstat (limited to 'lib/vendor-document-list/import-service.ts')
| -rw-r--r-- | lib/vendor-document-list/import-service.ts | 169 |
1 files changed, 138 insertions, 31 deletions
diff --git a/lib/vendor-document-list/import-service.ts b/lib/vendor-document-list/import-service.ts index 9a4e44db..bc384ea2 100644 --- a/lib/vendor-document-list/import-service.ts +++ b/lib/vendor-document-list/import-service.ts @@ -890,22 +890,67 @@ class ImportService { detailDoc: DOLCEDetailDocument, sourceSystem: string ): Promise<'NEW' | 'UPDATED' | 'SKIPPED'> { - // 기존 revision 조회 (registerId로) - const existingRevision = await db - .select() - .from(revisions) - .where(and( - eq(revisions.issueStageId, issueStageId), - eq(revisions.registerId, detailDoc.RegisterId) - )) - .limit(1) - + + // 🆕 여러 조건으로 기존 revision 조회 + let existingRevision = null + + // 1차: registerId로 조회 (가장 정확한 매칭) + if (detailDoc.RegisterId) { + const results = await db + .select() + .from(revisions) + .where(and( + eq(revisions.issueStageId, issueStageId), + eq(revisions.registerId, detailDoc.RegisterId) + )) + .limit(1) + + if (results.length > 0) { + existingRevision = results[0] + console.log(`Found revision by registerId: ${detailDoc.RegisterId}`) + } + } + + // 2차: externalUploadId로 조회 (업로드했던 revision 매칭) + if (!existingRevision && detailDoc.UploadId) { + const results = await db + .select() + .from(revisions) + .where(and( + eq(revisions.issueStageId, issueStageId), + eq(revisions.externalUploadId, detailDoc.UploadId) + )) + .limit(1) + + if (results.length > 0) { + existingRevision = results[0] + console.log(`Found revision by externalUploadId: ${detailDoc.UploadId}`) + } + } + + // 3차: DrawingRevNo로 조회 (같은 issueStage 내에서 revision 번호 매칭) + if (!existingRevision && detailDoc.DrawingRevNo) { + const results = await db + .select() + .from(revisions) + .where(and( + eq(revisions.issueStageId, issueStageId), + eq(revisions.revision, detailDoc.DrawingRevNo) + )) + .limit(1) + + if (results.length > 0) { + existingRevision = results[0] + console.log(`Found revision by DrawingRevNo: ${detailDoc.DrawingRevNo}`) + } + } + // Category에 따른 uploaderType 매핑 const uploaderType = this.mapCategoryToUploaderType(detailDoc.Category) - // RegisterKind에 따른 usage, usageType 매핑 (기본 로직, 추후 개선) + // RegisterKind에 따른 usage, usageType 매핑 const { usage, usageType } = this.mapRegisterKindToUsage(detailDoc.RegisterKind) - + // DOLCE 상세 데이터를 revisions 스키마에 맞게 변환 const revisionData = { issueStageId, @@ -916,27 +961,27 @@ class ImportService { usageType, revisionStatus: detailDoc.Status, externalUploadId: detailDoc.UploadId, - registerId: detailDoc.RegisterId, + registerId: detailDoc.RegisterId, // 🆕 항상 최신 registerId로 업데이트 comment: detailDoc.RegisterDesc, submittedDate: this.convertDolceDateToDate(detailDoc.CreateDt), updatedAt: new Date() } - - if (existingRevision.length > 0) { + + if (existingRevision) { // 업데이트 필요 여부 확인 - const existing = existingRevision[0] const hasChanges = - existing.revision !== revisionData.revision || - existing.revisionStatus !== revisionData.revisionStatus || - existing.uploaderName !== revisionData.uploaderName - + existingRevision.revision !== revisionData.revision || + existingRevision.revisionStatus !== revisionData.revisionStatus || + existingRevision.uploaderName !== revisionData.uploaderName || + existingRevision.registerId !== revisionData.registerId // 🆕 registerId 변경 확인 + if (hasChanges) { await db .update(revisions) .set(revisionData) - .where(eq(revisions.id, existing.id)) - - console.log(`Updated revision: ${detailDoc.RegisterId}`) + .where(eq(revisions.id, existingRevision.id)) + + console.log(`Updated revision: ${detailDoc.RegisterId} (local ID: ${existingRevision.id})`) return 'UPDATED' } else { return 'SKIPPED' @@ -949,12 +994,11 @@ class ImportService { ...revisionData, createdAt: new Date() }) - + console.log(`Created new revision: ${detailDoc.RegisterId}`) return 'NEW' } } - /** * Category를 uploaderType으로 매핑 */ @@ -972,12 +1016,75 @@ class ImportService { /** * RegisterKind를 usage/usageType으로 매핑 */ - private mapRegisterKindToUsage(registerKind: string): { usage: string; usageType: string } { - // TODO: 추후 비즈니스 로직에 맞게 구현 - // 현재는 기본 매핑만 제공 - return { - usage: registerKind || 'DEFAULT', - usageType: registerKind || 'DEFAULT' + private mapRegisterKindToUsage(registerKind: string): { usage: string; usageType: string | null } { + if (!registerKind) { + return { + usage: 'DEFAULT', + usageType: 'DEFAULT' + } + } + + switch (registerKind.toUpperCase()) { + case 'APPR': + return { + usage: 'APPROVAL', + usageType: 'Full' + } + + case 'APPR-P': + return { + usage: 'APPROVAL', + usageType: 'Partial' + } + + case 'WORK': + return { + usage: 'WORKING', + usageType: 'Full' + } + + case 'WORK-P': + return { + usage: 'WORKING', + usageType: 'Partial' + } + + case 'FMEA-1': + return { + usage: 'The 1st', + usageType: null + } + + case 'FMEA-2': + return { + usage: 'The 2nd', + usageType: null + } + + case 'RECP': + return { + usage: 'Pre', + usageType: null + } + + case 'RECW': + return { + usage: 'Working', + usageType: null + } + + case 'CMTM': + return { + usage: 'Mark-Up', + usageType: null + } + + default: + console.warn(`Unknown RegisterKind: ${registerKind}`) + return { + usage: registerKind, + usageType: 'DEFAULT' + } } } |
