Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
haiphucnguyen committed Dec 1, 2024
1 parent bbb606a commit 91a274b
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package io.flexwork.modules.teams.repository;

import io.flexwork.modules.teams.domain.TeamRequest;
import io.flexwork.modules.teams.domain.WorkflowTransitionHistoryStatus;
import io.flexwork.modules.teams.service.dto.PriorityDistributionDTO;
import io.flexwork.modules.teams.service.dto.TicketActionCountByDateDTO;
import io.flexwork.modules.teams.service.dto.TicketDistributionDTO;
import io.flexwork.modules.usermanagement.service.dto.TicketStatisticsDTO;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -124,4 +127,43 @@ List<PriorityDistributionDTO> findTicketPriorityDistributionByTeamId(
+ "FROM TeamRequest tr "
+ "WHERE tr.isDeleted = false AND tr.team.id = :teamId")
TicketStatisticsDTO getTicketStatisticsByTeamId(@Param("teamId") Long teamId);

@Query(
"SELECT r "
+ "FROM TeamRequest r "
+ "JOIN WorkflowTransitionHistory h ON h.teamRequest.id = r.id "
+ "WHERE r.isDeleted = false "
+ "AND r.isCompleted = false "
+ "AND h.slaDueDate IS NOT NULL "
+ "AND h.slaDueDate < CURRENT_TIMESTAMP "
+ "AND h.status <> :status "
+ "AND r.team.id = :teamId")
List<TeamRequest> findOverdueTicketsByTeamId(
@Param("teamId") Long teamId,
@Param("status") WorkflowTransitionHistoryStatus completedStatus);

@Query(
"SELECT COUNT(r.id) "
+ "FROM TeamRequest r "
+ "JOIN WorkflowTransitionHistory h ON h.teamRequest.id = r.id "
+ "WHERE r.isDeleted = false "
+ "AND r.isCompleted = false "
+ "AND h.slaDueDate IS NOT NULL "
+ "AND h.slaDueDate < CURRENT_TIMESTAMP "
+ "AND h.status <> :status "
+ "AND r.team.id = :teamId")
Long countOverdueTicketsByTeamId(
@Param("teamId") Long teamId,
@Param("status") WorkflowTransitionHistoryStatus completedStatus);

@Query(
"SELECT new io.flexwork.modules.teams.service.dto.TicketActionCountByDateDTO(CAST(r.createdAt AS date), COUNT(r.id)) "
+ "FROM TeamRequest r "
+ "WHERE r.isDeleted = false "
+ "AND r.team.id = :teamId "
+ "AND r.createdAt >= :startDate "
+ "GROUP BY CAST(r.createdAt AS date) "
+ "ORDER BY CAST(r.createdAt AS date) ASC")
List<TicketActionCountByDateDTO> findTicketCreationCounts(
@Param("teamId") Long teamId, @Param("startDate") Instant startDate);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.flexwork.modules.teams.service;

import static io.flexwork.modules.teams.domain.WorkflowTransitionHistoryStatus.Completed;
import static io.flexwork.query.QueryUtils.createSpecification;

import io.flexwork.modules.audit.AuditLogUpdateEvent;
Expand All @@ -14,6 +15,7 @@
import io.flexwork.modules.teams.repository.WorkflowTransitionRepository;
import io.flexwork.modules.teams.service.dto.PriorityDistributionDTO;
import io.flexwork.modules.teams.service.dto.TeamRequestDTO;
import io.flexwork.modules.teams.service.dto.TicketActionCountByDateDTO;
import io.flexwork.modules.teams.service.dto.TicketDistributionDTO;
import io.flexwork.modules.teams.service.event.NewTeamRequestCreatedEvent;
import io.flexwork.modules.teams.service.event.TeamRequestWorkStateTransitionEvent;
Expand All @@ -24,11 +26,16 @@
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityNotFoundException;
import jakarta.persistence.PersistenceContext;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import org.jclouds.rest.ResourceNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
Expand Down Expand Up @@ -289,4 +296,44 @@ private ZonedDateTime calculateEarliestSlaDueDate(Long workflowId, Long sourceSt
// Calculate the SLA due date for the earliest transition
return ZonedDateTime.now().plusMinutes(earliestTransition.getSlaDuration());
}

