해당 게시글은 개인 프로젝트인 "광고 관리 플랫폼 대행사 센터 제작" 중
#135 "대시보드 기능 구현 - 대행사 대시보드" 이슈를 다루고 있습니다.
// 상위 광고주별 소진액 차트 출력
@Transactional(readOnly = true)
public List<DashboardStatisticsDto> setTestDashboard2(LocalDate startDate, LocalDate lastDate) {
LocalDate defaultLastDate = LocalDate.parse(LocalDate.now().minusDays(1)
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
LocalDate startDateBeforeSevenDays = defaultLastDate.minusDays(6);
LocalDate startDateBeforeThirtyDays = defaultLastDate.minusDays(30);
if (lastDate == null) {
lastDate = defaultLastDate;
}
if (startDate == null) {
startDate = startDateBeforeThirtyDays;
}
return statisticsQueryRepository.dashboardTestQuery3(startDate, lastDate).stream().limit(10).collect(Collectors.toList());
}
options: {
....
scales: {
....
x: {
grid: {
display: false,
drawBorder: false,
drawTicks: false
},
ticks: {
padding: 10,
font: {
size: 9
},
autoSkip: true, // x축 데이터 갯수 제한
maxTicksLimit: 10 // x축 데이터 갯수 제한
// 광고주별 소진액 차트 출력
public List<DashboardStatisticsDto> dashboardTestQuery3(@Param("startDate") LocalDate startDate,
@Param("lastDate") LocalDate lastDate
) {
List<DashboardStatisticsDto> results = jpaQueryFactory
.select(Projections.fields(DashboardStatisticsDto.class,
clientUser.userId.as("clientId"),
clientUser.nickname.as("clientName"),
performance.spend.sum().as("spend"),
category.name.as("category")
))
.from(performance)
.leftJoin(performance.creative, creative)
.leftJoin(creative.campaign, campaign)
.leftJoin(campaign.clientUser, clientUser)
.leftJoin(clientUser.category, category)
.where(
performance.createdAt.between(startDate, lastDate),
creative.deleted.eq(false)
)
.groupBy(clientUser.userId)
.fetch();
for (DashboardStatisticsDto result : results) {
Long spend = result.getSpend();
result.setSpendIndicator(spend);
result.setStartDateAndLastDate(startDate, lastDate);
}
results = results.stream()
.sorted(Comparator.comparing(DashboardStatisticsDto::getSpend).reversed())
.collect(Collectors.toList()); // Collections의 comparing을 사용, 내림차순 정렬
return results;
}
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link disabled">대행사 대시보드</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">그룹-에이전트 대시보드</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/dashboard/groups">그룹별 소진액</a></li>
<li><a class="dropdown-item" href="/dashboard/agents">에이전트별 소진액</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">업종별 대시보드</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/dashboard/category">업종별 소진액</a></li>
<li><a class="dropdown-item" href="/dashboard/category_clients">업종-광고주별 소진액</a></li>
</ul>
</li>
</ul>