Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Service
- @Data
- @Slf4j
- public class ReportServiceImpl implements ReportService {
- private CategoryRepository categoryRepository;
- private RequestRepository requestRepository;
- @Override
- public BigDecimal spentMoneyAll() {
- return null;
- }
- @Override
- public BigDecimal quarterBalanceAll() {
- return null;
- }
- @Override
- public BigDecimal quarterBalance() {
- return null;
- }
- @Override
- public Map<Category, BigDecimal> distributionByCategoryForYTD(Set<Location> locations) {
- LocalDate firstDayYear = LocalDate.ofYearDay(LocalDate.now().getYear(),1);
- return calculate(firstDayYear, locations);
- }
- @Override
- public Map<Category, BigDecimal> distributionByCategoryForTheYear(Set<Location> locations) {
- LocalDate dayYearAgo = LocalDate.ofYearDay(LocalDate.now().getYear()-1,LocalDate.now().getDayOfYear());
- return calculate(dayYearAgo,locations);
- }
- private Map<Category, BigDecimal> calculate(LocalDate day, Set<Location> locations){
- Map<Category, BigDecimal> distributionByCategory = new HashMap<>();
- List<Category> categories = categoryRepository.findAll();
- List<Request> requests = requestRepository.findAll();
- List<Request> thisYearRequests = requests.stream()
- .filter(request -> request.getCreationDate().isAfter(day) || request.getCreationDate().equals(day))
- .filter(request -> locations.contains(request.getUser().getLocation()))
- .collect(Collectors.toList());
- Integer requestCount = thisYearRequests.size();
- for (Category category:
- categories) {
- List<Request> thisYearRequestsWithCurrentCategory = thisYearRequests
- .stream()
- .filter(request -> request.getCategory().equals(category))
- .collect(Collectors.toList());
- Integer requestCountWithCurrentCategory = thisYearRequestsWithCurrentCategory.size();
- BigDecimal percent = new BigDecimal(requestCountWithCurrentCategory/requestCount);
- distributionByCategory.put(category, percent);
- }
- return distributionByCategory;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement