diff --git a/WebContent/WEB-INF/sqlmap-config/oracle/sqlMapConfigOfOnl.xml b/WebContent/WEB-INF/sqlmap-config/oracle/sqlMapConfigOfOnl.xml
index 44e1f9b..1dfc728 100644
--- a/WebContent/WEB-INF/sqlmap-config/oracle/sqlMapConfigOfOnl.xml
+++ b/WebContent/WEB-INF/sqlmap-config/oracle/sqlMapConfigOfOnl.xml
@@ -87,6 +87,12 @@
resource="com/eactive/eai/rms/onl/statistics/backup/MonthlyBackup-oracle.xml" />
+
+
+
+
diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/layout/LayoutItemEMSRepository.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/layout/LayoutItemEMSRepository.java
index 31b2ed5..522be90 100644
--- a/src/main/java/com/eactive/eai/rms/data/entity/onl/layout/LayoutItemEMSRepository.java
+++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/layout/LayoutItemEMSRepository.java
@@ -1,9 +1,22 @@
package com.eactive.eai.rms.data.entity.onl.layout;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntity;
import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntityId;
import com.eactive.eai.data.jpa.BaseRepository;
public interface LayoutItemEMSRepository extends BaseRepository {
+ @Modifying
+ @Query("DELETE FROM LayoutItemEntity l WHERE l.id.loutname = :loutname")
+ int deleteByLoutname(@Param("loutname") String loutname);
+
+ List findByIdLoutname(String loutname);
+
+ List findByIdLoutnameOrderByIdLoutitemserno(String loutname);
}
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layout/LayoutDao.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layout/LayoutDao.java
index 9caeb71..5bf2b1f 100644
--- a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layout/LayoutDao.java
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layout/LayoutDao.java
@@ -1,12 +1,23 @@
package com.eactive.eai.rms.onl.manage.rule.layout;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
+import com.eactive.eai.data.entity.onl.transformer.layout.LayoutEntity;
+import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntity;
+import com.eactive.eai.data.entity.onl.transformer.layout.LayoutItemEntityId;
import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
+import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessService;
+import com.eactive.eai.rms.data.entity.onl.layout.LayoutItemEMSRepository;
+import com.eactive.eai.rms.data.entity.onl.layout.LayoutService;
import com.eactive.eai.rms.onl.manage.rule.layoutsync.LayoutSyncVo;
@Repository("layoutDao")
@@ -14,37 +25,137 @@ import com.eactive.eai.rms.onl.manage.rule.layoutsync.LayoutSyncVo;
public class LayoutDao extends SqlMapClientTemplateDao {
private static final Logger logger = Logger.getLogger(LayoutDao.class);
+ private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+
+ @Autowired
+ private LayoutService layoutService;
+
+ @Autowired
+ private LayoutItemEMSRepository layoutItemRepository;
+
+ @Autowired
+ private UserBusinessService userBusinessService;
public int selectListCount(HashMap param) throws Exception {
- return (Integer) template.queryForObject("Layout.selectListCount", param);
+ List currentUserBusiness = userBusinessService.getCurrentUserBusinessCodes();
+ long count = layoutService.getJPAQueryFactory()
+ .selectFrom(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity)
+ .where(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity.eaibzwkdstcd.in(currentUserBusiness))
+ .fetchCount();
+ return (int) count;
}
public HashMap selectDetail(HashMap param) throws Exception {
- return (HashMap) template.queryForObject("Layout.selectDetail", param);
+ String loutName = (String) param.get("loutName");
+ Optional optionalEntity = layoutService.findById(loutName);
+
+ if (!optionalEntity.isPresent()) {
+ return null;
+ }
+
+ LayoutEntity entity = optionalEntity.get();
+ HashMap result = new HashMap<>();
+ result.put("LOUTNAME", entity.getLoutname());
+ result.put("LOUTPTRNNAME", entity.getLoutptrnname());
+ result.put("LOUTDESC", entity.getLoutdesc());
+ result.put("LASTAMNDHMS", entity.getLastamndhms() != null ? entity.getLastamndhms().format(DATETIME_FORMATTER) : null);
+ result.put("EAIBZWKDSTCD", entity.getEaibzwkdstcd());
+ result.put("UAPPLNAME", entity.getUapplname());
+ result.put("SYSINTFACNAME", entity.getSysintfacname());
+
+ return result;
}
public void insert(HashMap paramMap) throws Exception {
- this.template.insert("Layout.insert", paramMap);
+ LayoutEntity entity = new LayoutEntity();
+ entity.setLoutname((String) paramMap.get("loutName"));
+ entity.setLoutptrnname((String) paramMap.get("loutPtrnName"));
+ entity.setLoutdesc((String) paramMap.get("loutDesc"));
+ entity.setEaibzwkdstcd((String) paramMap.get("eaiBzwkDstcd"));
+ entity.setUapplname((String) paramMap.get("uapplName"));
+ entity.setSysintfacname((String) paramMap.get("sysIntfacName"));
+
+ layoutService.save(entity);
}
public void update(HashMap paramMap) throws Exception {
- this.template.update("Layout.update", paramMap);
+ String loutName = (String) paramMap.get("loutName");
+ Optional optionalEntity = layoutService.findById(loutName);
+
+ if (!optionalEntity.isPresent()) {
+ throw new Exception("Layout not found: " + loutName);
+ }
+
+ LayoutEntity entity = optionalEntity.get();
+ entity.setLoutptrnname((String) paramMap.get("loutPtrnName"));
+ entity.setLoutdesc((String) paramMap.get("loutDesc"));
+ entity.setEaibzwkdstcd((String) paramMap.get("eaiBzwkDstcd"));
+ entity.setUapplname((String) paramMap.get("uapplName"));
+ entity.setSysintfacname((String) paramMap.get("sysIntfacName"));
+
+ layoutService.save(entity);
}
public void delete(HashMap paramMap) throws Exception {
- this.template.delete("Layout.delete", paramMap);
+ String loutName = (String) paramMap.get("loutName");
+ layoutService.deleteById(loutName);
}
public int insertItem(HashMap param) {
- return this.template.update("Layout.insertItem", param);
+ LayoutItemEntity entity = new LayoutItemEntity();
+
+ // Composite Key 설정
+ LayoutItemEntityId id = new LayoutItemEntityId();
+ id.setLoutname((String) param.get("loutName"));
+ id.setLoutitemname((String) param.get("loutItemName"));
+ id.setLoutitemserno((Integer) param.get("loutItemSerno"));
+ entity.setId(id);
+
+ // 필드 설정
+ entity.setLoutitemidname((Integer) param.get("loutItemIDName"));
+ entity.setParntloutitemidname((Integer) param.get("parntLoutItemIDName"));
+ entity.setLoutitemdesc((String) param.get("loutItemDesc"));
+ entity.setLoutitemnodeptrnidname((Integer) param.get("loutItemNodePtrnIDName"));
+ entity.setLoutitemptrnidname((Integer) param.get("loutItemPtrnIDName"));
+ entity.setLoutitempathname((String) param.get("loutItemPathName"));
+ entity.setLoutitemlencnt((Integer) param.get("loutItemLenCnt"));
+ entity.setLoutitemrefinfo((String) param.get("loutItemRefInfo"));
+ entity.setLoutitemrefinfo2((String) param.get("loutItemRefInfo2"));
+ entity.setLoutitemoccurptrndstcd((String) param.get("loutItemOccurPtrnDstcd"));
+ entity.setLoutitemmaxoccurnoitm((Integer) param.get("loutItemMaxOccurNoitm"));
+ entity.setLoutitemminoccurnoitm((Integer) param.get("loutItemMinOccurNoitm"));
+ entity.setLoutitembascval((String) param.get("loutItemBascVal"));
+ entity.setLoutitemmskyn((String) param.get("loutItemMskYn"));
+ entity.setLoutitemmasklength((Integer) param.get("loutItemMaskLength"));
+ entity.setLoutdptcnt((Integer) param.get("lyoutDptCnt"));
+ entity.setDecptlencnt((Integer) param.get("decptLenCnt"));
+ entity.setLoutitemrefptrnidname((String) param.get("lyoutItemRefPtrnIDName"));
+
+ layoutItemRepository.save(entity);
+ return 1;
}
public int deleteItemAll(HashMap param) {
- return this.template.update("Layout.deleteItemAll", param);
+ String loutName = (String) param.get("loutName");
+ return layoutItemRepository.deleteByLoutname(loutName);
}
public List> selectListAll(HashMap param) {
- return this.template.queryForList("Layout.selectListAll", param);
+ List currentUserBusiness = userBusinessService.getCurrentUserBusinessCodes();
+
+ List entities = layoutService.getJPAQueryFactory()
+ .selectFrom(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity)
+ .where(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity.eaibzwkdstcd.in(currentUserBusiness))
+ .orderBy(com.eactive.eai.data.entity.onl.transformer.layout.QLayoutEntity.layoutEntity.loutname.asc())
+ .fetch();
+
+ return entities.stream().map(entity -> {
+ HashMap map = new HashMap<>();
+ map.put("LOUTNAME", entity.getLoutname());
+ map.put("LOUTDESC", entity.getLoutdesc());
+ map.put("LOUTPTRNNAME", entity.getLoutptrnname());
+ return map;
+ }).collect(Collectors.toList());
}
public List getLayoutXMLList(HashMap param) {
@@ -78,6 +189,19 @@ public class LayoutDao extends SqlMapClientTemplateDao {
}
public List selectLayout(HashMap params) {
- return template.queryForList("Layout.selectLayout", params);
+ // params에서 검색 조건 추출
+ List entities = layoutService.findAll();
+
+ return entities.stream().map(entity -> {
+ HashMap map = new HashMap<>();
+ map.put("LOUTNAME", entity.getLoutname());
+ map.put("LOUTPTRNNAME", entity.getLoutptrnname());
+ map.put("LOUTDESC", entity.getLoutdesc());
+ map.put("LASTAMNDHMS", entity.getLastamndhms() != null ? entity.getLastamndhms().format(DATETIME_FORMATTER) : null);
+ map.put("EAIBZWKDSTCD", entity.getEaibzwkdstcd());
+ map.put("UAPPLNAME", entity.getUapplname());
+ map.put("SYSINTFACNAME", entity.getSysintfacname());
+ return map;
+ }).collect(Collectors.toList());
}
}
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceDao.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceDao.java
new file mode 100644
index 0000000..fd5a1ee
--- /dev/null
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceDao.java
@@ -0,0 +1,25 @@
+package com.eactive.eai.rms.onl.manage.rule.layoutsync;
+
+import java.util.HashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+
+import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
+import com.eactive.eai.rms.onl.transaction.extnl.InterfaceDao;
+
+@Repository
+class KJBInterfaceDao extends SqlMapClientTemplateDao {
+
+ private static final Logger logger = LoggerFactory.getLogger(InterfaceDao.class);
+
+ public void lazyInsertToIF01(HashMap paramMap) throws Exception {
+ this.template.insert("Interface.insertToIF01", paramMap);
+ }
+
+ public HashMap selectDetail(HashMap paramMap) throws Exception {
+ return (HashMap) template.queryForObject("Interface.selectDetail", paramMap);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceService.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceService.java
new file mode 100644
index 0000000..c3e3c80
--- /dev/null
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceService.java
@@ -0,0 +1,24 @@
+package com.eactive.eai.rms.onl.manage.rule.layoutsync;
+
+import java.util.HashMap;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import lombok.RequiredArgsConstructor;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+class KJBInterfaceService {
+
+ private final KJBInterfaceDao dao;
+
+ public void lazyInsertToIF01(HashMap param) throws Exception {
+ HashMap detail = dao.selectDetail(param);
+ if (detail == null) {
+ dao.lazyInsertToIF01(param);
+ }
+ }
+
+}
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBLayoutDao.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBLayoutDao.java
new file mode 100644
index 0000000..73b2241
--- /dev/null
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBLayoutDao.java
@@ -0,0 +1,22 @@
+package com.eactive.eai.rms.onl.manage.rule.layoutsync;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import com.eactive.eai.rms.common.base.SqlMapClientTemplateDao;
+import com.eactive.eai.rms.data.entity.onl.layout.LayoutService;
+
+import lombok.RequiredArgsConstructor;
+
+@Repository
+@RequiredArgsConstructor
+class KJBLayoutDao extends SqlMapClientTemplateDao {
+
+ private final LayoutService layoutService;
+
+ public List selectItemPathList(HashMap param) throws Exception {
+ return template.queryForList("Layout.selectItemPathList", param);
+ }
+}
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBTransformService.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBTransformService.java
new file mode 100644
index 0000000..b1df91d
--- /dev/null
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBTransformService.java
@@ -0,0 +1,291 @@
+package com.eactive.eai.rms.onl.manage.rule.layoutsync;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.eactive.eai.rms.onl.manage.rule.transform.TransformDao;
+import com.eactive.eai.rms.onl.manage.rule.transform.TransformManService;
+import com.eactive.eai.rms.onl.manage.serviceinfo.eaimsg.EaiMsgDao;
+
+import lombok.RequiredArgsConstructor;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+class KJBTransformService {
+
+ private static final Logger logger = LoggerFactory.getLogger(KJBTransformService.class);
+
+ private final TransformDao transformDao;
+ private final KJBLayoutDao layoutDao;
+
+ // 참고메시지 id 를 얻기 위함.
+ private final EaiMsgDao eaiMessageDAO;
+
+ TransformManService transformManService;
+
+ public String transactionLayoutToTransform(JSONObject json, String interfaceLayoutName, String serviceLayoutName)
+ throws Exception {
+ /*
+ * 인터페이스가 있는 지 확인 후 없으면 전문레이아웃변환매핑을 신규로 입력 한다. 있을 경우 추후 프로세스에 의해 정보가 업데이트 된다.
+ */
+
+ JSONObject message = (JSONObject) json.get("Message");
+ JSONObject header = (JSONObject) message.get("Header");
+ JSONObject body = (JSONObject) message.get("Body");
+
+ String interfaceCode = (String) body.get("interfaceCode");
+
+ String srcLayoutName = null;
+ String tgtLayoutName = null;
+
+ JSONObject srcLayout = null;
+ JSONObject tgtLayout = null;
+
+ JSONArray layoutArray = (JSONArray) body.get("Layout");
+
+ // interfaceCode에 해당하는 Layout 검색
+ JSONObject interfaceLayout = (JSONObject) layoutArray.stream()
+ .filter(j -> interfaceLayoutName.equals(((JSONObject) j).get("id"))).findFirst().get();
+ JSONObject serviceLayout = (JSONObject) layoutArray.stream()
+ .filter(j -> serviceLayoutName.equals(((JSONObject) j).get("id"))).findFirst().get();
+
+ String cnvsnDesc = (String) body.get("interfaceDesc");
+
+ String interfaceIdSuffix = null;
+ String cnvsnType = null;
+
+ if ("I".equals(interfaceLayout.get("ioType")) || ((String) interfaceLayout.get("id")).endsWith("S1")) {
+ cnvsnType = "REQ";
+ } else {
+ cnvsnType = "RES";
+ }
+
+ if ("EAI".equals(interfaceLayout.get("usesystem"))) {
+ // EAI
+ if (interfaceCode.startsWith("EA"))// 비동기
+ {
+ interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S1" : "R1";
+ } else// 동기
+ {
+ interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S1" : "S1";
+ }
+
+ } else if ("FEP".equals(interfaceLayout.get("usesystem"))) {
+ // FEP
+ // 당타발
+ if (interfaceCode.startsWith("F1")) {
+ // 타발
+ interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S1" : "R2";
+ } else if (interfaceCode.startsWith("F2")) {
+ // 당발
+ interfaceIdSuffix = "REQ".equals(cnvsnType) ? "S2" : "R1";
+ }
+ }
+
+ String cnvsnName = String.format("TRANSFORM_%s_%s%s_%s", body.get("bzSystemCode"), interfaceCode,
+ interfaceIdSuffix, cnvsnType);
+
+ if ("FEP".equals(interfaceLayout.get("usesystem")) || "REQ".equals(cnvsnType)) {
+ srcLayoutName = interfaceLayoutName;
+ srcLayout = interfaceLayout;
+
+ tgtLayoutName = serviceLayoutName;
+ tgtLayout = serviceLayout;
+ } else {
+ srcLayoutName = serviceLayoutName;
+ srcLayout = serviceLayout;
+
+ tgtLayoutName = interfaceLayoutName;
+ tgtLayout = interfaceLayout;
+ }
+
+ HashMap params = new HashMap<>();
+ params.put("cnvsnName", cnvsnName);
+
+ Map fransformDetail = transformDao.selectDetail(params);
+
+ if (fransformDetail == null) {
+ insert(interfaceCode, cnvsnName, cnvsnDesc, cnvsnType);
+ }
+
+ HashMap param = new HashMap();
+ param.put("loutName", srcLayoutName);
+ List> srcDataArray = layoutDao.selectItemPathList(param);
+ param.put("loutName", tgtLayoutName);
+ List> tgtDataArray = layoutDao.selectItemPathList(param);
+
+ HashMap[] list = new HashMap[srcDataArray.size()];
+
+ for (int i = 0; i < srcDataArray.size(); i++) {
+ String s = (String) ((HashMap) srcDataArray.get(i)).get("PATH");
+ String t = (String) ((HashMap) tgtDataArray.get(i)).get("PATH");
+
+ HashMap m = new HashMap();
+
+ m.put("CNVSNCMDNAME", s);
+ m.put("CNVSNRSULTITEMPATHNAME", t);
+ m.put("CNVSNITEMBASCVAL", "");
+ m.put("CNVSNITEMSERNO", i + 1);
+
+ list[i] = m;
+ }
+
+ transaction(cnvsnName, interfaceCode, cnvsnDesc, srcLayoutName, tgtLayoutName, list, "false", cnvsnType);
+
+ return cnvsnName;
+
+ }
+
+ public void insert(String eaiSvcName, String cnvsnName, String cnvsnDesc, String cnvsnType) {
+
+ HashMap paramMap = new HashMap();
+ paramMap.put("eaiSvcName", eaiSvcName);
+ paramMap.put("cnvsnName", cnvsnName);
+ paramMap.put("cnvsnType", cnvsnType);
+ paramMap.put("cnvsnDesc", cnvsnDesc);
+ paramMap.put("chngEonot", "1");// 0.미사용 1.사용
+ // 1.EAI Message에 셋팅
+ updateTransfromEaiSvcName(paramMap);
+ // 2.EAI
+ transformDao.insert(paramMap);
+
+ }
+
+ public void transaction(String cnvsnName, String eaiSvcName, String cnvsnDesc, String srcLayoutName,
+ String tgtLayoutName, HashMap[] list, String chkForce, String cnvsnType) throws Exception {
+
+ if (chkForce != null && "true".equals(chkForce)) {
+ HashMap paramMap = new HashMap();
+ paramMap.put("cnvsnName", cnvsnName);
+ paramMap.put("eaiSvcName", eaiSvcName);
+ paramMap.put("cnvsnType", cnvsnType);
+ paramMap.put("chngEonot", "1");// 0.미사용 1.사용
+ updateTransfromEaiSvcName(paramMap);
+ }
+
+ HashMap paramMap = new HashMap();
+ // 1.변환 테이블 update
+ paramMap.put("cnvsnName", cnvsnName);
+ paramMap.put("cnvsnDesc", cnvsnDesc);
+ transformDao.updateTransform(paramMap);
+ // 2.변환 소스/결과 테이블 update
+ paramMap = new HashMap();
+ paramMap.put("cnvsnName", cnvsnName);
+ transformDao.deleteTransformSourceResult(paramMap);
+
+ // 2-1.SRC 등록
+ paramMap.put("loutName", srcLayoutName);
+ paramMap.put("sourcRsultDstcd", "SRC_LAYOUT");
+ transformDao.insertTransformSourceResult(paramMap);
+
+ // 2-2.TGT 등록
+ paramMap.put("loutName", tgtLayoutName);
+ paramMap.put("sourcRsultDstcd", "TGT_LAYOUT");
+ transformDao.insertTransformSourceResult(paramMap);
+
+ // 3.변환항목 테이블 update
+ // -----------------------------------------------------------------------------
+ // 임시코드 : 복합거래시 소스레이아웃을 추가로 등록되도록 임시 수정 (2018.06.26)
+ // -----------------------------------------------------------------------------
+ String layoutName = null;
+ HashMap layoutParamMap = new HashMap();
+ layoutParamMap.put("cnvsnName", cnvsnName);
+ layoutParamMap.put("sourcRsultDstcd", "SRC_LAYOUT");
+
+ HashMap layoutMap = new HashMap();
+ // -----------------------------------------------------------------------------
+
+ paramMap = new HashMap();
+ paramMap.put("cnvsnName", cnvsnName);
+ transformDao.deleteTransformItem(paramMap);
+ for (int i = 0; i < list.length; i++) {
+ paramMap.put("cnvsnCmdName", list[i].get("CNVSNCMDNAME"));
+ paramMap.put("cnvsnRsultItemPathName", list[i].get("CNVSNRSULTITEMPATHNAME"));
+ paramMap.put("cnvsnItemBascVal", Objects.toString(list[i].get("CNVSNITEMBASCVAL"), ""));
+ paramMap.put("cnvsnItemSerno", list[i].get("CNVSNITEMSERNO"));
+
+ transformDao.insertTransformItem(paramMap);
+ // -----------------------------------------------------------------------------
+ // 임시코드 : 복합거래시 소스레이아웃을 추가로 등록되도록 임시 수정 (2018.06.26)
+ // -----------------------------------------------------------------------------
+ logger.debug(">>> Check SRC_LAYOUT layoutName = " + layoutName);
+
+ layoutName = extractLayoutName((String) list[i].get("CNVSNCMDNAME"));
+ if (layoutName == null || srcLayoutName.equals(layoutName) || layoutMap.get(layoutName) != null) {
+ // Do nothing
+ } else {
+ logger.debug(">>> Added SRC_LAYOUT layoutName = " + layoutName);
+ layoutParamMap.put("loutName", layoutName);
+ transformDao.insertTransformSourceResult(layoutParamMap);
+ layoutMap.put(layoutName, layoutName);
+ }
+ // -----------------------------------------------------------------------------
+ }
+
+ }
+
+ public void updateTransfromEaiSvcName(HashMap paramMap) {
+ // String cnvsnType = null;
+ HashMap map = new HashMap();
+ String eaiSvcName = (String) paramMap.get("eaiSvcName");
+ map.put("eaiSvcName", eaiSvcName);
+ map.put("svcPrcssNo", "1");
+
+ try {
+ HashMap ifc = eaiMessageDAO.selectDetailSvc(map);
+
+ if ("ASYN".equals((String) ifc.get("PSVINTFACDSTICNAME"))) {
+ if (!"ERR".equals((String) paramMap.get("cnvsnType"))) {
+ // cnvsnType = "REQ";
+ /**
+ * 20200521. SYNC-ASYN 처리 추가
+ */
+ HashMap ifmsg = eaiMessageDAO.selectDetail(map);
+ String inboundSyncAsync = (String) ifmsg.get("SVCMOTIVUSEDSTCD");
+ if ("SYNC".equals(inboundSyncAsync) == false) {
+ paramMap.put("cnvsnType", "REQ");
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.error(e.toString(), e);
+ }
+
+ transformDao.updateTransfromEaiSvcName(paramMap);
+ }
+
+ private String extractLayoutName(String path) {
+ String layoutName = null;
+ int sPos = 0;
+ int ePos = 0;
+ if (path == null || path.length() == 0)
+ return null;
+
+ sPos = path.lastIndexOf("(");
+ if (sPos < 0) {
+ sPos = 0;
+ } else if (sPos > 0) {
+ sPos = sPos + 1;
+ }
+
+ ePos = path.indexOf(".");
+ if (ePos < 0)
+ sPos = 0;
+
+ if (ePos > 0 && ePos > sPos) {
+ layoutName = path.substring(sPos, ePos);
+ layoutName = layoutName.trim();
+ }
+ return layoutName;
+ }
+}
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout-oracle.xml b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout-oracle.xml
new file mode 100644
index 0000000..3dd8f7a
--- /dev/null
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout-oracle.xml
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+ SELECT FA.*, FB.BZWKDSTICNAME
+ FROM (
+ SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT ROWNUM AS ROWNO,
+ LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
+ A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
+ FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
+ WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
+ AND A.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
+
+ A.LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ A.EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ A.LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+ ) TMP1
+ ) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
+ ) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
+ ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
+ ORDER BY 1
+
+
+
+
+ SELECT COUNT(*)
+ FROM $schemaId$.TSEAITR07
+ WHERE EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
+
+ LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select 0 AS "level"
+ , LoutItemIDName "id"
+ , ParntLoutItemIDName "parent"
+ , 'true' AS "expanded"
+ , CASE LoutItemNodePtrnIDName WHEN 2203 THEN 'true' ELSE 'false' END "isLeaf"
+ , LoutItemName LOUTITEMPATH
+ , LOUTNAME AS LOUTNAME
+ , LOUTITEMIDNAME AS LOUTITEMIDNAME
+ , LOUTITEMNAME AS LOUTITEMNAME
+ , LOUTITEMDESC AS LOUTITEMDESC
+ , LOUTITEMSERNO AS LOUTITEMSERNO
+ , LOUTITEMLENCNT AS LOUTITEMLENCNT
+ , DECPTLENCNT AS DECPTLENCNT
+ , LOUTITEMNODEPTRNIDNAME AS LOUTITEMNODEPTRNIDNAME
+ , LOUTITEMPTRNIDNAME AS LOUTITEMPTRNIDNAME
+ , (CASE LoutItemNodePtrnIDName
+ WHEN 2201 THEN 'MESSAGE'
+ WHEN 2202 THEN 'GROUP'
+ WHEN 2203 THEN 'FIELD'
+ WHEN 2204 THEN 'ATTR'
+ ELSE 'UNKNOWN' END) LOUTITEMNODEPTRNIDDESC
+ , (CASE LoutItemPtrnIDName
+ WHEN 2100 THEN 'UNKNOWN'
+ WHEN 2101 THEN 'STRING'
+ WHEN 2102 THEN 'INT'
+ WHEN 2103 THEN 'LONG'
+ WHEN 2104 THEN 'SHORT'
+ WHEN 2105 THEN 'DOUBLE'
+ WHEN 2106 THEN 'FLOAT'
+ WHEN 2107 THEN 'CHAR'
+ WHEN 2108 THEN 'BYTE'
+ WHEN 2109 THEN 'DATE'
+ WHEN 2110 THEN 'TIME'
+ WHEN 2111 THEN 'TIMESTAMP'
+ WHEN 2112 THEN 'NUMBER'
+ WHEN 2113 THEN 'BYTEARRAY'
+ WHEN 2114 THEN 'NUMERIC'
+ WHEN 2115 THEN 'PACKDECIMAL'
+ WHEN 2116 THEN 'OBJECT'
+ WHEN 2117 THEN 'BOOLEAN'
+ WHEN 2118 THEN 'BIGDECIMAL'
+ ELSE 'UNKNOWN' END
+ )LOUTITEMPTRNIDDESC
+ , PARNTLOUTITEMIDNAME AS PARNTLOUTITEMIDNAME
+ , LOUTITEMOCCURPTRNDSTCD AS LOUTITEMOCCURPTRNDSTCD
+ , LOUTITEMMINOCCURNOITM AS LOUTITEMMINOCCURNOITM
+ , LOUTITEMMAXOCCURNOITM AS LOUTITEMMAXOCCURNOITM
+ , LOUTITEMREFINFO2 AS LOUTITEMREFINFO2
+ from (
+ select *
+ from $schemaId$.TSEAITR08
+ where LoutName = #loutName#
+ ) T
+ order by LoutItemSerno
+
+
+
+
+ UPDATE $schemaId$.TSEAITR07
+ SET LASTAMNDHMS = to_char(sysdate,'yyyymmddhh24miss')
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ SELECT
+ LOUTNAME LOUTNAME,
+ LOUTITEMNAME LOUTITEMNAME,
+ LOUTITEMIDNAME LOUTITEMIDNAME,
+ PARNTLOUTITEMIDNAME PARNTLOUTITEMIDNAME,
+ LOUTITEMDESC LOUTITEMDESC,
+ LOUTITEMNODEPTRNIDNAME LOUTITEMNODEPTRNIDNAME,
+ LOUTITEMPTRNIDNAME LOUTITEMPTRNIDNAME,
+ LOUTITEMPATHNAME LOUTITEMPATHNAME,
+ LOUTITEMLENCNT LOUTITEMLENCNT,
+ LOUTITEMREFINFO LOUTITEMREFINFO,
+ LOUTITEMREFINFO2 LOUTITEMREFINFO2,
+ LOUTITEMSERNO LOUTITEMSERNO,
+ LOUTITEMOCCURPTRNDSTCD LOUTITEMOCCURPTRNDSTCD,
+ LOUTITEMMAXOCCURNOITM LOUTITEMMAXOCCURNOITM,
+ LOUTITEMMINOCCURNOITM LOUTITEMMINOCCURNOITM,
+ LOUTITEMBASCVAL LOUTITEMBASCVAL,
+ LOUTITEMMSKYN LOUTITEMMSKYN,
+ COALESCE(LOUTITEMMASKLENGTH,0) LOUTITEMMASKLENGTH,
+ LYOUTDPTCNT LYOUTDPTCNT,
+ DECPTLENCNT DECPTLENCNT,
+ LYOUTITEMREFPTRNIDNAME LYOUTITEMREFPTRNIDNAME
+ FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME=#loutName#
+ AND LOUTITEMNAME =#loutItemName#
+ AND LOUTITEMSERNO=#loutItemSerno#
+ ORDER BY LOUTITEMIDNAME, LOUTITEMOCCURPTRNDSTCD DESC
+
+
+
+
+ SELECT
+ CASE WHEN PARNTLOUTITEMIDNAME = '0' THEN 'FORMAT'
+ ELSE CASE WHEN LOUTITEMPTRNIDNAME = '2100' THEN 'GRID'
+ WHEN LOUTITEMPTRNIDNAME = '2113' THEN ( CASE WHEN (SELECT LOUTITEMPTRNIDNAME
+ FROM $schemaId$.TSEAITR08 L
+ WHERE L.LOUTNAME = O.LOUTNAME
+ AND L.LOUTITEMIDNAME = O.PARNTLOUTITEMIDNAME
+ AND L.LOUTITEMPTRNIDNAME = '2100'
+ AND (L.LOUTITEMMAXOCCURNOITM = -1 OR L.LOUTITEMMAXOCCURNOITM > 1)
+ ) = '2100' THEN 'COLUMN' ELSE 'FLD' END )
+ END AS FIELDTYPE
+ , LOUTITEMNAME AS ID
+ , LOUTITEMDESC AS DESC
+ ,CASE WHEN LYOUTITEMREFPTRNIDNAME = 'STRING' THEN 'CHAR'
+ LYOUTITEMREFPTRNIDNAME = 'BYTEARRAY' THEN 'CHAR'
+ LYOUTITEMREFPTRNIDNAME = 'INTEGER' THEN 'DECIMAL'
+ LYOUTITEMREFPTRNIDNAME = 'BIGDECIMAL' THEN 'NUMERIC'
+ ELSE 'CHAR'
+ END AS TYPE
+ , LOUTITEMLENCNT AS LEN
+ , DECPTLENCNT AS SCALE
+ , (CASE WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NOT NULL THEN LOUTITEMREFINFO2
+ WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NULL THEN TO_CHAR(LOUTITEMMAXOCCURNOITM)
+ ELSE ' ' END) AS COUNT
+ FROM (
+ SELECT *
+ FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME = #LoutName#
+ ) O
+ WHERE (LOUTITEMPTRNIDNAME = '2100' AND (LOUTITEMMAXOCCURNOITM = -1 OR LOUTITEMMAXOCCURNOITM > 1) ) OR (LOUTITEMPTRNIDNAME = '2113' ) OR (PARNTLOUTITEMIDNAME = 0)
+ CONNECT BY PRIOR LOUTITEMIDNAME = PARNTLOUTITEMIDNAME
+ START WITH PARNTLOUTITEMIDNAME = '0'
+
+
+
+
+ SELECT ID "id",
+ LOUTDESC "desc", '$schemaId$' "usesystem",
+ TARGETSYSTEM "targetsystem", TRIM(PSVSYSBZWKDSTCD) "group", IOTYPE "ioType",
+ HEADER_TXID "servicecode", A.EAISVCNAME "interfacecode"
+ FROM (
+ SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '기동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '수동'
+ WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
+ WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,EAISVCNAME, PSVSYSBZWKDSTCD
+ FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.CHNGMSGIDNAME
+ WHERE B.EAISVCNAME = #eaiSvcName# UNION
+ SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
+ WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
+ WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,EAISVCNAME, PSVSYSBZWKDSTCD
+ FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.BASCRSPNSCHNGMSGIDNAME
+ WHERE B.EAISVCNAME = #eaiSvcName# UNION
+ SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'IE' ELSE 'OE' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
+ WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
+ WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,EAISVCNAME, PSVSYSBZWKDSTCD
+ FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.ERRRSPNSCHNGMSGIDNAME
+ WHERE B.EAISVCNAME = #eaiSvcName# UNION
+ SELECT REFMSGIDNAME ID, CASE WHEN REFMSGIDNO = 1 THEN 'I' ELSE 'O' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 1 THEN '기동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 2 THEN '수동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 3 THEN '수동'
+ WHEN REFMSGIDNAME LIKE '%CBS' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,A.EAISVCNAME, PSVSYSBZWKDSTCD FROM $schemaId$.TSEAIMS02 A JOIN $schemaId$.TSEAIHE02 B ON A.EAISVCNAME = B.EAISVCNAME
+ WHERE B.EAISVCNAME = #eaiSvcName#
+ ) A
+ LEFT OUTER JOIN ( SELECT EAISVCNAME
+ , max(decode(COLUMNNAME,'HEADER_TXID',COLUMNVALUE,'')) HEADER_TXID
+ FROM $schemaId$.TSEAIHS04 hs04 , $schemaId$.tseaihs05 hs05
+ where hs04.BZWKSVCKEYNAME =hs05.BZWKSVCKEYNAME
+ group by hs04.BZWKSVCKEYNAME,EAISVCNAME
+ ) HS04 ON A.EAISVCNAME = HS04.EAISVCNAME
+ LEFT OUTER JOIN $schemaId$.TSEAITR07 TR07 ON TR07.LOUTNAME = A.ID
+ ORDER BY 1
+
+
+
+
+ SELECT SUBSTR(SYS_CONNECT_BY_PATH(LOUTITEMNAME, '.'),2) PATH
+ FROM (
+ SELECT decode(LYOUTITEMREFPTRNIDNAME, NULL, decode(LOUTITEMIDNAME, 1000, LOUTITEMNAME, LOUTITEMNAME||'[*]'), LOUTITEMNAME) LOUTITEMNAME, LOUTITEMIDNAME, LYOUTDPTCNT, nvl(LYOUTITEMREFPTRNIDNAME,'Group') LYOUTITEMREFPTRNIDNAME, PARNTLOUTITEMIDNAME PARENT
+ FROM tseaitr08 a
+ WHERE loutname = #loutName#
+ ORDER BY LOUTITEMIDNAME
+ )
+ WHERE LYOUTITEMREFPTRNIDNAME != 'Group'
+ START WITH LOUTITEMIDNAME = 1000 CONNECT BY PRIOR LOUTITEMIDNAME = PARENT
+
+
+
+
+ SELECT FA.*, FB.BZWKDSTICNAME
+ FROM (
+ SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT ROWNUM AS ROWNO,
+ LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
+ A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
+ FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
+ WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
+
+ UPPER(A.LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ UPPER(A.EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ UPPER(A.LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+ ) TMP1
+ ) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
+ ) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
+ ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
+ ORDER BY 1
+
+
+
+
+ SELECT COUNT(*)
+ FROM $schemaId$.TSEAITR07
+
+
+ UPPER(LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ UPPER(EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ UPPER(LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR09
+ ( LOGPRCSSSERNO, EXECUTEDATE ,EXECUTECLASS,EXECUTEMETHOD,EXECUTEUSER,SENDXMLCMNT,SENDAMNDHMS )
+ VALUES
+ ( #logPrcssSerno#, TO_CHAR(CURRENT_DATE,'YYYYMMDD') ,#executeClass#,#executeMethod#,#executeUser#,#sendXmlCmnt#,
+ TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2') )
+
+
+
+ UPDATE $schemaId$.TSEAITR09
+ SET RECVAMNDHMS=TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2'),
+ RECVRSLT=#recvRslt#,
+ RECVFAILCMNT=#recvFailCmnt#
+ WHERE LOGPRCSSSERNO = #logPrcssSerno#
+
+
+
+ DELETE FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME=#loutName#
+ AND LOUTITEMNAME =#loutItemName#
+ AND LOUTITEMSERNO=#loutItemSerno#
+
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR08 (
+ LOUTNAME, LOUTITEMNAME, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME, LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME,
+ LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT, LOUTITEMREFINFO, LOUTITEMREFINFO2,
+ LOUTITEMSERNO, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
+ LOUTITEMBASCVAL, LOUTITEMMSKYN, LOUTITEMMASKLENGTH, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME
+ ) VALUES (
+ #loutName#, #loutItemName#, #loutItemIDName#, #parntLoutItemIDName#, #loutItemDesc#, #loutItemNodePtrnIDName#,
+ #loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#, #loutItemRefInfo#, #loutItemRefInfo2#,
+ #loutItemSerno#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
+ #loutItemBascVal#, #loutItemMskYn#, #loutItemMaskLength#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName#
+ )
+
+
+
+
+ UPDATE $schemaId$.TSEAITR08
+ SET
+ LOUTNAME = #loutName#,
+ LOUTITEMNAME = #loutItemName#,
+ LOUTITEMIDNAME = #loutItemIDName#,
+ PARNTLOUTITEMIDNAME = #parntLoutItemIDName#,
+ LOUTITEMDESC = #loutItemDesc#,
+ LOUTITEMNODEPTRNIDNAME = #loutItemNodePtrnIDName#,
+ LOUTITEMPTRNIDNAME = #loutItemPtrnIDName#,
+ LOUTITEMPATHNAME = #loutItemPathName#,
+ LOUTITEMLENCNT = #loutItemLenCnt#,
+ LOUTITEMREFINFO = #loutItemRefInfo#,
+ LOUTITEMREFINFO2 = #loutItemRefInfo2#,
+ LOUTITEMSERNO = #loutItemSerno#,
+ LOUTITEMOCCURPTRNDSTCD = #loutItemOccurPtrnDstcd#,
+ LOUTITEMMAXOCCURNOITM = #loutItemMaxOccurNoitm#,
+ LOUTITEMMINOCCURNOITM = #loutItemMinOccurNoitm#,
+ LOUTITEMBASCVAL = #loutItemBascVal#,
+ LOUTITEMMSKYN = #loutItemMskYn#,
+ LOUTITEMMASKLENGTH = #loutItemMaskLength#,
+ LYOUTDPTCNT = #lyoutDptCnt#,
+ DECPTLENCNT = #decptLenCnt#,
+ LYOUTITEMREFPTRNIDNAME = #lyoutItemRefPtrnIDName#
+ WHERE LOUTNAME = #loutName#
+ AND LOUTITEMNAME =#loutItemName#
+ AND LOUTITEMSERNO =#loutItemSerno#
+
+
+
+ INSERT INTO $schemaId$.TSEAITR08 ( LOUTNAME, LOUTITEMNAME, LOUTITEMSERNO, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME,
+ LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME, LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT,
+ LOUTITEMREFINFO, LOUTITEMREFINFO2, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
+ LOUTITEMBASCVAL, LOUTITEMMSKYN, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME )
+ VALUES ( #loutName#, #loutItemName#, #loutItemSerno#, #loutItemIDName#, #parntLoutItemIDName#,
+ #loutItemDesc#, #loutItemNodePtrnIDName#, #loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#,
+ #loutItemRefInfo#, #loutItemRefInfo2#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
+ #loutItemBascVal#, #loutItemMskYn#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName# )
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR10
+ ( LOGPRCSSSEQNO, SEQNO, SERVICENAME ,COMMAND,LOUTNAME,RECVDATA,RECVAMNDHMS,PRCSSRSLT, PRCSSRSLTCMNT )
+ VALUES
+ ( #logPrcssSeqno#, #seqno#, #serviceName# ,#command#,#loutName#,#recvData#,#recvAmndHMS#,#prcssRslt#, #prcssRsltCmnt# )
+
+
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout.xml b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout.xml
new file mode 100644
index 0000000..de6d0c7
--- /dev/null
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+ SELECT
+ LOUTNAME AS "LOUTNAME" ,
+ LOUTPTRNNAME AS "LOUTPTRNNAME" ,
+ LOUTDESC AS "LOUTDESC" ,
+ LASTAMNDHMS AS "LASTAMNDHMS" ,
+ EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
+ UAPPLNAME AS "UAPPLNAME" ,
+ SYSINTFACNAME AS "SYSINTFACNAME"
+ FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ DELETE FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR07 (
+ LOUTNAME, LOUTDESC, LOUTPTRNNAME , LASTAMNDHMS , EAIBZWKDSTCD , UAPPLNAME , SYSINTFACNAME, CREATEBY, UPDATEBY
+ ) VALUES (#loutName#, #loutDesc#, #loutPtrnName#, #lastAmndHMS# , #eaiBzwkDstcd# , #uapplName# , #sysIntfacName#, #createBy#, #updateBy# )
+
+
+
+
+ UPDATE $schemaId$.TSEAITR07
+ SET LOUTDESC = #loutDesc#,
+ LOUTPTRNNAME= #loutPtrnName#,
+ LASTAMNDHMS = #lastAmndHMS#,
+ EAIBZWKDSTCD = #eaiBzwkDstcd#,
+ UAPPLNAME = #uapplName#,
+ SYSINTFACNAME = #sysIntfacName# ,
+ UPDATEBY = #updateBy#
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ SELECT
+ L.LOUTNAME AS "LOUTNAME",
+ L.LOUTDESC AS "LOUTDESC",
+ L.LOUTPTRNNAME AS "LOUTPTRNNAME"
+ FROM $schemaId$.TSEAITR07 L
+ WHERE L.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 WHERE USERID = #loginId#)
+ ORDER BY L.LOUTNAME
+
+
+
+
+ DELETE FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME=#loutName#
+
+
+
+ UPDATE $schemaId$.TSEAITR08
+ SET LOUTITEMDESC = #loutDesc#
+ WHERE LOUTNAME = #loutName#
+ AND LOUTITEMNAME = #loutName#
+ AND LOUTITEMSERNO = 0
+
+
+
+ SELECT LOUTPTRNNAME AS "LOUTPTRNNAME",
+ LOUTPTRNDESC AS "LOUTPTRNDESC"
+ FROM $schemaId$.TSEAITR06
+ ORDER BY LOUTPTRNDESC
+
+
+
+ SELECT SV.EAISVCNAME AS "EAISVCNAME" , SV.EAISVCDESC AS "EAISVCDESC" ,
+ TR.CNVSNNAME AS "CNVSNNAME" , TR.CNVSNDESC AS "CNVSNDESC" , TR.SOURCRSULTDSTCD AS "SOURCRSULTDSTCD"
+ FROM
+ ( SELECT T1.CNVSNNAME , T1.CNVSNDESC ,
+ T2.LOUTNAME , T2.SOURCRSULTDSTCD
+ FROM $schemaId$.TSEAITR01 T1, $schemaId$.TSEAITR02 T2
+ WHERE T1.CNVSNNAME = T2.CNVSNNAME
+ AND T2.LOUTNAME = #loutName#
+ ) TR,
+ (
+ SELECT DISTINCT EAISVCNAME, EAISVCDESC, SVCPRCSSNO, CHNGMSGIDNAME FROM (
+ SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
+ UNION ALL
+ SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.BASCRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
+ UNION ALL
+ SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.ERRRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
+ ) TMP
+ ) SV
+ WHERE TR.CNVSNNAME = SV.CHNGMSGIDNAME
+
+
+
+ SELECT EAIBZWKDSTCD "EAIBzwkDstcd", COUNT(LOUTNAME) "Cnt"
+ FROM $schemaId$.TSEAITR07
+ GROUP BY EAIBZWKDSTCD
+
+
+
+
+ SELECT
+ LOUTNAME AS "LOUTNAME" ,
+ LOUTPTRNNAME AS "LOUTPTRNNAME" ,
+ LOUTDESC AS "LOUTDESC" ,
+ LASTAMNDHMS AS "LASTAMNDHMS" ,
+ EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
+ UAPPLNAME AS "UAPPLNAME" ,
+ SYSINTFACNAME AS "SYSINTFACNAME"
+ FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+ DELETE FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+ INSERT INTO $schemaId$.TSEAITR07 ( LOUTNAME, LOUTPTRNNAME, LOUTDESC, LASTAMNDHMS, EAIBZWKDSTCD, UAPPLNAME, SYSINTFACNAME )
+ VALUES ( #loutName#, #loutPtrnName#, #loutDesc#, #lastAmndHMS#, #eaiBzwkDstcd#, #uapplName#, #sysIntfacName# )
+
+
+
+ SELECT
+ LOUTNAME AS "LOUTNAME" ,
+ LOUTITEMNAME AS "LOUTITEMNAME" ,
+ LOUTITEMSERNO AS "LOUTITEMSERNO" ,
+ LOUTITEMIDNAME AS "LOUTITEMIDNAME" ,
+ PARNTLOUTITEMIDNAME AS "PARNTLOUTITEMIDNAME" ,
+ LOUTITEMDESC AS "LOUTITEMDESC" ,
+ LOUTITEMNODEPTRNIDNAME AS "LOUTITEMNODEPTRNIDNAME" ,
+ LOUTITEMPTRNIDNAME AS "LOUTITEMPTRNIDNAME" ,
+ LOUTITEMPATHNAME AS "LOUTITEMPATHNAME" ,
+ LOUTITEMLENCNT AS "LOUTITEMLENCNT" ,
+ LOUTITEMREFINFO AS "LOUTITEMREFINFO" ,
+ LOUTITEMREFINFO2 AS "LOUTITEMREFINFO2" ,
+ LOUTITEMOCCURPTRNDSTCD AS "LOUTITEMOCCURPTRNDSTCD" ,
+ LOUTITEMMAXOCCURNOITM AS "LOUTITEMMAXOCCURNOITM" ,
+ LOUTITEMMINOCCURNOITM AS "LOUTITEMMINOCCURNOITM" ,
+ LOUTITEMBASCVAL AS "LOUTITEMBASCVAL" ,
+ LOUTITEMMSKYN AS "LOUTITEMMSKYN" ,
+ LYOUTDPTCNT AS "LYOUTDPTCNT" ,
+ DECPTLENCNT AS "DECPTLENCNT" ,
+ LYOUTITEMREFPTRNIDNAME AS "LYOUTITEMREFPTRNIDNAME"
+ FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME = #loutName#
+
+
+
+ DELETE FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME = #loutName#
+
+
+
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java
index fc28118..5728e7f 100644
--- a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java
@@ -2,9 +2,10 @@ package com.eactive.eai.rms.onl.manage.rule.layoutsync;
import java.io.ByteArrayInputStream;
import java.io.File;
-import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
@@ -21,10 +22,14 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
-import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
@@ -50,18 +55,28 @@ import com.eactive.eai.rms.onl.common.util.DateUtil;
import com.eactive.eai.transformer.layout.Item;
import com.eactive.eai.transformer.layout.Types;
+
@Controller
@RequestMapping("/layoutSync.do")
public class LayoutSyncController extends OnlBaseAnnotationController implements InterceptorSkipController {
- private static final Logger logger = Logger.getLogger(LayoutSyncController.class);
+ private static final Logger logger = LoggerFactory.getLogger(LayoutSyncController.class);
@Autowired
@Qualifier("layoutSyncService")
private LayoutSyncService service;
@Autowired
+ @Qualifier("monitoringContext")
private MonitoringContext monitoringContext;
+
+ @Autowired
+ private KJBTransformService transformService;
+
+ @Autowired
+ private KJBInterfaceService interfaceService;
+
+
/**
* xml 형식으로 전달 된 레이아웃을 LayoutVo로 전환
*
@@ -92,8 +107,6 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
node = Item.NODE_GROUP;
} else if("GRID".equals(el.getName().toUpperCase())) {
node = Item.NODE_GROUP;
- } else if("ATTR".equals(el.getName().toUpperCase())) {
- node = Item.NODE_ATTR;
} else {
node = Item.NODE_FIELD;
}
@@ -101,20 +114,19 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
item.put("loutItemNodePtrnIDName",node);
int loutType = Types.TYPE_UNKNOWN;
- if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
- } else if( "GRID".equals(el.getName().toUpperCase()) || "GROUP".equals(el.getName().toUpperCase()) ) {
- } else if( msgType.equals("XML") ) {
+ if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
+ } else if( "GRID".equals(el.getName().toUpperCase()) || "GROUP".equals(el.getName().toUpperCase()) ) {
+ } else if( msgType.equals("XML") || msgType.equals("JSON") ) {
loutType = "VARCHAR".startsWith(el.getAttributeValue("type").toUpperCase()) ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
-
//loutType = Types.TYPE_STRING;
} else {
loutType = Types.TYPE_BYTEARRAY;
}
- item.put("loutItemPtrnIDName",loutType);
- item.put("loutItemLenCnt","".equals(el.getAttributeValue("len")) ? 0 : Integer.parseInt(el.getAttributeValue("len")));
- item.put("loutItemRefInfo2",el.getAttributeValue("count")); //
-
+ item.put("loutItemPtrnIDName", loutType);
+ item.put("loutItemLenCnt",
+ "".equals(el.getAttributeValue("len")) ? 0 : Integer.parseInt(el.getAttributeValue("len")));
+ item.put("loutItemRefInfo2", el.getAttributeValue("count"));
// MIN, MAX 설정
// 통합인터페이스는 * , 숫자만 보냄 ( 가변은 * 고정은 숫자 )
@@ -158,7 +170,10 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
item.put("loutItemMinOccurNoitm",min); // 레이아웃항목최소발생건수
item.put("loutItemBascVal",el.getAttributeValue("default")); // 레이아웃항목기본값
- item.put("loutItemMskYn",el.getAttributeValue("mask")); // [Y/N/ ]
+ item.put("louItemMskYn",el.getAttributeValue("mask")); // [Y/N/ ]
+ item.put("louItemMskCode",el.getAttributeValue("mask2"));
+ //item.put("loutItemMskTarget",el.getAttributeValue("maskTarget")); // [LOG/DATA ]
+
if( "Y".equals(item.get("loutItemMskYn")) ) item.put("loutItemMaskLength",Integer.parseInt(el.getAttributeValue("maskLength")));
item.put("lyoutDptCnt",Integer.parseInt(el.getAttributeValue("depth")) + 1 ); // 통합인터페이스 전달되는 Depth + 1을 해야 함
item.put("decptLenCnt","".equals(el.getAttributeValue("scale")) ? 0 : Integer.parseInt(el.getAttributeValue("scale"))); // 소수점길이 META에서 "" 이면 "" 으로 표현함
@@ -166,7 +181,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
String dataType = "";
- if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
+ if( el.getAttributeValue("type") == null || "".equals(el.getAttributeValue("type"))) {
} else if( "VARCHAR".startsWith(el.getAttributeValue("type").toUpperCase()) ) { // Varchar, Number
dataType = "String";
} else if( "NUMBER".startsWith(el.getAttributeValue("type").toUpperCase()) ) { // Varchar, Number
@@ -183,6 +198,194 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
return list;
}
+ // JJB 수정사항 shkim 2020-05-13 JSON 타입 추가
+ /**
+ * json 형식으로 전달 된 레이아웃을 LayoutVo로 전환
+ *
+ * @param e
+ * @param msgType
+ * @param loutName
+ * @return
+ * @throws Exception
+ */
+ private List> setLayoutItemsJSN(JSONArray items, String msgType, String loutName, String parentNo) throws Exception {
+ List> list = new ArrayList>();
+
+ for(Object i : items) {
+ // Layout Item Format (TR08)
+ HashMap item = new HashMap();
+
+ String type = (String) ((JSONObject) i).keySet().iterator().next();
+
+ JSONObject _i = (JSONObject) ((JSONObject) i).get(type);
+
+ item.put("loutName",loutName);
+ item.put("loutItemName",_i.get("id"));
+ item.put("loutItemSerno", Integer.parseInt((String) _i.get("no")) );
+ item.put("loutItemIDName",Integer.parseInt((String) _i.get("no")) + 1000);
+ String no = parentNo;
+ item.put("parntLoutItemIDName",Integer.parseInt( no == null ? "0":no ) + 1000 );
+ item.put("loutItemDesc",_i.get("desc"));
+ type = type.toUpperCase();
+ int node = 0;
+ if( "GROUP".equals(type) ) {
+ node = Item.NODE_GROUP;
+ } else if("GRID".equals(type)) {
+ node = Item.NODE_GROUP;
+ } else {
+ node = Item.NODE_FIELD;
+ }
+
+ item.put("loutItemNodePtrnIDName",node);
+
+ int loutType = Types.TYPE_UNKNOWN;
+ if( _i.get("type") == null || "".equals(_i.get("type")))
+ {
+ } else if( "GRID".equals(type) || "GROUP".equals(type) )
+ {
+ } else if( msgType.equals("XML") )
+ {
+ loutType = "VARCHAR".startsWith(((String) _i.get("type")).toUpperCase()) ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
+
+ //loutType = Types.TYPE_STRING;
+ }
+ else if ( msgType.equals("JSON") )
+ {
+ String type2 = ((String) _i.get("type")).toUpperCase();
+
+ switch(type2)
+ {
+ case "VARCHAR":
+ loutType = Types.TYPE_STRING;
+ break;
+ // JJB 수정사항 shkim 2020-08-19 숫자형 실수부 처리 문제로 BigDecimal로 처리
+ case "NUMBER":
+// loutType = Types.TYPE_INT;
+// break;
+ case "BIGDECIMAL":
+ loutType = Types.TYPE_BIGDECIMAL;
+ break;
+ }
+ //loutType = type2.equals("VARCHAR") ? Types.TYPE_STRING : Types.TYPE_INT; // TYPE_LONG, TYPE_SHORT, TYPE_DOUBLE, TYPE_FLOAT
+
+ }else if ( msgType.equals("FML32") )
+ {
+ String fmlType = ((String) _i.get("id")).toUpperCase().replaceAll("[\\d]", "");
+
+ switch(fmlType)
+ {
+ case "LONG":
+ loutType = Types.TYPE_LONG;
+ break;
+ case "SHORT":
+ loutType = Types.TYPE_SHORT;
+ break;
+ case "DOUBLE":
+ loutType = Types.TYPE_DOUBLE;
+ break;
+ default:
+ loutType = Types.TYPE_STRING;
+ break;
+
+ }
+ item.put("loutItemPathName", _i.get("id"));
+ }
+ else {
+ loutType = Types.TYPE_BYTEARRAY;
+ }
+
+
+
+ item.put("loutItemPtrnIDName",loutType);
+ item.put("loutItemLenCnt","".equals(_i.get("len")) ? 0 : Integer.parseInt((String) _i.get("len")));
+
+
+
+ // MIN, MAX 설정
+ // 통합인터페이스는 * , 숫자만 보냄 ( 가변은 * 고정은 숫자 )
+ String occurNoitm = (String) _i.get("maxCnt");
+
+
+ int max = 0;
+ int min = 0;
+ if( String.valueOf(Item.OCC_MULTI_OR_NONE).equals(occurNoitm) ) { // *
+ max = -1;
+ item.put("loutItemRefInfo2",_i.get("count"));
+ } else if ( String.valueOf(Item.OCC_ONCE_OR_NONE).equals(occurNoitm) ) { // ?
+ max = 1;
+ } else if ( String.valueOf(Item.OCC_MULTI_OR_ONCE).equals(occurNoitm) ) { // +
+ min = 1;
+ max = -1;
+ } else if ( "".equals(occurNoitm) ) { // ""
+ min = 1;
+ max = 1;
+ } else if ( occurNoitm.matches("[0-9]+") ) { // ""
+ min = Integer.parseInt(occurNoitm);
+ max = Integer.parseInt(occurNoitm);
+ }
+
+ // 반복횟수 참조정보가 없는데 MIN, MAX 값이 설정되지 않은 경우 오류
+ if( max == 0 && min == 0 ) {
+ if("GRID".equals(type) ) {
+ if ( !StringUtils.isEmpty((String) _i.get("count")) ) {
+ } else {
+ throw new Exception("반복횟수 참조정보 오류");
+ }
+ } else {
+ min = 1;
+ max = 1;
+ }
+ }
+
+ if( "0".equals(occurNoitm) ) {
+ occurNoitm = "";
+ }
+
+ item.put("loutItemOccurPtrnDstcd",occurNoitm); // 레이아웃항목발생유형구분코드
+ item.put("loutItemMaxOccurNoitm",max); // 레이아웃항목최대발생건수
+ item.put("loutItemMinOccurNoitm",min); // 레이아웃항목최소발생건수
+
+ item.put("loutItemBascVal",_i.get("default")); // 레이아웃항목기본값
+ if( _i.get("mask") != null && _i.get("mask").equals("Y"))
+ {
+ item.put("loutItemMskYn", "Y");
+ item.put("loutItemMskCode", _i.get("mask2"));
+ }
+ else
+ {
+ item.put("loutItemMskYn",_i.get("mask")); // [Y/N/ ]
+ }
+
+ if( "Y".equals(item.get("loutItemMskYn")) ) item.put("loutItemMaskLength",Integer.parseInt((String) _i.get("maskLength")));
+ item.put("lyoutDptCnt",Integer.parseInt((String) _i.get("depth")) + 1 ); // 통합인터페이스 전달되는 Depth + 1을 해야 함
+ item.put("decptLenCnt","".equals(_i.get("scale")) ? 0 : Integer.parseInt((String) _i.get("scale"))); // 소수점길이 META에서 "" 이면 "" 으로 표현함
+ item.put("loutItemMskTarget", _i.get("maskTarget"));
+
+
+ String dataType = "";
+ if( _i.get("type") == null || "".equals(_i.get("type"))) {
+ } else if( "VARCHAR".startsWith(((String) _i.get("type")).toUpperCase()) ) { // Varchar, Number
+ dataType = "String";
+ } else if( "NUMBER".startsWith(((String) _i.get("type")).toUpperCase()) ) { // Varchar, Number
+ // JJB 수정사항 shkim 2020-08-19 숫자형 실수부 처리 문제로 BigDecimal로 처리
+ dataType = "BigDecimal";
+// dataType = "Integer";
+ } else if( "BIGDECIMAL".startsWith(((String) _i.get("type")).toUpperCase()) ) { // Varchar, Number
+ dataType = "BigDecimal";
+ }
+
+ item.put("lyoutItemRefPtrnIDName",dataType); // 데이터타입
+
+ list.add(item);
+
+ if( _i.containsKey("item") && _i.entrySet().size() > 0 ) {
+ list.addAll(setLayoutItemsJSN((JSONArray) _i.get("item"), msgType, loutName, (String) _i.get("no")));
+ }
+ } // end FOR
+
+ return list;
+ }
+
/**
* 통합인터페이스 시스템(iim)에서 전문 레이아웃에 대한 INSERT, DELETE 요청
* *
@@ -194,7 +397,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
*/
@RequestMapping(params = "cmd=Message")
public View parseMessage(HttpServletRequest request, HttpServletResponse response, String schema) throws Exception {
- UserAccessLogger.log(request, "Layout", "L", "cmd=Message");
+ UserAccessLogger.log(request, "레이아웃", "L", "cmd=Message");
Document rDoc = null;
Element results = null;
String resultS = null;
@@ -204,35 +407,23 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
String recvTime = DateUtil.getDateTime("yyyyMMddHHmmssSS").substring(0, 16);
// 초기화
- if (schema != null) {
- DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(schema));
- } else {
- logger.error(">>> DataSourceTypeManager.getDataSourceType(schema) error. schema is null");
- return null;
- }
- try {
+ DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(schema));
+ try {
SAXBuilder builder = new SAXBuilder();
// 응답 전문
- InputStream resStream = request.getSession().getServletContext().getResourceAsStream("/WEB-INF/layout-messagesync-res.xml");
- if (resStream == null) {
- throw new Exception("layout-messagesync-res.xml 파일을 찾을 수 없습니다.");
- }
- try {
- rDoc = builder.build(resStream);
- results = rDoc.getRootElement();
- } finally {
- resStream.close();
- }
-
- // 요청 전문
- sis = request.getInputStream();
- Document doc = builder.build(sis);
-
- // log 기록
+ File res = new File( request.getSession().getServletContext().getRealPath("/WEB-INF/") + "/layout-messagesync-res.xml" );
+// ServletContext context = request.getSession().getServletContext();
+// InputStream res = context.getResourceAsStream("layout-messagesync-res.xml");
+ rDoc = builder.build(res);
+ results = rDoc.getRootElement();
+
+
+ // 요청 전문 - InputStream을 먼저 byte[]로 읽음
+ sis = request.getInputStream();
byte[] arg = new byte[request.getContentLength()];
- int resultSet =0;
+ int resultSet = 0;
int total = 0;
try {
resultSet = sis.readLine(arg, 0, arg.length);
@@ -240,12 +431,20 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
total += resultSet;
resultSet = sis.readLine(arg, total, 1024);
}
-
- param.put("recvData", new String(arg));
+
+ param.put("recvData", new String(arg, "UTF-8"));
} catch(Exception e) {
logger.error("MessageSync.err - don't read the XML File - " + new String(arg), e);
param.put("recvData", "");
}
+
+ // byte[]로부터 XML 파싱 (BOM 제거)
+ String xmlContent = new String(arg, "UTF-8").trim();
+ // BOM 제거 (UTF-8 BOM: EF BB BF)
+ if (xmlContent.startsWith("\uFEFF")) {
+ xmlContent = xmlContent.substring(1);
+ }
+ Document doc = builder.build(new ByteArrayInputStream(xmlContent.getBytes("UTF-8")));
param.put("logPrcssSeqno", UUIDGenerator.getUUID());
// xml 1.1
@@ -263,7 +462,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
param.put("recvAmndHMS", recvTime);
logger.info(layoutName + " command - [" + command +"]");
- //HashMap returnMap = new HashMap();
+ HashMap returnMap = new HashMap();
if( command.equals("delete") ) {
HashMap vo = new HashMap();
vo.put("loutName",layoutName);
@@ -276,15 +475,19 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
service.addLayoutSyncLog(param);
+
+
} else {
// LoutName 검증
// 인터페이스 이름 20자리 이하
- // EAI _CBSS _CBSR _CBSE _UAIR
- // FEP _CBS _ORG
- String fattern = "[A-Z0-9]{3}_[A-Z0-9]{3}[A-Z0-9]*_[A-Z0-9]{3,4}";
- if(!layoutName.matches(fattern)) {
- throw new BizException("잘못된 전문레이아웃명 입니다.\n명명규칙을 확인하세요.\n[A-Z0-9]{3}_[A-Z0-9]{3}[A-Z0-9]*_[A-Z0-9]{3,4}");
- }
+ // EAI _CORS _CORR _CORE _UAIR
+ // FEP _COR _ORG
+ String fattern = "[A-Za-z0-9]*";
+
+ //레이아웃 필터링으로 미동작 주석처
+// if(!layoutName.matches(fattern)) {
+// throw new BizException("잘못된 전문레이아웃명 입니다.\n명명규칙을 확인하세요.\n"+fattern);
+// }
String layout = body.getChild("data").getText();
logger.info(layoutName + " recv Data - [" + layout + "]");
@@ -297,7 +500,16 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
Element format = doc2.getRootElement();
String msgType = format.getAttributeValue("msgType");
- if( "ASCII".equals(format.getAttributeValue("msgType")) ) {
+ String useSystem = format.getAttributeValue("usesystem");
+
+ // useSystem "EAI", "FEP" 만 배포 받는다.
+ if (!"EAI".equalsIgnoreCase(useSystem) && !"FEP".equalsIgnoreCase(useSystem)) {
+ String errorMessage = "사용 시스템(" + useSystem + ")인 전문레이아웃은 EAI, FEP로 배포 안됨.";
+ logger.error(errorMessage);
+ throw new Exception(errorMessage);
+ }
+
+ if( "ASCII".equals(format.getAttributeValue("msgType")) ) {
msgType = "BYTES";
} else if( "VASCII".equals(format.getAttributeValue("msgType")) ) {
msgType = "VBYTES";
@@ -365,8 +577,8 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
resultS = StringUtils.toXMLString(rDoc, true);
} catch( Exception e ) {
- logger.error(e);
- logger.error(e.getStackTrace()[0]);
+ logger.error("",e);
+ logger.error("",e.getStackTrace()[0]);
try {
if( results != null ) {
results.getChild("Result").setText("False");
@@ -383,22 +595,16 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
param.put("PrcssRsltCmnt", StringUtils.cuttings(CommonUtil.getArrayString(e.getStackTrace(), "\n"), 4000)[0]);
service.addLayoutSyncLog(param);
} catch(Exception ee) {
- //ee.printStackTrace();
- logger.error("error",e);
+ ee.printStackTrace();
}
}
ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
- if(resultS != null) {
- sos.write(resultS.getBytes());
- }
-
+ sos.write(resultS.getBytes());
} catch( Exception e ) {
- //e.printStackTrace();
- //취약점코드 수정 2019.08.22 SW
- logger.error(e.getMessage());
+ e.printStackTrace();
} finally {
if( sis != null ) sis.close();
if( sos != null ) sos.close();
@@ -406,6 +612,382 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
return null;
}
+ // JJB 수정사항 shkim 2020-05-13 JSON 타입 추가
+ /**
+ * 통합인터페이스 시스템(iim)에서 전문 레이아웃에 대한 INSERT, DELETE 요청
+ * *
+ * @param request
+ * @param response
+ * @param schema
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(params = "cmd=MessageJSON")
+ public View parseMessageJSN(HttpServletRequest request, HttpServletResponse response, String schema) throws Exception {
+ UserAccessLogger.log(request, "레이아웃", "L", "cmd=MessageJSON");
+
+ ServletInputStream sis = null;
+
+ JSONObject results = new JSONObject();
+ JSONObject resultS = new JSONObject();
+ resultS.put("Results", results);
+
+
+ HashMap param = new HashMap();
+ String recvTime = DateUtil.getDateTime("yyyyMMddHHmmssSS").substring(0, 16);
+
+ // 초기화
+ DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(schema));
+ try {
+// // 요청 전문
+ sis = request.getInputStream();
+
+ JSONObject json = (JSONObject) JSONValue.parse(new InputStreamReader(sis));
+
+ // JJB 향후제거 shkim 2020-05-13 연계 테스트 체크
+ logger.error("\n\n MMI SYNC Request : " + json.toString());
+
+ // log 기록
+ byte[] arg = new byte[request.getContentLength()];
+ int resultSet =0;
+ int total = 0;
+ try {
+ resultSet = sis.readLine(arg, 0, arg.length);
+ while(resultSet != -1) {
+ total += resultSet;
+ resultSet = sis.readLine(arg, total, 1024);
+ }
+
+ param.put("recvData", new String(arg));
+ } catch(Exception e) {
+ logger.error("MessageSync.err - don't read the JSON File - " + new String(arg), e);
+ param.put("recvData", "");
+ }
+
+ syncLayout(param, recvTime, json);
+// results.getChild("Result").setText("S".equals(param.get("prcssRslt"))?"True":"False");
+// results.getChild("ResultMessage").setText("S".equals(param.get("prcssRslt"))?"성공":param.get("prcssRsltCmnt"));
+
+// resultS = StringUtils.toXMLString(rDoc, true);
+
+ results.put("Result", "S".equals(param.get("prcssRslt"))?"True":"False");
+ results.put("ResultMessage", "S".equals(param.get("prcssRslt"))?"성공":param.get("prcssRsltCmnt"));
+
+
+ } catch( Exception e ) {
+ logger.error("", e);
+ try {
+ if( results != null ) {
+// results.getChild("Result").setText("False");
+// results.getChild("ResultMessage").setText( e.getMessage() );
+
+// resultS = StringUtils.toXMLString(rDoc, true);
+ results.put("Result", "False");
+ results.put("ResultMessage", e.getMessage() );
+
+ }
+ if( param.get("logPrcssSeqno") == null ) {
+ param.put("logPrcssSeqno", UUIDGenerator.getUUID());
+ param.put("ServiceName", "MessageSync");
+ param.put("RecvAmndHMS", recvTime);
+ }
+ param.put("PrcssRslt", "F");
+ param.put("PrcssRsltCmnt", StringUtils.cuttings(CommonUtil.getArrayString(e.getStackTrace(), "\n"), 4000)[0]);
+ service.addLayoutSyncLog(param);
+ } catch(Exception ee) {
+ ee.printStackTrace();
+ }
+ }
+
+ ServletOutputStream sos = null;
+ try {
+ sos = response.getOutputStream();
+ sos.write(resultS.toString().getBytes());
+ } catch( Exception e ) {
+ e.printStackTrace();
+ } finally {
+ if( sis != null ) sis.close();
+ if( sos != null ) sos.close();
+ }
+ return null;
+ }
+
+ private void syncLayout(HashMap param, String recvTime, JSONObject json)
+ throws Exception, BizException, ParseException {
+ JSONObject header = (JSONObject) ((JSONObject) json.get("Message")).get("Header");
+ JSONObject body = (JSONObject) ((JSONObject) json.get("Message")).get("Body");
+
+ String serviceName = (String) header.get("ServiceName");
+ String command = (String) header.get("Command");
+
+ String interfaceId = (String) body.get("interfaceCode");
+ Object layoutObject = body.get("Layout");
+
+ param.put("serviceName", serviceName);
+ param.put("command", command);
+ param.put("recvAmndHMS", recvTime);
+
+
+
+ JSONArray layoutArray = null;
+ if (layoutObject instanceof JSONArray) {
+ insertInterface(interfaceId,body);
+ layoutArray = (JSONArray) layoutObject;
+ for (int i = 0; i < layoutArray.size(); i++) {
+ syncLayout(param, body, command, (JSONObject) layoutArray.get(i));
+ }
+ } else {
+ syncLayout(param, body, command, (JSONObject) layoutObject);
+ }
+
+
+ // 전문 변환 매핑이 필요한 지 확인 한 후 매핑 한다.
+ if (body.get("interfaceLayout") != null && body.get("serviceLayout") != null && layoutArray != null
+ && layoutArray.size() % 2 == 0) {
+
+ String[] serviceLayoutList = ((String)body.get("serviceLayout")).split(",");
+ String[] interfaceLayoutList = ((String)body.get("interfaceLayout")).split(",");
+
+ if ( "E".equals(interfaceId.substring(0,1)) ) // EAI일때
+ {
+ for( String serviceLayout : serviceLayoutList)
+ {
+ for(String interfaceLayout : interfaceLayoutList )
+ {
+ if ( interfaceLayout.endsWith(serviceLayout) )
+ {
+ String cnvsnName = transformService.transactionLayoutToTransform(json,interfaceLayout, serviceLayout);
+ CommonCommand refreshCommand = new CommonCommand("com.eactive.eai.agent.transformer.ReloadTransformCommand",cnvsnName);
+ //변환매핑 reload처리후, result 받아서 예외처리 안한 이유. 앞단에서 레이아웃 동기화 command 날리면서 온라인이동 통신 성공해야 여기 까이 오기때문에, 굳이 추가하지않음.
+ agentUtilService.broadcast(refreshCommand);
+ logger.debug(">>> reload cnvsName = " +cnvsnName);
+ }
+ }
+ }
+ }
+ else //FEP일때
+ {
+ for( String srcLayout : interfaceLayoutList)
+ {
+ for( String targetLayout : serviceLayoutList )
+ {
+ String cnvsnName = transformService.transactionLayoutToTransform(json,srcLayout, targetLayout);
+ CommonCommand refreshCommand = new CommonCommand("com.eactive.eai.agent.transformer.ReloadTransformCommand",cnvsnName);
+ //변환매핑 reload처리후, result 받아서 예외처리 안한 이유. 앞단에서 레이아웃 동기화 command 날리면서 온라인이동 통신 성공해야 여기 까이 오기때문에, 굳이 추가하지않음.
+ agentUtilService.broadcast(refreshCommand);
+ logger.debug(">>> reload cnvsName = " +cnvsnName);
+ }
+ }
+ }
+
+
+ }
+
+
+
+ }
+
+ private void insertInterface(String interfaceId, JSONObject body) throws Exception
+ {
+ if ( interfaceId.startsWith("E") )
+ {
+ insertInterfaceForEAI(interfaceId, body);
+ }
+ else
+ {
+ insertInterfaceForFEP(interfaceId, body);
+ }
+
+ }
+
+ private void insertInterfaceForEAI(String interfaceId, JSONObject body) throws Exception
+ {
+ HashMap param = new HashMap();
+
+
+ String bizCode = (String) body.get("bzSystemCode");
+ String interfaceDesc = (String) body.get("interfaceDesc");
+ String tuxedoxaYn = (String) body.get("tuxedoXaYN");
+ String tuxedosvcId = (String) body.get("serviceCode");
+ param.put("eaiSvcName", interfaceId+"S1");
+ param.put("eaiBzwkDstCd", bizCode);
+ param.put("interfaceId", interfaceId);
+ param.put("interfaceDesc", interfaceDesc);
+ param.put("io", "I");
+ param.put("splizdmndDstCd","S");
+ param.put("inExtnlDstCd","1");
+ param.put("tuxedoxaYn", tuxedoxaYn);
+
+ if( "INF".equals(interfaceId.substring(5, 8)) )
+ {
+ param.put("tuxedosvcId", tuxedosvcId);
+ }
+
+ if( "S".equals(interfaceId.substring(1, 2)) ) //sync일경우
+ {
+ param.put("layoutMappingName",interfaceId+"_I,"+interfaceId.substring(5, interfaceId.length())+"_O");
+ param.put("svcMotivuseDstCd","SYNC");
+ }
+ else
+ {
+ param.put("layoutMappingName",interfaceId+"_I");
+ param.put("svcMotivuseDstCd","ASYN");
+ }
+
+ interfaceService.lazyInsertToIF01(param);
+
+ }
+
+ private void insertInterfaceForFEP(String interfaceId, JSONObject body) throws Exception
+ {
+ HashMap param = new HashMap();
+
+ String bizCode = (String) body.get("bzSystemCode");
+ String interfaceDesc = (String) body.get("interfaceDesc");
+ String tuxedoxaYn = (String) body.get("tuxedoXaYN");
+ String tuxedosvcId = (String) body.get("serviceCode");
+
+ String io = "1".equals(interfaceId.substring(1, 2)) ? "I" : "O";
+ String splizdmndDstCd = interfaceId.substring(interfaceId.length()-1);
+ String inExtnlDstCd = "";
+
+ if ( "IS:OR".contains(io+splizdmndDstCd) )
+ {
+ inExtnlDstCd = "1";
+ param.put("bzwksvckeyName",interfaceId.substring(5, interfaceId.length()-1));
+ }
+ else
+ {
+ inExtnlDstCd = "2";
+ }
+
+ param.put("eaiSvcName", interfaceId+splizdmndDstCd+inExtnlDstCd);
+ param.put("eaiBzwkDstCd", bizCode);
+ param.put("interfaceId", interfaceId);
+ param.put("interfaceDesc", interfaceDesc);
+ param.put("io", io);
+ param.put("splizdmndDstCd",splizdmndDstCd);
+ param.put("inExtnlDstCd",inExtnlDstCd);
+ param.put("svcMotivuseDstCd","ASYN");
+ param.put("tuxedoxaYn", tuxedoxaYn);
+
+
+ param.put("layoutMappingName",interfaceId+"1");
+
+ interfaceService.lazyInsertToIF01(param);
+ }
+
+ private void syncLayout(HashMap param, JSONObject body, String command, JSONObject layout)
+ throws Exception, BizException, ParseException {
+
+ String layoutName = (String) layout.get("id");
+ String useSystem = (String) layout.get("usesystem");
+
+ param.put("logPrcssSeqno", UUIDGenerator.getUUID());
+ param.put("loutName", layoutName);
+
+ logger.info(layoutName + " command - [" + command +"]");
+ if( command.equals("delete") ) {
+ HashMap vo = new HashMap();
+ vo.put("loutName",layoutName);
+
+ service.deleteLayout(vo);
+
+ CommonCommand commonCommand = new CommonCommand("com.eactive.eai.agent.transformer.RemoveLayoutCommand",vo.get("loutName"));
+ HashMap result = AgentParserUtils.parse(commonCommand, agentUtilService,"prcssRslt","prcssRsltCmnt");
+ param.putAll(result);
+
+ service.addLayoutSyncLog(param);
+ } else {
+ // LoutName 검증
+ // 인터페이스 이름 20자리 이하
+ // EAI _CORS _CORR _CORE _UAIR
+ // FEP _COR _ORG
+ String fattern = "";
+ switch(useSystem)
+ {
+ case "FEP":
+ fattern = "[A-Za-z0-9]*[12E]{1}";
+ break;
+ case "EAI":
+ case "FWK":
+ fattern = "[A-Za-z0-9]*_[IOE]{1}";
+ break;
+ }
+
+ if(!layoutName.matches(fattern)) {
+ throw new BizException("잘못된 전문레이아웃명 입니다.\n명명규칙을 확인하세요.\n"+fattern);
+ }
+
+ logger.info(layoutName + " recv Data - [" + layout + "]");
+ param.put("recvData", layout.toString());
+
+ HashMap vo = new HashMap();
+
+ String msgType = (String) layout.get("msgType");
+ if( "ASCII".equals(msgType) ) {
+ msgType = "FEP".equals(useSystem) ? "BYTES" : "PBYTES";
+ } else if( "VASCII".equals(msgType) ) {
+ msgType = "VBYTES";
+ }
+
+
+ // Layout Format (TR07)
+ vo.put("loutName",layoutName);
+ vo.put("loutPtrnName",msgType); // ASCII, EBCDIC, XML
+ vo.put("loutDesc",layout.get("desc"));
+
+ String date = (String) layout.get("date");
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ vo.put("lastAmndHMS",new SimpleDateFormat("yyyyMMddHHmmssSS").format(sdf.parse(date)));
+
+ vo.put("eaiBzwkDstcd",layout.get("group"));
+
+ if( !"".equals(layout.get("createBy"))) {
+ vo.put("createBy",layout.get("createBy"));
+ }
+
+ if( !"".equals(layout.get("updateBy"))) {
+ vo.put("updateBy",layout.get("updateBy"));
+ }
+
+
+ // Layout Item Format (TR08)
+ List> list = new ArrayList>();
+ HashMap tr08 = new HashMap();
+ tr08.put("loutName",layoutName);
+ tr08.put("loutItemName",layoutName);
+ tr08.put("loutItemSerno",0);
+ tr08.put("loutItemIDName",1000);
+ tr08.put("parntLoutItemIDName",0);
+ tr08.put("loutItemDesc",layout.get("desc"));
+ tr08.put("loutItemNodePtrnIDName",Item.NODE_MESSAGE);
+ tr08.put("loutItemPtrnIDName",Types.TYPE_UNKNOWN);
+ tr08.put("loutItemPathName",""); //
+ tr08.put("loutItemLenCnt",0);
+ tr08.put("loutItemRefInfo",""); // GROUP NAME
+ tr08.put("loutItemRefInfo2",""); //
+ tr08.put("loutItemOccurPtrnDstcd",""); // 레이아웃항목발생유형구분코드
+ tr08.put("loutItemMaxOccurNoitm",0); // 레이아웃항목최대발생건수
+ tr08.put("loutItemMinOccurNoitm",0); // 레이아웃항목최소발생건수
+ tr08.put("loutItemBascVal",""); // 레이아웃항목기본값
+ tr08.put("loutItemMskYn"," "); //
+ tr08.put("lyoutDptCnt",1);
+ tr08.put("decptLenCnt",0); // 소수점길이
+ tr08.put("lyoutItemRefPtrnIdName",""); // 데이터타입
+
+ list.add(tr08);
+ list.addAll(setLayoutItemsJSN((JSONArray) layout.get("data"), msgType, layoutName, null));
+
+ service.insertLayout(vo, list); //FIXME : 스키마 변경 룰 적용해야 함
+
+ CommonCommand commonCommand = new CommonCommand("com.eactive.eai.agent.transformer.ReloadLayoutCommand",vo.get("loutName"));
+ HashMap result = AgentParserUtils.parse(commonCommand, agentUtilService,"prcssRslt","prcssRsltCmnt");
+ param.putAll(result);
+ service.addLayoutSyncLog(param);
+ }
+ }
+
/**
* [통합인터페이스]에 레이아웃 정보 송신
* * schemaId에 따라 별도로 저장 됨
@@ -420,11 +1002,11 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
@RequestMapping(params = "cmd=M_LAYOUT")
public String migrationLayout(HttpServletRequest request, HttpServletResponse response, ModelMap model, String schema) throws Exception {
- UserAccessLogger.log(request, "Layout", "M", "cmd=SYNC");
+ UserAccessLogger.log(request, "레이아웃", "M", "cmd=SYNC");
-// if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
+ if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
schema = DataSourceContextHolder.getDataSourceType().getName();
-// }
+ }
// 1. 파라메터 셋팅
String migration = monitoringContext.getStringProperty("iim.layout.migration" ,"");
@@ -437,7 +1019,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
param.put("userId", SessionManager.getUserId(request));
param.put("schemaId", schema);
param.put("filePath", StringUtils.defaultString(props[0], request.getSession().getServletContext().getRealPath("/WEB-INF/")));
- param.put("encoding", StringUtils.defaultString(props[1],"utf-8"));
+ param.put("encoding", StringUtils.defaultString(props[1],"EUC-KR"));
param.put("indent", StringUtils.defaultString(props[2],"yes"));
param.put("path", request.getSession().getServletContext().getRealPath("/WEB-INF/"));
@@ -457,12 +1039,9 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
File mkf = new File(param.get("filePath") + "/" + param.get("schemaId"));
if( mkf.exists() ) {
File[] fList = mkf.listFiles();
- if(fList != null){
- for( int i=0; i< fList.length; i++) {
- fList[i].delete();
- }
+ for( int i=0; i< fList.length; i++) {
+ fList[i].delete();
}
-
mkf.delete();
}
mkf.mkdir();
@@ -481,7 +1060,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
+ "/" + layout.get("LOUTNAME") + ".xml";
// 파일 저장
- //File newFile = new File(newName);
+ File newFile = new File(newName);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
@@ -497,8 +1076,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
succCnt++;
}
} catch(Exception e) {
- //e.printStackTrace();
- logger.error("migrationLayout error",e);
+ e.printStackTrace();
}
return null;
@@ -508,11 +1086,11 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
@RequestMapping(params = "cmd=M_LAYOUT_MAPPING")
public String migrationLayoutMapping(HttpServletRequest request, HttpServletResponse response, ModelMap model, String schema) throws Exception {
- UserAccessLogger.log(request, "Layout", "M", "cmd=SYNC");
+ UserAccessLogger.log(request, "레이아웃", "M", "cmd=SYNC");
-// if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
+ if( !DataSourceTypeManager.EAI.equals(schema) && !DataSourceTypeManager.FEP.equals(schema) ) {
schema = DataSourceContextHolder.getDataSourceType().getName();
-// }
+ }
// 1. 파라메터 셋팅
String migration = monitoringContext.getStringProperty("iim.layout.migration" ,"");
@@ -525,7 +1103,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
param.put("userId", SessionManager.getUserId(request));
param.put("schemaId", schema);
param.put("filePath", StringUtils.defaultString(props[0], request.getSession().getServletContext().getRealPath("/WEB-INF/")));
- param.put("encoding", StringUtils.defaultString(props[1],"utf-8"));
+ param.put("encoding", StringUtils.defaultString(props[1],"EUC-KR"));
param.put("indent", StringUtils.defaultString(props[2],"yes"));
param.put("path", request.getSession().getServletContext().getRealPath("/WEB-INF/"));
@@ -545,12 +1123,9 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
File mkf = new File(param.get("filePath") + "/mapping_" + param.get("schemaId"));
if( mkf.exists() ) {
File[] fList = mkf.listFiles();
- if(fList != null){
- for( int i=0; i< fList.length; i++) {
- fList[i].delete();
- }
+ for( int i=0; i< fList.length; i++) {
+ fList[i].delete();
}
-
mkf.delete();
}
mkf.mkdir();
@@ -567,7 +1142,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
// 파일 저장
if( xmlQuery.indexOf("Layout") != -1) {
- //File newFile = new File(newName);
+ File newFile = new File(newName);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
@@ -584,8 +1159,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements
}
}
} catch(Exception e) {
- //e.printStackTrace();
- logger.error("migrationLayoutMapping error",e);
+ e.printStackTrace();
}
return null ;
}
diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncService.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncService.java
index 77971f8..010e075 100644
--- a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncService.java
+++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncService.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Objects;
import org.apache.commons.httpclient.util.DateUtil;
import org.jdom.Document;
@@ -27,6 +28,7 @@ import org.springframework.stereotype.Service;
import com.eactive.eai.rms.common.base.OnlBaseService;
import com.eactive.eai.rms.common.datasource.DataSourceContextHolder;
import com.eactive.eai.rms.common.util.StringUtils;
+import com.eactive.eai.rms.data.entity.onl.layout.LayoutService;
import com.eactive.eai.rms.onl.manage.rule.layout.LayoutDao;
import com.eactive.eai.rms.onl.manage.serviceinfo.eaimsg.EaiMsgDao;
@@ -38,6 +40,9 @@ public class LayoutSyncService extends OnlBaseService {
@Autowired
private EaiMsgDao eaiMsgDao;
+
+ @Autowired
+ private LayoutService layoutService;
public List> getAllEAIMessages(HashMap param) throws Exception {
return eaiMsgDao.selectListAll(param);
@@ -50,10 +55,7 @@ public class LayoutSyncService extends OnlBaseService {
public void insertLayout(HashMap vo, List> items)
throws Exception {
-
- dao.deleteItemAll(vo);
- dao.delete(vo);
-
+ deleteLayout(vo);
dao.insert(vo);
for(HashMap item : items) {
@@ -74,8 +76,7 @@ public class LayoutSyncService extends OnlBaseService {
public void deleteLayout(HashMap vo)
throws Exception {
- dao.deleteItemAll(vo);
- dao.delete(vo);
+ layoutService.findById(Objects.toString(vo.get("loutName"))).ifPresent(layoutService::delete);
}
public List> getAllLayouts() throws Exception {
diff --git a/src/main/resources/com/eactive/eai/rms/onl/transaction/Interface-oracle.xml b/src/main/resources/com/eactive/eai/rms/onl/transaction/Interface-oracle.xml
index 56c119e..52f097b 100644
--- a/src/main/resources/com/eactive/eai/rms/onl/transaction/Interface-oracle.xml
+++ b/src/main/resources/com/eactive/eai/rms/onl/transaction/Interface-oracle.xml
@@ -314,6 +314,13 @@
)
WHERE ROWNO BETWEEN #startNum# AND #endNum#
-
+
+
+
+ INSERT INTO $schemaId$.TSEAIIF01
+ (EAISVCNAME, EAIBZWKDSTCD, EAITRANNAME, EAISVCDESC, IO, SPLIZDMNDDSTCD, STNDTELGMWTINEXTNLDSTCD, SVCMOTIVUSEDSTCD, BZWKSVCKEYNAME, LAYOUTMAPPINGNAME CREATEBY, UPDATEBY)
+ VALUES
+ (#eaiSvcName#, #eaiBzwkDstCd#, #interfaceId#, #interfaceDesc#, #io#, #splizdmndDstCd#, #inExtnlDstCd#, #svcMotivuseDstCd#, #bzwksvckeyName#, #layoutMappingName#, #loginId#, #loginId# )
+
\ No newline at end of file
diff --git a/src/main/resources/com/eactive/eai/rms/onl/transaction/Layout-oracle.xml b/src/main/resources/com/eactive/eai/rms/onl/transaction/Layout-oracle.xml
new file mode 100644
index 0000000..3dd8f7a
--- /dev/null
+++ b/src/main/resources/com/eactive/eai/rms/onl/transaction/Layout-oracle.xml
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+ SELECT FA.*, FB.BZWKDSTICNAME
+ FROM (
+ SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT ROWNUM AS ROWNO,
+ LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
+ A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
+ FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
+ WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
+ AND A.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
+
+ A.LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ A.EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ A.LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+ ) TMP1
+ ) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
+ ) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
+ ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
+ ORDER BY 1
+
+
+
+
+ SELECT COUNT(*)
+ FROM $schemaId$.TSEAITR07
+ WHERE EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
+
+ LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select 0 AS "level"
+ , LoutItemIDName "id"
+ , ParntLoutItemIDName "parent"
+ , 'true' AS "expanded"
+ , CASE LoutItemNodePtrnIDName WHEN 2203 THEN 'true' ELSE 'false' END "isLeaf"
+ , LoutItemName LOUTITEMPATH
+ , LOUTNAME AS LOUTNAME
+ , LOUTITEMIDNAME AS LOUTITEMIDNAME
+ , LOUTITEMNAME AS LOUTITEMNAME
+ , LOUTITEMDESC AS LOUTITEMDESC
+ , LOUTITEMSERNO AS LOUTITEMSERNO
+ , LOUTITEMLENCNT AS LOUTITEMLENCNT
+ , DECPTLENCNT AS DECPTLENCNT
+ , LOUTITEMNODEPTRNIDNAME AS LOUTITEMNODEPTRNIDNAME
+ , LOUTITEMPTRNIDNAME AS LOUTITEMPTRNIDNAME
+ , (CASE LoutItemNodePtrnIDName
+ WHEN 2201 THEN 'MESSAGE'
+ WHEN 2202 THEN 'GROUP'
+ WHEN 2203 THEN 'FIELD'
+ WHEN 2204 THEN 'ATTR'
+ ELSE 'UNKNOWN' END) LOUTITEMNODEPTRNIDDESC
+ , (CASE LoutItemPtrnIDName
+ WHEN 2100 THEN 'UNKNOWN'
+ WHEN 2101 THEN 'STRING'
+ WHEN 2102 THEN 'INT'
+ WHEN 2103 THEN 'LONG'
+ WHEN 2104 THEN 'SHORT'
+ WHEN 2105 THEN 'DOUBLE'
+ WHEN 2106 THEN 'FLOAT'
+ WHEN 2107 THEN 'CHAR'
+ WHEN 2108 THEN 'BYTE'
+ WHEN 2109 THEN 'DATE'
+ WHEN 2110 THEN 'TIME'
+ WHEN 2111 THEN 'TIMESTAMP'
+ WHEN 2112 THEN 'NUMBER'
+ WHEN 2113 THEN 'BYTEARRAY'
+ WHEN 2114 THEN 'NUMERIC'
+ WHEN 2115 THEN 'PACKDECIMAL'
+ WHEN 2116 THEN 'OBJECT'
+ WHEN 2117 THEN 'BOOLEAN'
+ WHEN 2118 THEN 'BIGDECIMAL'
+ ELSE 'UNKNOWN' END
+ )LOUTITEMPTRNIDDESC
+ , PARNTLOUTITEMIDNAME AS PARNTLOUTITEMIDNAME
+ , LOUTITEMOCCURPTRNDSTCD AS LOUTITEMOCCURPTRNDSTCD
+ , LOUTITEMMINOCCURNOITM AS LOUTITEMMINOCCURNOITM
+ , LOUTITEMMAXOCCURNOITM AS LOUTITEMMAXOCCURNOITM
+ , LOUTITEMREFINFO2 AS LOUTITEMREFINFO2
+ from (
+ select *
+ from $schemaId$.TSEAITR08
+ where LoutName = #loutName#
+ ) T
+ order by LoutItemSerno
+
+
+
+
+ UPDATE $schemaId$.TSEAITR07
+ SET LASTAMNDHMS = to_char(sysdate,'yyyymmddhh24miss')
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ SELECT
+ LOUTNAME LOUTNAME,
+ LOUTITEMNAME LOUTITEMNAME,
+ LOUTITEMIDNAME LOUTITEMIDNAME,
+ PARNTLOUTITEMIDNAME PARNTLOUTITEMIDNAME,
+ LOUTITEMDESC LOUTITEMDESC,
+ LOUTITEMNODEPTRNIDNAME LOUTITEMNODEPTRNIDNAME,
+ LOUTITEMPTRNIDNAME LOUTITEMPTRNIDNAME,
+ LOUTITEMPATHNAME LOUTITEMPATHNAME,
+ LOUTITEMLENCNT LOUTITEMLENCNT,
+ LOUTITEMREFINFO LOUTITEMREFINFO,
+ LOUTITEMREFINFO2 LOUTITEMREFINFO2,
+ LOUTITEMSERNO LOUTITEMSERNO,
+ LOUTITEMOCCURPTRNDSTCD LOUTITEMOCCURPTRNDSTCD,
+ LOUTITEMMAXOCCURNOITM LOUTITEMMAXOCCURNOITM,
+ LOUTITEMMINOCCURNOITM LOUTITEMMINOCCURNOITM,
+ LOUTITEMBASCVAL LOUTITEMBASCVAL,
+ LOUTITEMMSKYN LOUTITEMMSKYN,
+ COALESCE(LOUTITEMMASKLENGTH,0) LOUTITEMMASKLENGTH,
+ LYOUTDPTCNT LYOUTDPTCNT,
+ DECPTLENCNT DECPTLENCNT,
+ LYOUTITEMREFPTRNIDNAME LYOUTITEMREFPTRNIDNAME
+ FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME=#loutName#
+ AND LOUTITEMNAME =#loutItemName#
+ AND LOUTITEMSERNO=#loutItemSerno#
+ ORDER BY LOUTITEMIDNAME, LOUTITEMOCCURPTRNDSTCD DESC
+
+
+
+
+ SELECT
+ CASE WHEN PARNTLOUTITEMIDNAME = '0' THEN 'FORMAT'
+ ELSE CASE WHEN LOUTITEMPTRNIDNAME = '2100' THEN 'GRID'
+ WHEN LOUTITEMPTRNIDNAME = '2113' THEN ( CASE WHEN (SELECT LOUTITEMPTRNIDNAME
+ FROM $schemaId$.TSEAITR08 L
+ WHERE L.LOUTNAME = O.LOUTNAME
+ AND L.LOUTITEMIDNAME = O.PARNTLOUTITEMIDNAME
+ AND L.LOUTITEMPTRNIDNAME = '2100'
+ AND (L.LOUTITEMMAXOCCURNOITM = -1 OR L.LOUTITEMMAXOCCURNOITM > 1)
+ ) = '2100' THEN 'COLUMN' ELSE 'FLD' END )
+ END AS FIELDTYPE
+ , LOUTITEMNAME AS ID
+ , LOUTITEMDESC AS DESC
+ ,CASE WHEN LYOUTITEMREFPTRNIDNAME = 'STRING' THEN 'CHAR'
+ LYOUTITEMREFPTRNIDNAME = 'BYTEARRAY' THEN 'CHAR'
+ LYOUTITEMREFPTRNIDNAME = 'INTEGER' THEN 'DECIMAL'
+ LYOUTITEMREFPTRNIDNAME = 'BIGDECIMAL' THEN 'NUMERIC'
+ ELSE 'CHAR'
+ END AS TYPE
+ , LOUTITEMLENCNT AS LEN
+ , DECPTLENCNT AS SCALE
+ , (CASE WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NOT NULL THEN LOUTITEMREFINFO2
+ WHEN LOUTITEMPTRNIDNAME = '2100' AND PARNTLOUTITEMIDNAME !=0 AND TRIM(LOUTITEMREFINFO2) IS NULL THEN TO_CHAR(LOUTITEMMAXOCCURNOITM)
+ ELSE ' ' END) AS COUNT
+ FROM (
+ SELECT *
+ FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME = #LoutName#
+ ) O
+ WHERE (LOUTITEMPTRNIDNAME = '2100' AND (LOUTITEMMAXOCCURNOITM = -1 OR LOUTITEMMAXOCCURNOITM > 1) ) OR (LOUTITEMPTRNIDNAME = '2113' ) OR (PARNTLOUTITEMIDNAME = 0)
+ CONNECT BY PRIOR LOUTITEMIDNAME = PARNTLOUTITEMIDNAME
+ START WITH PARNTLOUTITEMIDNAME = '0'
+
+
+
+
+ SELECT ID "id",
+ LOUTDESC "desc", '$schemaId$' "usesystem",
+ TARGETSYSTEM "targetsystem", TRIM(PSVSYSBZWKDSTCD) "group", IOTYPE "ioType",
+ HEADER_TXID "servicecode", A.EAISVCNAME "interfacecode"
+ FROM (
+ SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '기동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '수동'
+ WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
+ WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,EAISVCNAME, PSVSYSBZWKDSTCD
+ FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.CHNGMSGIDNAME
+ WHERE B.EAISVCNAME = #eaiSvcName# UNION
+ SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'I' ELSE 'O' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
+ WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
+ WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,EAISVCNAME, PSVSYSBZWKDSTCD
+ FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.BASCRSPNSCHNGMSGIDNAME
+ WHERE B.EAISVCNAME = #eaiSvcName# UNION
+ SELECT LOUTNAME ID, CASE WHEN SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'IE' ELSE 'OE' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN '수동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN '기동'
+ WHEN EAISVCNAME LIKE '%1' AND SOURCRSULTDSTCD = 'TGT_LAYOUT' THEN 'CBS'
+ WHEN EAISVCNAME LIKE '%2' AND SOURCRSULTDSTCD = 'SRC_LAYOUT' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,EAISVCNAME, PSVSYSBZWKDSTCD
+ FROM $schemaId$.TSEAITR02 A JOIN $schemaId$.TSEAIHE02 B ON A.CNVSNNAME = B.ERRRSPNSCHNGMSGIDNAME
+ WHERE B.EAISVCNAME = #eaiSvcName# UNION
+ SELECT REFMSGIDNAME ID, CASE WHEN REFMSGIDNO = 1 THEN 'I' ELSE 'O' END IOTYPE
+ ,CASE WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 1 THEN '기동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 2 THEN '수동'
+ WHEN PSVINTFACDSTICNAME = 'SYNC' AND REFMSGIDNO = 3 THEN '수동'
+ WHEN REFMSGIDNAME LIKE '%CBS' THEN 'CBS'
+ ELSE '대외' END TARGETSYSTEM
+ ,A.EAISVCNAME, PSVSYSBZWKDSTCD FROM $schemaId$.TSEAIMS02 A JOIN $schemaId$.TSEAIHE02 B ON A.EAISVCNAME = B.EAISVCNAME
+ WHERE B.EAISVCNAME = #eaiSvcName#
+ ) A
+ LEFT OUTER JOIN ( SELECT EAISVCNAME
+ , max(decode(COLUMNNAME,'HEADER_TXID',COLUMNVALUE,'')) HEADER_TXID
+ FROM $schemaId$.TSEAIHS04 hs04 , $schemaId$.tseaihs05 hs05
+ where hs04.BZWKSVCKEYNAME =hs05.BZWKSVCKEYNAME
+ group by hs04.BZWKSVCKEYNAME,EAISVCNAME
+ ) HS04 ON A.EAISVCNAME = HS04.EAISVCNAME
+ LEFT OUTER JOIN $schemaId$.TSEAITR07 TR07 ON TR07.LOUTNAME = A.ID
+ ORDER BY 1
+
+
+
+
+ SELECT SUBSTR(SYS_CONNECT_BY_PATH(LOUTITEMNAME, '.'),2) PATH
+ FROM (
+ SELECT decode(LYOUTITEMREFPTRNIDNAME, NULL, decode(LOUTITEMIDNAME, 1000, LOUTITEMNAME, LOUTITEMNAME||'[*]'), LOUTITEMNAME) LOUTITEMNAME, LOUTITEMIDNAME, LYOUTDPTCNT, nvl(LYOUTITEMREFPTRNIDNAME,'Group') LYOUTITEMREFPTRNIDNAME, PARNTLOUTITEMIDNAME PARENT
+ FROM tseaitr08 a
+ WHERE loutname = #loutName#
+ ORDER BY LOUTITEMIDNAME
+ )
+ WHERE LYOUTITEMREFPTRNIDNAME != 'Group'
+ START WITH LOUTITEMIDNAME = 1000 CONNECT BY PRIOR LOUTITEMIDNAME = PARENT
+
+
+
+
+ SELECT FA.*, FB.BZWKDSTICNAME
+ FROM (
+ SELECT ROWNO, LOUTNAME , LOUTPTRNNAME , LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT ROWNUM AS ROWNO,
+ LOUTNAME, LOUTPTRNNAME, LOUTDESC ,
+ LOUTPTRNDESC , LASTAMNDHMS , EAIBZWKDSTCD ,
+ UAPPLNAME , SYSINTFACNAME
+ FROM (
+ SELECT A.LOUTNAME, A.LOUTPTRNNAME, A.LOUTDESC, B.LOUTPTRNDESC,
+ A.LASTAMNDHMS , A.EAIBZWKDSTCD , A.UAPPLNAME , A.SYSINTFACNAME
+ FROM $schemaId$.TSEAITR07 A, $schemaId$.TSEAITR06 B
+ WHERE A.LOUTPTRNNAME = B.LOUTPTRNNAME
+
+ UPPER(A.LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ UPPER(A.EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ UPPER(A.LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+ ) TMP1
+ ) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
+ ) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
+ ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
+ ORDER BY 1
+
+
+
+
+ SELECT COUNT(*)
+ FROM $schemaId$.TSEAITR07
+
+
+ UPPER(LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
+
+
+
+ UPPER(EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
+
+
+
+ UPPER(LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
+
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR09
+ ( LOGPRCSSSERNO, EXECUTEDATE ,EXECUTECLASS,EXECUTEMETHOD,EXECUTEUSER,SENDXMLCMNT,SENDAMNDHMS )
+ VALUES
+ ( #logPrcssSerno#, TO_CHAR(CURRENT_DATE,'YYYYMMDD') ,#executeClass#,#executeMethod#,#executeUser#,#sendXmlCmnt#,
+ TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2') )
+
+
+
+ UPDATE $schemaId$.TSEAITR09
+ SET RECVAMNDHMS=TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2'),
+ RECVRSLT=#recvRslt#,
+ RECVFAILCMNT=#recvFailCmnt#
+ WHERE LOGPRCSSSERNO = #logPrcssSerno#
+
+
+
+ DELETE FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME=#loutName#
+ AND LOUTITEMNAME =#loutItemName#
+ AND LOUTITEMSERNO=#loutItemSerno#
+
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR08 (
+ LOUTNAME, LOUTITEMNAME, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME, LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME,
+ LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT, LOUTITEMREFINFO, LOUTITEMREFINFO2,
+ LOUTITEMSERNO, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
+ LOUTITEMBASCVAL, LOUTITEMMSKYN, LOUTITEMMASKLENGTH, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME
+ ) VALUES (
+ #loutName#, #loutItemName#, #loutItemIDName#, #parntLoutItemIDName#, #loutItemDesc#, #loutItemNodePtrnIDName#,
+ #loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#, #loutItemRefInfo#, #loutItemRefInfo2#,
+ #loutItemSerno#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
+ #loutItemBascVal#, #loutItemMskYn#, #loutItemMaskLength#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName#
+ )
+
+
+
+
+ UPDATE $schemaId$.TSEAITR08
+ SET
+ LOUTNAME = #loutName#,
+ LOUTITEMNAME = #loutItemName#,
+ LOUTITEMIDNAME = #loutItemIDName#,
+ PARNTLOUTITEMIDNAME = #parntLoutItemIDName#,
+ LOUTITEMDESC = #loutItemDesc#,
+ LOUTITEMNODEPTRNIDNAME = #loutItemNodePtrnIDName#,
+ LOUTITEMPTRNIDNAME = #loutItemPtrnIDName#,
+ LOUTITEMPATHNAME = #loutItemPathName#,
+ LOUTITEMLENCNT = #loutItemLenCnt#,
+ LOUTITEMREFINFO = #loutItemRefInfo#,
+ LOUTITEMREFINFO2 = #loutItemRefInfo2#,
+ LOUTITEMSERNO = #loutItemSerno#,
+ LOUTITEMOCCURPTRNDSTCD = #loutItemOccurPtrnDstcd#,
+ LOUTITEMMAXOCCURNOITM = #loutItemMaxOccurNoitm#,
+ LOUTITEMMINOCCURNOITM = #loutItemMinOccurNoitm#,
+ LOUTITEMBASCVAL = #loutItemBascVal#,
+ LOUTITEMMSKYN = #loutItemMskYn#,
+ LOUTITEMMASKLENGTH = #loutItemMaskLength#,
+ LYOUTDPTCNT = #lyoutDptCnt#,
+ DECPTLENCNT = #decptLenCnt#,
+ LYOUTITEMREFPTRNIDNAME = #lyoutItemRefPtrnIDName#
+ WHERE LOUTNAME = #loutName#
+ AND LOUTITEMNAME =#loutItemName#
+ AND LOUTITEMSERNO =#loutItemSerno#
+
+
+
+ INSERT INTO $schemaId$.TSEAITR08 ( LOUTNAME, LOUTITEMNAME, LOUTITEMSERNO, LOUTITEMIDNAME, PARNTLOUTITEMIDNAME,
+ LOUTITEMDESC, LOUTITEMNODEPTRNIDNAME, LOUTITEMPTRNIDNAME, LOUTITEMPATHNAME, LOUTITEMLENCNT,
+ LOUTITEMREFINFO, LOUTITEMREFINFO2, LOUTITEMOCCURPTRNDSTCD, LOUTITEMMAXOCCURNOITM, LOUTITEMMINOCCURNOITM,
+ LOUTITEMBASCVAL, LOUTITEMMSKYN, LYOUTDPTCNT, DECPTLENCNT, LYOUTITEMREFPTRNIDNAME )
+ VALUES ( #loutName#, #loutItemName#, #loutItemSerno#, #loutItemIDName#, #parntLoutItemIDName#,
+ #loutItemDesc#, #loutItemNodePtrnIDName#, #loutItemPtrnIDName#, #loutItemPathName#, #loutItemLenCnt#,
+ #loutItemRefInfo#, #loutItemRefInfo2#, #loutItemOccurPtrnDstcd#, #loutItemMaxOccurNoitm#, #loutItemMinOccurNoitm#,
+ #loutItemBascVal#, #loutItemMskYn#, #lyoutDptCnt#, #decptLenCnt#, #lyoutItemRefPtrnIDName# )
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR10
+ ( LOGPRCSSSEQNO, SEQNO, SERVICENAME ,COMMAND,LOUTNAME,RECVDATA,RECVAMNDHMS,PRCSSRSLT, PRCSSRSLTCMNT )
+ VALUES
+ ( #logPrcssSeqno#, #seqno#, #serviceName# ,#command#,#loutName#,#recvData#,#recvAmndHMS#,#prcssRslt#, #prcssRsltCmnt# )
+
+
diff --git a/src/main/resources/com/eactive/eai/rms/onl/transaction/Layout.xml b/src/main/resources/com/eactive/eai/rms/onl/transaction/Layout.xml
new file mode 100644
index 0000000..de6d0c7
--- /dev/null
+++ b/src/main/resources/com/eactive/eai/rms/onl/transaction/Layout.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+ SELECT
+ LOUTNAME AS "LOUTNAME" ,
+ LOUTPTRNNAME AS "LOUTPTRNNAME" ,
+ LOUTDESC AS "LOUTDESC" ,
+ LASTAMNDHMS AS "LASTAMNDHMS" ,
+ EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
+ UAPPLNAME AS "UAPPLNAME" ,
+ SYSINTFACNAME AS "SYSINTFACNAME"
+ FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ DELETE FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ INSERT INTO $schemaId$.TSEAITR07 (
+ LOUTNAME, LOUTDESC, LOUTPTRNNAME , LASTAMNDHMS , EAIBZWKDSTCD , UAPPLNAME , SYSINTFACNAME, CREATEBY, UPDATEBY
+ ) VALUES (#loutName#, #loutDesc#, #loutPtrnName#, #lastAmndHMS# , #eaiBzwkDstcd# , #uapplName# , #sysIntfacName#, #createBy#, #updateBy# )
+
+
+
+
+ UPDATE $schemaId$.TSEAITR07
+ SET LOUTDESC = #loutDesc#,
+ LOUTPTRNNAME= #loutPtrnName#,
+ LASTAMNDHMS = #lastAmndHMS#,
+ EAIBZWKDSTCD = #eaiBzwkDstcd#,
+ UAPPLNAME = #uapplName#,
+ SYSINTFACNAME = #sysIntfacName# ,
+ UPDATEBY = #updateBy#
+ WHERE LOUTNAME = #loutName#
+
+
+
+
+ SELECT
+ L.LOUTNAME AS "LOUTNAME",
+ L.LOUTDESC AS "LOUTDESC",
+ L.LOUTPTRNNAME AS "LOUTPTRNNAME"
+ FROM $schemaId$.TSEAITR07 L
+ WHERE L.EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 WHERE USERID = #loginId#)
+ ORDER BY L.LOUTNAME
+
+
+
+
+ DELETE FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME=#loutName#
+
+
+
+ UPDATE $schemaId$.TSEAITR08
+ SET LOUTITEMDESC = #loutDesc#
+ WHERE LOUTNAME = #loutName#
+ AND LOUTITEMNAME = #loutName#
+ AND LOUTITEMSERNO = 0
+
+
+
+ SELECT LOUTPTRNNAME AS "LOUTPTRNNAME",
+ LOUTPTRNDESC AS "LOUTPTRNDESC"
+ FROM $schemaId$.TSEAITR06
+ ORDER BY LOUTPTRNDESC
+
+
+
+ SELECT SV.EAISVCNAME AS "EAISVCNAME" , SV.EAISVCDESC AS "EAISVCDESC" ,
+ TR.CNVSNNAME AS "CNVSNNAME" , TR.CNVSNDESC AS "CNVSNDESC" , TR.SOURCRSULTDSTCD AS "SOURCRSULTDSTCD"
+ FROM
+ ( SELECT T1.CNVSNNAME , T1.CNVSNDESC ,
+ T2.LOUTNAME , T2.SOURCRSULTDSTCD
+ FROM $schemaId$.TSEAITR01 T1, $schemaId$.TSEAITR02 T2
+ WHERE T1.CNVSNNAME = T2.CNVSNNAME
+ AND T2.LOUTNAME = #loutName#
+ ) TR,
+ (
+ SELECT DISTINCT EAISVCNAME, EAISVCDESC, SVCPRCSSNO, CHNGMSGIDNAME FROM (
+ SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
+ UNION ALL
+ SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.BASCRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
+ UNION ALL
+ SELECT A.EAISVCNAME, A.EAISVCDESC, B.SVCPRCSSNO, B.ERRRSPNSCHNGMSGIDNAME CHNGMSGIDNAME FROM $schemaId$.TSEAIHE01 A, $schemaId$.TSEAIHE02 B WHERE A.EAISVCNAME = B.EAISVCNAME
+ ) TMP
+ ) SV
+ WHERE TR.CNVSNNAME = SV.CHNGMSGIDNAME
+
+
+
+ SELECT EAIBZWKDSTCD "EAIBzwkDstcd", COUNT(LOUTNAME) "Cnt"
+ FROM $schemaId$.TSEAITR07
+ GROUP BY EAIBZWKDSTCD
+
+
+
+
+ SELECT
+ LOUTNAME AS "LOUTNAME" ,
+ LOUTPTRNNAME AS "LOUTPTRNNAME" ,
+ LOUTDESC AS "LOUTDESC" ,
+ LASTAMNDHMS AS "LASTAMNDHMS" ,
+ EAIBZWKDSTCD AS "EAIBZWKDSTCD" ,
+ UAPPLNAME AS "UAPPLNAME" ,
+ SYSINTFACNAME AS "SYSINTFACNAME"
+ FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+ DELETE FROM $schemaId$.TSEAITR07
+ WHERE LOUTNAME = #loutName#
+
+
+
+ INSERT INTO $schemaId$.TSEAITR07 ( LOUTNAME, LOUTPTRNNAME, LOUTDESC, LASTAMNDHMS, EAIBZWKDSTCD, UAPPLNAME, SYSINTFACNAME )
+ VALUES ( #loutName#, #loutPtrnName#, #loutDesc#, #lastAmndHMS#, #eaiBzwkDstcd#, #uapplName#, #sysIntfacName# )
+
+
+
+ SELECT
+ LOUTNAME AS "LOUTNAME" ,
+ LOUTITEMNAME AS "LOUTITEMNAME" ,
+ LOUTITEMSERNO AS "LOUTITEMSERNO" ,
+ LOUTITEMIDNAME AS "LOUTITEMIDNAME" ,
+ PARNTLOUTITEMIDNAME AS "PARNTLOUTITEMIDNAME" ,
+ LOUTITEMDESC AS "LOUTITEMDESC" ,
+ LOUTITEMNODEPTRNIDNAME AS "LOUTITEMNODEPTRNIDNAME" ,
+ LOUTITEMPTRNIDNAME AS "LOUTITEMPTRNIDNAME" ,
+ LOUTITEMPATHNAME AS "LOUTITEMPATHNAME" ,
+ LOUTITEMLENCNT AS "LOUTITEMLENCNT" ,
+ LOUTITEMREFINFO AS "LOUTITEMREFINFO" ,
+ LOUTITEMREFINFO2 AS "LOUTITEMREFINFO2" ,
+ LOUTITEMOCCURPTRNDSTCD AS "LOUTITEMOCCURPTRNDSTCD" ,
+ LOUTITEMMAXOCCURNOITM AS "LOUTITEMMAXOCCURNOITM" ,
+ LOUTITEMMINOCCURNOITM AS "LOUTITEMMINOCCURNOITM" ,
+ LOUTITEMBASCVAL AS "LOUTITEMBASCVAL" ,
+ LOUTITEMMSKYN AS "LOUTITEMMSKYN" ,
+ LYOUTDPTCNT AS "LYOUTDPTCNT" ,
+ DECPTLENCNT AS "DECPTLENCNT" ,
+ LYOUTITEMREFPTRNIDNAME AS "LYOUTITEMREFPTRNIDNAME"
+ FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME = #loutName#
+
+
+
+ DELETE FROM $schemaId$.TSEAITR08
+ WHERE LOUTNAME = #loutName#
+
+
+
diff --git a/src/test/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncControllerTest.java b/src/test/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncControllerTest.java
new file mode 100644
index 0000000..2b7ab07
--- /dev/null
+++ b/src/test/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncControllerTest.java
@@ -0,0 +1,59 @@
+package com.eactive.eai.rms.onl.manage.rule.layoutsync;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * LayoutSyncController 통합 테스트 실제 localhost:28080으로 HTTP 요청을 보냅니다.
+ */
+class LayoutSyncControllerTest {
+
+ private static final String BASE_URL = "http://localhost:28080/monitoring/layoutSync.do";
+ private RestTemplate restTemplate;
+
+ @BeforeEach
+ void setUp() {
+ restTemplate = new RestTemplate();
+ }
+
+ @Test
+ void testParseMessage() {
+ String layoutId = "URP_DRA00357321URP_CBSS";
+ String requestXml = ""
+ + layoutId + ""
+ + ""
+ + "]]>"
+ + "";
+
+ // =====================================
+
+ String url = BASE_URL + "?cmd=Message&schema=APIGW";
+
+ // HTTP 헤더 설정
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_XML);
+
+ // 요청 생성
+ HttpEntity request = new HttpEntity<>(requestXml, headers);
+
+ // POST 요청 전송
+ ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
+
+ // 응답 출력
+ System.out.println("=== Status Code: " + response.getStatusCodeValue());
+ System.out.println("=== Response Body ===");
+ System.out.println(response.getBody());
+
+ // 기본 검증
+ assertNotNull(response);
+ assertEquals(200, response.getStatusCodeValue());
+ }
+}