From e69e1a1031b5fff6b6e3b75143d7ee64eda2e07e Mon Sep 17 00:00:00 2001 From: eastargh Date: Wed, 26 Aug 2026 13:49:12 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=85=EB=AC=B4=EC=98=A4=EB=A5=98=EB=8A=94?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=EA=B1=B4=EC=88=98=20=EC=A7=91=EA=B3=84?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=A0=9C=EC=99=B8=20&=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=A1=B0=ED=9A=8C=EC=97=90=EC=84=9C=20=ED=95=98?= =?UTF-8?q?=EB=8A=98=EC=83=89=20=EB=B0=B0=EA=B2=BD=EC=83=89=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/transaction/tracking/trackingMan.jsp | 23 ++++++++++++---- .../rms/data/entity/onl/logger/EAILogDto.java | 4 ++- .../onl/logger/EAILogRepositoryImpl.java | 27 ++++++++++++++++--- .../djb/job/ApiStatsHourlyAggregationJob.java | 7 ++--- .../tracking/DbTrackingService.java | 4 +++ 5 files changed, 52 insertions(+), 13 deletions(-) diff --git a/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp b/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp index c86fafa..da24e80 100644 --- a/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp +++ b/WebContent/jsp/onl/transaction/tracking/trackingMan.jsp @@ -24,6 +24,7 @@ var roleString = "<%=SessionManager.getRoleIdString(request)%>"; let totalLogs = 0; let displayedLogs = 0; + var bizErrCodeSet = new Set(); // ERRCODE_BIZ(업무 오류) 코드 목록 - 그리드 배경색 구분용 function adminChk() { var arrRoleID = roleString.split(','); @@ -106,6 +107,8 @@ new makeOptions("CODE", "NAME").setObj($("select[name=searchExtBizCd]")).setNoValueInclude(true).setNoValue("", "전체").setData(json.extBizList).setFormat(codeName3OptionFormat).rendering(); new makeOptions("CODE", "NAME").setObj($("select[name=searchLogPrcssSerno]")).setNoValueInclude(true).setNoValue("", "전체").setData(json.logPrcssSernoList).rendering(); + bizErrCodeSet = new Set((json.bizErrCodeList || []).map(function (c) { return c.CODE; })); + setSearchable("searchEaiBzwkDstcd"); // 콤보에 searchable 설정 setSearchable("searchExtBizCd"); @@ -311,7 +314,8 @@ '<%=localeMessage.getString("tracking.companyitcontactname")%>', '<%=localeMessage.getString("tracking.companyitcontacttelno")%>', '<%=localeMessage.getString("tracking.itcontactpointperson1")%>', - '<%=localeMessage.getString("tracking.bzwkcontactperson")%>' + '<%=localeMessage.getString("tracking.bzwkcontactperson")%>', + 'EAIERRCD' ], colModel: [ {name: 'EAISVCSERNO', hidden: true}, @@ -341,7 +345,8 @@ {name: 'COMPANYITCONTACTNAME', align: 'left', width: '110', hidden: true}, {name: 'COMPANYITCONTACTTELNO', align: 'left', width: '120', hidden: true}, {name: 'ITCONTACTPOINTPERSON1', align: 'left', width: '120', hidden: true}, - {name: 'BZWKCONTACTPERSON', align: 'left', width: '120', hidden: true} + {name: 'BZWKCONTACTPERSON', align: 'left', width: '120', hidden: true}, + {name: 'EAIERRCD', hidden: true} ], jsonReader: { repeatitems: false @@ -378,7 +383,7 @@ }, loadComplete: function (d) { - $("#grid").tuiTableRowSpan("7"); + // 거래 건수 표시 var uniqueCount = calculateUniqueLogCount("#grid"); @@ -387,11 +392,19 @@ //에러 행 색상 표시 var rows = $(this).getDataIDs(); for (var i = 0; i < rows.length; i++) { - var val = $("#grid").getCell(rows[i], 'ERRYN'); - if (val == "Y") { + var errYn = $("#grid").getCell(rows[i], 'ERRYN'); + var eaiErrCd = $("#grid").getCell(rows[i], 'EAIERRCD'); + var isBizErr = eaiErrCd != null && bizErrCodeSet.has(String(eaiErrCd).trim()); + + if (isBizErr) { + // 업무(BIZ) 오류코드(ERRCODE_BIZ) - 하늘색 배경 + $("#" + rows[i]).find("td").css("background-color", "#BEEDFF"); + } else if (errYn == "Y") { $("#" + rows[i]).find("td").css("background-color", "#FFCC99"); } } + + $("#grid").tuiTableRowSpan("7"); //1000건이상 alert if (d.records == 1000) { diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogDto.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogDto.java index f193189..f347a2c 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogDto.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogDto.java @@ -19,7 +19,8 @@ public class EAILogDto { public EAILogDto(EAILogId eaiLogId, String trackasiskey1ctnt, String trackasiskey2ctnt, String keymgtmsgctnt, String eaisvcname, String extbizcd, String refkey, String clientname, - String orgname, String msgprcssyms, String companycode, String eaierrctnt, String eaiSvcDesc) { + String orgname, String msgprcssyms, String companycode, String eaierrctnt, + String eaierrcd, String eaiSvcDesc) { this.eaiLog = new EAILog(); this.eaiLog.setId(eaiLogId); this.eaiLog.setTrackasiskey1ctnt(trackasiskey1ctnt); @@ -33,6 +34,7 @@ public class EAILogDto { this.eaiLog.setMsgprcssyms(msgprcssyms); this.eaiLog.setCompanycode(companycode); this.eaiLog.setEaierrctnt(eaierrctnt); + this.eaiLog.setEaierrcd(eaierrcd); this.eaiSvcDesc = eaiSvcDesc; } } 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 d1f4d31..6111f94 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 @@ -5,6 +5,7 @@ import com.eactive.eai.data.entity.onl.logger.EAILogId; import com.eactive.eai.data.entity.onl.logger.QEAILog; import com.eactive.eai.data.entity.onl.message.QEAIMessageEntity; import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.QUserBusiness; +import com.eactive.eai.rms.data.entity.onl.code.CodeService; import com.querydsl.core.Tuple; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; @@ -12,6 +13,7 @@ import com.querydsl.core.types.dsl.EntityPathBase; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -27,8 +29,15 @@ import java.util.stream.Collectors; @Repository public class EAILogRepositoryImpl implements EAILogRepository { + // 업무(BIZ) 오류코드 그룹 - 해당 코드는 시스템 에러가 아닌 정상적인 업무 거부 응답이므로 + // "에러로그" 검색 조건에서는 제외한다. + private static final String ERRCODE_BIZ_GROUP = "ERRCODE_BIZ"; + private EntityManager em; - + + @Autowired + private CodeService codeService; + @PersistenceContext public void setEm(EntityManager em) { this.em = em; @@ -57,7 +66,7 @@ public class EAILogRepositoryImpl implements EAILogRepository { 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)) + qeaiLog.eaierrcd, qeaiMessageEntity.eaisvcdesc)) .from(entityPathBase) .leftJoin(qeaiMessageEntity) .on(qeaiLog.eaisvcname.eq(qeaiMessageEntity.eaisvcname)) @@ -195,8 +204,18 @@ public class EAILogRepositoryImpl implements EAILogRepository { .between(eaiLogSearch.getSearchStartTime(), eaiLogSearch.getSearchEndTime())) .where( qeaiLog.eaierrcd.trim().isNotEmpty() - ) - .distinct(); + ); + + // ERRCODE_BIZ(업무 오류) 코드는 시스템 에러가 아니므로 "에러로그" 검색 대상에서 제외 + List bizErrCodes = codeService.findByIdCodegroup(ERRCODE_BIZ_GROUP).stream() + .map(code -> code.getId().getCode()) + .collect(Collectors.toList()); + + if (!bizErrCodes.isEmpty()) { + errorInstancesSubQuery.where(qeaiLog.eaierrcd.notIn(bizErrCodes)); + } + + errorInstancesSubQuery.distinct(); // 찾은 eaisevrinstncname에 해당하는 모든 로그 조회 query.where(qeaiLog.id.eaisvcserno.in(errorInstancesSubQuery)); 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 2c5dc07..84f86f6 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 @@ -126,9 +126,9 @@ public class ApiStatsHourlyAggregationJob implements Job { " , API_NAME, GW_INSTANCE_ID, BIZ_DIV_CODE, NVL(A.CLIENT_ID, 'NONE')" + " , INBOUND_ADAPTER, OUTBOUND_ADAPTER" + " , COUNT(EAISVCSERNO)" + - " , SUM(CASE WHEN A.ERROR_CODE IS NULL AND E400 IS NOT NULL THEN 1 ELSE 0 END)" + + " , SUM(CASE WHEN (A.ERROR_CODE IS NULL OR C.CODE IS NOT NULL) AND E400 IS NOT NULL THEN 1 ELSE 0 END)" + " , SUM(CASE WHEN B.CODE IS NOT NULL THEN 1 ELSE 0 END)" + - " , SUM(CASE WHEN (A.E400 IS NULL OR A.ERROR_CODE IS NOT NULL) AND B.CODE IS NULL THEN 1 ELSE 0 END)" + + " , SUM(CASE WHEN (A.E400 IS NULL OR A.ERROR_CODE IS NOT NULL) AND B.CODE IS NULL AND C.CODE IS NULL THEN 1 ELSE 0 END)" + " , 0, 0, 0, 0" + " , TRUNC(AVG(RESP_TIME)), MIN(RESP_TIME), MAX(RESP_TIME), 0, 0" + " FROM (" + @@ -145,10 +145,11 @@ public class ApiStatsHourlyAggregationJob implements Job { " ) AS RESP_TIME" + " , MAX(CASE WHEN LOGPRCSSSERNO = '400' THEN LOGPRCSSSERNO ELSE '' END) AS E400" + " , MAX(EAIERRCD) AS ERROR_CODE" + - " FROM " + logTableName + + " FROM " + logTableName + " A " + " WHERE MSGDPSTYMS >= :rangeStart AND MSGDPSTYMS < :rangeEnd" + " GROUP BY EAISVCSERNO" + " ) A LEFT OUTER JOIN TSEAICM20 B ON A.ERROR_CODE = B.CODE AND B.CODEGROUP = 'ERRCODE_TIMEOUT' AND B.USEYN = 'Y' " + + " LEFT OUTER JOIN TSEAICM20 C ON A.ERROR_CODE = C.CODE AND C.CODEGROUP = 'ERRCODE_BIZ' AND C.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"; diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java b/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java index 06a6978..c5d5399 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java @@ -426,10 +426,14 @@ public class DbTrackingService extends BaseService { List listLogPrcssSerno = comboService .getFromCode("LOGPRCSSSERNO_TYPE"); + // 업무(BIZ) 오류코드 목록 - 그리드에서 별도 배경색으로 표시하기 위함 + List bizErrCodeList = comboService.getFromCode("ERRCODE_BIZ"); + Map> map = new HashMap<>(); map.put("eaiBizList", bizList); map.put("extBizList", extBizList); map.put("logPrcssSernoList", listLogPrcssSerno); + map.put("bizErrCodeList", bizErrCodeList); return map; }