Я видел пару похожих тем, но, к сожалению, ни одна из них не решила мою проблему.
Я пишу систему продаж. Есть много поставщиков и покупателей. У каждого поставщика разные цены на разные товары, и то же самое с покупателями.
Сначала я решил это так (но понятия не имею, что делать дальше ..):
public class Buyer {
//key = type of product, value = price for that product
private Map<ProductType, Double> productPrices;
public class Order {
//key = type of product, value = quantity of products
private Map<ProductType, Double> orderedProducts;
Вот мой сервис для расчета заказа (это не окончательная версия, я заменю возвращаемый тип на какой-то объект вместо «Франкенштейна» ..), так что не пугайтесь.
// key = product type, value = ( quantity, price)
public Map<ProductType, Map<Double, Double>> calculateOrder(Order order, Buyer buyer) {
AtomicReference<Double> totalSum = new AtomicReference<>((double) 0);
Map<ProductType, Map<Double, Double>> resultOrder = new HashMap<>();
order.getOrderedProducts().forEach((type, quantity) -> {
double price = buyer.getProductPrices().get(type);
double sum = quantity * price;
resultOrder.put(type, new HashMap<>());
resultOrder.get(type).put(quantity, sum);
totalSum.updateAndGet(v1 -> v1 + sum);
});
return resultOrder;
}
Более того: цены на товары будут меняться очень часто для каждого покупателя / поставщика.
Итак, вопрос в том, как поместить эти карты в базу данных. Конечно, с сохранением чистого кода без каких-либо «Франкенштейнов» и легким доступом ко всем данным?
Я буду очень признателен за любую помощь!
PS. Чтобы упростить задачу, я удалил бесполезные атрибуты сущностей, чтобы сосредоточиться только на персонале, что важно для этой проблемы.
PS2. Да, я заменю double на BigDecimal, просто сейчас для более простого расчета я использую double.