이메일 발송 테스트 코드 추가

This commit is contained in:
Rinjae
2025-11-20 10:50:33 +09:00
parent 797529c774
commit e410b9b79b
4 changed files with 541 additions and 19 deletions
+463
View File
@@ -0,0 +1,463 @@
POST http://192.168.246.15:8181/api/billing/findBillingForCondition
Content-Type: application/json; charset=UTF-8
x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=
x-obp-partnercode: 100001-01
{
"partnerCode": "000002-01",
"targetOnMonth": "202503"
}
###
curl -X POST --location "http://192.168.246.15:8181/api/billing/billing/findBillingForCondition" \
-H "Content-Type: application/json; charset=UTF-8" \
-H "x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=" \
-H "x-obp-partnercode: 100001-01" \
-d '{
"partnerCode": "000002-01",
"targetOnMonth": "202510"
}'
POST http://192.168.246.15:8181/api/billing/findBillingForCondition
x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=
x-obp-partnercode: 100001-01
Content-Type: application/json; charset=UTF-8
{
"partnerCode": "000002-01",
"targetOnMonth": "202503"
}
###
{
"billingId" : "001-20250401-060001-0001467",
"status" : "01",
"apiTotalValueSum" : 0.00,
"apiSum" : 100000.00,
"apiTotalValueSum2" : 0.00,
"apiSum2" : 100000.00,
"productTotalValueCountSum" : 0,
"productTotalValueAmountSum" : 0.00,
"productSum" : 600000.00,
"productTotalValueCountSum2" : 0,
"productTotalValueAmountSum2" : 0.00,
"productSum2" : 600000.00,
"totalValueCountSum" : 0.00,
"totalValueCountSum2" : 0.00,
"totalValueAmountSum" : 0.00,
"totalValueAmountSum2" : 0.00,
"sum" : 700000.00,
"sum2" : 700000.00,
"list" : [ {
"id" : "001-20250401-060001-0001469",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "[계좌] 실지명의조회",
"paymentTargetType" : "01",
"paymentTargetId" : "001-20180918-085325-0000353",
"detailFeeType" : "11",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "001-20201012-154617-0000969",
"feeDetailId" : "001-20221115-105403-0011851",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 100.00,
"minimumAmount" : 0.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 0.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 100.00,
"minimumAmount2" : 0.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 0.00,
"totalCount2" : 0,
"detailFeeTypeName" : null,
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 0.00,
"sum2" : 0.00
}, {
"id" : "001-20250401-060001-0001468",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "예금주성명조회 API",
"paymentTargetType" : "01",
"paymentTargetId" : "001-20180419-200001-0000100",
"detailFeeType" : "11",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131549-0085992",
"feeDetailId" : "101-20180516-131549-0085993",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 100.00,
"minimumAmount" : 100000.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 100000.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 100.00,
"minimumAmount2" : 100000.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 100000.00,
"totalCount2" : 0,
"detailFeeTypeName" : null,
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 100000.00,
"sum2" : 100000.00
}, {
"id" : "001-20250401-060002-0001472",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "P2P 가상계좌(투자자용) API",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000003",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0085994",
"feeDetailId" : "101-20180516-131550-0085995",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 300.00,
"minimumAmount" : 200000.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 200000.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 300.00,
"minimumAmount2" : 200000.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 200000.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 200000.00,
"sum2" : 200000.00
}, {
"id" : "001-20250401-060002-0001476",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "P2P 지급이체(당행_프로모션) API",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000007",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0085996",
"feeDetailId" : "101-20180516-131550-0085997",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 0.00,
"minimumAmount" : 0.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 0.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 0.00,
"minimumAmount2" : 0.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 0.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 0.00,
"sum2" : 0.00
}, {
"id" : "001-20250401-060002-0001474",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "P2P 지급이체 API(타행)",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000005",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0085998",
"feeDetailId" : "101-20180516-131550-0085999",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 300.00,
"minimumAmount" : 200000.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 200000.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 300.00,
"minimumAmount2" : 200000.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 200000.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 200000.00,
"sum2" : 200000.00
}, {
"id" : "001-20250401-060002-0001473",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "P2P 지급이체(대출실행집금용) API",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000004",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0086000",
"feeDetailId" : "101-20180516-131550-0086001",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 50.00,
"minimumAmount" : 0.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 0.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 50.00,
"minimumAmount2" : 0.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 0.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 0.00,
"sum2" : 0.00
}, {
"id" : "001-20250401-060002-0001475",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "P2P 투자금 관리 API",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000006",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0086002",
"feeDetailId" : "001-20231128-161411-0007408",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "01",
"value" : 0.05,
"minimumAmount" : 200000.00,
"maximumAmount" : null,
"paymentBase" : "02",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 200000.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 0.05,
"minimumAmount2" : 200000.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 200000.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "금액",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "율",
"sum" : 200000.00,
"sum2" : 200000.00
}, {
"id" : "001-20250401-060001-0001470",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "입금이체(당행) API",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000001",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0086004",
"feeDetailId" : "101-20180516-131550-0086005",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 50.00,
"minimumAmount" : 0.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 0.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 50.00,
"minimumAmount2" : 0.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 0.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 0.00,
"sum2" : 0.00
}, {
"id" : "001-20250401-060001-0001471",
"billingId" : "001-20250401-060001-0001467",
"paymentTargetName" : "입금이체(타행) API",
"paymentTargetType" : "02",
"paymentTargetId" : "001-20171227-110000-0000002",
"detailFeeType" : "21",
"revision" : 0,
"contractAccountId" : "001-20180430-104631-0798825",
"feeId" : "101-20180516-131550-0086006",
"feeDetailId" : "101-20180516-131550-0086007",
"bank" : "034",
"accountNo" : "1107617597186",
"valueDivision" : "02",
"value" : 300.00,
"minimumAmount" : 0.00,
"maximumAmount" : null,
"paymentBase" : "01",
"paymentBaseValue" : 1.00,
"paymentTiming" : "02",
"totalValue" : 0.00,
"withdrawalAmount" : 0.00,
"totalCount" : 0,
"revision2" : 0,
"totalValue2" : 0.00,
"value2" : 300.00,
"minimumAmount2" : 0.00,
"maximumAmount2" : null,
"changeReason2" : "system billing",
"withdrawalAmount2" : 0.00,
"totalCount2" : 0,
"detailFeeTypeName" : "상품수수료",
"paymentBaseName" : "건",
"paymentTimingName" : "사후부과",
"valueDivisionName" : "금액",
"sum" : 0.00,
"sum2" : 0.00
} ]
}
$ curl -X POST --location "http://192.168.246.15:8181/api/billing/billing/findBillingForCondition/print" -H "Content-Type: application/json; charset=UTF-8" -H "x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=" -H "x-obp-partnercode: 100001-01" -d '{
"partnerCode": "000014-01",
"targetOnMonth": "202503"
}'
{
"billingId" : "001-20250401-060004-0001512",
"status" : "01",
"apiTotalValueSum" : 0,
"apiSum" : 0,
"apiTotalValueSum2" : 0,
"apiSum2" : 0,
"productTotalValueCountSum" : 0,
"productTotalValueAmountSum" : 0,
"productSum" : 0,
"productTotalValueCountSum2" : 0,
"productTotalValueAmountSum2" : 0,
"productSum2" : 0,
"totalValueCountSum" : 0,
"totalValueCountSum2" : 0,
"totalValueAmountSum" : 0,
"totalValueAmountSum2" : 0,
"sum" : 0,
"sum2" : 0,
"list" : [ ]
}
curl -X POST --location "http://192.168.246.15:8181/api/billing/billing/findBillingForCondition/print" -H "Content-Type: application/json; charset=UTF-8" -H "x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=" -H "x-obp-partnercode: 100001-01" -d '{
> "partnerCode": "000014-01",
> "targetOnMonth": "202503"
> }'
{
"error" : {
"code" : "E.BILLING.NOT_PRINT_BEFORE_CONFIRM",
"message" : "확정이전에는 출력이 안됩니다."
}
}
weblogic@apigwd01(DEV-eAPIM-GW#1):[/weblogic]
$ curl -X POST --location "http://192.168.246.15:8181/api/billing/billing/findBillingForCondition/print" -H "Content-Type: application/json; charset=UTF-8" -H "x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=" -H "x-obp-partnercode: 100001-01" -d '{
"partnerCode": "000002-02",
"targetOnMonth": "201803"
}'
{
"error" : {
"code" : "E.BILLING.NOT_PRINT_BEFORE_CONFIRM",
"message" : "확정이전에는 출력이 안됩니다."
}
}
weblogic@apigwd01(DEV-eAPIM-GW#1):[/weblogic]
$ curl -X POST --location "http://192.168.246.15:8181/api/billing/billing/findBillingForCondition/print" -H "Content-Type: application/json; charset=UTF-8" -H "x-obp-trust-system: APIMPT-0002-QVBJTVBULTAwMDI=" -H "x-obp-partnercode: 100001-01" -d '{
"partnerCode": "000002-02",
"targetOnMonth": "199603"
}'
{
"error" : {
"code" : "E.BILLING.NOT_PRINT_BEFORE_CONFIRM",
"message" : "확정이전에는 출력이 안됩니다."
}
}
@@ -50,7 +50,8 @@ public class EmailJob {
this.messageRequest = messageRequest;
this.prop = prop;
String filename = messageRequest.getServiceId() + "_" + DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(now) + ".dat";
// String filename = messageRequest.getServiceId() + "_" + DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(now) + ".dat";
String filename = messageRequest.getServiceId() + "_" + DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(now) + ".dat";
this.eaiFilePath = Paths.get(prop.getUmsEaiBatchSendDir(), filename);
this.backupFilePath = Paths.get(prop.getUmsEaiBatchBackupDir(), filename);
this.failedFilePath = Paths.get(prop.getUmsEaiBatchBackupDir(), filename + ".failed");
@@ -240,11 +241,14 @@ public class EmailJob {
jsonObject.addProperty("ENCKEY", ""); // 보안메일용으로 기입 불필요
Gson gson = new Gson();
log.debug("Template string to json: {}", messageRequest.getMessage());
JsonObject contentJSon = gson.fromJson(messageRequest.getMessage(), JsonObject.class);
contentJSon.entrySet().forEach(entry -> {
jsonObject.add(entry.getKey(), entry.getValue());
});
String message = messageRequest.getMessage();
log.debug("Template string to json: {}", message);
if (StringUtils.isNotEmpty(message)) {
JsonObject contentJSon = gson.fromJson(message, JsonObject.class);
contentJSon.entrySet().forEach(entry -> {
jsonObject.add(entry.getKey(), entry.getValue());
});
}
// jsonObject.addProperty("SUBJECT", messageRequest.getSubject());
// jsonObject.addProperty("MESSAGE", messageRequest.getMessage());
@@ -117,8 +117,10 @@ public class KjbEmailSendModule {
public void sendEmail(MessageRequest messageRequest) throws KjbEaiBatchException {
String serviceId = "UNKNOWN";
serviceId = messageRequest.getMessageCode().getServiceId();
messageRequest.setServiceId(serviceId);
if (StringUtils.isEmpty(messageRequest.getServiceId())) {
serviceId = messageRequest.getMessageCode().getServiceId();
messageRequest.setServiceId(serviceId);
}
if (StringUtils.isEmpty(serviceId)) {
throw new IllegalArgumentException("MessageRequest MessageCode serviceId is required");
@@ -14,6 +14,8 @@ import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -31,6 +33,8 @@ public class UmsTest {
prop.setUmsApiKey("7cca6d58-e4f7-474d-9edd-525806bc99ff");
if (OsUtil.isWindows()) {
prop.setEaiBatchUrl("");
prop.setUmsHostUrl("");
prop.setUmsEaiBatchSendDir("c:\\kjb-logs\\sendmail\\snd");
prop.setUmsEaiBatchBackupDir("c:\\kjb-logs\\sendmail\\bak");
prop.setUmsEaiBatchErrorDir("c:\\kjb-logs\\sendmail\\error");
@@ -71,6 +75,9 @@ public class UmsTest {
log.info("done");
}
/**
* :eapim-admin-kjb:test --tests "com.eactive.ext.kjb.ums.test.UmsTest.testEmail"
*/
@Test
public void testEmail() {
Assumptions.assumeTrue(
@@ -83,24 +90,70 @@ public class UmsTest {
});
KjbEmailSendModule service = KjbEmailSendModule.getInstance(prop, null);
MessageRequest messageRequest = new MessageRequest();
messageRequest.setId(UUID.randomUUID().toString());
messageRequest.setMessageCode(MessageCode.USER_VERIFICATION_EMAIL);
messageRequest.setEmail("dearmai@dearmai.net");
messageRequest.setUmsUid(UUID.randomUUID().toString());
messageRequest.setUsername("김광은");
messageRequest.setSubject("제목 - test");
messageRequest.setMessage("{\"ATHN_NO\": \"543216\"}");
messageRequest.setServiceId("FM_APIM001");
log.info("MessageRequest - {}", messageRequest);
List<MessageRequest> requestList = new ArrayList<>();
log.info("#1 요청 생성 - 이메일 인증");
requestList.add(createMessageRequest(MessageCode.USER_VERIFICATION_EMAIL, "{\"ATHN_NO\": \"543216\"}"));
log.info("#2 요청 생성 - 비밀번호 초기화");
requestList.add(createMessageRequest(MessageCode.USER_PASSWORD_RESET, "{\"ATHN_NO\": \"new-password\"}"));
log.info("#3 요청 생성 - 비밀번호 변경 완료");
requestList.add(createMessageRequest(MessageCode.USER_PASSWORD_CHANGED, ""));
log.info("#4 요청 생성 - 로그인 제한");
requestList.add(createMessageRequest(MessageCode.USER_ACCOUNT_LOCKED, "{\"RJCT_RSN\": \"%reason%\"}"));
log.info("#5 요청 생성 - 이메일 초대");
requestList.add(createMessageRequest(MessageCode.USER_INVITATION,
"{\"CRPT_NM\":\"%corpName%\",\"MNGR_NM\":\"%managerName%\",\"CUST_ID\":\"%loginId%\",\"PSWD\":\"%tempPassword%\"}"));
log.info("#6 요청 생성 - 이메일 초대 취소");
requestList.add(createMessageRequest(MessageCode.USER_INVITATION_CANCELED,
"{\"CRPT_NM\":\"%corpName%\",\"MNGR_NM\":\"%managerName%\"}"));
log.info("#7 요청 생성 - 법인관리자 및 법인 등록 승인");
requestList.add(createMessageRequest(MessageCode.MANAGER_WITH_ORG_REGISTER_APPROVED, ""));
log.info("#8 요청 생성 - 법인관리자 및 법인 등록 거절");
requestList.add(createMessageRequest(MessageCode.MANAGER_WITH_ORG_REGISTER_REJECTED, "{\"RJCT_RSN\": \"%reason%\"}"));
log.info("#9 요청 생성 - 앱 승인");
requestList.add(createMessageRequest(MessageCode.APP_REGISTER_APPROVED, "{\"APP_IDNT_NM\": \"%appName%\"}"));
log.info("#10 요청 생성 - 앱 승인 거절");
requestList.add(createMessageRequest(MessageCode.APP_REGISTER_REJECTED, "{\"RJCT_RSN\": \"%reason%\"}"));
try {
service.sendEmail(messageRequest);
for (int i = 0; i < requestList.size(); i++) {
MessageRequest request = requestList.get(i);
log.info("#{} - 메일 전송 시도 - {}", i + 1, request.getServiceId());
service.sendEmail(request);
}
} catch (KjbEaiBatchException e) {
throw new RuntimeException(e);
}
log.info("done");
}
private MessageRequest createMessageRequest(MessageCode messageCode, String message) {
MessageRequest messageRequest = new MessageRequest();
messageRequest.setId(UUID.randomUUID().toString());
messageRequest.setMessageCode(messageCode);
messageRequest.setEmail("dearmai@dearmai.net");
messageRequest.setUmsUid(UUID.randomUUID().toString());
messageRequest.setUsername("김광은");
messageRequest.setSubject("제목 - test");
messageRequest.setMessage(message);
// messageRequest.setServiceId(serviceId);
log.info("MessageRequest - {}", messageRequest);
return messageRequest;
}
}