diff options
Diffstat (limited to 'lib/sedp')
| -rw-r--r-- | lib/sedp/get-form-tags.ts | 2 | ||||
| -rw-r--r-- | lib/sedp/sedp-token.ts | 2 | ||||
| -rw-r--r-- | lib/sedp/sync-form.ts | 29 | ||||
| -rw-r--r-- | lib/sedp/sync-object-class.ts | 2 | ||||
| -rw-r--r-- | lib/sedp/sync-projects.ts | 2 | ||||
| -rw-r--r-- | lib/sedp/sync-tag-types.ts | 2 |
6 files changed, 23 insertions, 16 deletions
diff --git a/lib/sedp/get-form-tags.ts b/lib/sedp/get-form-tags.ts index b488bfad..6911180b 100644 --- a/lib/sedp/get-form-tags.ts +++ b/lib/sedp/get-form-tags.ts @@ -118,7 +118,7 @@ export async function importTagsFromSEDP( if (progressCallback) progressCallback(30); // 컬럼 정보 파싱 - const columnsJSON: Column[] = JSON.parse(formMetaRecord[0].columns as string); + const columnsJSON: Column[] = (formMetaRecord[0].columns); // 현재 formEntries 데이터 가져오기 const existingEntries = await db.select({ id: formEntries.id, data: formEntries.data }) diff --git a/lib/sedp/sedp-token.ts b/lib/sedp/sedp-token.ts index bac6bdca..dc419c87 100644 --- a/lib/sedp/sedp-token.ts +++ b/lib/sedp/sedp-token.ts @@ -1,5 +1,5 @@ // 환경 변수 -const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/dev/api'; +const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; const SEDP_API_USER_ID = process.env.SEDP_API_USER_ID || 'EVCPUSER'; const SEDP_API_PASSWORD = process.env.SEDP_API_PASSWORD || 'evcpuser@2025'; diff --git a/lib/sedp/sync-form.ts b/lib/sedp/sync-form.ts index a3caa809..2cb677b7 100644 --- a/lib/sedp/sync-form.ts +++ b/lib/sedp/sync-form.ts @@ -1,11 +1,11 @@ // src/lib/cron/syncTagFormMappings.ts import db from "@/db/db"; -import { projects, tagTypes, tagClasses, tagTypeClassFormMappings, formMetas, forms, contractItems, items } from '@/db/schema'; +import { projects, tagTypes, tagClasses, tagTypeClassFormMappings, formMetas, forms, contractItems, items, contracts } from '@/db/schema'; import { eq, and, inArray, ilike } from 'drizzle-orm'; import { getSEDPToken } from "./sedp-token"; // 환경 변수 -const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/dev/api'; +const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; // 인터페이스 정의 interface TagTypeClassFormMapping { @@ -661,7 +661,7 @@ async function getUomById(projectCode: string, uomId: string): Promise<UOM | nul } // contractItemId 조회 함수 -async function getContractItemsByItemCodes(itemCodes: string[]): Promise<Map<string, number>> { +async function getContractItemsByItemCodes(itemCodes: string[], projectId: number): Promise<Map<string, number>> { try { if (!itemCodes.length) return new Map(); @@ -681,13 +681,19 @@ async function getContractItemsByItemCodes(itemCodes: string[]): Promise<Map<str // item ID 목록 추출 const itemIds = itemRecords.map(item => item.id); - // contractItems 조회 + // contracts와 join하여 projectId로 필터링하면서 contractItems 조회 const contractItemRecords = await db.select({ id: contractItems.id, itemId: contractItems.itemId }) .from(contractItems) - .where(inArray(contractItems.itemId, itemIds)); + .innerJoin(contracts, eq(contractItems.contractId, contracts.id)) + .where( + and( + inArray(contractItems.itemId, itemIds), + eq(contracts.projectId, projectId) + ) + ); // itemCode와 contractItemId의 매핑 생성 const itemCodeToContractItemId = new Map<string, number>(); @@ -751,7 +757,7 @@ async function saveFormMappingsAndMetas( const uniqueItemCodes = [...new Set(allItemCodes)]; // 모든 itemCode에 대한 contractItemId 조회 - const itemCodeToContractItemId = await getContractItemsByItemCodes(uniqueItemCodes); + const itemCodeToContractItemId = await getContractItemsByItemCodes(uniqueItemCodes , projectId); console.log(`${uniqueItemCodes.length}개의 고유 itemCode 중 ${itemCodeToContractItemId.size}개의 contractItem을 찾았습니다`); @@ -769,11 +775,7 @@ async function saveFormMappingsAndMetas( if (register.DELETED) continue; // REMARK에서 itemCodes 추출 - const itemCodes = extractItemCodes(register.REMARK || ''); - if (!itemCodes.length) { - console.log(`Register ${register.TYPE_ID} (${register.DESC})의 REMARK에 유효한 itemCode가 없습니다`); - continue; - } + // 폼 메타용 columns 구성 const columns: FormColumn[] = []; @@ -887,6 +889,11 @@ async function saveFormMappingsAndMetas( }); } + const itemCodes = extractItemCodes(register.REMARK || ''); + if (!itemCodes.length) { + console.log(`Register ${register.TYPE_ID} (${register.DESC})의 REMARK에 유효한 itemCode가 없습니다`); + continue; + } // 폼 레코드 준비 for (const itemCode of itemCodes) { const contractItemId = itemCodeToContractItemId.get(itemCode); diff --git a/lib/sedp/sync-object-class.ts b/lib/sedp/sync-object-class.ts index 0a76c592..68b9384f 100644 --- a/lib/sedp/sync-object-class.ts +++ b/lib/sedp/sync-object-class.ts @@ -4,7 +4,7 @@ import { eq, and } from 'drizzle-orm'; import { getSEDPToken } from "./sedp-token"; // 환경 변수 -const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/dev/api'; +const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; // ObjectClass 인터페이스 정의 interface ObjectClass { diff --git a/lib/sedp/sync-projects.ts b/lib/sedp/sync-projects.ts index 0f5ed2a8..07d825b7 100644 --- a/lib/sedp/sync-projects.ts +++ b/lib/sedp/sync-projects.ts @@ -5,7 +5,7 @@ import { eq } from 'drizzle-orm'; import { getSEDPToken } from "./sedp-token"; // 환경 변수 -const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/dev/api'; +const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; // 인터페이스 정의 interface Project { diff --git a/lib/sedp/sync-tag-types.ts b/lib/sedp/sync-tag-types.ts index 8233badd..abed9021 100644 --- a/lib/sedp/sync-tag-types.ts +++ b/lib/sedp/sync-tag-types.ts @@ -5,7 +5,7 @@ import { eq, and, inArray } from 'drizzle-orm'; import { getSEDPToken } from "./sedp-token"; // 환경 변수 -const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/dev/api'; +const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; // 인터페이스 정의 interface TagType { |
