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();