Извлечение данных из CustomerOrder для отображения в виде общих данных о продажах

#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);
}

  

Затем выполните итерацию в вашем шаблоне по карте и покажите название продукта, цену, количество и количество * цена.