From 86ed2fd02344d6e87303255b3b31f9d077062bed Mon Sep 17 00:00:00 2001 From: daekuk1 Date: Mon, 2 Feb 2026 13:48:50 +0900 Subject: [PATCH] iim layout sync --- .../oracle/sqlMapConfigOfOnl.xml | 6 + .../onl/layout/LayoutItemEMSRepository.java | 13 + .../rms/onl/manage/rule/layout/LayoutDao.java | 142 +++- .../rule/layoutsync/KJBInterfaceDao.java | 25 + .../rule/layoutsync/KJBInterfaceService.java | 24 + .../manage/rule/layoutsync/KJBLayoutDao.java | 22 + .../rule/layoutsync/KJBTransformService.java | 291 +++++++ .../manage/rule/layoutsync/Layout-oracle.xml | 458 +++++++++++ .../rms/onl/manage/rule/layoutsync/Layout.xml | 160 ++++ .../rule/layoutsync/LayoutSyncController.java | 744 ++++++++++++++++-- .../rule/layoutsync/LayoutSyncService.java | 13 +- .../rms/onl/transaction/Interface-oracle.xml | 9 +- .../eai/rms/onl/transaction/Layout-oracle.xml | 458 +++++++++++ .../eai/rms/onl/transaction/Layout.xml | 160 ++++ .../layoutsync/LayoutSyncControllerTest.java | 59 ++ 15 files changed, 2483 insertions(+), 101 deletions(-) create mode 100644 src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceDao.java create mode 100644 src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBInterfaceService.java create mode 100644 src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBLayoutDao.java create mode 100644 src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/KJBTransformService.java create mode 100644 src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout-oracle.xml create mode 100644 src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/Layout.xml create mode 100644 src/main/resources/com/eactive/eai/rms/onl/transaction/Layout-oracle.xml create mode 100644 src/main/resources/com/eactive/eai/rms/onl/transaction/Layout.xml create mode 100644 src/test/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncControllerTest.java 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 = "
MessageSyncinsert
" + + 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()); + } +}