로깅 개선 및 EAI 배치 가상 연동 작업 완료
This commit is contained in:
@@ -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() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user