From eb77ec0aaa6e5ee445518caf65d990516709c712 Mon Sep 17 00:00:00 2001 From: Tim <47184194+imgde@users.noreply.github.com> Date: Sun, 15 Jun 2025 20:24:03 +0200 Subject: [PATCH] OrderServiceImpl fix --- 00-backend/datasource/database.sqlite | Bin 20824064 -> 20824064 bytes .../webshop/repository/entities/Order.java | 2 +- .../service/impl/OrderServiceImpl.java | 9 +++-- .../service/impl/StatisticsServiceImpl.java | 38 +++++++++--------- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/00-backend/datasource/database.sqlite b/00-backend/datasource/database.sqlite index 1933a3705322b9912ff8200d650745200cd2a1dd..34e7fe627431b7c7c29f79d7672eb082777b3871 100644 GIT binary patch delta 6145 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 w{dn}}F@VQF9xXfu@fgfw2#=vWhVdBAV+4Px# delta 1464 zcmXxkML<*m5P)IdE{K5af{1jeun!THw6MFo#cu3w#l&V61-n4S##|G@!dzPs3p+5t z!q$Hd9=`uHbC}CSN9S8d!|0|_hA;N0MfY@1>SnUYR)6dFDZ@1OCT+I*M?XU`#wbPw z8fakwOB93^3c(sSutj0mK?gnT;eaA=L{T`Q7@Xk(SGd6)9`J-0yy1i5D1nmjg&zzi z#i(k1v^rg6f>ny@r8G4eQdAe6SC@rTGQt9)GUJtmc>zvlcfDnSKuhcN)NEgKZj($? zWU891uyrrNDoyp&*yNZDX=;+r{{KMSyC25H@Sx5yS!NafD1`u&Mj*Ohq)NVLE1DCT3waVlW4DF%R>x01L4Qu`psWmLLvGu?+D@z;dj>O02?a ztif8W!+LDMMkFE$o3I&Mkc_R^hV9sao!EulNWmWL#XjuE0UU%0hj182a1_UI9H}^g zG^FDsPT@4p;4Ct54(D+J7jX%fVa63)#Wh^V4cx>n+{PVb;x4jq5BKo^5Ag`uc#J1_ zif4F^7kG(Rc#Sv6!CSn;dwf7H^6(L#@EKq575Vsv@A!eA_=Vs2gTM2$%t|aI8i`h7 zA+eMclvqg$NvtI{5?e`OiJe3z(M#+l4w51gM@dnMlcbo$S>hsbmAFaVB_0w_iI>D% z;v*?8DIqB-@s;>V3=&o1FDWGnkd&4LO3FyeO3F!sB*BspNvI@D5-uq(sUWE+sU)c^ MiBL}PIut|RKNB%XB>(^b 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); } }