Advertisement
semkaegor4ik

report

Feb 11th, 2021
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. @Service
  2. @Data
  3. @Slf4j
  4. public class ReportServiceImpl implements ReportService {
  5.  
  6. private CategoryRepository categoryRepository;
  7.  
  8. private RequestRepository requestRepository;
  9.  
  10. @Override
  11. public BigDecimal spentMoneyAll() {
  12. return null;
  13. }
  14.  
  15. @Override
  16. public BigDecimal quarterBalanceAll() {
  17. return null;
  18. }
  19.  
  20. @Override
  21. public BigDecimal quarterBalance() {
  22. return null;
  23. }
  24.  
  25. @Override
  26. public Map<Category, BigDecimal> distributionByCategoryForYTD(Set<Location> locations) {
  27.  
  28. LocalDate firstDayYear = LocalDate.ofYearDay(LocalDate.now().getYear(),1);
  29.  
  30. return calculate(firstDayYear, locations);
  31. }
  32.  
  33. @Override
  34. public Map<Category, BigDecimal> distributionByCategoryForTheYear(Set<Location> locations) {
  35.  
  36. LocalDate dayYearAgo = LocalDate.ofYearDay(LocalDate.now().getYear()-1,LocalDate.now().getDayOfYear());
  37.  
  38. return calculate(dayYearAgo,locations);
  39. }
  40.  
  41. private Map<Category, BigDecimal> calculate(LocalDate day, Set<Location> locations){
  42. Map<Category, BigDecimal> distributionByCategory = new HashMap<>();
  43.  
  44. List<Category> categories = categoryRepository.findAll();
  45. List<Request> requests = requestRepository.findAll();
  46.  
  47. List<Request> thisYearRequests = requests.stream()
  48. .filter(request -> request.getCreationDate().isAfter(day) || request.getCreationDate().equals(day))
  49. .filter(request -> locations.contains(request.getUser().getLocation()))
  50. .collect(Collectors.toList());
  51.  
  52. Integer requestCount = thisYearRequests.size();
  53.  
  54. for (Category category:
  55. categories) {
  56. List<Request> thisYearRequestsWithCurrentCategory = thisYearRequests
  57. .stream()
  58. .filter(request -> request.getCategory().equals(category))
  59. .collect(Collectors.toList());
  60.  
  61. Integer requestCountWithCurrentCategory = thisYearRequestsWithCurrentCategory.size();
  62. BigDecimal percent = new BigDecimal(requestCountWithCurrentCategory/requestCount);
  63.  
  64. distributionByCategory.put(category, percent);
  65. }
  66.  
  67. return distributionByCategory;
  68. }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement