Извлечение данных из CustomerOrder для отображения в виде общих данных о продажах - PullRequest
1 голос
/ 25 октября 2011

На странице администрирования моего приложения play framework мне нужно перечислить Product продано между двумя датами и отобразить 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 Ответ

1 голос
/ 25 октября 2011

Здесь вам нужно объединить все продукты из вашего списка заказов клиентов и соответствующих количеств.
Вам нужно пройтись по вашим заказам клиентов и заказать товары, разместить каждый продукт на карте и увеличить соответствующее количество.

Вы можете сделать что-то вроде:



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

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

...