Files
elink-online-common/src/main/java/com/eactive/eai/common/bpa/RuleManager.java
T
Rinjae aacc1a389e init
2025-09-05 18:57:45 +09:00

139 lines
4.9 KiB
Java

package com.eactive.eai.common.bpa;
import java.util.List;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.message.CondPerRtgInfo;
import com.eactive.eai.common.message.EAIMessage;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.common.util.MessageUtil;
import com.eactive.eai.transformer.function.util.CodeConversion;
import com.eactive.eai.transformer.layout.Layout;
import com.eactive.eai.transformer.message.EbcdicMessage;
import com.eactive.eai.transformer.message.Message;
import com.eactive.eai.transformer.message.MessageFactory;
import com.eactive.eai.transformer.message.XMLMessage;
import com.eactive.eai.transformer.transform.Transform;
import com.eactive.eai.transformer.transform.TransformManager;
/**
* 1. 기능 : 복합거래 FlowControl에서
* EAI 서비스메시지에 등록된 조건부 라우팅 룰에 대한 제어(TRUE/FALSE)를 처리하는 기능을 담당한다
* 2. 처리 개요 :
* - 응답메시지의 특정키갑을 정상값과 비교
* - 정상인 경우 결과처리번호(다음처리순번), 오류인경우 -1을 리턴한다.
* 3. 주의사항
*
* @author :
* @version : v 1.0.0
* @see :
* @since :
*/
public final class RuleManager {
private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
private RuleManager() {
}
/**
* 1. 기능 : 업무메시지에서 추적필드를 추출하는 함수 2. 처리 개요 : - BizKeyManager에서 Rule정보를 조회 - 조회된
* Rule을 기반으로 기능 처리 3. 주의사항
*
* @param eaiSvcCd EAI서비스코드
* @param messageID EAI 헤더에 정의된 메시지ID
* @param message 업무메시지 Object
* @return 결과 String 값(추적필드값)
* @exception Exception
*/
public static int getNextServieSeq(EAIMessage eaiMsg) throws Exception {
try {
String transformName = eaiMsg.getCurrentSvcMsg().getBsRspCnvMsgID();
Object message = eaiMsg.getStandardMessage().getBizData();
if (message == null) {
logger.error("RoutingRuleManager] 응답메시지가 NULL입니다 - " + message);
throw new Exception("RECEAICRR003");
}
logger.debug("RoutingRuleManager] 서비스메시지 [ " + eaiMsg.getCurrentSvcMsg().getSvcPssSeq() + " ] 에 대한 변환명은 [ "
+ transformName + " ]입니다.");
// ----------------------------------------------------
// Message Object 생성
// ----------------------------------------------------
TransformManager manager = TransformManager.getManager();
Transform info = manager.getTransform(transformName);
if (info == null)
throw new Exception("변환 정보를 찾을 수 없습니다.. - " + transformName);
Layout l = info.getTargetLayout();
String messageID = l.getName();
if (messageID == null) {
logger.error("RoutingRuleManager] Message ID is null.");
throw new RuntimeException("RECEAICRR004");
}
Message msg = MessageFactory.getFactory().getMessage(messageID);
logger.debug("RoutingRuleManager] layoutType [ " + l.getLayoutType().getName() + " ]");
if (l.getLayoutType().getName().equals("XML")) {
String xmlString = "";
if (message instanceof byte[]) {
xmlString = new String((byte[]) message);
} else {
xmlString = (String) message;
}
String rootItemName = ((XMLMessage) msg).getLayout().getRootItem().getName();
xmlString = MessageUtil.removeXMLHeader(xmlString);
xmlString = "<" + rootItemName + ">" + xmlString + "</" + rootItemName + ">";
msg.setData(xmlString);
} else if (l.getLayoutType().getName().equals("BYTES") || l.getLayoutType().getName().equals("EBCDIC")) {
msg.setData(message);
} else {
msg.setData(message);
}
// Routing Rule 조회
List<CondPerRtgInfo> condPerRtgInfoList = eaiMsg.getCurrentSvcMsg().getCondPerRtgInfo();
String prcssNo = "-1";
if (condPerRtgInfoList != null) {
int ruleSize = condPerRtgInfoList.size();
for (int i = 0; i < ruleSize; i++) {
CondPerRtgInfo rtnInfo = condPerRtgInfoList.get(i);
prcssNo = rtnInfo.getRsultPrcssNo();
String defVal = rtnInfo.getRuleCprTxt(); // 비교내용
String colName = rtnInfo.getRuleColNm(); // 규칙필드명
String keyVal = "";
if (msg instanceof EbcdicMessage) {
keyVal = new String(CodeConversion.seToAsc(msg.getByteArray(colName)));
} else {
keyVal = msg.getString(colName);
}
if (!defVal.equals(keyVal)) {
logger.info("RoutingRuleManager] FALSE RETURN[" + keyVal + " : " + defVal + " ]");
return (-1);
}
}
}
// 정상 Routing Rule 리턴
int iprcssNo = -1;
try {
iprcssNo = Integer.parseInt(prcssNo);
} catch (Exception nfe) {
logger.error("RoutingRuleManager] Invalid RsultPrcssNo [" + prcssNo + "]" + nfe.getMessage());
throw new Exception("RECEAICRR002");
}
return iprcssNo;
} catch (Exception e) {
throw new Exception(ExceptionUtil.getErrorCode(e, "RECEAICRR001"));
}
}
}