#java #playframework
#java #playframework
Вопрос:
На странице администратора моего приложения Play Framework мне нужно перечислить Product
s, проданные между двумя датами, и отобразить Product name
, quantity
продано и всего price
.Я смоделировал эту информацию в CustomerOrder
модели.Тем не менее, у меня есть некоторые сомнения относительно того, какую структуру данных я должен использовать для хранения этих вышеупомянутых данных.
Предполагается, что администратор должен иметь возможность отображать данные о продажах в табличном формате, как показано ниже
Product Name | quantity | total amount received
===================================================
flwr vase#12 | 13 | 1250
---------------------------------------------------
lampshade#3 | 11 | 110
-----------------------------------------
Я подумал о написании метода в Admin
классе, который получает CustomerOrder
s между двумя датами, и застрял при извлечении информации CustomerOrder
.
Я полагаю, что каждое название продукта должно быть первичным ключом таблицы.Итак, я могу создать карту с названием продукта в качестве ключа.Тогда каким должно быть значение?По мере прохождения каждого CustomerOrder
из них я должен увеличивать количество каждого проданного продукта, и общая полученная сумма должна обновляться.
Общая сумма order.cartitem.qty*order.cartitem.product.price order.tax order.shipping
… и я думаю, что это немного усложняет цикл…Может кто-нибудь посоветовать, как я могу это сделать?
public void allSalesData(Date start,Date end){
List<CustomerOrder> orders = CustomerOrder.find("select o from CustomerOrder o where o.orderDate between :startdate and :enddate").bind("startdate",start).bind("enddate",end).fetch();
//now how to extract? should I use a map ?
}
import play.db.jpa.Model;
class CustomerOrder extends Model{
...
public Customer customer;
public Date orderDate;
public Set<OrderItem> orderItems;
public BigDecimal tax;
public BigDecimal shipping;
...
}
class OrderItem extends Model {
public Product product;
public int quantity;
}
class Product extends Model{
public String name;
public BigDecimal price;
}
Комментарии:
1. Что именно вы пытаетесь отобразить? Вам нужно перечислить каждый элемент с количеством, ценой и итогом?
2. Мне нужно перечислить каждый продукт, количество проданных и общую сумму денег, заработанных на нем
3. проверьте обновленный ответ с налогом и доставкой
4. @emt14 спасибо за ответ .. но я осознал недостаток в своем мышлении.. Налог и доставка рассчитываются для каждого экземпляра CustomerOrder , а не для каждого продукта.. Поэтому я не думаю, что правильно добавлять их к общей цене экземпляров продукта
Ответ №1:
Здесь вам нужно объединить все продукты из вашего списка заказов клиентов и соответствующие количества.
Вы должны перебирать свои CustomerOrders и элементы заказа, размещать каждый продукт на карте и увеличивать соответствующее количество.
Вы могли бы сделать что-то вроде:
public void allSalesData(Date start,Date end){
List orders = CustomerOrder.find("select o from CustomerOrder o where o.orderDate between :startdate and :enddate").bind("startdate",start).bind("enddate",end).fetch();
Map prodMap = new HashMap();
Map priceMap = new HashMap();
Integer quantity = null;
Long price = null;
for(CustomerOrder cusOrder: orders) {
for(OrderItem item: cusOrder.orderItems){
quantity = prodMap.get(item.product);
prodMap.put(item.product, quantity item.quantity);
price = priceMap.get(item.product);
priceMap.put(item.product, quantity * item.price cusOrder.tax cusOrder.shipping price);
}
}
render(prodMap, priceMap);
}
Затем выполните итерацию в вашем шаблоне по карте и покажите название продукта, цену, количество и количество * цена.