Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,31 @@
public interface BuildingEnterLogRepository extends JpaRepository<BuildingEnterLog, Long> {
@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<BuildingEnterLog> 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<UpdateDailyEntryStatsRequest> countDailyGrouped(
@Param("start") LocalDateTime start,
@Param("end") LocalDateTime end,
Expand All @@ -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,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Long> query = em.createQuery(jpql, Long.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ public List<HourlyEntryResponse> 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));
Expand Down