OrderServiceImpl fix
This commit is contained in:
Binary file not shown.
@@ -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() {
|
||||
|
||||
@@ -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--;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user