로깅 개선 및 EAI 배치 가상 연동 작업 완료
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
package com.eactive.ext.kjb.eai;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
@Slf4j
|
||||
public class EaiBatchMessage {
|
||||
@Getter
|
||||
private String interfaceId = "";
|
||||
|
||||
@Getter
|
||||
private String baseDate = "";
|
||||
|
||||
@Getter
|
||||
private String count = "";
|
||||
|
||||
@Getter
|
||||
private String resultCode = "";
|
||||
|
||||
@Getter
|
||||
private String filename = "";
|
||||
|
||||
|
||||
private String rawMessage = "";
|
||||
|
||||
private boolean isReadOnly = false;
|
||||
|
||||
|
||||
private EaiBatchMessage() {}
|
||||
|
||||
|
||||
public static EaiBatchMessage createRequest(String interfaceId, String filename) {
|
||||
EaiBatchMessage message = new EaiBatchMessage();
|
||||
message.interfaceId = interfaceId;
|
||||
message.filename = filename;
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
public static EaiBatchMessage fromResponse(String rawMessage) {
|
||||
EaiBatchMessage message = new EaiBatchMessage();
|
||||
message.rawMessage = rawMessage;
|
||||
message.isReadOnly = true;
|
||||
|
||||
if (rawMessage.length() >= 40) {
|
||||
message.interfaceId = rawMessage.substring(0, 20).trim();
|
||||
message.baseDate = rawMessage.substring(20, 28).trim();
|
||||
message.count = rawMessage.substring(28, 38).trim();
|
||||
message.resultCode = rawMessage.substring(38, 39).trim();
|
||||
// filename 은 @@가 발견되면 이전 까지 trim / 발견되지 않으면 나머지 전체 그리고 trim
|
||||
int endIdx = rawMessage.indexOf("@@", 39);
|
||||
if (endIdx == -1) {
|
||||
message.filename = rawMessage.substring(39).trim();
|
||||
} else {
|
||||
message.filename = rawMessage.substring(39, endIdx).trim();
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(message.interfaceId)) {
|
||||
log.error("Invalid EAI Batch response message: interfaceId is empty. rawMessage={}", rawMessage);
|
||||
throw new IllegalArgumentException("Invalid EAI Batch response message: interfaceId is empty");
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (isReadOnly) {
|
||||
return rawMessage;
|
||||
} else {
|
||||
ByteBuffer buffer = ByteBuffer.allocate(1024);
|
||||
// 0~19 : 인터페이스ID (20)
|
||||
buffer.put(fixedString(interfaceId, 20));
|
||||
// 19-8: 기준일자 (8)
|
||||
buffer.put(fixedString(baseDate, 8));
|
||||
// 27-10 : 건수 (10)
|
||||
buffer.put(fixedString(count, 10));
|
||||
// 37-1 : 결과코드 (1)
|
||||
buffer.put(fixedString(resultCode, 1));
|
||||
// 38-100 : 파일명 (100)
|
||||
buffer.put(fixedString(filename, 100));
|
||||
|
||||
// 종료 구분자 (2)
|
||||
buffer.put("@@".getBytes());
|
||||
|
||||
|
||||
return new String(buffer.array()).trim();
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] fixedString(String str, int length) {
|
||||
if (str == null) {
|
||||
str = "";
|
||||
}
|
||||
byte[] strBytes = str.getBytes();
|
||||
byte[] result = new byte[length];
|
||||
|
||||
int copyLength = Math.min(strBytes.length, length);
|
||||
System.arraycopy(strBytes, 0, result, 0, copyLength);
|
||||
|
||||
for (int i = copyLength; i < length; i++) {
|
||||
result[i] = ' ';
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user