diff options
Diffstat (limited to 'lib/soap/mdg/send')
| -rw-r--r-- | lib/soap/mdg/send/vendor-master/action.ts | 119 |
1 files changed, 80 insertions, 39 deletions
diff --git a/lib/soap/mdg/send/vendor-master/action.ts b/lib/soap/mdg/send/vendor-master/action.ts index d95f630c..bdb2d579 100644 --- a/lib/soap/mdg/send/vendor-master/action.ts +++ b/lib/soap/mdg/send/vendor-master/action.ts @@ -19,6 +19,7 @@ import { import { eq, sql, desc } from "drizzle-orm"; import { CSV_FIELDS } from './csv-fields'; import { sendSoapXml, type SoapSendConfig, type SoapLogInfo } from "@/lib/soap/sender"; +import { debugLog, debugError, debugSuccess } from '@/lib/debug-utils'; // SAP XI 엔드포인트 URL 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"; @@ -39,6 +40,10 @@ async function sendVendorMasterToMDGInternal(supplierMaster: Record<string, stri success: boolean; message: string; responseText?: string; + requestXml?: string; + responseHeaders?: Record<string, string>; + statusCode?: number; + requestHeaders?: Record<string, string>; }> { try { // SOAP Body Content 생성 @@ -63,26 +68,42 @@ async function sendVendorMasterToMDGInternal(supplierMaster: Record<string, stri interface: 'IF_MDZ_EVCP_VENDOR_MASTER' }; - console.log(`📤 VENDOR 마스터 전송 시작`); - console.log(`🔍 SUPPLIER_MASTER 데이터: ${Object.keys(supplierMaster).length}개 필드`); + debugLog(`📤 VENDOR 마스터 전송 시작`); + debugLog(`🔍 SUPPLIER_MASTER 데이터: ${Object.keys(supplierMaster).length}개 필드`); // SOAP XML 전송 const result = await sendSoapXml(config, logInfo); + // 응답 상세 정보 로깅 + debugLog('📊 SOAP 전송 결과 상세:', { + success: result.success, + message: result.message, + statusCode: result.statusCode, + hasResponseText: !!result.responseText, + responseTextLength: result.responseText?.length, + hasRequestXml: !!result.requestXml, + requestXmlLength: result.requestXml?.length, + headers: result.headers + }); + if (result.success) { - console.log(`✅ VENDOR 마스터 전송 성공`); + debugSuccess(`✅ VENDOR 마스터 전송 성공`); } else { - console.error(`❌ VENDOR 마스터 전송 실패, 오류: ${result.message}`); + debugError(`❌ VENDOR 마스터 전송 실패, 오류: ${result.message}`); } return { success: result.success, message: result.success ? '전송 성공' : result.message, - responseText: result.responseText + responseText: result.responseText, + requestXml: result.requestXml, + responseHeaders: result.headers, + statusCode: result.statusCode, + requestHeaders: result.requestHeaders }; } catch (error) { - console.error('❌ VENDOR 마스터 전송 중 오류 발생:', error); + debugError('❌ VENDOR 마스터 전송 중 오류 발생:', error); return { success: false, message: error instanceof Error ? error.message : 'Unknown error' @@ -148,7 +169,7 @@ async function fetchVendorData(vendorCode: string) { }; } catch (error) { - console.error(`VENDOR ${vendorCode} 데이터 조회 실패:`, error); + debugError(`VENDOR ${vendorCode} 데이터 조회 실패:`, error); throw error; } } @@ -206,13 +227,13 @@ export async function sendVendorMasterToMDG(vendorCodes: string[]): Promise<{ results?: Array<{ vendorCode: string; success: boolean; error?: string }>; }> { try { - console.log(`🚀 VENDOR_MASTER 송신 시작: ${vendorCodes.length}개 벤더`); + debugLog(`🚀 VENDOR_MASTER 송신 시작: ${vendorCodes.length}개 벤더`); const results: Array<{ vendorCode: string; success: boolean; error?: string }> = []; for (const vendorCode of vendorCodes) { try { - console.log(`📤 VENDOR ${vendorCode} 데이터 조회 중...`); + debugLog(`📤 VENDOR ${vendorCode} 데이터 조회 중...`); const vendorData = await fetchVendorData(vendorCode); @@ -226,18 +247,18 @@ export async function sendVendorMasterToMDG(vendorCodes: string[]): Promise<{ } const supplierMaster = buildSupplierMasterData(vendorData); - console.log(`📄 VENDOR ${vendorCode} 데이터 생성 완료`); + debugLog(`📄 VENDOR ${vendorCode} 데이터 생성 완료`); const result = await sendVendorMasterToMDGInternal(supplierMaster); if (result.success) { - console.log(`✅ VENDOR ${vendorCode} MDG 전송 성공`); + debugSuccess(`✅ VENDOR ${vendorCode} MDG 전송 성공`); results.push({ vendorCode, success: true }); } else { - console.error(`❌ VENDOR ${vendorCode} 전송 실패: ${result.message}`); + debugError(`❌ VENDOR ${vendorCode} 전송 실패: ${result.message}`); results.push({ vendorCode, success: false, @@ -246,7 +267,7 @@ export async function sendVendorMasterToMDG(vendorCodes: string[]): Promise<{ } } catch (error) { - console.error(`❌ VENDOR ${vendorCode} 전송 실패:`, error); + debugError(`❌ VENDOR ${vendorCode} 전송 실패:`, error); results.push({ vendorCode, success: false, @@ -258,7 +279,7 @@ export async function sendVendorMasterToMDG(vendorCodes: string[]): Promise<{ const successCount = results.filter(r => r.success).length; const failCount = results.length - successCount; - console.log(`🎉 VENDOR_MASTER 송신 완료: 성공 ${successCount}개, 실패 ${failCount}개`); + debugSuccess(`🎉 VENDOR_MASTER 송신 완료: 성공 ${successCount}개, 실패 ${failCount}개`); return { success: failCount === 0, @@ -267,7 +288,7 @@ export async function sendVendorMasterToMDG(vendorCodes: string[]): Promise<{ }; } catch (error) { - console.error('❌ VENDOR_MASTER 송신 중 전체 오류 발생:', error); + debugError('❌ VENDOR_MASTER 송신 중 전체 오류 발생:', error); return { success: false, message: error instanceof Error ? error.message : 'Unknown error' @@ -314,14 +335,17 @@ export async function sendTestVendorDataToMDG(formData: Record<string, string>): message: string; responseData?: unknown; generatedXML?: string; + responseHeaders?: Record<string, string>; + statusCode?: number; + requestHeaders?: Record<string, string>; }> { try { - console.log('🚀 테스트용 VENDOR 데이터 송신 시작'); + debugLog('🚀 테스트용 VENDOR 데이터 송신 시작'); // 필수 필드 검증 const validation = validateMandatoryFields(formData); if (!validation.isValid) { - console.error('❌ 필수 필드 누락:', validation.missingFields); + debugError('❌ 필수 필드 누락:', validation.missingFields); return { success: false, message: validation.errorMessage, @@ -342,21 +366,38 @@ export async function sendTestVendorDataToMDG(formData: Record<string, string>): supplierMaster[f.field] = formData[f.field] ?? ''; }); - console.log('📄 SUPPLIER_MASTER 데이터 생성 완료'); + debugLog('📄 SUPPLIER_MASTER 데이터 생성 완료'); const result = await sendVendorMasterToMDGInternal(supplierMaster); + // 응답 정보 상세 로깅 + debugLog('📊 테스트 송신 결과:', { + success: result.success, + statusCode: result.statusCode, + responseHeaders: result.responseHeaders, + hasResponseText: !!result.responseText, + responseTextLength: result.responseText?.length, + hasRequestXml: !!result.requestXml, + requestXmlLength: result.requestXml?.length + }); + return { success: result.success, message: result.success ? '테스트 송신이 완료되었습니다.' : result.message, - responseData: result.responseText + responseData: result.responseText, + generatedXML: result.requestXml, + responseHeaders: result.responseHeaders, + statusCode: result.statusCode, + requestHeaders: result.requestHeaders }; } catch (error) { - console.error('❌ 테스트 송신 실패:', error); + debugError('❌ 테스트 송신 실패:', error); return { success: false, - message: error instanceof Error ? error.message : 'Unknown error' + message: error instanceof Error ? error.message : 'Unknown error', + responseData: undefined, + generatedXML: undefined }; } } @@ -386,14 +427,14 @@ export async function sendAllVendorsToMDG() { }; } - console.log(`⚠️ 전체 VENDOR 송신 요청: ${vendorCodes.length}개`); + debugLog(`⚠️ 전체 VENDOR 송신 요청: ${vendorCodes.length}개`); const batchSize = 10; const results: Array<{ vendorCode: string; success: boolean; error?: string }> = []; for (let i = 0; i < vendorCodes.length; i += batchSize) { const batch = vendorCodes.slice(i, i + batchSize); - console.log(`📦 배치 ${Math.floor(i / batchSize) + 1} 처리 중... (${batch.length}개)`); + debugLog(`📦 배치 ${Math.floor(i / batchSize) + 1} 처리 중... (${batch.length}개)`); const batchResult = await sendVendorMasterToMDG(batch); if (batchResult.results) { @@ -415,7 +456,7 @@ export async function sendAllVendorsToMDG() { }; } catch (error) { - console.error('전체 VENDOR 송신 중 오류:', error); + debugError('전체 VENDOR 송신 중 오류:', error); return { success: false, message: error instanceof Error ? error.message : 'Unknown error' @@ -430,7 +471,7 @@ export async function sendModifiedVendorsToMDG(): Promise<{ results?: Array<{ vendorCode: string; success: boolean; error?: string }>; }> { try { - console.log('🔍 수정된 VENDOR 데이터 조회 중...'); + debugLog('🔍 수정된 VENDOR 데이터 조회 중...'); const modifiedVendors = await db .select({ @@ -446,21 +487,21 @@ export async function sendModifiedVendorsToMDG(): Promise<{ const vendorCodes = modifiedVendors.map(v => v.VNDRCD); if (vendorCodes.length === 0) { - console.log('📝 수정된 VENDOR 데이터가 없습니다.'); + debugLog('📝 수정된 VENDOR 데이터가 없습니다.'); return { success: true, message: '수정된 VENDOR 데이터가 없습니다.' }; } - console.log(`📋 수정된 VENDOR ${vendorCodes.length}개 발견:`, vendorCodes); + debugLog(`📋 수정된 VENDOR ${vendorCodes.length}개 발견:`, vendorCodes); const batchSize = 10; const results: Array<{ vendorCode: string; success: boolean; error?: string }> = []; for (let i = 0; i < vendorCodes.length; i += batchSize) { const batch = vendorCodes.slice(i, i + batchSize); - console.log(`📦 수정 데이터 배치 ${Math.floor(i / batchSize) + 1} 처리 중... (${batch.length}개)`); + debugLog(`📦 수정 데이터 배치 ${Math.floor(i / batchSize) + 1} 처리 중... (${batch.length}개)`); const batchResult = await sendVendorMasterToMDG(batch); if (batchResult.results) { @@ -475,7 +516,7 @@ export async function sendModifiedVendorsToMDG(): Promise<{ const successCount = results.filter(r => r.success).length; const failCount = results.length - successCount; - console.log(`🎯 수정된 VENDOR 송신 완료: 성공 ${successCount}개, 실패 ${failCount}개`); + debugSuccess(`🎯 수정된 VENDOR 송신 완료: 성공 ${successCount}개, 실패 ${failCount}개`); return { success: failCount === 0, @@ -484,7 +525,7 @@ export async function sendModifiedVendorsToMDG(): Promise<{ }; } catch (error) { - console.error('❌ 수정된 VENDOR 송신 중 오류:', error); + debugError('❌ 수정된 VENDOR 송신 중 오류:', error); return { success: false, message: error instanceof Error ? error.message : 'Unknown error' @@ -509,7 +550,7 @@ export async function sendNVendorsToMDG( }; } - console.log(`🧪 테스트용 VENDOR 송신: ${count}건 (${startFrom}번째부터)`); + debugLog(`🧪 테스트용 VENDOR 송신: ${count}건 (${startFrom}번째부터)`); const vendors = await db .select({ VNDRCD: VENDOR_MASTER_BP_HEADER.VNDRCD }) @@ -526,11 +567,11 @@ export async function sendNVendorsToMDG( }; } - console.log(`📋 테스트 대상 VENDOR ${vendorCodes.length}개:`, vendorCodes); + debugLog(`📋 테스트 대상 VENDOR ${vendorCodes.length}개:`, vendorCodes); const result = await sendVendorMasterToMDG(vendorCodes); - console.log(`🧪 테스트 송신 완료: ${vendorCodes.length}개 처리`); + debugSuccess(`🧪 테스트 송신 완료: ${vendorCodes.length}개 처리`); return { ...result, @@ -538,7 +579,7 @@ export async function sendNVendorsToMDG( }; } catch (error) { - console.error('❌ 테스트 송신 중 오류:', error); + debugError('❌ 테스트 송신 중 오류:', error); return { success: false, message: error instanceof Error ? error.message : 'Unknown error' @@ -555,7 +596,7 @@ export async function sendRecentModifiedVendorsToMDG( results?: Array<{ vendorCode: string; success: boolean; error?: string }>; }> { try { - console.log(`🕒 최근 수정된 VENDOR ${count}건 조회 중...`); + debugLog(`🕒 최근 수정된 VENDOR ${count}건 조회 중...`); const recentVendors = await db .select({ @@ -578,12 +619,12 @@ export async function sendRecentModifiedVendorsToMDG( }; } - console.log(`📋 최근 수정된 VENDOR ${vendorCodes.length}개:`, + debugLog(`📋 최근 수정된 VENDOR ${vendorCodes.length}개:`, recentVendors.map(v => `${v.VNDRCD}(${v.updatedAt?.toISOString()})`)); const result = await sendVendorMasterToMDG(vendorCodes); - console.log(`🕒 최근 수정 데이터 송신 완료`); + debugSuccess(`🕒 최근 수정 데이터 송신 완료`); return { ...result, @@ -591,7 +632,7 @@ export async function sendRecentModifiedVendorsToMDG( }; } catch (error) { - console.error('❌ 최근 수정 데이터 송신 중 오류:', error); + debugError('❌ 최근 수정 데이터 송신 중 오류:', error); return { success: false, message: error instanceof Error ? error.message : 'Unknown error' @@ -644,7 +685,7 @@ export async function getVendorSendStatistics(): Promise<{ }; } catch (error) { - console.error('통계 조회 실패:', error); + debugError('통계 조회 실패:', error); throw error; } } |
