로깅 개선 및 EAI 배치 가상 연동 작업 완료

This commit is contained in:
Rinjae
2025-10-16 15:02:35 +09:00
parent c204bbf106
commit f5e689fe51
10 changed files with 246 additions and 47 deletions
@@ -3,6 +3,9 @@ package com.eactive.ext.kjb.ums;
import com.eactive.apim.portal.portaluser.entity.PortalUser;
import com.eactive.apim.portal.template.entity.MessageRequest;
import com.eactive.apim.portal.template.repository.MessageRequestRepository;
import com.eactive.ext.kjb.common.KjbProperty;
import com.eactive.ext.kjb.eai.EaiBatchMessage;
import com.eactive.ext.kjb.eai.KjbEaiBatchModule;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j;
@@ -22,19 +25,19 @@ import java.util.Map;
@Slf4j
public class EmailJob {
private final EmailProperty prop;
private final KjbProperty prop;
private final MessageRequest messageRequest;
private final Path tempFilePath;
private final Path eaiFilePath;
private final Path backupFilePath;
private final Path failedFilePath;
private MessageRequestRepository messageRequestRepository;
private final MessageRequestRepository messageRequestRepository;
private final LocalDateTime now = LocalDateTime.now();
private EmailJob(EmailProperty prop, MessageRequest messageRequest, MessageRequestRepository messageRequestRepository) {
private EmailJob(KjbProperty prop, MessageRequest messageRequest, MessageRequestRepository messageRequestRepository) {
this.messageRequest = messageRequest;
this.prop = prop;
@@ -50,7 +53,7 @@ public class EmailJob {
}
public static EmailJob create(EmailProperty prop, MessageRequest messageRequest, MessageRequestRepository repository) {
public static EmailJob create(KjbProperty prop, MessageRequest messageRequest, MessageRequestRepository repository) {
if (prop == null) {
throw new IllegalArgumentException("Property is null");
}
@@ -120,13 +123,17 @@ public class EmailJob {
messageRequestRepository.save(messageRequest);
}
try {
log.debug("이메일 파일 생성");
doSaveFile();
log.debug("EAI 배치 호출");
eaiBatchCall();
log.debug("발송 성공 처리");
doSuccess();
} catch (Exception e) {
log.error("이메일 발송 실패", e);
doFail();
} finally {
doDeleteEaiFile();
@@ -141,8 +148,16 @@ public class EmailJob {
// TODO: EAI 발송 실패 처리
}
private void eaiBatchCall() {
// TODO: EAI 배치 호출
private void eaiBatchCall() throws IOException {
KjbEaiBatchModule eaiBatchModule = new KjbEaiBatchModule(prop);
EaiBatchMessage result = eaiBatchModule.call(prop.getEaiBatchInterfaceId(), eaiFilePath.getFileName().toString());
if (!"1".equals(result.getResultCode())) {
log.error("EAI Batch call failed: {}", result);
throw new IllegalStateException("EAI Batch call failed: " + result);
}
log.debug("EAI Batch call result: {}", result);
}
private void doSuccess() {
@@ -1,26 +0,0 @@
package com.eactive.ext.kjb.ums;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
@Data
public class EmailProperty {
@Pattern(regexp = "^$|^(https?)://[^\\s/$.?#].[^\\s]*$", message = "kjb.ums.eai_batch.url 은 유효한 URL 형식이거나 공백이어야 합니다. 예: http://example.com/api")
private String eaiBatchUrl = "";
@NotEmpty(message = "kjb.ums.eai_batch.send_dir 는 필수값입니다.")
@Pattern(regexp = "^(?:[a-zA-Z]:\\\\|\\\\|\\/)(?:[\\w\\-\\.]+[\\\\\\/])*[\\w\\-\\.]+$",
message = "kjb.ums.eai_batch.send_dir 은 절대 경로여야 합니다. 예: /Data/eapim/portal/sendmail/snd 또는 C:\\Data\\eapim\\portal\\sendmail\\snd")
private String eaiBatchSendDir;
@NotEmpty(message = "kjb.ums.eai_batch.backup_dir 는 필수값입니다.")
@Pattern(regexp = "^(?:[a-zA-Z]:\\\\|\\\\|\\/)(?:[\\w\\-\\.]+[\\\\\\/])*[\\w\\-\\.]+$",
message = "kjb.ums.eai_batch.backup_dir 은 절대 경로여야 합니다. 예: /Data/eapim/portal/sendmail/bak 또는 C:\\Data\\eapim\\portal\\sendmail\\bak")
private String eaiBatchBackupDir;
@Pattern(regexp = "^[a-zA-Z0-9]{12}$", message = "kjb.ums.eai_batch.interface_id 는 12자리 영문대소문자 및 숫자 조합이어야 합니다.")
private String eaiBatchInterfaceId;
}
@@ -2,7 +2,8 @@ package com.eactive.ext.kjb.ums;
import com.eactive.apim.portal.template.entity.MessageRequest;
import com.eactive.apim.portal.template.repository.MessageRequestRepository;
import com.eactive.ext.kjb.common.ValidationUtil;
import com.eactive.ext.kjb.common.KjbProperty;
import com.eactive.ext.kjb.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -14,12 +15,12 @@ import java.util.function.BiConsumer;
@Slf4j
public class EmailSendModule {
private static EmailSendModule instance = null;
private static EmailProperty prop;
private static KjbProperty prop;
private final MessageRequestRepository repo;
public static synchronized EmailSendModule getInstance(EmailProperty property,
public static synchronized EmailSendModule getInstance(KjbProperty property,
MessageRequestRepository messageRequestRepository) {
ValidationUtil.validateOrThrow(property);
@@ -89,7 +90,7 @@ public class EmailSendModule {
private EmailSendModule(EmailProperty property,
private EmailSendModule(KjbProperty property,
MessageRequestRepository repo) {
this.repo = repo;
@@ -103,14 +104,15 @@ public class EmailSendModule {
public CompletableFuture<Boolean> sendEmail(MessageRequest messageRequest, BiConsumer<Boolean, Throwable> callback) {
return CompletableFuture
.supplyAsync(() -> {
// TODO: MESSAGE_CODE를 통해 SERVICE_ID 생성 필요
String serviceId;
String serviceId = "UNKNOWN";
switch(messageRequest.getMessageCode()) {
serviceId = messageRequest.getMessageCode().getServiceId();
messageRequest.setServiceId(serviceId);
if (StringUtils.isEmpty(serviceId)) {
throw new IllegalArgumentException("MessageRequest MessageCode serviceId is required");
}
messageRequest.setServiceId("TEMP_SERVICE");
if (repo != null) {
repo.save(messageRequest);
}
@@ -123,26 +125,4 @@ public class EmailSendModule {
})
.whenComplete(callback);
}
private void validateMessageRequest(MessageRequest messageRequest) {
if (messageRequest == null) {
log.warn("MessageRequest is null");
throw new IllegalArgumentException("MessageRequest is required");
}
if (StringUtils.isEmpty(messageRequest.getId())) {
log.warn("MessageRequest ID is empty");
throw new IllegalArgumentException("MessageRequest ID is required");
}
if (StringUtils.isEmpty(messageRequest.getEmail())) {
log.warn("MessageRequest Email is empty for ID: {}", messageRequest.getId());
throw new IllegalArgumentException("MessageRequest Email is required for ID: " + messageRequest.getId());
}
}
private void createMailFile() {
}
}