iim layout sync

This commit is contained in:
daekuk1
2026-02-02 13:48:50 +09:00
parent 9a387358d3
commit 86ed2fd023
15 changed files with 2483 additions and 101 deletions
@@ -87,6 +87,12 @@
resource="com/eactive/eai/rms/onl/statistics/backup/MonthlyBackup-oracle.xml" />
<sqlMap
resource="com/eactive/eai/rms/onl/statistics/backup/Tseaist01-oracle.xml" />
<sqlMap
resource="com/eactive/eai/rms/onl/transaction/Layout.xml" />
<sqlMap
resource="com/eactive/eai/rms/onl/transaction/Layout-oracle.xml" />
<!-- 통계 -->
<!-- 통계/매체별통계 -->
@@ -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<LayoutItemEntity, LayoutItemEntityId> {
@Modifying
@Query("DELETE FROM LayoutItemEntity l WHERE l.id.loutname = :loutname")
int deleteByLoutname(@Param("loutname") String loutname);
List<LayoutItemEntity> findByIdLoutname(String loutname);
List<LayoutItemEntity> findByIdLoutnameOrderByIdLoutitemserno(String loutname);
}
@@ -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<String> 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<LayoutEntity> optionalEntity = layoutService.findById(loutName);
if (!optionalEntity.isPresent()) {
return null;
}
LayoutEntity entity = optionalEntity.get();
HashMap<String, Object> 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<LayoutEntity> 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<String, Object> 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<String, Object> param) {
return this.template.update("Layout.deleteItemAll", param);
String loutName = (String) param.get("loutName");
return layoutItemRepository.deleteByLoutname(loutName);
}
public List<HashMap<String, Object>> selectListAll(HashMap<String, Object> param) {
return this.template.queryForList("Layout.selectListAll", param);
List<String> currentUserBusiness = userBusinessService.getCurrentUserBusinessCodes();
List<LayoutEntity> 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<String, Object> 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<LayoutSyncVo> getLayoutXMLList(HashMap<String, String> param) {
@@ -78,6 +189,19 @@ public class LayoutDao extends SqlMapClientTemplateDao {
}
public List<HashMap> selectLayout(HashMap params) {
return template.queryForList("Layout.selectLayout", params);
// params에서 검색 조건 추출
List<LayoutEntity> entities = layoutService.findAll();
return entities.stream().map(entity -> {
HashMap<String, Object> 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());
}
}
@@ -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);
}
}
@@ -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<String, Object> param) throws Exception {
HashMap detail = dao.selectDetail(param);
if (detail == null) {
dao.lazyInsertToIF01(param);
}
}
}
@@ -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);
}
}
@@ -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<String, Object> params = new HashMap<>();
params.put("cnvsnName", cnvsnName);
Map<String, Object> fransformDetail = transformDao.selectDetail(params);
if (fransformDetail == null) {
insert(interfaceCode, cnvsnName, cnvsnDesc, cnvsnType);
}
HashMap param = new HashMap();
param.put("loutName", srcLayoutName);
List<HashMap<String, Object>> srcDataArray = layoutDao.selectItemPathList(param);
param.put("loutName", tgtLayoutName);
List<HashMap<String, Object>> tgtDataArray = layoutDao.selectItemPathList(param);
HashMap[] list = new HashMap[srcDataArray.size()];
for (int i = 0; i < srcDataArray.size(); i++) {
String s = (String) ((HashMap<String, Object>) srcDataArray.get(i)).get("PATH");
String t = (String) ((HashMap<String, Object>) 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;
}
}
@@ -0,0 +1,458 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Layout">
<!-- #### 레이아웃 ### -->
<!-- 목록 조회 -->
<statement id="selectList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#)
<isNotEmpty prepend="AND" property="searchLoutName">
A.LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
A.EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
A.LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
) TMP1
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
ORDER BY 1
</statement>
<!-- 전체 목록수 얻기 -->
<statement id="selectListCount" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
SELECT COUNT(*)
FROM $schemaId$.TSEAITR07
WHERE EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
<isNotEmpty prepend="AND" property="searchLoutName">
LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
</statement>
<!-- item list -->
<!-- select level - 1 "level" -->
<!-- , LoutItemIDName "id" -->
<!-- , ParntLoutItemIDName "parent" -->
<!-- , 'true' "expanded" -->
<!-- , decode(LoutItemNodePtrnIDName,2203,'true','false') "isLeaf" -->
<!-- , substr( SYS_CONNECT_BY_PATH(decode (level,1,LoutName,LoutItemName), '.'),2) LOUTITEMPATH -->
<!-- , LOUTNAME -->
<!-- , LOUTITEMIDNAME -->
<!-- , LOUTITEMNAME -->
<!-- , LOUTITEMDESC -->
<!-- , LOUTITEMSERNO -->
<!-- , LOUTITEMLENCNT -->
<!-- , DECPTLENCNT -->
<!-- , LOUTITEMNODEPTRNIDNAME -->
<!-- , LOUTITEMPTRNIDNAME -->
<!-- , decode(LoutItemNodePtrnIDName -->
<!-- ,2201,'MESSAGE' -->
<!-- ,2202,'GROUP' -->
<!-- ,2203,'FIELD' -->
<!-- ,2204,'ATTR' -->
<!-- ,'UNKNOWN' -->
<!-- ) LOUTITEMNODEPTRNIDDESC -->
<!-- , decode(LoutItemPtrnIDName -->
<!-- ,2100,'UNKNOWN' -->
<!-- ,2101,'STRING' -->
<!-- ,2102,'INT' -->
<!-- ,2103,'LONG' -->
<!-- ,2104,'SHORT' -->
<!-- ,2105,'DOUBLE' -->
<!-- ,2106,'FLOAT' -->
<!-- ,2107,'CHAR' -->
<!-- ,2108,'BYTE' -->
<!-- ,2109,'DATE' -->
<!-- ,2110,'TIME' -->
<!-- ,2111,'TIMESTAMP' -->
<!-- ,2112,'NUMBER' -->
<!-- ,2113,'BYTEARRAY' -->
<!-- ,2114,'NUMERIC' -->
<!-- ,2115,'PACKDECIMAL' -->
<!-- ,2116,'OBJECT' -->
<!-- ,2117,'BOOLEAN' -->
<!-- ,2118,'BIGDECIMAL' -->
<!-- ,'UNKNOWN' -->
<!-- )LOUTITEMPTRNIDDESC -->
<!-- , PARNTLOUTITEMIDNAME -->
<!-- , LOUTITEMOCCURPTRNDSTCD -->
<!-- , LOUTITEMMINOCCURNOITM -->
<!-- , LOUTITEMMAXOCCURNOITM -->
<!-- , LOUTITEMREFINFO2 -->
<!-- from ( -->
<!-- select * -->
<!-- from $schemaId$.TSEAITR08 -->
<!-- where LoutName = #loutName# -->
<!-- ) -->
<!-- connect by prior LoutItemIDName = ParntLoutItemIDName -->
<!-- start with ParntLoutItemIDName = '0' -->
<!-- order siblings by LoutItemSerno -->
<statement id="selectItemList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- Update date -->
<statement id="updateLayoutDate" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
UPDATE $schemaId$.TSEAITR07
SET LASTAMNDHMS = to_char(sysdate,'yyyymmddhh24miss')
WHERE LOUTNAME = #loutName#
</statement>
<!-- item detail -->
<statement id="selectItemDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- Oracle에서도 실행이 안됨 -->
<statement id="selectLayoutXMLList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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 &gt; 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 &gt; 1) ) OR (LOUTITEMPTRNIDNAME = '2113' ) OR (PARNTLOUTITEMIDNAME = 0)
CONNECT BY PRIOR LOUTITEMIDNAME = PARNTLOUTITEMIDNAME
START WITH PARNTLOUTITEMIDNAME = '0'
</statement>
<!-- JJB 수정사항 shkim 2020-06-08 표준전문 수정4차 -->
<statement id="selectLayoutMappingXMLList" resultClass="java.util.HashMap">
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
</statement>
<!-- 아이템항목 PATH 조회 -->
<statement id="selectItemPathList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- 목록 조회 -->
<statement id="selectListPop" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
<isNotEmpty prepend="AND" property="searchLoutName">
UPPER(A.LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
UPPER(A.EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
UPPER(A.LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
) TMP1
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
ORDER BY 1
</statement>
<!-- 전체 목록수 얻기 -->
<statement id="selectListCountPop" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
SELECT COUNT(*)
FROM $schemaId$.TSEAITR07
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="searchLoutName">
UPPER(LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
UPPER(EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
UPPER(LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
</dynamic>
</statement>
<statement id="insertMappingSyncLog">
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') )
</statement>
<statement id="updateMappingSyncLog">
UPDATE $schemaId$.TSEAITR09
SET RECVAMNDHMS=TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2'),
RECVRSLT=#recvRslt#,
RECVFAILCMNT=#recvFailCmnt#
WHERE LOGPRCSSSERNO = #logPrcssSerno#
</statement>
<!-- item delete -->
<statement id="deleteItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR08
WHERE LOUTNAME=#loutName#
AND LOUTITEMNAME =#loutItemName#
AND LOUTITEMSERNO=#loutItemSerno#
</statement>
<!-- item insert -->
<statement id="insertItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
<!-- LOUTITEMMSKCODE 삭제, 광주은행 테이블에 미존재 231005-->
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#
)
</statement>
<!-- item update -->
<statement id="updateItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
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#
</statement>
<statement id="insertTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
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# )
</statement>
<!-- 여기 까지 마이그레이션 영역 -->
<statement id="insertLayoutSyncLog">
INSERT INTO $schemaId$.TSEAITR10
( LOGPRCSSSEQNO, SEQNO, SERVICENAME ,COMMAND,LOUTNAME,RECVDATA,RECVAMNDHMS,PRCSSRSLT, PRCSSRSLTCMNT )
VALUES
( #logPrcssSeqno#, #seqno#, #serviceName# ,#command#,#loutName#,#recvData#,#recvAmndHMS#,#prcssRslt#, #prcssRsltCmnt# )
</statement>
</sqlMap>
@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Layout">
<!-- #### 레이아웃 ### -->
<!-- 상세 조회 -->
<statement id="selectDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#
</statement>
<!-- DELETE-->
<statement id="delete" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR07
WHERE LOUTNAME = #loutName#
</statement>
<!-- Insert-->
<statement id="insert" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
INSERT INTO $schemaId$.TSEAITR07 (
LOUTNAME, LOUTDESC, LOUTPTRNNAME , LASTAMNDHMS , EAIBZWKDSTCD , UAPPLNAME , SYSINTFACNAME, CREATEBY, UPDATEBY
) VALUES (#loutName#, #loutDesc#, #loutPtrnName#, #lastAmndHMS# , #eaiBzwkDstcd# , #uapplName# , #sysIntfacName#, #createBy#, #updateBy# )
</statement>
<!-- Update-->
<statement id="update" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
UPDATE $schemaId$.TSEAITR07
SET LOUTDESC = #loutDesc#,
LOUTPTRNNAME= #loutPtrnName#,
LASTAMNDHMS = #lastAmndHMS#,
EAIBZWKDSTCD = #eaiBzwkDstcd#,
UAPPLNAME = #uapplName#,
SYSINTFACNAME = #sysIntfacName# ,
UPDATEBY = #updateBy#
WHERE LOUTNAME = #loutName#
</statement>
<!-- List All -->
<statement id="selectListAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- item delete all -->
<statement id="deleteItemAll" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR08
WHERE LOUTNAME=#loutName#
</statement>
<statement id="updateItemDesc" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
UPDATE $schemaId$.TSEAITR08
SET LOUTITEMDESC = #loutDesc#
WHERE LOUTNAME = #loutName#
AND LOUTITEMNAME = #loutName#
AND LOUTITEMSERNO = 0
</statement>
<statement id="selectTypeAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
SELECT LOUTPTRNNAME AS "LOUTPTRNNAME",
LOUTPTRNDESC AS "LOUTPTRNDESC"
FROM $schemaId$.TSEAITR06
ORDER BY LOUTPTRNDESC
</statement>
<statement id="selectEffect" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<statement id="selectReportCount" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
SELECT EAIBZWKDSTCD "EAIBzwkDstcd", COUNT(LOUTNAME) "Cnt"
FROM $schemaId$.TSEAITR07
GROUP BY EAIBZWKDSTCD
</statement>
<!-- 여기서 부터 마이그레이션 영역 -->
<statement id="selectTR07Select" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#
</statement>
<statement id="deleteTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR07
WHERE LOUTNAME = #loutName#
</statement>
<statement id="insertTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
INSERT INTO $schemaId$.TSEAITR07 ( LOUTNAME, LOUTPTRNNAME, LOUTDESC, LASTAMNDHMS, EAIBZWKDSTCD, UAPPLNAME, SYSINTFACNAME )
VALUES ( #loutName#, #loutPtrnName#, #loutDesc#, #lastAmndHMS#, #eaiBzwkDstcd#, #uapplName#, #sysIntfacName# )
</statement>
<statement id="selectTR08" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#
</statement>
<statement id="deleteTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR08
WHERE LOUTNAME = #loutName#
</statement>
</sqlMap>
@@ -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<HashMap<String,Object>> setLayoutItemsJSN(JSONArray items, String msgType, String loutName, String parentNo) throws Exception {
List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
for(Object i : items) {
// Layout Item Format (TR08)
HashMap<String,Object> item = new HashMap<String,Object>();
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<String, Object> returnMap = new HashMap<String,Object>();
HashMap<String, Object> returnMap = new HashMap<String,Object>();
if( command.equals("delete") ) {
HashMap<String,Object> vo = new HashMap<String,Object>();
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<String, String> param = new HashMap<String, String>();
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<String, String> 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<String, Object> param = new HashMap<String, Object>();
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<String, Object> param = new HashMap<String, Object>();
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<String, String> 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<String,Object> vo = new HashMap<String,Object>();
vo.put("loutName",layoutName);
service.deleteLayout(vo);
CommonCommand commonCommand = new CommonCommand("com.eactive.eai.agent.transformer.RemoveLayoutCommand",vo.get("loutName"));
HashMap<String,String> 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<String,Object> vo = new HashMap<String,Object>();
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<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> tr08 = new HashMap<String,Object>();
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<String,String> 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 ;
}
@@ -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<HashMap<String,Object>> getAllEAIMessages(HashMap<String, String> param) throws Exception {
return eaiMsgDao.selectListAll(param);
@@ -50,10 +55,7 @@ public class LayoutSyncService extends OnlBaseService {
public void insertLayout(HashMap<String,Object> vo, List<HashMap<String,Object>> items)
throws Exception {
dao.deleteItemAll(vo);
dao.delete(vo);
deleteLayout(vo);
dao.insert(vo);
for(HashMap<String,Object> item : items) {
@@ -74,8 +76,7 @@ public class LayoutSyncService extends OnlBaseService {
public void deleteLayout(HashMap<String,Object> vo)
throws Exception {
dao.deleteItemAll(vo);
dao.delete(vo);
layoutService.findById(Objects.toString(vo.get("loutName"))).ifPresent(layoutService::delete);
}
public List<HashMap<String,Object>> getAllLayouts() throws Exception {
@@ -314,6 +314,13 @@
</dynamic>
)
WHERE ROWNO BETWEEN #startNum# AND #endNum#
</statement>
</statement>
<statement id="insertToIF01" parameterClass="java.util.HashMap">
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# )
</statement>
</sqlMap>
@@ -0,0 +1,458 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Layout">
<!-- #### 레이아웃 ### -->
<!-- 목록 조회 -->
<statement id="selectList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#)
<isNotEmpty prepend="AND" property="searchLoutName">
A.LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
A.EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
A.LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
) TMP1
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
ORDER BY 1
</statement>
<!-- 전체 목록수 얻기 -->
<statement id="selectListCount" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
SELECT COUNT(*)
FROM $schemaId$.TSEAITR07
WHERE EAIBZWKDSTCD IN (select EAIBZWKDSTCD from $schemaId$.TSEAIRM06 where userId =#loginId#)
<isNotEmpty prepend="AND" property="searchLoutName">
LOUTNAME LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
EAIBZWKDSTCD LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
LOUTDESC LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
</statement>
<!-- item list -->
<!-- select level - 1 "level" -->
<!-- , LoutItemIDName "id" -->
<!-- , ParntLoutItemIDName "parent" -->
<!-- , 'true' "expanded" -->
<!-- , decode(LoutItemNodePtrnIDName,2203,'true','false') "isLeaf" -->
<!-- , substr( SYS_CONNECT_BY_PATH(decode (level,1,LoutName,LoutItemName), '.'),2) LOUTITEMPATH -->
<!-- , LOUTNAME -->
<!-- , LOUTITEMIDNAME -->
<!-- , LOUTITEMNAME -->
<!-- , LOUTITEMDESC -->
<!-- , LOUTITEMSERNO -->
<!-- , LOUTITEMLENCNT -->
<!-- , DECPTLENCNT -->
<!-- , LOUTITEMNODEPTRNIDNAME -->
<!-- , LOUTITEMPTRNIDNAME -->
<!-- , decode(LoutItemNodePtrnIDName -->
<!-- ,2201,'MESSAGE' -->
<!-- ,2202,'GROUP' -->
<!-- ,2203,'FIELD' -->
<!-- ,2204,'ATTR' -->
<!-- ,'UNKNOWN' -->
<!-- ) LOUTITEMNODEPTRNIDDESC -->
<!-- , decode(LoutItemPtrnIDName -->
<!-- ,2100,'UNKNOWN' -->
<!-- ,2101,'STRING' -->
<!-- ,2102,'INT' -->
<!-- ,2103,'LONG' -->
<!-- ,2104,'SHORT' -->
<!-- ,2105,'DOUBLE' -->
<!-- ,2106,'FLOAT' -->
<!-- ,2107,'CHAR' -->
<!-- ,2108,'BYTE' -->
<!-- ,2109,'DATE' -->
<!-- ,2110,'TIME' -->
<!-- ,2111,'TIMESTAMP' -->
<!-- ,2112,'NUMBER' -->
<!-- ,2113,'BYTEARRAY' -->
<!-- ,2114,'NUMERIC' -->
<!-- ,2115,'PACKDECIMAL' -->
<!-- ,2116,'OBJECT' -->
<!-- ,2117,'BOOLEAN' -->
<!-- ,2118,'BIGDECIMAL' -->
<!-- ,'UNKNOWN' -->
<!-- )LOUTITEMPTRNIDDESC -->
<!-- , PARNTLOUTITEMIDNAME -->
<!-- , LOUTITEMOCCURPTRNDSTCD -->
<!-- , LOUTITEMMINOCCURNOITM -->
<!-- , LOUTITEMMAXOCCURNOITM -->
<!-- , LOUTITEMREFINFO2 -->
<!-- from ( -->
<!-- select * -->
<!-- from $schemaId$.TSEAITR08 -->
<!-- where LoutName = #loutName# -->
<!-- ) -->
<!-- connect by prior LoutItemIDName = ParntLoutItemIDName -->
<!-- start with ParntLoutItemIDName = '0' -->
<!-- order siblings by LoutItemSerno -->
<statement id="selectItemList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- Update date -->
<statement id="updateLayoutDate" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
UPDATE $schemaId$.TSEAITR07
SET LASTAMNDHMS = to_char(sysdate,'yyyymmddhh24miss')
WHERE LOUTNAME = #loutName#
</statement>
<!-- item detail -->
<statement id="selectItemDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- Oracle에서도 실행이 안됨 -->
<statement id="selectLayoutXMLList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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 &gt; 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 &gt; 1) ) OR (LOUTITEMPTRNIDNAME = '2113' ) OR (PARNTLOUTITEMIDNAME = 0)
CONNECT BY PRIOR LOUTITEMIDNAME = PARNTLOUTITEMIDNAME
START WITH PARNTLOUTITEMIDNAME = '0'
</statement>
<!-- JJB 수정사항 shkim 2020-06-08 표준전문 수정4차 -->
<statement id="selectLayoutMappingXMLList" resultClass="java.util.HashMap">
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
</statement>
<!-- 아이템항목 PATH 조회 -->
<statement id="selectItemPathList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- 목록 조회 -->
<statement id="selectListPop" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
<isNotEmpty prepend="AND" property="searchLoutName">
UPPER(A.LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
UPPER(A.EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
UPPER(A.LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
) TMP1
) TMP2 WHERE ROWNO BETWEEN #startNum# AND #endNum#
) FA LEFT OUTER JOIN $schemaId$.TSEAICM01 FB
ON FA.EAIBZWKDSTCD = FB.EAIBZWKDSTCD
ORDER BY 1
</statement>
<!-- 전체 목록수 얻기 -->
<statement id="selectListCountPop" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
SELECT COUNT(*)
FROM $schemaId$.TSEAITR07
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="searchLoutName">
UPPER(LOUTNAME) LIKE UPPER('%'||#searchLoutName#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchEaiBzwkDstcd">
UPPER(EAIBZWKDSTCD) LIKE UPPER('%'||#searchEaiBzwkDstcd#||'%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="searchLoutDesc">
UPPER(LOUTDESC) LIKE UPPER('%'||#searchLoutDesc#||'%')
</isNotEmpty>
</dynamic>
</statement>
<statement id="insertMappingSyncLog">
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') )
</statement>
<statement id="updateMappingSyncLog">
UPDATE $schemaId$.TSEAITR09
SET RECVAMNDHMS=TO_CHAR(CURRENT_TIMESTAMP,'YYYYMMDDHH24MISSFF2'),
RECVRSLT=#recvRslt#,
RECVFAILCMNT=#recvFailCmnt#
WHERE LOGPRCSSSERNO = #logPrcssSerno#
</statement>
<!-- item delete -->
<statement id="deleteItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR08
WHERE LOUTNAME=#loutName#
AND LOUTITEMNAME =#loutItemName#
AND LOUTITEMSERNO=#loutItemSerno#
</statement>
<!-- item insert -->
<statement id="insertItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
<!-- LOUTITEMMSKCODE 삭제, 광주은행 테이블에 미존재 231005-->
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#
)
</statement>
<!-- item update -->
<statement id="updateItem" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
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#
</statement>
<statement id="insertTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
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# )
</statement>
<!-- 여기 까지 마이그레이션 영역 -->
<statement id="insertLayoutSyncLog">
INSERT INTO $schemaId$.TSEAITR10
( LOGPRCSSSEQNO, SEQNO, SERVICENAME ,COMMAND,LOUTNAME,RECVDATA,RECVAMNDHMS,PRCSSRSLT, PRCSSRSLTCMNT )
VALUES
( #logPrcssSeqno#, #seqno#, #serviceName# ,#command#,#loutName#,#recvData#,#recvAmndHMS#,#prcssRslt#, #prcssRsltCmnt# )
</statement>
</sqlMap>
@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Layout">
<!-- #### 레이아웃 ### -->
<!-- 상세 조회 -->
<statement id="selectDetail" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#
</statement>
<!-- DELETE-->
<statement id="delete" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR07
WHERE LOUTNAME = #loutName#
</statement>
<!-- Insert-->
<statement id="insert" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
INSERT INTO $schemaId$.TSEAITR07 (
LOUTNAME, LOUTDESC, LOUTPTRNNAME , LASTAMNDHMS , EAIBZWKDSTCD , UAPPLNAME , SYSINTFACNAME, CREATEBY, UPDATEBY
) VALUES (#loutName#, #loutDesc#, #loutPtrnName#, #lastAmndHMS# , #eaiBzwkDstcd# , #uapplName# , #sysIntfacName#, #createBy#, #updateBy# )
</statement>
<!-- Update-->
<statement id="update" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
UPDATE $schemaId$.TSEAITR07
SET LOUTDESC = #loutDesc#,
LOUTPTRNNAME= #loutPtrnName#,
LASTAMNDHMS = #lastAmndHMS#,
EAIBZWKDSTCD = #eaiBzwkDstcd#,
UAPPLNAME = #uapplName#,
SYSINTFACNAME = #sysIntfacName# ,
UPDATEBY = #updateBy#
WHERE LOUTNAME = #loutName#
</statement>
<!-- List All -->
<statement id="selectListAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<!-- item delete all -->
<statement id="deleteItemAll" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR08
WHERE LOUTNAME=#loutName#
</statement>
<statement id="updateItemDesc" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
UPDATE $schemaId$.TSEAITR08
SET LOUTITEMDESC = #loutDesc#
WHERE LOUTNAME = #loutName#
AND LOUTITEMNAME = #loutName#
AND LOUTITEMSERNO = 0
</statement>
<statement id="selectTypeAll" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
SELECT LOUTPTRNNAME AS "LOUTPTRNNAME",
LOUTPTRNDESC AS "LOUTPTRNDESC"
FROM $schemaId$.TSEAITR06
ORDER BY LOUTPTRNDESC
</statement>
<statement id="selectEffect" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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
</statement>
<statement id="selectReportCount" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
SELECT EAIBZWKDSTCD "EAIBzwkDstcd", COUNT(LOUTNAME) "Cnt"
FROM $schemaId$.TSEAITR07
GROUP BY EAIBZWKDSTCD
</statement>
<!-- 여기서 부터 마이그레이션 영역 -->
<statement id="selectTR07Select" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#
</statement>
<statement id="deleteTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR07
WHERE LOUTNAME = #loutName#
</statement>
<statement id="insertTR07" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
INSERT INTO $schemaId$.TSEAITR07 ( LOUTNAME, LOUTPTRNNAME, LOUTDESC, LASTAMNDHMS, EAIBZWKDSTCD, UAPPLNAME, SYSINTFACNAME )
VALUES ( #loutName#, #loutPtrnName#, #loutDesc#, #lastAmndHMS#, #eaiBzwkDstcd#, #uapplName#, #sysIntfacName# )
</statement>
<statement id="selectTR08" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
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#
</statement>
<statement id="deleteTR08" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
DELETE FROM $schemaId$.TSEAITR08
WHERE LOUTNAME = #loutName#
</statement>
</sqlMap>
@@ -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 = "<?xml version=\"1.0\" encoding=\"euc-kr\"?><Message><Header><ServiceName>MessageSync</ServiceName><Command>insert</Command></Header><Body><Layout><id>"
+ layoutId + "</id><data><![CDATA[<?xml version=\"1.0\" encoding=\"euc-kr\"?>"
+ "<Format id=\"URP_DRA00357321URP_CBSS\" desc=\"(107300)자동이체 신청/변경_REQ\" author=\"1910272\" usesystem=\"EAI\" group=\"URP\" date=\"2020-08-18 08:58:54\" msgType=\"ASCII\" ioType=\"CBSS\" part=\"data\" createBy=\"1910272\" updateBy=\"1910272\" type=\"business\"><Field id=\"TX_UNQ_NO_S16\" desc=\"거래고유번호_S16\" depth=\"1\" maxCnt=\"0\" no=\"1\" count=\"\" type=\"Varchar\" len=\"16\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" />"
+ "<Field id=\"PN_NO_S14\" desc=\"플랜번호_S14\" depth=\"1\" maxCnt=\"0\" no=\"2\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TX_DIV1_S1\" desc=\"거래구분1_S1\" depth=\"1\" maxCnt=\"0\" no=\"3\" count=\"\" type=\"Varchar\" len=\"1\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"REG_DIV_S1\" desc=\"등록구분_S1\" depth=\"1\" maxCnt=\"0\" no=\"4\" count=\"\" type=\"Varchar\" len=\"1\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"SEQNO_S4\" desc=\"일련번호_S4\" depth=\"1\" maxCnt=\"0\" no=\"5\" count=\"\" type=\"Varchar\" len=\"4\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"WDL_ACCO_NO_S16\" desc=\"출금계좌번호_S16\" depth=\"1\" maxCnt=\"0\" no=\"6\" count=\"\" type=\"Varchar\" len=\"16\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"MNRC_ACNO_S16\" desc=\"입금계좌번호_S16\" depth=\"1\" maxCnt=\"0\" no=\"7\" count=\"\" type=\"Varchar\" len=\"16\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TRSF_DD_S2\" desc=\"이체일_S2\" depth=\"1\" maxCnt=\"0\" no=\"8\" count=\"\" type=\"Varchar\" len=\"2\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"STDD_S8\" desc=\"시작일자_S8\" depth=\"1\" maxCnt=\"0\" no=\"9\" count=\"\" type=\"Varchar\" len=\"8\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"ENDT_S8\" desc=\"종료일자_S8\" depth=\"1\" maxCnt=\"0\" no=\"10\" count=\"\" type=\"Varchar\" len=\"8\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TRAM_NMCP_INFO1_S14\" desc=\"이체금액부수정보1_S14\" depth=\"1\" maxCnt=\"0\" no=\"11\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"CORP_BDMN_S14\" desc=\"기업부담금_S14\" depth=\"1\" maxCnt=\"0\" no=\"12\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"IDVD_BDMN_S14\" desc=\"개인부담금_S14\" depth=\"1\" maxCnt=\"0\" no=\"13\" count=\"\" type=\"Varchar\" len=\"14\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"WDL_SUMRY\" desc=\"출금적요\" depth=\"1\" maxCnt=\"0\" no=\"14\" count=\"\" type=\"Varchar\" len=\"50\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"MNRC_SUMRY\" desc=\"입금적요\" depth=\"1\" maxCnt=\"0\" no=\"15\" count=\"\" type=\"Varchar\" len=\"50\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TX_BRCD\" desc=\"거래부점코드\" depth=\"1\" maxCnt=\"0\" no=\"16\" count=\"\" type=\"Varchar\" len=\"4\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /><Field id=\"TX_TLRNO\" desc=\"거래텔러번호\" depth=\"1\" maxCnt=\"0\" no=\"17\" count=\"\" type=\"Varchar\" len=\"7\" scale=\"0\" default=\"\" object=\"\" mask=\"\" maskLength=\"0\" point_yn=\"\" batc_info=\"\" rec_tp_yn=\"\" rec_tp_val=\"\" /></Format>]]>"
+ "</data></Layout></Body></Message>";
// =====================================
String url = BASE_URL + "?cmd=Message&schema=APIGW";
// HTTP 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_XML);
// 요청 생성
HttpEntity<String> request = new HttpEntity<>(requestXml, headers);
// POST 요청 전송
ResponseEntity<String> 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());
}
}