From 561caf841b870ee28f65ffe6af497feeb6fa45dd Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 20 Jan 2026 11:24:03 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=EB=AA=A8=EB=8B=88=ED=84=B0=EB=A7=81=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../property/monitoringPropertyManDetail.jsp | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/WebContent/jsp/common/property/monitoringPropertyManDetail.jsp b/WebContent/jsp/common/property/monitoringPropertyManDetail.jsp index 1a5271a..97c8820 100644 --- a/WebContent/jsp/common/property/monitoringPropertyManDetail.jsp +++ b/WebContent/jsp/common/property/monitoringPropertyManDetail.jsp @@ -306,6 +306,45 @@ var lastsel2; buttonControl(key); titleControl(key); + + // 검색 기능 + $("#btn_search").click(function() { + filterGrid(); + }); + + // 엔터키로 검색 + $("#searchText").keypress(function(e) { + if (e.which == 13) { + filterGrid(); + return false; + } + }); + + // 초기화 버튼 + $("#btn_reset").click(function() { + $("#searchText").val(""); + filterGrid(); + }); + + function filterGrid() { + var searchText = $("#searchText").val().toLowerCase(); + var grid = $("#grid"); + + // 모든 행을 순회하며 필터링 + var ids = grid.jqGrid('getDataIDs'); + for (var i = 0; i < ids.length; i++) { + var rowData = grid.jqGrid('getRowData', ids[i]); + var prptyName = (rowData.PRPTYNAME || "").toLowerCase(); + var prptyVal = (rowData.PRPTY2VAL || "").toLowerCase(); + + // 검색어가 비어있거나, 프로퍼티 키 또는 값에 포함되어 있으면 표시 + if (searchText === "" || prptyName.indexOf(searchText) >= 0 || prptyVal.indexOf(searchText) >= 0) { + $("#" + ids[i]).show(); + } else { + $("#" + ids[i]).hide(); + } + } + } }); @@ -359,10 +398,36 @@ var lastsel2; + + + +
- + + + \ No newline at end of file From 5d1fd58a65962c3867612efef6744143f24826c0 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 20 Jan 2026 15:33:02 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=EA=B1=B0=EB=9E=98=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20json=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http/obp.http | 11 ++++++---- .../kjb/web/ApiTransactionLogController.java | 21 ++++++++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/http/obp.http b/http/obp.http index 5296c29..0b3e6fe 100644 --- a/http/obp.http +++ b/http/obp.http @@ -18,9 +18,12 @@ GET {{emsUrl}}/api/apis/000002-02/KJB ### 트랜잭션 로그 조회 -GET {{emsUrl}}/api/transaction/log +POST {{emsUrl}}/api/transaction/log +Content-Type: application/json; application/json; charset=UTF-8 + +{ + "apiServiceNumber": "asdasd", + "txDate": "asdasdasd" +} - -### -GET {{emsUrl}}/transaction/log \ No newline at end of file diff --git a/src/main/java/com/eactive/ext/kjb/web/ApiTransactionLogController.java b/src/main/java/com/eactive/ext/kjb/web/ApiTransactionLogController.java index 3064d22..431ac88 100644 --- a/src/main/java/com/eactive/ext/kjb/web/ApiTransactionLogController.java +++ b/src/main/java/com/eactive/ext/kjb/web/ApiTransactionLogController.java @@ -8,13 +8,15 @@ import com.eactive.eai.rms.data.entity.onl.logger.EAILogService; import com.eactive.eai.rms.onl.apim.common.BaseRestController; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; import lombok.RequiredArgsConstructor; +import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -33,16 +35,16 @@ public class ApiTransactionLogController extends BaseRestController { // 이중 매핑 문제를 해결하기 위해 (예: /api/transaction/log.do 와 /transaction/log.do) '.do' 확장자를 제거함. // 이제 이 엔드포인트는 /api/transaction/log 를 통해서만 접근 가능하며, API 컨벤션에 맞춰 단일하고 명확한 접근 지점을 보장함. - @GetMapping("/transaction/log") +// @GetMapping("/transaction/log") @PostMapping("/transaction/log") - public ResponseEntity getApiLog(String txDate, String apiServiceNumber) { + public ResponseEntity getApiLog(@RequestBody LogRequestBody requestBody) { DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(DataSourceTypeManager.APIGW)); // txDate가 없으면 오늘 날짜 설정 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate searchDate; - if (StringUtils.hasText(txDate)) { - searchDate = LocalDate.parse(txDate, formatter); + if (StringUtils.hasText(requestBody.getTxDate())) { + searchDate = LocalDate.parse(requestBody.getTxDate(), formatter); } else { searchDate = LocalDate.now(); } @@ -51,7 +53,7 @@ public class ApiTransactionLogController extends BaseRestController { ApiLogDTO dto = null; for (int i = 0; i < 10; i++) { String searchDateStr = searchDate.format(formatter); - dto = eaiLogService.getApiLog(searchDateStr, apiServiceNumber); + dto = eaiLogService.getApiLog(searchDateStr, requestBody.getApiServiceNumber()); // 결과가 있으면 종료 if (dto != null && dto.getLogs() != null && !dto.getLogs().isEmpty()) { @@ -138,4 +140,9 @@ public class ApiTransactionLogController extends BaseRestController { return ui; } -} + @Data + public static class LogRequestBody { + private String txDate; + private String apiServiceNumber; + } +} \ No newline at end of file From 8b4a8bf8c850c7ee96f8cc812bd091ad1f43027e Mon Sep 17 00:00:00 2001 From: daekuk Date: Fri, 23 Jan 2026 09:29:50 +0900 Subject: [PATCH 3/6] =?UTF-8?q?-=20=EC=96=B4=EB=8B=B5=ED=84=B0=20=ED=94=84?= =?UTF-8?q?=EB=9D=BC=ED=8D=BC=ED=8B=B0=EC=A0=95=EB=B3=B4=20=ED=8F=AC?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=EC=95=84=EC=9B=83=20=EC=8B=9C=20trim()=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsp/onl/admin/adapter/adapterManDetail.jsp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp b/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp index 66fd2f1..9529ce9 100644 --- a/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp +++ b/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp @@ -942,6 +942,21 @@ $(document).ready(function() { buttonControl(isDetail); titleControl(isDetail); + + // 프라퍼티 값 space 확인 및 제거 + $(document).on('blur', '#grid input[name="PRPTY2VAL"]', function() { + var $this = $(this); + var originalVal = $this.val(); + + if (originalVal) { + var trimmedVal = $.trim(originalVal); + + // 공백 제거 전/후가 다를 때만 값을 변경 (불필요한 동작 방지) + if (originalVal !== trimmedVal) { + $this.val(trimmedVal); + } + } + }); }); // clientManPopup.jsp에서 호출될 함수 (전역 스코프에 정의) From 33fa30a49b2dee18a0bb051024959bda626153bb Mon Sep 17 00:00:00 2001 From: daekuk Date: Fri, 23 Jan 2026 09:30:40 +0900 Subject: [PATCH 4/6] =?UTF-8?q?-=20=EB=A1=9C=EA=B7=B8=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20API=EB=AA=85=EC=9C=BC=EB=A1=9C=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/logger/EAILogRepositoryImpl.java | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogRepositoryImpl.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogRepositoryImpl.java index aad5b34..53f4852 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogRepositoryImpl.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogRepositoryImpl.java @@ -44,38 +44,47 @@ public class EAILogRepositoryImpl implements EAILogRepository { QEAIMessageEntity qeaiMessageEntity = QEAIMessageEntity.eAIMessageEntity; - JPAQuery query = new JPAQueryFactory(em).from(entityPathBase); - appendConditions(eaiLogSearch, qeaiLog, entityPathBase, query); + JPAQuery query = new JPAQueryFactory(em) + .from(entityPathBase) + .leftJoin(qeaiMessageEntity) + .on(qeaiLog.eaisvcname.eq(qeaiMessageEntity.eaisvcname)); + + appendConditions(eaiLogSearch, qeaiLog, entityPathBase, query, qeaiMessageEntity); long totalCount = query.select(qeaiLog.id.msgdpstyms.count()).fetchOne(); - if (totalCount == 0) { - return new PageImpl<>(new ArrayList<>(), pageable, 0); - } + if (totalCount == 0) { + return new PageImpl<>(new ArrayList<>(), pageable, 0); + } - List list = query -// .select(Projections.constructor(EAILogDto.class, qeaiLog, qeaiMessageEntity.eaisvcdesc)) - .select(Projections.constructor(EAILogDto.class, - qeaiLog.id, qeaiLog.trackasiskey1ctnt, qeaiLog.trackasiskey2ctnt, qeaiLog.keymgtmsgctnt, - qeaiLog.eaisvcname, qeaiLog.extbizcd, qeaiLog.refkey, qeaiLog.clientname, - qeaiLog.orgname, qeaiLog.msgprcssyms, qeaiLog.companycode, qeaiLog.eaierrctnt, - qeaiMessageEntity.eaisvcdesc)) - .from(entityPathBase) - .leftJoin(qeaiMessageEntity) - .on(qeaiLog.eaisvcname.eq(qeaiMessageEntity.eaisvcname)) - .orderBy(qeaiLog.id.msgdpstyms.desc(), qeaiLog.id.eaisvcserno.asc(), qeaiLog.id.logprcssserno.asc()) - .limit(1000) - .fetch(); + List list = query +// .select(Projections.constructor(EAILogDto.class, qeaiLog, qeaiMessageEntity.eaisvcdesc)) + .select(Projections.constructor(EAILogDto.class, + qeaiLog.id, qeaiLog.trackasiskey1ctnt, qeaiLog.trackasiskey2ctnt, qeaiLog.keymgtmsgctnt, + qeaiLog.eaisvcname, qeaiLog.extbizcd, qeaiLog.refkey, qeaiLog.clientname, + qeaiLog.orgname, qeaiLog.msgprcssyms, qeaiLog.companycode, qeaiLog.eaierrctnt, + qeaiMessageEntity.eaisvcdesc)) + // .from(...) --> 이미 위에서 선언했으므로 생략 + // .leftJoin(...) --> 이미 위에서 선언했으므로 생략 + .orderBy(qeaiLog.id.msgdpstyms.desc(), qeaiLog.id.eaisvcserno.asc(), qeaiLog.id.logprcssserno.asc()) + .limit(1000) + .fetch(); - return new PageImpl<>(list, pageable, totalCount); + return new PageImpl<>(list, pageable, totalCount); } public Map countDetailedTransactions(Class clazz, EAILogSearch eaiLogSearch) { QEAILog qeaiLog = QEAILog.eAILog; EntityPathBase entityPathBase = new EntityPathBase<>(clazz, qeaiLog.getMetadata().getName()); + + QEAIMessageEntity qeaiMessageEntity = QEAIMessageEntity.eAIMessageEntity; - JPAQuery query = new JPAQueryFactory(em).from(entityPathBase); - appendConditions(eaiLogSearch, qeaiLog, entityPathBase, query); + JPAQuery query = new JPAQueryFactory(em) + .from(entityPathBase) + .leftJoin(qeaiMessageEntity) + .on(qeaiLog.eaisvcname.eq(qeaiMessageEntity.eaisvcname)); + + appendConditions(eaiLogSearch, qeaiLog, entityPathBase, query, qeaiMessageEntity); List results = query.select( qeaiLog.id.logprcssserno, // 로그 처리 상태 @@ -91,7 +100,7 @@ public class EAILogRepositoryImpl implements EAILogRepository { return reult; } - private void appendConditions(EAILogSearch eaiLogSearch, QEAILog qeaiLog, EntityPathBase entityPathBase, JPAQuery query) { + private void appendConditions(EAILogSearch eaiLogSearch, QEAILog qeaiLog, EntityPathBase entityPathBase, JPAQuery query, QEAIMessageEntity qeaiMessageEntity) { if (StringUtils.equalsIgnoreCase(eaiLogSearch.getAuthChk(), "Y")) { QUserBusiness qUserBusiness = QUserBusiness.userBusiness; @@ -127,6 +136,10 @@ public class EAILogRepositoryImpl implements EAILogRepository { if (StringUtils.isNotBlank(eaiLogSearch.getSearchEaiSvcName())) { query.where(qeaiLog.eaisvcname.containsIgnoreCase(eaiLogSearch.getSearchEaiSvcName())); } + + if (StringUtils.isNotBlank(eaiLogSearch.getSearchEaiSvcDesc())) { + query.where(qeaiMessageEntity.eaisvcdesc.containsIgnoreCase(eaiLogSearch.getSearchEaiSvcDesc())); + } if (StringUtils.isNotBlank(eaiLogSearch.getSearchKeyMgtMsgCtnt())) { query.where(qeaiLog.keymgtmsgctnt.contains(eaiLogSearch.getSearchKeyMgtMsgCtnt())); From fc66fe6ab7cf334e84949167b673df67e29f0d4a Mon Sep 17 00:00:00 2001 From: eactive Date: Fri, 23 Jan 2026 09:38:00 +0900 Subject: [PATCH 5/6] =?UTF-8?q?-=20=EB=A1=9C=EA=B7=B8=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=ED=99=94=EB=A9=B4,=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EA=B2=80=EC=83=89=20Detail=20=EC=97=90=EC=84=9C=20=EA=B1=B0?= =?UTF-8?q?=EB=9E=98=EA=B3=A0=EC=9C=A0=EB=B2=88=ED=98=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=83=81=EC=97=90=EC=84=9C=20trim()=20=ED=95=B4?= =?UTF-8?q?=EB=8B=AC=EB=9D=BC=EB=8A=94=20=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/jsp/onl/transaction/tracking/trackingMan.jsp | 8 +++++++- .../jsp/onl/transaction/tracking/trackingManDetail.jsp | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp b/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp index df76159..81034e3 100644 --- a/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp +++ b/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp @@ -303,6 +303,12 @@ return cellvalue; } + function trimFormatter(cellvalue, options, rowObject) { + + return cellvalue ? String(cellvalue).trim() : ''; + + } + $(document).ready(function () { console.log(roleString); @@ -373,7 +379,7 @@ {name: 'TRACKASISKEY1CTNT', hidden: true}, {name: 'TRACKASISKEY2CTNT', hidden: true}, - {name: 'EAISVCSERNO_TMP', align: 'left', width: '220'}, + {name: 'EAISVCSERNO_TMP', align: 'left', width: '220', formatter: trimFormatter}, {name: 'KEYMGTMSGCTNT', align: 'left', width: '240'}, {name: 'LOGPRCSSSERNO_TMP', align: 'center', width: '40'}, {name: 'TELGMRECVTRANCD', align: 'left', width: '135', hidden: true}, diff --git a/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp b/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp index ca13dc6..2f5db38 100644 --- a/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp +++ b/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp @@ -216,7 +216,7 @@ $(tag+"[name="+name+"]").val(data[name.toUpperCase()]); //업체코드.업체명 - if(name=="companyName"){ + if(name=="eaiSvcSerno"){ if(data["COMPANYCODE"] !=null && data["COMPANYCODE"].trim() != ''){ $("input[name=companyName]").val("["+data["COMPANYCODE"]+"] "+data[name.toUpperCase()]); } @@ -233,6 +233,13 @@ } }); + // 거래고유번호 trim + var $svcSernoInput = $("input[name=eaiSvcSerno]"); + + if($svcSernoInput.val()) { + $svcSernoInput.val( $svcSernoInput.val().trim() ); + } + $("input[name=gstatSysAdptrBzwkGroupName],input[name=psvSysAdptrBzwkGroupName]").each(function(){ var name = $(this).attr("name"); if ("${rmsMenuAuth}" =="W"){ //2020.07.08 admin 만 버튼보이게 수정 From 2fcad5de1f5cb6e78c7d68a4dcb68de3263fb5ce Mon Sep 17 00:00:00 2001 From: daekuk Date: Fri, 23 Jan 2026 18:08:03 +0900 Subject: [PATCH 6/6] =?UTF-8?q?-=20blur=20+=20keydown=20=EC=A0=9C=EC=96=B4?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=B4=20editoptions=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/admin/adapter/adapterManDetail.jsp | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp b/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp index 9529ce9..04c907b 100644 --- a/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp +++ b/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp @@ -513,7 +513,36 @@ function gridRendering(){ colModel:[ { name : 'PRPTYGROUPNAME' , align:'left' , hidden: true }, { name : 'PRPTYNAME' , width: 70 , align:'left' }, - { name : 'PRPTY2VAL' , width: 70 , align:'left' , title:false, editable: true, formatter:mltplFormatter, unformatter:mltplUnFormatter}, + { + name : 'PRPTY2VAL', + width: 70, + align:'left', + title:false, + editable: true, + formatter:mltplFormatter, + unformatter:mltplUnFormatter, + editoptions: { + dataEvents: [ + { + type: 'keydown', + fn: function(e) { + if (e.which === 13) { + var val = $(this).val(); + $(this).val($.trim(val)); + } + } + }, + { + type: 'blur', + fn: function(e) { + var val = $(this).val(); + $(this).val($.trim(val)); + } + } + ] + } + // [여기까지 추가] + }, { name : 'PRPTYDESC' , width: 300 , align:'left'}, { name : 'DMNKND' , hidden:true}, { name : 'DOMAINTYPE' , hidden:true, formatter:nullFormatter} @@ -943,20 +972,6 @@ $(document).ready(function() { buttonControl(isDetail); titleControl(isDetail); - // 프라퍼티 값 space 확인 및 제거 - $(document).on('blur', '#grid input[name="PRPTY2VAL"]', function() { - var $this = $(this); - var originalVal = $this.val(); - - if (originalVal) { - var trimmedVal = $.trim(originalVal); - - // 공백 제거 전/후가 다를 때만 값을 변경 (불필요한 동작 방지) - if (originalVal !== trimmedVal) { - $this.val(trimmedVal); - } - } - }); }); // clientManPopup.jsp에서 호출될 함수 (전역 스코프에 정의)