feat: 표준전문 스펙 필수 처리 항목 구현 및 테스트 추가
요청 처리: - ERP 채널(corp_tlwn_virt_brcd=ERP) HEAD 지점코드 자동 설정 (tx_cmgr_cd, mgmt_brcd 등) - ERP 채널 EZDATA 전자금융공통영역 자동 설정 (elfn_bnkn_dvcd=10, svr_tx_seqno, elfn_mac, IP) 응답 처리: - coordinateBeforeResponse: guid_prgs_no +1, dman_rspn_dvcd="R" 설정 추가 - coordinateAfterRecvNonStdSyncResponse: 정상 MSG msg_list_rowcnt=0으로 수정, 정상처리 코드/메시지 업데이트 오류 처리: - coordinateSetStandardMessageError: MSG_LIST에 outp_msg_desc, err_occu_loct 추가 테스트: - StandardMessageSpecTest: 요청/응답 스펙 전체 62개 항목 검증 - StandardMessageEzdataJsonFlowTest: EZDATA JSON 흐름 22개 검증 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -47,6 +47,22 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
private static final String HEAD_MESG_RSPN_DT = "HEAD.mesg_rspn_dt";
|
||||
private static final String HEAD_MESG_RSPN_TIME = "HEAD.mesg_rspn_time";
|
||||
|
||||
// HEAD ERP 채널 필드 경로
|
||||
private static final String HEAD_TX_CMGR_CD = "HEAD.tx_cmgr_cd";
|
||||
private static final String HEAD_MGMT_BRCD = "HEAD.mgmt_brcd";
|
||||
private static final String HEAD_TX_BRCD = "HEAD.tx_brcd";
|
||||
private static final String HEAD_INSL_BRCD = "HEAD.insl_brcd";
|
||||
private static final String HEAD_BLNG_BRCD = "HEAD.blng_brcd";
|
||||
private static final String HEAD_CORP_TLWN_VIRT_BRCD = "HEAD.corp_tlwn_virt_brcd";
|
||||
|
||||
// EZDATA 영역 경로
|
||||
private static final String EZDATA_ELFN_BNKN_DVCD = "EZDATA.elfn_bnkn_dvcd";
|
||||
private static final String EZDATA_SVR_TX_SEQNO = "EZDATA.svr_tx_seqno";
|
||||
private static final String EZDATA_ELFN_MAC = "EZDATA.elfn_mac";
|
||||
private static final String EZDATA_PC_OFCL_IPAD = "EZDATA.pc_ofcl_ipad";
|
||||
private static final String EZDATA_PC_PRVAT_IPAD = "EZDATA.pc_prvat_ipad";
|
||||
private static final String EZDATA_ELFN_SPR_FILD = "EZDATA.elfn_spr_fild";
|
||||
|
||||
// MSG 영역 경로
|
||||
private static final String MSG_DVCD = "MSG.msg_dvcd";
|
||||
private static final String MSG_SCOP_LEN = "MSG.msg_scop_len";
|
||||
@@ -60,6 +76,8 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
// DATA 영역 경로
|
||||
private static final String DATA_SCOP_LEN = "DATA.data_scop_len";
|
||||
|
||||
private static final String ERP_CODE = "ERP";
|
||||
|
||||
@Override
|
||||
public void coordinateAfterParsing(StandardMessage standardMessage, Object paramObject, Properties prop) {
|
||||
}
|
||||
@@ -73,10 +91,10 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
String guid = GUIDGeneratorDJB.getGUID("EAI");
|
||||
mapper.setGuid(standardMessage, guid);
|
||||
|
||||
// GUID 진행번호 초기화 (최초=1)
|
||||
// GUID 진행번호 초기화 (최초=001)
|
||||
mapper.setGuidSeq(standardMessage, "001");
|
||||
|
||||
// 원거래GUID = GUID 동일값 설정 (복원이 아닌 경우)
|
||||
// 원거래GUID = GUID 동일값 설정
|
||||
mapper.setOrgGuid(standardMessage, guid);
|
||||
|
||||
// 최초전문요청일자/시각 설정
|
||||
@@ -91,8 +109,20 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
EAIServerManager eaiServer = EAIServerManager.getInstance();
|
||||
standardMessage.setData(HEAD_SYS_ENV_DVCD, getSysEnvDvcd(eaiServer));
|
||||
|
||||
// 최초전송 IP / IPv4 / MAC 설정
|
||||
setNetworkInfo(standardMessage);
|
||||
// 최초전송 IP / IPv4 / MAC 수집 및 설정
|
||||
String[] netInfo = collectNetworkInfo();
|
||||
String ipv4 = netInfo[0];
|
||||
String mac = netInfo[1];
|
||||
standardMessage.setData(HEAD_FRST_TRNM_IPAD, ipv4);
|
||||
standardMessage.setData(HEAD_FRST_TRNM_IPV4_ADDR, ipv4);
|
||||
standardMessage.setData(HEAD_FRST_TRNM_MAC, mac);
|
||||
|
||||
// ERP 채널 전자금융공통영역(EZDATA) 설정
|
||||
String corpTlwn = StringUtils.trimToEmpty(standardMessage.findItemValue(HEAD_CORP_TLWN_VIRT_BRCD));
|
||||
if (ERP_CODE.equals(corpTlwn)) {
|
||||
setErpHeadFields(standardMessage);
|
||||
setEzdataFields(standardMessage, ipv4, mac);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -102,6 +132,15 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
|
||||
@Override
|
||||
public void coordinateBeforeResponse(StandardMessage standardMessage, ProcessVO processVO, Properties prop, String charset) {
|
||||
StandardMessageManager manager = StandardMessageManager.getInstance();
|
||||
InterfaceMapper mapper = manager.getMapper();
|
||||
|
||||
// GUID 진행번호 +1
|
||||
mapper.nextGuidSeq(standardMessage);
|
||||
|
||||
// 요청응답구분 = 응답(R)
|
||||
mapper.setSendRecvDivision(standardMessage, STDMessageKeys.SEND_RECV_CD_RECV);
|
||||
|
||||
// 응답일자/시각 설정
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
standardMessage.setData(HEAD_MESG_RSPN_DT, now.format(FMT_DATE));
|
||||
@@ -154,6 +193,8 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
if (row != null) {
|
||||
if (row.containsKey("outp_msg_cd")) row.get("outp_msg_cd").setValue(siteErrCode);
|
||||
if (row.containsKey("outp_msg_ctnt")) row.get("outp_msg_ctnt").setValue(siteErrMsg);
|
||||
if (row.containsKey("outp_msg_desc")) row.get("outp_msg_desc").setValue(siteErrMsg);
|
||||
if (row.containsKey("err_occu_loct")) row.get("err_occu_loct").setValue(errCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,22 +228,12 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
mainMsgItem.setSize(1);
|
||||
}
|
||||
|
||||
// msg_dvcd = NM (정상메시지)
|
||||
responseMessage.setData(MSG_DVCD, "NM");
|
||||
// msg_dvcd = NM (정상메시지), msg_list 없음(rowcnt=0)
|
||||
responseMessage.setData(MSG_DVCD, "NM");
|
||||
responseMessage.setData(MSG_OUTP_ATRB_CD, "0");
|
||||
responseMessage.setData(MSG_OUTP_MSG_CD, "000000000000");
|
||||
responseMessage.setData(MSG_OUTP_MSG_CTNT, "정상처리");
|
||||
responseMessage.setData(MSG_LIST_ROWCNT, "00001");
|
||||
|
||||
StandardItem msgList = responseMessage.findItem(MSG_LIST);
|
||||
if (msgList != null) {
|
||||
msgList.setSize(1);
|
||||
LinkedHashMap<String, StandardItem> row = msgList.getArrayChilds(0, true);
|
||||
if (row != null) {
|
||||
if (row.containsKey("outp_msg_cd")) row.get("outp_msg_cd").setValue("000000000000");
|
||||
if (row.containsKey("outp_msg_ctnt")) row.get("outp_msg_ctnt").setValue("정상처리");
|
||||
}
|
||||
}
|
||||
responseMessage.setData(MSG_OUTP_MSG_CD, "NCMM00001 ");
|
||||
responseMessage.setData(MSG_OUTP_MSG_CTNT, "정상처리되었습니다.");
|
||||
responseMessage.setData(MSG_LIST_ROWCNT, "00000");
|
||||
|
||||
makeMsgScopLen(responseMessage);
|
||||
}
|
||||
@@ -217,31 +248,50 @@ public class StandardMessageCoordinatorDJB extends DefaultStandardMessageCoordin
|
||||
return "D"; // 개발
|
||||
}
|
||||
|
||||
private void setNetworkInfo(StandardMessage standardMessage) {
|
||||
private String[] collectNetworkInfo() {
|
||||
String ipv4 = "";
|
||||
String mac = "";
|
||||
try {
|
||||
InetAddress localAddr = InetAddress.getLocalHost();
|
||||
String ipv4 = localAddr.getHostAddress();
|
||||
|
||||
// IPv4 주소 설정
|
||||
standardMessage.setData(HEAD_FRST_TRNM_IPAD, ipv4);
|
||||
standardMessage.setData(HEAD_FRST_TRNM_IPV4_ADDR, ipv4);
|
||||
|
||||
// MAC 주소 설정
|
||||
ipv4 = localAddr.getHostAddress();
|
||||
NetworkInterface ni = NetworkInterface.getByInetAddress(localAddr);
|
||||
if (ni != null) {
|
||||
byte[] mac = ni.getHardwareAddress();
|
||||
if (mac != null) {
|
||||
byte[] macBytes = ni.getHardwareAddress();
|
||||
if (macBytes != null) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < mac.length; i++) {
|
||||
for (int i = 0; i < macBytes.length; i++) {
|
||||
if (i > 0) sb.append(":");
|
||||
sb.append(String.format("%02X", mac[i]));
|
||||
sb.append(String.format("%02X", macBytes[i]));
|
||||
}
|
||||
standardMessage.setData(HEAD_FRST_TRNM_MAC, sb.toString());
|
||||
mac = sb.toString();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (logger.isWarn()) logger.warn("Failed to set network info", e);
|
||||
if (logger.isWarn()) logger.warn("Failed to collect network info", e);
|
||||
}
|
||||
return new String[]{ipv4, mac};
|
||||
}
|
||||
|
||||
private void setErpHeadFields(StandardMessage standardMessage) {
|
||||
standardMessage.setData(HEAD_TX_CMGR_CD, "S004");
|
||||
standardMessage.setData(HEAD_MGMT_BRCD, "260");
|
||||
standardMessage.setData(HEAD_TX_BRCD, "260");
|
||||
standardMessage.setData(HEAD_INSL_BRCD, "260");
|
||||
standardMessage.setData(HEAD_BLNG_BRCD, "260");
|
||||
}
|
||||
|
||||
private void setEzdataFields(StandardMessage standardMessage, String ipv4, String mac) {
|
||||
StandardItem ezdataItem = standardMessage.findItem("EZDATA");
|
||||
if (ezdataItem != null) {
|
||||
ezdataItem.setHidden(false);
|
||||
ezdataItem.setSize(1);
|
||||
}
|
||||
standardMessage.setData(EZDATA_ELFN_BNKN_DVCD, "10");
|
||||
standardMessage.setData(EZDATA_SVR_TX_SEQNO, String.valueOf(System.currentTimeMillis() / 1000L));
|
||||
standardMessage.setData(EZDATA_ELFN_MAC, mac);
|
||||
standardMessage.setData(EZDATA_PC_OFCL_IPAD, ipv4);
|
||||
standardMessage.setData(EZDATA_PC_PRVAT_IPAD, ipv4);
|
||||
standardMessage.setData(EZDATA_ELFN_SPR_FILD, ERP_CODE);
|
||||
}
|
||||
|
||||
private void makeupDataScopLen(StandardMessage standardMessage, String charset) {
|
||||
|
||||
Reference in New Issue
Block a user