diff options
Diffstat (limited to 'lib/vendor-regular-registrations/service.ts')
| -rw-r--r-- | lib/vendor-regular-registrations/service.ts | 154 |
1 files changed, 18 insertions, 136 deletions
diff --git a/lib/vendor-regular-registrations/service.ts b/lib/vendor-regular-registrations/service.ts index 2a6695fa..ae6ba2a2 100644 --- a/lib/vendor-regular-registrations/service.ts +++ b/lib/vendor-regular-registrations/service.ts @@ -11,7 +11,6 @@ import { getServerSession } from "next-auth"; import { authOptions } from "@/app/api/auth/[...nextauth]/route";
import { headers } from "next/headers";
import { sendEmail } from "@/lib/mail/sendEmail";
-import type { RegistrationRequestData } from "@/components/vendor-regular-registrations/registration-request-dialog";
import {
vendors,
vendorRegularRegistrations,
@@ -22,12 +21,11 @@ import { vendorPQSubmissions,
vendorBusinessContacts,
vendorAdditionalInfo,
- basicContractTemplates,
- users
+ basicContractTemplates
} from "@/db/schema";
import db from "@/db/db";
import { inArray, eq, desc, and, lt } from "drizzle-orm";
-import { sendTestVendorDataToMDG } from "@/lib/soap/mdg/send/vendor-master/action";
+import { sendSingleVendorToMDG } from "@/lib/soap/mdg/send/vendor-master/send-single-vendor";
// 3개월 이상 정규등록검토 상태인 등록을 장기미등록으로 변경
async function updatePendingApprovals() {
@@ -996,21 +994,11 @@ export async function fetchRegistrationRequestData(registrationId: number) { // MDG로 정규업체 등록 요청 데이터를 보내는 함수
export async function sendRegistrationRequestToMDG(
- registrationId: number,
- requestData: RegistrationRequestData
+ registrationId: number
) {
try {
console.log('🚀 MDG로 정규업체 등록 요청 데이터 송신 시작');
- // 세션 사용자 정보 가져오기
- const session = await getServerSession(authOptions);
- const userId = session?.user?.id || 'EVCP_USER';
- //users table에서 userid로 nonsapuserid 찾기
- const userResult = await db.query.users.findFirst({
- where: eq(users.id, Number(userId)),
- columns: { nonsapUserId: true }
- });
- const nonsapUserId = userResult?.nonsapUserId || 'EVCP_USER';
// 등록 정보 조회
const registration = await db
.select()
@@ -1022,134 +1010,28 @@ export async function sendRegistrationRequestToMDG( return { success: false, error: "등록 정보를 찾을 수 없습니다." };
}
- // registration[0].vendorId를 이용해 벤더 정보 조회
- const vendor = await db
- .select()
- .from(vendors)
- .where(eq(vendors.id, registration[0].vendorId))
- .limit(1);
-
- if (!vendor[0]) {
- return { success: false, error: "벤더 정보를 찾을 수 없습니다." };
- }
-
- // MDG 필수 필드 매핑 (이메일 내용 기반)
- const mdgData: Record<string, string> = {
- // 1. BP_HEADER: 벤더코드가 있으면 벤더코드를, 없으면 eVCP에서 관리번호를 보내드리겠습니다. (필수)
- BP_HEADER: vendor[0].vendorCode || vendor[0].id.toString(),
-
- // 2. ZZSRMCD: eVCP에서 내부관리번호를 보내드리겠습니다. (필수)
- ZZSRMCD: vendor[0].id.toString(),
-
- // 3. SORT1: 벤더명 보내드립니다. (필수)
- SORT1: requestData.companyNameKor,
-
- // 4. NAME1: 벤더명 보내드립니다. (필수)
- NAME1: requestData.companyNameKor,
-
- // 5. NAME2: 벤더 영문명 (있는 경우) (선택)
- NAME2: requestData.companyNameEng || '',
-
- // 6. KTOKK: 셈플로 받은자료에는 "LIEF"로 되어 있습니다. 고정값 (필수)
- KTOKK: 'LIEF',
-
- // 7. J_1KFREPRE: 대표자명 (필수)
- J_1KFREPRE: requestData.representativeNameKor,
-
- // 8. MASTERFLAG: 지시자 같은데, 어떤값을 보내면 되나요? -> V (필수)
- MASTERFLAG: 'V',
-
- // 9. IBND_TYPE: 입력가능한 값을 알려주시기 바랍니다. -> 생성 : I, 변경: U (필수)
- IBND_TYPE: 'I',
-
- // 10. ZZREQID: SAP의 USER ID를 보내드리겠습니다. (필수)
- ZZREQID: nonsapUserId,
-
- // 11. ADDRNO: I/F정의서에는 필수입력으로 되어 있습니다. -> 빈값으로 처리 (필수)
- ADDRNO: '',
-
- // 12. COUNTRY: ISO 3166-1의 규약에 따른 국가코드를 보내드릴 예정입니다. (필수)
- COUNTRY: vendor[0].country || 'KR',
-
- // 13. POST_CODE1: 우편번호를 송부하겠습니다. (필수)
- POST_CODE1: vendor[0].postalCode || '',
-
- // 14. CITY1: 상세 주소를 송부하겠습니다. (필수) - 샘플에서는 상세주소가 들어감
- CITY1: vendor[0].addressDetail || '',
-
- // 15. STREET: 주소를 송부하겠습니다. (필수) - 샘플에서는 기본주소가 들어감
- STREET: vendor[0].address || '',
-
- // 16. TEL_NUMBER: 전화번호 (필수)
- TEL_NUMBER: vendor[0].phone || '',
-
- // 17. R3_USER: 전화/휴대폰 구분자로 해석됩니다. 0이면 전화, 1이면 휴대폰 (필수)
- R3_USER: '0', // 일반 전화번호로 가정
-
- // 18. TAXTYPE: 국가 코드에 맞게 하면 됩니다. 국가 KR -> TAXTYPE KR2 (필수)
- TAXTYPE: (vendor[0].country || 'KR') + '2',
-
- // 19. TAXNUM: 사업자번호 (필수)
- TAXNUM: vendor[0].taxId || '',
-
- // 20. BP_TX_TYP: 대표자 주민번호 YYMMDD + 0000000 (YYMMDD0000000) - 대표자 생년월일 기준으로 생성
- BP_TX_TYP: requestData.representativeBirthDate ?
- requestData.representativeBirthDate.replace(/-/g, '') + '0000000' : '',
-
- // 21. STCD3: 법인등록번호 (선택)
- STCD3: requestData.corporateNumber || '',
-
- // 22. CONSNUMBER: 순번 (샘플에서는 1, 2로 설정됨)
- CONSNUMBER: '1',
-
- // 23. ZZIND03: 기업규모 (A,B,C,D 값을 넣는 것으로 알고 있습니다.) (선택)
- ZZIND03: 'B', // 기본값으로 B 설정
-
- // 24. J_1KFTBUS: 사업유형 (샘플에서는 "건설업외")
- J_1KFTBUS: '',
-
- // 25. J_1KFTIND: 산업유형 (샘플에서는 "제조업")
- J_1KFTIND: '',
-
- // 26. SMTP_ADDR: 대표 이메일 주소 (필수)
- SMTP_ADDR: requestData.representativeEmail || vendor[0].email || '',
-
- // 27. URI_ADDR: 웹사이트 주소 (선택)
- URI_ADDR: vendor[0].website || '',
-
- // 28. ZZCNAME1: 해당 벤더의 첫번째 유저의 이름 (영문) (선택)
- ZZCNAME1: requestData.representativeNameEng || '',
-
- // 29. ZZCNAME2: 해당 벤더의 첫번째 유저의 이름 (한글) (선택)
- ZZCNAME2: requestData.representativeNameKor || '',
-
- // 30. ZZTELF1_C: 해당 벤더의 첫번째 유저의 전화번호 (선택)
- ZZTELF1_C: requestData.representativeContact || '',
- };
-
- // MDG로 데이터 전송
- console.log('📤 MDG 송신 데이터:', mdgData);
- const result = await sendTestVendorDataToMDG(mdgData);
+ // sendSingleVendorToMDG 함수를 사용하여 MDG로 전송
+ // 정규 벤더 모드로 전송
+ console.log('📤 sendSingleVendorToMDG 호출 (정규 벤더 모드)');
+ const result = await sendSingleVendorToMDG({
+ vendorId: registration[0].vendorId,
+ mode: 'REGULAR_VENDOR'
+ });
console.log('📤 MDG 송신 결과:', result);
if (!result.success) {
- // 필수 필드 누락 에러인 경우 더 자세한 메시지 제공
- if (result.message.includes('필수 필드가 누락되었습니다')) {
- return {
- success: false,
- error: `MDG 송신 실패: ${result.message}\n\n누락된 필수 필드들을 확인하고 다시 시도해주세요.`
- };
- }
+ return {
+ success: false,
+ error: `MDG 송신 실패: ${result.message}`
+ };
}
return {
- success: result.success,
- message: result.success ?
- 'MDG로 정규업체 등록 요청이 성공적으로 전송되었습니다.' :
- `MDG 송신 실패: ${result.message}`,
- responseData: result.responseData,
- generatedXML: result.generatedXML
+ success: true,
+ message: 'MDG로 정규업체 등록 요청이 성공적으로 전송되었습니다.',
+ responseData: result.responseText,
+ generatedXML: result.requestXml
};
} catch (error) {
|
