OrderServiceImpl fix

This commit is contained in:
Tim
2025-06-15 20:24:03 +02:00
parent 11e4338650
commit eb77ec0aaa
4 changed files with 25 additions and 24 deletions

View File

@@ -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<OrderItem> orderItems;
public OrderModel toModel() {

View File

@@ -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<Order> a = orderRepository.getOrdersByTimeBetween(lower, upper);
log.info("Getting Orders from {} to {}: size {}", lower, upper, a.size());
orders.put(lower, a);
lower = upper;
months--;
}

View File

@@ -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<unix milli timestamp, Map<Category, T>>
private <T extends Number> MonthlyCatModel<T> getMonthCategoryMap(Function<OrderItem, T> mappingFunction,
BinaryOperator<T> 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<T> reduceFunction,
T defaultValue) {
Map<Long, Map<String, T>> 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<Integer> getSalesVolume() {
return getMonthCategoryMap(OrderItem::getAmount, Integer::sum);
return getMonthCategoryMap(OrderItem::getAmount, Integer::sum, 0);
}
@Override
public MonthlyCatModel<Integer> getSalesRevenue() {
return getMonthCategoryMap(item -> item.getArticle().getPrice100(), Integer::sum);
return getMonthCategoryMap(item -> item.getArticle().getPrice100(), Integer::sum, 0);
}
}