summaryrefslogtreecommitdiff
path: root/lib/sedp
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-05-12 11:35:26 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-05-12 11:35:26 +0000
commitdf91418cd28e98ce05845e476e51aa810202bf33 (patch)
treeec47d9698f43224c3b87aed2988110af5d2ebd45 /lib/sedp
parent033d96b6bfe812e26e9728c4a3f1e69abf858470 (diff)
(대표님) rfq 로직 관련 (libs) 업데이트트
Diffstat (limited to 'lib/sedp')
-rw-r--r--lib/sedp/get-form-tags.ts2
-rw-r--r--lib/sedp/sedp-token.ts2
-rw-r--r--lib/sedp/sync-form.ts29
-rw-r--r--lib/sedp/sync-object-class.ts2
-rw-r--r--lib/sedp/sync-projects.ts2
-rw-r--r--lib/sedp/sync-tag-types.ts2
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 {