summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/soap/mdg/send/vendor-master/action.ts47
-rw-r--r--lib/soap/mdg/send/vendor-master/csv-fields.ts56
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