diff --git a/00-backend/datasource/database.sqlite b/00-backend/datasource/database.sqlite index 1933a37..34e7fe6 100644 Binary files a/00-backend/datasource/database.sqlite and b/00-backend/datasource/database.sqlite differ diff --git a/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java b/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java index 01d632e..54e1f50 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java @@ -31,7 +31,7 @@ public class Order { @Column(name = "status", nullable = false) private OrderStatus status; - @OneToMany(mappedBy = "order", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL, targetEntity = OrderItem.class) + @OneToMany(mappedBy = "order", orphanRemoval = true, fetch = FetchType.LAZY, targetEntity = OrderItem.class) private List orderItems; public OrderModel toModel() { diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java index c92cb48..494fd65 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java @@ -62,8 +62,8 @@ public class OrderServiceImpl implements OrderService { ArrayList::addAll ) ); + log.info("Created Order from Model: {}", order); orderItemRepository.saveAll(order.getOrderItems()); - log.info("Saved OrderItems"); return order; } @@ -94,9 +94,10 @@ public class OrderServiceImpl implements OrderService { long lower = fromMilli; long upper; while (months > 0) { - upper = fromMilli + TimeUtil.monthLength(fromMilli); - log.info("Getting Orders from {} to {}", lower, upper); - orders.put(fromMilli, orderRepository.getOrdersByTimeBetween(lower, upper)); + upper = lower + TimeUtil.monthLength(lower); + List a = orderRepository.getOrdersByTimeBetween(lower, upper); + log.info("Getting Orders from {} to {}: size {}", lower, upper, a.size()); + orders.put(lower, a); lower = upper; months--; } diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/StatisticsServiceImpl.java b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/StatisticsServiceImpl.java index 197f47b..8a7abca 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/StatisticsServiceImpl.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/StatisticsServiceImpl.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.Map; import java.util.function.BinaryOperator; import java.util.function.Function; @@ -26,34 +27,33 @@ public class StatisticsServiceImpl implements StatisticsService { this.orderService = orderService; } - //don't ask pls //returns Map> private MonthlyCatModel getMonthCategoryMap(Function mappingFunction, - BinaryOperator reduceFunction) { - return new MonthlyCatModel<>( - orderService.getTimeSortedOrders(TimeUtil.nowMonthsAgo(12), 12).entrySet().stream() - .map(entry -> Map.entry(entry.getKey(), - entry.getValue().stream() - .map(Order::getOrderItems) - .reduce(new ArrayList<>(), (l, r) -> { - l.addAll(r); - return l; - }) - .stream() - .map(orderItem -> Map.entry(orderItem.getArticle().getCategory(), mappingFunction.apply(orderItem))) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, reduceFunction)) - )) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) - ); + BinaryOperator reduceFunction, + T defaultValue) { + Map> map = new HashMap<>(); + orderService.getTimeSortedOrders(TimeUtil.nowMonthsAgo(12), 12).forEach( (k,v) -> { + log.info("Month {} has {}", k, v.size()); + map.putIfAbsent(k, new HashMap<>()); + v.forEach( (order) -> + order.getOrderItems().forEach((item) -> { + //log.info(" OrderItem {} has cat {}", item, item.getArticle().getCategory()); + map.get(k).putIfAbsent(item.getArticle().getCategory(), defaultValue); + map.get(k).computeIfPresent(item.getArticle().getCategory(), (cat,left ) -> reduceFunction.apply(left, mappingFunction.apply(item))); + }) + ); + log.info("Month has {} cats", map.get(k).size()); + }); + return new MonthlyCatModel<>(map); } @Override public MonthlyCatModel getSalesVolume() { - return getMonthCategoryMap(OrderItem::getAmount, Integer::sum); + return getMonthCategoryMap(OrderItem::getAmount, Integer::sum, 0); } @Override public MonthlyCatModel getSalesRevenue() { - return getMonthCategoryMap(item -> item.getArticle().getPrice100(), Integer::sum); + return getMonthCategoryMap(item -> item.getArticle().getPrice100(), Integer::sum, 0); } }