From 7677e3b26ee95b35b0c108360aa649fa64f3eeaf Mon Sep 17 00:00:00 2001 From: eastargh Date: Thu, 21 May 2026 15:10:24 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=EA=B1=B0=EB=9E=98=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=A7=91=EA=B3=84=EC=8B=9C=20=EA=B3=B5=ED=86=B5=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/rms/ext/djb/job/ApiStatsHourlyAggregationJob.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/ext/djb/job/ApiStatsHourlyAggregationJob.java b/src/main/java/com/eactive/eai/rms/ext/djb/job/ApiStatsHourlyAggregationJob.java index 606f50c..6b840c3 100644 --- a/src/main/java/com/eactive/eai/rms/ext/djb/job/ApiStatsHourlyAggregationJob.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/job/ApiStatsHourlyAggregationJob.java @@ -80,7 +80,6 @@ public class ApiStatsHourlyAggregationJob implements Job { log.info("=== 시간별 통계 집계 작업 시작 === 대상: {}", targetDate); String searchDate = targetDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); - String schemaEMS = System.getProperty("eai.tableowner", "EMSADM").toUpperCase(); String logTableName = CommonUtil.getLogTable(searchDate, true); // 1. 기존 데이터 삭제 @@ -129,7 +128,7 @@ public class ApiStatsHourlyAggregationJob implements Job { " FROM " + logTableName + " WHERE MSGDPSTYMS LIKE :searchDate || '%'" + " GROUP BY EAISVCSERNO" + - " ) A LEFT OUTER JOIN " + schemaEMS + ".TSEAIRM28 B ON A.ERROR_CODE = B.CODE AND B.CODEGROUP = 'ERRCODE_TIMEOUT'" + + " ) A LEFT OUTER JOIN TSEAICM20 B ON A.ERROR_CODE = B.CODE AND B.CODEGROUP = 'ERRCODE_TIMEOUT' AND B.USEYN = 'Y' " + " GROUP BY SUBSTR(DT,1,10), API_NAME, GW_INSTANCE_ID, BIZ_DIV_CODE, NVL(A.CLIENT_ID, 'NONE')" + " , INBOUND_ADAPTER, OUTBOUND_ADAPTER"; From 350297aaa2b06914d7087b3851a3944af1b3f3f5 Mon Sep 17 00:00:00 2001 From: eastargh Date: Wed, 27 May 2026 16:54:19 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=9C=A0=EB=9F=89=EC=A0=9C=EC=96=B4=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/inflow/InflowControlService.java | 123 ++++++------------ 1 file changed, 43 insertions(+), 80 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/inflow/InflowControlService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/inflow/InflowControlService.java index 9c1284f..d68c379 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/inflow/InflowControlService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/inflow/InflowControlService.java @@ -1,9 +1,6 @@ package com.eactive.eai.rms.data.entity.onl.inflow; -import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; import javax.persistence.EntityManager; @@ -18,6 +15,7 @@ import org.springframework.stereotype.Service; import com.eactive.apim.portal.app.entity.QCredential; import com.eactive.eai.data.entity.onl.adapter.QAdapterGroup; +import com.eactive.eai.data.entity.onl.authserver.QClientEntity; import com.eactive.eai.data.entity.onl.inflow.InflowControl; import com.eactive.eai.data.entity.onl.inflow.InflowControlId; import com.eactive.eai.data.entity.onl.inflow.QInflowControl; @@ -29,7 +27,6 @@ import com.eactive.eai.rms.onl.manage.inflow.history.InflowControlHistoryManUISe import com.eactive.eai.rms.onl.manage.inflow.inflow.InflowControlManMapper; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.Tuple; -import com.querydsl.core.types.OrderSpecifier; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -186,101 +183,67 @@ public class InflowControlService extends AbstractDataService findAllForClient(Pageable pageable, String searchName) { - QCredential qCredential = QCredential.credential; + + JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(entityManager); QInflowControl qInflowControl = QInflowControl.inflowControl; + QClientEntity qClientEntity = QClientEntity.clientEntity; - // EMSADM: Credential 목록 및 건수 조회 - JPAQueryFactory emsFactory = new JPAQueryFactory(entityManagerForEMS); - BooleanBuilder credPredicate = new BooleanBuilder(); - if (!StringUtils.isEmpty(searchName)) { - credPredicate.and(qCredential.clientname.contains(searchName)); - } - - long totalCount = emsFactory - .select(qCredential.clientid.count()) - .from(qCredential) - .where(credPredicate) - .fetchOne(); - - List credList = emsFactory - .select(qCredential.clientid, qCredential.clientname) - .from(qCredential) - .where(credPredicate) - .orderBy(qCredential.clientname.asc()) + List tupleList = jpaQueryFactory + .select(qInflowControl, qClientEntity.clientid, qClientEntity.clientname) + .from(qClientEntity) + .leftJoin(qInflowControl) + .on(qInflowControl.id.type.eq(CLIENT_TYPE_INFLOW) + .and(qInflowControl.id.name.eq(qClientEntity.clientid))) + .where(qClientEntity.clientname.contains(searchName)) + .orderBy(qClientEntity.clientname.asc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); - if (credList.isEmpty()) { - return new PageImpl<>(Collections.emptyList(), pageable, totalCount); - } - - // AGWADM: 해당 clientId의 InflowControl 일괄 조회 - List clientIds = credList.stream() - .map(t -> t.get(qCredential.clientid)) - .collect(Collectors.toList()); - - Map inflowMap = new JPAQueryFactory(entityManager) - .selectFrom(qInflowControl) - .where(qInflowControl.id.type.eq(CLIENT_TYPE_INFLOW) - .and(qInflowControl.id.name.in(clientIds))) - .fetch() + List dtoList = tupleList .stream() - .collect(Collectors.toMap(ic -> ic.getId().getName(), ic -> ic)); - - // Java에서 병합 - List dtoList = credList.stream() - .map(tuple -> { - String clientId = tuple.get(qCredential.clientid); - InflowControl inflowControl = inflowMap.get(clientId); - InflowControlServiceDto dto; - if (inflowControl != null) { - dto = mapper.toDto(inflowControl); - } else { - dto = new InflowControlServiceDto(); - dto.setName(clientId); - dto.setType(CLIENT_TYPE_INFLOW); - } - dto.setDesc(tuple.get(qCredential.clientname)); - return dto; - }) + .map(tuple -> toDto(qClientEntity, qInflowControl, tuple)) .collect(Collectors.toList()); + long totalCount = jpaQueryFactory + .select(qClientEntity.clientname.count()) + .from(qClientEntity) + .where(qClientEntity.clientname.contains(searchName)) + .fetchOne(); return new PageImpl<>(dtoList, pageable, totalCount); } + private InflowControlServiceDto toDto(QClientEntity qClientEntity, QInflowControl qInflowControl, + Tuple tuple) { + InflowControlServiceDto dto = null; + if (tuple.get(qInflowControl) != null) + dto = mapper.toDto(tuple.get(qInflowControl)); + else { + dto = new InflowControlServiceDto(); + dto.setName(tuple.get(qClientEntity.clientid)); + dto.setType(CLIENT_TYPE_INFLOW); + } + dto.setDesc(tuple.get(qClientEntity.clientname)); + return dto; + } + public Page selectLogList(Pageable pageable, InflowControlHistoryManUISearch uiSearch) { QInflowControlLog qlog = QInflowControlLog.inflowControlLog; QInflowControlGroup qgroup = QInflowControlGroup.inflowControlGroup; From b639e290399769ae5b587611edeaadefd26c3f19 Mon Sep 17 00:00:00 2001 From: eastargh Date: Thu, 28 May 2026 10:53:33 +0900 Subject: [PATCH 3/5] =?UTF-8?q?DB=EC=8A=A4=ED=82=A4=EB=A7=88=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20:=20AGWADM->AGWAPP,=20EMSADM->EMSAPP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationContext-datasource-DEV.xml | 8 +- .../applicationContext-datasource-LOCAL.xml | 4 +- .../applicationContext-datasource-PROD.xml | 4 +- .../applicationContext-datasource-STG.xml | 4 +- .../WEB-INF/properties/env.D.properties | 2 +- .../WEB-INF/properties/env.L.properties | 2 +- .../WEB-INF/properties/env.P.properties | 2 +- .../WEB-INF/properties/env.T.properties | 2 +- check_table.py | 11 ++ kjb-docs/API_HISTORY.sql | 24 ++-- kjb-docs/Property 설정.md | 60 ++++---- kjb-docs/sms-auth-guide.md | 8 +- readme.md | 130 +++++++++--------- ..._20260507_eapim-admin_feature-crypto-module.md | 6 +- 14 files changed, 139 insertions(+), 128 deletions(-) create mode 100644 check_table.py diff --git a/WebContent/WEB-INF/applicationContext-datasource-DEV.xml b/WebContent/WEB-INF/applicationContext-datasource-DEV.xml index ae71097..2a131bb 100644 --- a/WebContent/WEB-INF/applicationContext-datasource-DEV.xml +++ b/WebContent/WEB-INF/applicationContext-datasource-DEV.xml @@ -25,14 +25,14 @@ class="com.eactive.eai.rms.common.datasource.DataSourceType" p:name="APIGW" p:text="APIGW" - p:schema="AGWADM" + p:schema="AGWAPP" p:dynamic="true" p:online="true" p:jndiName="jdbc/dsOBP_AGW" p:render="ONL,COM" /> - + /> 전체 DDL (신규 환경용) ```sql -CREATE TABLE EMSADM.CRYPTO_MODULE_CONFIG ( +CREATE TABLE EMSAPP.CRYPTO_MODULE_CONFIG ( CRYPTO_ID VARCHAR2(36) NOT NULL, CRYPTO_NAME VARCHAR2(100) NOT NULL, CRYPTO_DESC VARCHAR2(500), From af0a878a399d6caea9db43b5bb0de401d310bc84 Mon Sep 17 00:00:00 2001 From: eastargh Date: Thu, 28 May 2026 11:32:31 +0900 Subject: [PATCH 4/5] =?UTF-8?q?DB=EC=8A=A4=ED=82=A4=EB=A7=88=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20BAPADM->BAPAPP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationContext-datasource-DEV.xml | 2 +- .../applicationContext-datasource-LOCAL.xml | 22 +++++++++---------- .../applicationContext-datasource-PROD.xml | 2 +- .../applicationContext-datasource-STG.xml | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/WebContent/WEB-INF/applicationContext-datasource-DEV.xml b/WebContent/WEB-INF/applicationContext-datasource-DEV.xml index 2a131bb..1ee28a1 100644 --- a/WebContent/WEB-INF/applicationContext-datasource-DEV.xml +++ b/WebContent/WEB-INF/applicationContext-datasource-DEV.xml @@ -37,7 +37,7 @@ class="com.eactive.eai.rms.common.datasource.DataSourceType" p:name="BAP" p:text="BAP" - p:schema="BAPADM" + p:schema="BAPAPP" p:dynamic="true" p:online="true" p:jndiName="jdbc/dsOBP_BAP" diff --git a/WebContent/WEB-INF/applicationContext-datasource-LOCAL.xml b/WebContent/WEB-INF/applicationContext-datasource-LOCAL.xml index df6ea5d..2e7edbe 100644 --- a/WebContent/WEB-INF/applicationContext-datasource-LOCAL.xml +++ b/WebContent/WEB-INF/applicationContext-datasource-LOCAL.xml @@ -32,17 +32,17 @@ p:render="ONL,COM" /> - - - - - - - - - - - + Date: Thu, 28 May 2026 16:02:52 +0900 Subject: [PATCH 5/5] =?UTF-8?q?API=EC=82=AC=EC=9A=A9=ED=98=84=ED=99=A9=20?= =?UTF-8?q?=ED=86=B5=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/WEB-INF/applicationContext-jdbc-DEV.xml | 6 +++--- WebContent/WEB-INF/applicationContext-jdbc-LOCAL.xml | 8 ++++---- .../rms/ext/djb/statistics/ApiUseStatsController.java | 2 -- .../djb/statistics/ApiUseStatsExcelExportService.java | 2 +- .../ext/djb/statistics/ApiUseStatsRepository.java | 2 +- .../ext/djb/statistics/ApiUseStatsService.java | 10 ++++------ 6 files changed, 13 insertions(+), 17 deletions(-) rename src/main/java/com/eactive/eai/rms/{data => }/ext/djb/statistics/ApiUseStatsExcelExportService.java (99%) rename src/main/java/com/eactive/eai/rms/{data => }/ext/djb/statistics/ApiUseStatsRepository.java (85%) rename src/main/java/com/eactive/eai/rms/{data => }/ext/djb/statistics/ApiUseStatsService.java (94%) diff --git a/WebContent/WEB-INF/applicationContext-jdbc-DEV.xml b/WebContent/WEB-INF/applicationContext-jdbc-DEV.xml index a7a4003..f389485 100644 --- a/WebContent/WEB-INF/applicationContext-jdbc-DEV.xml +++ b/WebContent/WEB-INF/applicationContext-jdbc-DEV.xml @@ -30,9 +30,9 @@ - + value-ref="BAP" /> /WEB-INF/sqlmap-config/${db.vendor}/sqlMapConfigOfOnl.xml - + /WEB-INF/sqlmap-config/${db.vendor}/sqlMapConfigOfBap.xml diff --git a/WebContent/WEB-INF/applicationContext-jdbc-LOCAL.xml b/WebContent/WEB-INF/applicationContext-jdbc-LOCAL.xml index 036af28..979b4aa 100644 --- a/WebContent/WEB-INF/applicationContext-jdbc-LOCAL.xml +++ b/WebContent/WEB-INF/applicationContext-jdbc-LOCAL.xml @@ -30,9 +30,9 @@ - - - + /WEB-INF/sqlmap-config/${db.vendor}/sqlMapConfigOfOnl.xml - + /WEB-INF/sqlmap-config/${db.vendor}/sqlMapConfigOfBap.xml diff --git a/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsController.java b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsController.java index 8676b9f..90278a1 100644 --- a/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsController.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsController.java @@ -15,8 +15,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import com.eactive.eai.rms.common.vo.GridResponse; -import com.eactive.eai.rms.data.ext.djb.statistics.ApiUseStatsExcelExportService; -import com.eactive.eai.rms.data.ext.djb.statistics.ApiUseStatsService; import com.eactive.ext.kjb.statistics.ui.ApiStatsSearch; import com.eactive.ext.kjb.statistics.ui.ApiStatsUI; diff --git a/src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsExcelExportService.java b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsExcelExportService.java similarity index 99% rename from src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsExcelExportService.java rename to src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsExcelExportService.java index b79aae2..1bf691d 100644 --- a/src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsExcelExportService.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsExcelExportService.java @@ -1,4 +1,4 @@ -package com.eactive.eai.rms.data.ext.djb.statistics; +package com.eactive.eai.rms.ext.djb.statistics; import java.io.IOException; import java.math.BigDecimal; diff --git a/src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsRepository.java b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsRepository.java similarity index 85% rename from src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsRepository.java rename to src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsRepository.java index 055127d..3b5ee06 100644 --- a/src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsRepository.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsRepository.java @@ -1,4 +1,4 @@ -package com.eactive.eai.rms.data.ext.djb.statistics; +package com.eactive.eai.rms.ext.djb.statistics; import com.eactive.eai.data.jpa.BaseRepository; import com.eactive.eai.rms.data.entity.onl.kjb.statistics.ApiStatsDay; diff --git a/src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsService.java b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsService.java similarity index 94% rename from src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsService.java rename to src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsService.java index e6923f6..067b71f 100644 --- a/src/main/java/com/eactive/eai/rms/data/ext/djb/statistics/ApiUseStatsService.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/statistics/ApiUseStatsService.java @@ -1,4 +1,4 @@ -package com.eactive.eai.rms.data.ext.djb.statistics; +package com.eactive.eai.rms.ext.djb.statistics; import java.math.RoundingMode; import java.time.LocalDate; @@ -62,8 +62,6 @@ public class ApiUseStatsService private Query getDataQuery(ApiStatsSearch search) { - String schemaEms = System.getProperty("eai.tableowner", "EMSADM").toUpperCase(); - StringBuilder where = buildNativeWhere(search); String dataSql = ""; @@ -80,7 +78,7 @@ public class ApiUseStatsService + ", MIN(A.MIN_RESP_TIME)" + ", MAX(A.MAX_RESP_TIME)" + " FROM API_STATS_DAY A" - + " LEFT OUTER JOIN " + schemaEms + ".PTL_CREDENTIAL B ON A.CLIENT_ID = B.CLIENTID" + + " LEFT OUTER JOIN TSEAIAU01 B ON A.CLIENT_ID = B.CLIENTID" + " LEFT OUTER JOIN TSEAIHE01 C ON A.API_NAME = C.EAISVCNAME " + where + " GROUP BY B.ORGNAME" @@ -98,7 +96,7 @@ public class ApiUseStatsService + ", MIN(A.MIN_RESP_TIME)" + ", MAX(A.MAX_RESP_TIME)" + " FROM API_STATS_DAY A " - + " LEFT OUTER JOIN " + schemaEms + ".PTL_CREDENTIAL B ON A.CLIENT_ID = B.CLIENTID" + + " LEFT OUTER JOIN TSEAIAU01 B ON A.CLIENT_ID = B.CLIENTID" + " LEFT OUTER JOIN TSEAIHE01 C ON A.API_NAME = C.EAISVCNAME " + where + " GROUP BY C.EAISVCDESC" @@ -116,7 +114,7 @@ public class ApiUseStatsService + ", MIN(A.MIN_RESP_TIME)" + ", MAX(A.MAX_RESP_TIME)" + " FROM API_STATS_DAY A " - + " LEFT OUTER JOIN " + schemaEms + ".PTL_CREDENTIAL B ON A.CLIENT_ID = B.CLIENTID" + + " LEFT OUTER JOIN TSEAIAU01 B ON A.CLIENT_ID = B.CLIENTID" + " LEFT OUTER JOIN TSEAIHE01 C ON A.API_NAME = C.EAISVCNAME " + where + " GROUP BY TO_CHAR(STAT_TIME,'YYYY-MM-DD')"