diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-04 10:07:12 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-04 10:07:12 +0900 |
| commit | 718b780e11459494c2f7f71bef76afdaabf20f32 (patch) | |
| tree | 523506cd0dea6443e339129e84ab90584eade4d4 /lib/vendor-document-list/import-service.ts | |
| parent | ab6e2523baf4d1db1376f51643a34c368b1b5538 (diff) | |
(김준회) 돌체 요구사항 변경건 처리(REGISTER_ID + OFDC_NO 로 리비전 구분)
Diffstat (limited to 'lib/vendor-document-list/import-service.ts')
| -rw-r--r-- | lib/vendor-document-list/import-service.ts | 94 |
1 files changed, 20 insertions, 74 deletions
diff --git a/lib/vendor-document-list/import-service.ts b/lib/vendor-document-list/import-service.ts index 4e0f7610..694b3d43 100644 --- a/lib/vendor-document-list/import-service.ts +++ b/lib/vendor-document-list/import-service.ts @@ -166,10 +166,9 @@ interface RevisionMatchResult { * DOLCE DetailDocument와 로컬 DB를 비교하여 기존 revision을 찾음 * * 매칭 우선순위: - * 1. registerId (가장 정확) - * 2. externalUploadId (업로드된 revision) - * 3. DrawingRevNo + serialNo + OFDC_NO (복합 매칭) - * 4. DrawingRevNo + serialNo (OFDC_NO 없는 경우) + * 1. registerId + OFDC_NO (OFDC_NO가 있으면 함께 사용) + * 2. DrawingRevNo + serialNo + OFDC_NO (OFDC_NO가 있는 경우) + * 3. DrawingRevNo + serialNo (OFDC_NO 없는 경우 fallback) */ export async function findMatchingRevision( projectId: number, @@ -179,84 +178,31 @@ export async function findMatchingRevision( ): Promise<RevisionMatchResult | null> { let existingRevision: RevisionMatchResult | null = null - // 1차: registerId로 조회 (가장 정확한 매칭) + // 1차: registerId + OFDC_NO로 조회 (OFDC_NO가 있으면 함께 사용) if (detailDoc.RegisterId) { - const query = issueStageId - ? db.select().from(revisions).where( - and( - eq(revisions.issueStageId, issueStageId), - eq(revisions.registerId, detailDoc.RegisterId) - ) - ) - : db.select().from(revisions).where(eq(revisions.registerId, detailDoc.RegisterId)) - - const results = await query.limit(1) + const conditions = [eq(revisions.registerId, detailDoc.RegisterId)] + + // OFDC_NO가 있으면 추가 조건으로 사용 + if (detailDoc.OFDC_NO) { + conditions.push(eq(revisions.ofdcNo, detailDoc.OFDC_NO)) + } + + if (issueStageId) { + conditions.unshift(eq(revisions.issueStageId, issueStageId)) + } + + const results = await db.select().from(revisions).where(and(...conditions)).limit(1) if (results.length > 0) { existingRevision = results[0] as RevisionMatchResult - console.log(`✅ Found revision by registerId: ${detailDoc.RegisterId} → local ID: ${existingRevision.id}`) + console.log(`✅ Found revision by registerId${detailDoc.OFDC_NO ? '+OFDC_NO' : ''}: ${detailDoc.RegisterId}${detailDoc.OFDC_NO ? `/${detailDoc.OFDC_NO}` : ''} → local ID: ${existingRevision.id}`) return existingRevision } else { - console.log(`❌ NOT found by registerId: ${detailDoc.RegisterId}`) - } - } - - // 2차: externalUploadId로 조회 (업로드했던 revision 매칭) - if (!existingRevision && detailDoc.UploadId) { - if (issueStageId) { - 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] as RevisionMatchResult - console.log(`✅ Found revision by externalUploadId: ${detailDoc.UploadId} → local ID: ${existingRevision.id}`) - return existingRevision - } - } else { - const results = await db.select({ - id: revisions.id, - issueStageId: revisions.issueStageId, - revision: revisions.revision, - uploaderType: revisions.uploaderType, - uploaderId: revisions.uploaderId, - uploaderName: revisions.uploaderName, - usage: revisions.usage, - usageType: revisions.usageType, - revisionStatus: revisions.revisionStatus, - comment: revisions.comment, - externalUploadId: revisions.externalUploadId, - registerId: revisions.registerId, - serialNo: revisions.serialNo, - registerSerialNoMax: revisions.registerSerialNoMax, - createdAt: revisions.createdAt, - updatedAt: revisions.updatedAt, - }) - .from(revisions) - .innerJoin(issueStages, eq(issueStages.id, revisions.issueStageId)) - .innerJoin(documents, eq(documents.id, issueStages.documentId)) - .where( - and( - eq(documents.projectId, projectId), - eq(documents.docNumber, docNumber), - eq(revisions.externalUploadId, detailDoc.UploadId) - ) - ) - .limit(1) - - if (results.length > 0) { - existingRevision = results[0] as RevisionMatchResult - console.log(`✅ Found revision by externalUploadId: ${detailDoc.UploadId} → local ID: ${existingRevision.id}`) - return existingRevision - } + console.log(`❌ NOT found by registerId${detailDoc.OFDC_NO ? '+OFDC_NO' : ''}: ${detailDoc.RegisterId}${detailDoc.OFDC_NO ? `/${detailDoc.OFDC_NO}` : ''}`) } - console.log(`❌ NOT found by externalUploadId: ${detailDoc.UploadId}`) } - // 3차: DrawingRevNo + serialNo + OFDC_NO로 조회 (OFDC_NO가 있는 경우 더 정확한 매칭) + // 2차: DrawingRevNo + serialNo + OFDC_NO로 조회 (OFDC_NO가 있는 경우만) if (!existingRevision && detailDoc.DrawingRevNo && detailDoc.RegisterSerialNo && detailDoc.OFDC_NO) { if (issueStageId) { const results = await db.select().from(revisions).where( @@ -315,7 +261,7 @@ export async function findMatchingRevision( console.log(`❌ NOT found by DrawingRevNo+serialNo+OFDC_NO: ${detailDoc.DrawingRevNo}/${detailDoc.RegisterSerialNo}/${detailDoc.OFDC_NO}`) } - // 4차: DrawingRevNo + serialNo로 조회 (OFDC_NO가 없는 경우 fallback) + // 3차: DrawingRevNo + serialNo로 조회 (OFDC_NO가 없는 경우 fallback) if (!existingRevision && detailDoc.DrawingRevNo && detailDoc.RegisterSerialNo) { if (issueStageId) { const results = await db.select().from(revisions).where( |
