diff --git a/src/main/java/com/doubleo/logservice/domain/log/consumer/AreaEnterLogConsumer.java b/src/main/java/com/doubleo/logservice/domain/log/consumer/AreaEnterLogConsumer.java index 1238d7b..6fa6a6f 100644 --- a/src/main/java/com/doubleo/logservice/domain/log/consumer/AreaEnterLogConsumer.java +++ b/src/main/java/com/doubleo/logservice/domain/log/consumer/AreaEnterLogConsumer.java @@ -2,6 +2,7 @@ import com.doubleo.logservice.domain.log.domain.EnterLog; import com.doubleo.logservice.domain.log.repository.EnterLogRepository; +import com.doubleo.logservice.global.enums.VisitCategory; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; @@ -58,7 +59,8 @@ public void consumeMessages() { Long.parseLong((String) data.get("areaId")), Long.parseLong((String) data.get("memberId")), (String) data.get("memberName"), - Long.parseLong((String) data.get("passId"))); + Long.parseLong((String) data.get("passId")), + VisitCategory.valueOf((String) data.get("visitCategory"))); enterLogRepository.save(enterLog); redisTemplate.opsForStream().acknowledge(GROUP, msg); diff --git a/src/main/java/com/doubleo/logservice/domain/log/domain/EnterLog.java b/src/main/java/com/doubleo/logservice/domain/log/domain/EnterLog.java index 97f0d42..83a07be 100644 --- a/src/main/java/com/doubleo/logservice/domain/log/domain/EnterLog.java +++ b/src/main/java/com/doubleo/logservice/domain/log/domain/EnterLog.java @@ -1,6 +1,7 @@ package com.doubleo.logservice.domain.log.domain; import com.doubleo.logservice.domain.common.model.BaseEntity; +import com.doubleo.logservice.global.enums.VisitCategory; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; @@ -30,23 +31,40 @@ public class EnterLog extends BaseEntity { @Column(name = "pass_id", nullable = false) private Long passId; + @Column(name = "visit_category") + @Enumerated(EnumType.STRING) + private VisitCategory visitCategory; + @Builder(access = AccessLevel.PRIVATE) - private EnterLog(String tenantId, Long areaId, Long memberId, String memberName, Long passId) { + private EnterLog( + String tenantId, + Long areaId, + Long memberId, + String memberName, + Long passId, + VisitCategory visitCategory) { this.tenantId = tenantId; this.areaId = areaId; this.memberId = memberId; this.memberName = memberName; this.passId = passId; + this.visitCategory = visitCategory; } public static EnterLog createEnterLog( - String tenantId, Long areaId, Long memberId, String memberName, Long passId) { + String tenantId, + Long areaId, + Long memberId, + String memberName, + Long passId, + VisitCategory visitCategory) { return EnterLog.builder() .tenantId(tenantId) .areaId(areaId) .memberId(memberId) .memberName(memberName) .passId(passId) + .visitCategory(visitCategory) .build(); } } diff --git a/src/main/java/com/doubleo/logservice/domain/log/repository/BuildingEnterLogRepository.java b/src/main/java/com/doubleo/logservice/domain/log/repository/BuildingEnterLogRepository.java index 6b0ca3c..ee4d9f7 100644 --- a/src/main/java/com/doubleo/logservice/domain/log/repository/BuildingEnterLogRepository.java +++ b/src/main/java/com/doubleo/logservice/domain/log/repository/BuildingEnterLogRepository.java @@ -14,27 +14,31 @@ public interface BuildingEnterLogRepository extends JpaRepository { @Query( """ - SELECT COUNT(*) FROM BuildingEnterLog l - WHERE l.direction = 'IN' - AND l.createdDt >= :start AND l.createdDt < :end -""") - int countInLogsAtHour(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end); + SELECT COUNT(l) FROM BuildingEnterLog l + WHERE l.direction = 'IN' + AND l.createdDt >= :start + AND l.createdDt < :end + AND l.tenantId = :tenantId + """) + int countInLogsAtHour( + @Param("start") LocalDateTime start, + @Param("end") LocalDateTime end, + @Param("tenantId") String tenantId); Page findAllByTenantId(String tenantId, Pageable pageable); @Query( """ - SELECT new com.doubleo.logservice.domain.stats.dto.request.UpdateDailyEntryStatsRequest( - b.buildingId, b.memberName, p.visitCategory, COUNT(b) - ) - FROM BuildingEnterLog b - JOIN IssuedLog p ON b.passId = p.passId - WHERE b.direction = 'IN' - AND b.createdDt >= :start - AND b.createdDt < :end - AND b.tenantId = :tenantId - GROUP BY b.buildingId, b.memberName, p.visitCategory -""") + SELECT new com.doubleo.logservice.domain.stats.dto.request.UpdateDailyEntryStatsRequest( + b.buildingId, b.memberName, b.visitCategory, COUNT(b) + ) + FROM BuildingEnterLog b + WHERE b.direction = 'IN' + AND b.createdDt >= :start + AND b.createdDt < :end + AND b.tenantId = :tenantId + GROUP BY b.buildingId, b.memberName, b.visitCategory + """) List countDailyGrouped( @Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @@ -56,15 +60,14 @@ Long countEnteredBetween( @Query( """ - SELECT COUNT(b) - FROM BuildingEnterLog b - JOIN IssuedLog p ON b.passId = p.passId - WHERE b.direction = 'IN' - AND b.createdDt >= :start - AND b.createdDt < :end - AND b.tenantId = :tenantId - AND p.visitCategory = :visitCategory -""") + SELECT COUNT(b) + FROM BuildingEnterLog b + WHERE b.direction = 'IN' + AND b.createdDt >= :start + AND b.createdDt < :end + AND b.tenantId = :tenantId + AND b.visitCategory = :visitCategory + """) int countEnteredByCategory( @Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @@ -73,15 +76,14 @@ int countEnteredByCategory( @Query( """ - SELECT COUNT(b) - FROM BuildingEnterLog b - JOIN IssuedLog p ON b.passId = p.passId - WHERE b.direction = 'OUT' - AND b.createdDt >= :start - AND b.createdDt < :end - AND b.tenantId = :tenantId - AND p.visitCategory = :visitCategory -""") + SELECT COUNT(b) + FROM BuildingEnterLog b + WHERE b.direction = 'OUT' + AND b.createdDt >= :start + AND b.createdDt < :end + AND b.tenantId = :tenantId + AND b.visitCategory = :visitCategory + """) int countExitedByCategory( @Param("start") LocalDateTime start, @Param("end") LocalDateTime end, diff --git a/src/main/java/com/doubleo/logservice/domain/stats/repository/IssuedLogQueryRepository.java b/src/main/java/com/doubleo/logservice/domain/stats/repository/IssuedLogQueryRepository.java index 6cfd64e..e515540 100644 --- a/src/main/java/com/doubleo/logservice/domain/stats/repository/IssuedLogQueryRepository.java +++ b/src/main/java/com/doubleo/logservice/domain/stats/repository/IssuedLogQueryRepository.java @@ -32,8 +32,8 @@ SELECT COUNT(il) WHERE ila.tenantId = :tenantId AND ila.areaCode = :areaCode AND il.visitCategory IN :categories - AND il.startAt <= :endOfDay - AND il.expiredAt >= :startOfDay + AND il.createdDt <= :endOfDay + AND il.createdDt >= :startOfDay """; TypedQuery query = em.createQuery(jpql, Long.class); diff --git a/src/main/java/com/doubleo/logservice/domain/stats/service/StatsServiceImpl.java b/src/main/java/com/doubleo/logservice/domain/stats/service/StatsServiceImpl.java index 5d0ab24..391714a 100644 --- a/src/main/java/com/doubleo/logservice/domain/stats/service/StatsServiceImpl.java +++ b/src/main/java/com/doubleo/logservice/domain/stats/service/StatsServiceImpl.java @@ -61,7 +61,9 @@ public List getHourlyEntryList() { if (cachedCount != null) { total = Integer.parseInt(cachedCount); } else { - int count = buildingEnterLogRepository.countInLogsAtHour(hour, hour.plusHours(1)); + int count = + buildingEnterLogRepository.countInLogsAtHour( + hour, hour.plusHours(1), tenantId); redisTemplate .opsForValue() .set(redisKey, String.valueOf(count), Duration.ofSeconds(10));