From 7ebbd7d9e45a596927a5c8e64212e2cfc6fd281e Mon Sep 17 00:00:00 2001 From: eastargh Date: Mon, 10 Aug 2026 10:42:39 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=A1=B0=ED=9A=8C=EC=8B=9C?= =?UTF-8?q?=20GUID=EC=9E=85=EB=A0=A5=EC=8B=9C=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EB=AC=B4=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/logger/EAILogRepositoryImpl.java | 12 +++++++--- .../entity/onl/logger/EAILogServiceImpl.java | 22 +++++++++++++++++-- 2 files changed, 29 insertions(+), 5 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 417cb65..d1f4d31 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 @@ -102,9 +102,15 @@ public class EAILogRepositoryImpl implements EAILogRepository { } if (StringUtils.isNotBlank(eaiLogSearch.getSearchGuid())) { - query - .where(qeaiLog.pguid.eq(eaiLogSearch.getSearchGuid())) - .where(qeaiLog.id.logprcssserno.eq(eaiLogSearch.getSearchLogPrcssSerno())); + query.where(qeaiLog.pguid.eq(eaiLogSearch.getSearchGuid())); + + // 처리단계(logprcssserno)를 명시적으로 선택한 경우에만 추가로 좁힌다. + // 하나의 GUID는 처리단계(100/200/300/400)별로 여러 로그 행에 걸쳐 존재하므로, + // 선택하지 않았으면 해당 GUID의 모든 단계를 조회한다. + if (StringUtils.isNotBlank(eaiLogSearch.getSearchLogPrcssSerno())) { + query.where(qeaiLog.id.logprcssserno.eq(eaiLogSearch.getSearchLogPrcssSerno())); + } + return; } diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogServiceImpl.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogServiceImpl.java index 0ce13ca..d27e031 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogServiceImpl.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/logger/EAILogServiceImpl.java @@ -13,6 +13,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.eactive.eai.common.util.UUIDGenerator; import com.eactive.eai.data.RollingTable; import com.eactive.eai.data.entity.onl.logger.EAILog; import com.eactive.eai.data.entity.onl.logger.EAILogId; @@ -38,19 +39,36 @@ public class EAILogServiceImpl implements EAILogService { @Override public Page findAll(Pageable pageable, EAILogSearch eaiLogSearch) { - long time = CommonUtil.getCalendar(eaiLogSearch.getSearchStartTime()).getTimeInMillis(); + long time = CommonUtil.getCalendar(resolveTableDate(eaiLogSearch)).getTimeInMillis(); EAILog eaiLog = (EAILog) applicationContext.getBean(RollingTable.class, EAILog.class, time); Page eaiLogDtos = eaiLogRepository.findAll(eaiLog.getClass(), pageable, eaiLogSearch); return eaiLogDtos; } public Map getTransactionCounts(EAILogSearch eaiLogSearch) { - long time = CommonUtil.getCalendar(eaiLogSearch.getSearchStartTime()).getTimeInMillis(); + long time = CommonUtil.getCalendar(resolveTableDate(eaiLogSearch)).getTimeInMillis(); EAILog eaiLog = (EAILog) applicationContext.getBean(RollingTable.class, EAILog.class, time); Map detailedCounts = eaiLogRepository.countDetailedTransactions(eaiLog.getClass(), eaiLogSearch); return detailedCounts; } + // GUID로 조회하는 경우, 대상 롤링 테이블을 검색시간이 아닌 GUID 자체에 포함된 시각으로 특정한다. + // GUID 포맷/오프셋은 UUIDGenerator.GUID_DATE_POSITION 기준. + private String resolveTableDate(EAILogSearch eaiLogSearch) { + String guid = eaiLogSearch.getSearchGuid(); + + if (StringUtils.isNotBlank(guid)) { + int start = UUIDGenerator.GUID_DATE_POSITION; + int end = start + 14; // yyyyMMddHHmmss + + if (guid.length() >= end) { + return guid.substring(start, end); + } + } + + return eaiLogSearch.getSearchStartTime(); + } + @Override public EAILogDto getById(EAILogId eaiLogId) { long time = CommonUtil.getCalendar(eaiLogId.getMsgdpstyms()).getTimeInMillis();