summaryrefslogtreecommitdiff
path: root/lib/vendor-document-list
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-04 10:07:12 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-04 10:07:12 +0900
commit718b780e11459494c2f7f71bef76afdaabf20f32 (patch)
tree523506cd0dea6443e339129e84ab90584eade4d4 /lib/vendor-document-list
parentab6e2523baf4d1db1376f51643a34c368b1b5538 (diff)
(김준회) 돌체 요구사항 변경건 처리(REGISTER_ID + OFDC_NO 로 리비전 구분)
Diffstat (limited to 'lib/vendor-document-list')
-rw-r--r--lib/vendor-document-list/import-service.ts94
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(