From 7349504c6a92fdc115cf59d9deef76880a8287c0 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Fri, 17 Oct 2025 18:46:22 +0900 Subject: (김준회) MDG 벤더 송신 테스트페이지 개선, SWP 페이지 텍스트 수정 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/soap/mdg/send/vendor-master/action.ts | 119 ++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 39 deletions(-) (limited to 'lib/soap/mdg/send/vendor-master') 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; + statusCode?: number; + requestHeaders?: Record; }> { try { // SOAP Body Content 생성 @@ -63,26 +68,42 @@ async function sendVendorMasterToMDGInternal(supplierMaster: Record; }> { 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): message: string; responseData?: unknown; generatedXML?: string; + responseHeaders?: Record; + statusCode?: number; + requestHeaders?: Record; }> { 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): 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; } } -- cgit v1.2.3