From 92403c19aad9a69f342ba135848fc6b75ed3e400 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Mon, 14 Jul 2025 09:26:00 +0000 Subject: (김준회) 미사용 함수 제거 및 XML 중복래핑 구조문제 해결 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/soap/mdg/send/vendor-master/action.ts | 123 +++++++++++++----------------- 1 file changed, 52 insertions(+), 71 deletions(-) (limited to 'lib/soap') diff --git a/lib/soap/mdg/send/vendor-master/action.ts b/lib/soap/mdg/send/vendor-master/action.ts index 46d6e71f..b353eab0 100644 --- a/lib/soap/mdg/send/vendor-master/action.ts +++ b/lib/soap/mdg/send/vendor-master/action.ts @@ -143,6 +143,14 @@ export async function sendVendorMasterToMDG(vendorCodes: string[]): Promise<{ const soapData = buildSoapData(vendorData); console.log(`📄 VENDOR ${vendorCode} SOAP 데이터 생성 완료`); + // 데이터 구조 검증 (디버깅용) + const validation = validateSoapDataStructure(soapData); + if (!validation.isValid) { + console.warn(`⚠️ VENDOR ${vendorCode} 데이터 구조 문제:`, validation.issues); + } else { + console.log(`✅ VENDOR ${vendorCode} 데이터 구조 검증 통과`); + } + // SOAP 클라이언트로 요청 전송 await withSoapLogging( 'OUTBOUND', @@ -311,11 +319,10 @@ function buildSoapData(vendorData: NonNullable): { + isValid: boolean; + structure: string; + issues: string[]; +} { + const issues: string[] = []; + + // 올바른 구조인지 확인 + if (!soapData.SUPPLIER_MASTER) { + issues.push('SUPPLIER_MASTER 필드가 없습니다.'); + } + + // P2MD3007_S 중복 확인 (이제는 없어야 함) + if (soapData.P2MD3007_S) { + issues.push('P2MD3007_S 래핑이 발견되었습니다. 중복 구조로 인해 문제가 발생할 수 있습니다.'); + } + + // 구조 출력 + const structure = JSON.stringify(soapData, null, 2); + + return { + isValid: issues.length === 0, + structure, + issues + }; +} + // 통계 조회 유틸리티 함수 export async function getVendorSendStatistics(): Promise<{ total: number; @@ -668,13 +703,23 @@ export async function sendTestVendorDataToMDG(formData: Record): // SOAP 요청 구조 생성 const soapData = { - P2MD3007_S: { - SUPPLIER_MASTER: supplierMaster - } + SUPPLIER_MASTER: supplierMaster }; console.log('📄 테스트 SOAP 데이터 생성 완료'); + // 데이터 구조 검증 (디버깅용) + const validation = validateSoapDataStructure(soapData); + if (!validation.isValid) { + console.warn('⚠️ 테스트 데이터 구조 문제:', validation.issues); + return { + success: false, + message: `데이터 구조 오류: ${validation.issues.join(', ')}` + }; + } else { + console.log('✅ 테스트 데이터 구조 검증 통과'); + } + // SOAP 클라이언트로 요청 전송 const responseData = await withSoapLogging( 'OUTBOUND', @@ -712,68 +757,4 @@ export async function sendTestVendorDataToMDG(formData: Record): } } -// 직접 XML 전송 함수 (기존 호환성 유지) -export async function sendVendorEnvelopeToMDG(envelope: string): Promise<{ - success: boolean; - message: string; - responseText?: string; -}> { - try { - const responseText = await withSoapLogging( - 'OUTBOUND', - 'MDG', - 'IF_MDZ_EVCP_VENDOR_MASTER_TEST', // 테스트용 인터페이스명 - envelope, - async () => { - // 직접 XML 전송의 경우 기존 fetch 방식 유지 - const MDG_ENDPOINT_URL = "http://shii8dvddb01.hec.serp.shi.samsung.net:50000/sap/xi/engine?type=entry&version=3.0&Sender.Service=P2038_Q&Interface=http%3A%2F%2Fshi.samsung.co.kr%2FP2_MD%2FMDZ%5EP2MD3007_AO&QualityOfService=ExactlyOnce"; - - // 인증 헤더 준비 - const headers: Record = { - 'Content-Type': 'text/xml; charset=utf-8', - 'SOAPAction': 'http://sap.com/xi/WebService/soap1.1', - }; - - // Basic Authentication 헤더 추가 - if (MDG_SOAP_USERNAME && MDG_SOAP_PASSWORD) { - const credentials = Buffer.from(`${MDG_SOAP_USERNAME}:${MDG_SOAP_PASSWORD}`).toString('base64'); - headers['Authorization'] = `Basic ${credentials}`; - console.log('🔐 Basic Authentication 헤더 추가 완료'); - } else { - console.warn('⚠️ MDG SOAP 인증 정보가 환경변수에 설정되지 않았습니다.'); - } - - const res = await fetch(MDG_ENDPOINT_URL, { - method: 'POST', - headers, - body: envelope, - }); - - const text = await res.text(); - - if (!res.ok) { - throw new Error(`HTTP ${res.status}: ${res.statusText}`); - } - - // SOAP Fault 검사 - if (text.includes('soap:Fault') || text.includes('SOAP:Fault')) { - throw new Error(`MDG SOAP Fault: ${text}`); - } - - return text; - } - ); - return { - success: true, - message: '전송 성공', - responseText, - }; - } catch (error) { - console.error('XML 전송 실패:', error); - return { - success: false, - message: error instanceof Error ? error.message : 'Unknown error', - }; - } -} -- cgit v1.2.3