public List<TeamRequest> getOverdueTickets(Long teamId) {
return teamRequestRepository.findOverdueTicketsByTeamId(teamId, Completed);
}

public Long countOverdueTickets(Long teamId) {
return teamRequestRepository.countOverdueTicketsByTeamId(teamId, Completed);
}

public List<TicketActionCountByDateDTO> getTicketCreationTimeseries(Long teamId, int days) {
// Default to 7 days if no input is provided
if (days <= 0) {
days = 7;
}

// Calculate the start date based on the number of days
LocalDate startDate = LocalDate.now().minusDays(days - 1);

// Fetch data from the repository
List<TicketActionCountByDateDTO> results =
teamRequestRepository.findTicketCreationCounts(
teamId, startDate.atStartOfDay(ZoneId.of("UTC")).toInstant());

// Fill gaps for dates with no tickets
Map<LocalDate, Long> dateToCountMap =
results.stream()
.collect(
Collectors.toMap(
TicketActionCountByDateDTO::getDate,
TicketActionCountByDateDTO::getTicketCount));

List<TicketActionCountByDateDTO> completeResults = new ArrayList<>();
for (int i = 0; i < days; i++) {
LocalDate date = startDate.plusDays(i);
Long count = dateToCountMap.getOrDefault(date, 0L);
completeResults.add(new TicketActionCountByDateDTO(date, count));
}

return completeResults;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.flexwork.modules.teams.service.dto;

import java.sql.Date;
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TicketActionCountByDateDTO {
private LocalDate date;
private Long ticketCount;

public TicketActionCountByDateDTO(Date creationInstant, Long ticketCount) {
// Convert Instant to LocalDate
this.date = creationInstant.toLocalDate();
this.ticketCount = ticketCount;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package io.flexwork.modules.teams.web.rest;

import io.flexwork.modules.teams.domain.TeamRequest;
import io.flexwork.modules.teams.service.TeamRequestService;
import io.flexwork.modules.teams.service.WorkflowTransitionHistoryService;
import io.flexwork.modules.teams.service.dto.PriorityDistributionDTO;
import io.flexwork.modules.teams.service.dto.TeamRequestDTO;
import io.flexwork.modules.teams.service.dto.TicketActionCountByDateDTO;
import io.flexwork.modules.teams.service.dto.TicketDistributionDTO;
import io.flexwork.modules.teams.service.dto.TransitionItemCollectionDTO;
import io.flexwork.modules.usermanagement.service.dto.TicketStatisticsDTO;
Expand Down Expand Up @@ -129,8 +131,25 @@ public ResponseEntity<TransitionItemCollectionDTO> getTicketStateChangesHistory(
return ResponseEntity.ok(ticketHistory);
}

@GetMapping("/statistics/{teamId}")
@GetMapping("/{teamId}/statistics")
public TicketStatisticsDTO getTicketStatisticsByTeamId(@PathVariable Long teamId) {
return teamRequestService.getTicketStatisticsByTeamId(teamId);
}

@GetMapping("/{teamId}/overdue")
public List<TeamRequest> getOverdueTickets(@PathVariable Long teamId) {
return teamRequestService.getOverdueTickets(teamId);
}

@GetMapping("/{teamId}/overdue/count")
public Long countOverdueTickets(@PathVariable Long teamId) {
return teamRequestService.countOverdueTickets(teamId);
}

@GetMapping("/{teamId}/ticket-creations-day-series")
public List<TicketActionCountByDateDTO> getTicketCreationDaySeries(
@PathVariable Long teamId,
@RequestParam(required = false, defaultValue = "7") int days) {
return teamRequestService.getTicketCreationTimeseries(teamId, days);
}
}

0 comments on commit 91a274b

Please sign in to comment.