summaryrefslogtreecommitdiff
path: root/lib/sedp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sedp')
-rw-r--r--lib/sedp/sync-form.ts44
-rw-r--r--lib/sedp/sync-package.ts30
2 files changed, 46 insertions, 28 deletions
diff --git a/lib/sedp/sync-form.ts b/lib/sedp/sync-form.ts
index c293c98e..0606f4a9 100644
--- a/lib/sedp/sync-form.ts
+++ b/lib/sedp/sync-form.ts
@@ -851,17 +851,18 @@ async function getUomById(projectCode: string, uomId: string): Promise<UOM | nul
}
// contractItemId 조회 함수
-async function getContractItemsByItemCodes(itemCodes: string[], projectId: number): Promise<Map<string, number>> {
+async function getContractItemsByItemCodes(itemCodes: string[], projectId: number): Promise<Map<string, number[]>> {
try {
if (!itemCodes.length) return new Map();
// 먼저 itemCodes에 해당하는 item 레코드를 조회
const itemRecords = await db.select({
id: items.id,
- itemCode: items.itemCode
+ itemCode: items.itemCode,
+ packageCode: items.packageCode
})
.from(items)
- .where(inArray(items.itemCode, itemCodes));
+ .where(inArray(items.packageCode, itemCodes));
if (!itemRecords.length) {
console.log(`No items found for itemCodes: ${itemCodes.join(', ')}`);
@@ -885,21 +886,22 @@ async function getContractItemsByItemCodes(itemCodes: string[], projectId: numbe
)
);
- // itemCode와 contractItemId의 매핑 생성
- const itemCodeToContractItemId = new Map<string, number>();
+ // itemCode와 contractItemId 배열의 매핑 생성
+ const itemCodeToContractItemIds = new Map<string, number[]>();
for (const item of itemRecords) {
// itemCode가 null이 아닌 경우에만 처리
if (item.itemCode) {
const matchedContractItems = contractItemRecords.filter(ci => ci.itemId === item.id);
if (matchedContractItems.length > 0) {
- // 일치하는 첫 번째 contractItem 사용
- itemCodeToContractItemId.set(item.itemCode, matchedContractItems[0].id);
+ // 일치하는 모든 contractItem을 배열로 저장
+ const contractItemIds = matchedContractItems.map(ci => ci.id);
+ itemCodeToContractItemIds.set(item.itemCode, contractItemIds);
}
}
}
- return itemCodeToContractItemId;
+ return itemCodeToContractItemIds;
} catch (error) {
console.error('ContractItems 조회 중 오류 발생:', error);
return new Map();
@@ -938,10 +940,10 @@ export async function saveFormMappingsAndMetas(
const defaultAttributes = await getDefaulTAttributes();
/* ------------------------------------------------------------------ */
- /* 2. Contract‑item look‑up (TOOL_TYPE) */
+ /* 2. Contract‑item look‑up (TOOL_TYPE) - 수정된 부분 */
/* ------------------------------------------------------------------ */
const uniqueItemCodes = [...new Set(newRegisters.filter(nr => nr.TOOL_TYPE).map(nr => nr.TOOL_TYPE as string))];
- const itemCodeToContractItemId = await getContractItemsByItemCodes(uniqueItemCodes, projectId);
+ const itemCodeToContractItemIds = await getContractItemsByItemCodes(uniqueItemCodes, projectId);
/* ------------------------------------------------------------------ */
/* 3. Buffers for bulk insert */
@@ -1027,11 +1029,25 @@ export async function saveFormMappingsAndMetas(
mappingsToSave.push({ projectId, tagTypeLabel: tp.description, classLabel: cls.label, formCode, formName: legacy?.DESC || formCode, remark: newReg.TOOL_TYPE || null, ep: newReg.EP_ID || legacy?.EP_ID || "", createdAt: new Date(), updatedAt: new Date() });
});
- /* ---------- 4‑d. contractItem ↔ form --------------------------- */
+ /* ---------- 4‑d. contractItem ↔ form - 수정된 부분 -------------- */
if (newReg.TOOL_TYPE) {
- const cId = itemCodeToContractItemId.get(newReg.TOOL_TYPE);
- if (cId) { contractItemIdsWithForms.add(cId); formsToSave.push({ contractItemId: cId, formCode, formName: legacy?.DESC || formCode, eng: true, createdAt: new Date(), updatedAt: new Date() }); }
- else console.warn(`itemCode ${newReg.TOOL_TYPE} 의 contractItemId 없음`);
+ const contractItemIds = itemCodeToContractItemIds.get(newReg.TOOL_TYPE);
+ if (contractItemIds && contractItemIds.length > 0) {
+ // 모든 contractItemId에 대해 form 생성
+ contractItemIds.forEach(cId => {
+ contractItemIdsWithForms.add(cId);
+ formsToSave.push({
+ contractItemId: cId,
+ formCode,
+ formName: legacy?.DESC || formCode,
+ eng: true,
+ createdAt: new Date(),
+ updatedAt: new Date()
+ });
+ });
+ } else {
+ console.warn(`itemCode ${newReg.TOOL_TYPE} 의 contractItemId 없음`);
+ }
}
}
diff --git a/lib/sedp/sync-package.ts b/lib/sedp/sync-package.ts
index c8f39ad8..cdbb5987 100644
--- a/lib/sedp/sync-package.ts
+++ b/lib/sedp/sync-package.ts
@@ -71,7 +71,7 @@ async function getCodeLists(projectCode: string): Promise<Map<string, CodeList>>
interface CodeValue {
VALUE: string;
- DESCC: string;
+ DESC: string;
ATTRIBUTES: Array<{
ATT_ID: string;
VALUE: string;
@@ -129,16 +129,17 @@ export async function syncItemsFromCodeLists(): Promise<void> {
for (const codeValue of pkgNoCodeList.VALUES) {
try {
// ATTRIBUTES에서 필요한 값들 추출
- const packageCodeAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'SHI_PACK_NO');
+ const packageCodeAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'PROJ_PACK_NO');
+ const packageNameAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'PROJ_PACK_DESC');
const smCodeAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'SM_code');
const itemData = {
ProjectNo: project.code,
itemCode: codeValue.VALUE,
- itemName: codeValue.DESCC || '',
+ itemName: packageNameAttr?.VALUE || '' ,
packageCode: packageCodeAttr?.VALUE || '',
smCode: smCodeAttr?.VALUE || null,
- description: null, // 필요시 추가 매핑
+ description: codeValue.DESC || "", // 필요시 추가 매핑
parentItemCode: null, // 필요시 추가 매핑
itemLevel: null, // 필요시 추가 매핑
deleteFlag: 'N', // 기본값
@@ -229,22 +230,23 @@ export async function syncItemsForProject(projectCode: string): Promise<void> {
// ATTRIBUTES에서 필요한 값들 추출
const packageCodeAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'SHI_PACK_NO');
const smCodeAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'SM_code');
+ const packageNameAttr = codeValue.ATTRIBUTES?.find(attr => attr.ATT_ID === 'PROJ_PACK_DESC');
const itemData = {
ProjectNo: projectCode,
itemCode: codeValue.VALUE,
- itemName: codeValue.DESCC || '',
+ itemName: packageNameAttr?.VALUE || '' ,
packageCode: packageCodeAttr?.VALUE || '',
smCode: smCodeAttr?.VALUE || null,
- description: null,
- parentItemCode: null,
- itemLevel: null,
- deleteFlag: 'N',
- unitOfMeasure: null,
- steelType: null,
- gradeMaterial: null,
- changeDate: null,
- baseUnitOfMeasure: null,
+ description: codeValue.DESC || "", // 필요시 추가 매핑
+ parentItemCode: null, // 필요시 추가 매핑
+ itemLevel: null, // 필요시 추가 매핑
+ deleteFlag: 'N', // 기본값
+ unitOfMeasure: null, // 필요시 추가 매핑
+ steelType: null, // 필요시 추가 매핑
+ gradeMaterial: null, // 필요시 추가 매핑
+ changeDate: null, // 필요시 추가 매핑
+ baseUnitOfMeasure: null, // 필요시 추가 매핑
updatedAt: new Date()
};