diff options
| author | joonhoekim <26rote@gmail.com> | 2025-07-23 07:31:31 +0000 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-07-23 07:31:31 +0000 |
| commit | 8af61fb23657beb20737558a7a08c52ca03cde52 (patch) | |
| tree | d53ac548c18a166816fe47560f257a89c9577dd9 | |
| parent | f9bfc82880212e1a13f6bbb28ecfc87b89346f26 (diff) | |
(김준회) 송신테스트 csv 파일 기반 필드 정의를 ts import로 전환
| -rw-r--r-- | lib/soap/mdg/send/vendor-master/action.ts | 47 | ||||
| -rw-r--r-- | lib/soap/mdg/send/vendor-master/csv-fields.ts | 56 |
2 files changed, 59 insertions, 44 deletions
diff --git a/lib/soap/mdg/send/vendor-master/action.ts b/lib/soap/mdg/send/vendor-master/action.ts index ec267bbb..88b46508 100644 --- a/lib/soap/mdg/send/vendor-master/action.ts +++ b/lib/soap/mdg/send/vendor-master/action.ts @@ -18,10 +18,8 @@ import { } from "@/db/schema/MDG/mdg"; import { eq, sql, desc } from "drizzle-orm"; import { withSoapLogging } from "../../utils"; -// public 경로 사용하지 않음. 형제경로 사용. (처리완료) -import fs from 'fs'; -import path from 'path'; import { XMLBuilder } from 'fast-xml-parser'; +import { CSV_FIELDS } from './csv-fields'; // 환경변수에서 인증 정보 가져오기 const MDG_SOAP_USERNAME = process.env.MDG_SOAP_USERNAME; @@ -30,34 +28,7 @@ const MDG_SOAP_PASSWORD = process.env.MDG_SOAP_PASSWORD; // 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"; -// CSV 파싱 및 필드 정의 -interface CsvField { - table: string; - field: string; - mandatory: boolean; -} - -function parseCsv(content: string): CsvField[] { - const lines = content.trim().split('\n'); - return lines.slice(1).map(line => { - const parts = line.split(','); - return { - table: parts[1]?.trim(), - field: parts[2]?.trim(), - mandatory: parts[3]?.trim() === 'M' - } as CsvField; - }); -} - -// 모듈 초기화 시 CSV 로드 -const CSV_PATH = path.join(__dirname, 'P2MD3007_AO.csv'); -let CSV_FIELDS: CsvField[] = []; -try { - const csvRaw = fs.readFileSync(CSV_PATH, 'utf-8'); - CSV_FIELDS = parseCsv(csvRaw); -} catch (e) { - console.error('CSV 로딩 실패:', e); -} +// CSV 필드 정의는 ./csv-fields.ts에서 import // SAP XI 호환 XML 생성 함수 (수정된 버전) function generateSAPXICompatibleXML(supplierMaster: Record<string, string>): string { @@ -367,20 +338,8 @@ export async function sendTestVendorDataToMDG(formData: Record<string, string>): try { console.log('🚀 테스트용 VENDOR 데이터 송신 시작'); - let csvFields: CsvField[] = []; - try { - const csvRaw = fs.readFileSync(CSV_PATH, 'utf-8'); - csvFields = parseCsv(csvRaw); - } catch (e) { - console.error('CSV 로딩 실패:', e); - return { - success: false, - message: 'CSV 필드 정의 파일을 로드할 수 없습니다.' - }; - } - const seen = new Set<string>(); - const uniqueFields = csvFields.filter(f => { + const uniqueFields = CSV_FIELDS.filter(f => { if (seen.has(f.field)) return false; seen.add(f.field); return true; diff --git a/lib/soap/mdg/send/vendor-master/csv-fields.ts b/lib/soap/mdg/send/vendor-master/csv-fields.ts new file mode 100644 index 00000000..335bd905 --- /dev/null +++ b/lib/soap/mdg/send/vendor-master/csv-fields.ts @@ -0,0 +1,56 @@ +// CSV 필드 정의 타입 +export interface CsvField { + table: string; + field: string; + mandatory: boolean; +} + +// P2MD3007_AO CSV 데이터 (정적 상수) +export const CSV_FIELDS: CsvField[] = [ + { table: 'SUPPLIER_MASTER', field: 'BP_HEADER', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'ZZSRMCD', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'SORT1', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'NAME1', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'NAME2', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'NAME3', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'NAME4', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'KTOKK', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'ZTYPE', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'VBUND', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'J_1KFREPRE', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'J_1KFTBUS', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'J_1KFTIND', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'VQMGRP', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'VTELNO', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'VEMAIL', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'ZZCNAME1', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'ZZCNAME2', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'ZZTELF1_C', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'MASTERFLAG', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'IBND_TYPE', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'ZZVNDTYP', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'ZZREQID', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'ZZIND01', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'ADDRNO', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'NATION', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'COUNTRY', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'LANGU', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'POST_CODE1', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'CITY1', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'CITY2', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'REGION', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'STREET', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'CONSNUMBER', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'TEL_NUMBER', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'TEL_EXTENS', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'R3_USER', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'FAX_NUMBER', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'FAX_EXTENS', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'URI_ADDR', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'SMTP_ADDR', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'TAXTYPE', mandatory: true }, + { table: 'SUPPLIER_MASTER', field: 'TAXNUM', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'BP_TX_TYP', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'STCD3', mandatory: false }, + { table: 'SUPPLIER_MASTER', field: 'ZZIND03', mandatory: false } +];
\ No newline at end of file |
