在我的Play Framework应用程序的管理页面中,我需要列出两个日期之间售出的Product并显示Product namequantity售出和总计price。我已在CustomerOrder中对此信息进行了建模我仍然不确定应该使用哪种数据结构来保存上述数据。

管理员应该能够以如下表格格式列出销售数据



Product Name | quantity | total amount received
===================================================
flwr vase#12 |    13     |  1250
---------------------------------------------------
lampshade#3  |    11     |   110
-----------------------------------------


我想在Admin类中编写一个方法,该方法在两个日期之间获取CustomerOrder,并被困于从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;
}

最佳答案

您需要在这里汇总客户订单清单中的所有产品以及相应的数量。
您应该遍历CustomerOrders和Order Items,并将每个产品放置在地图中并增加相应的数量。

您可以执行以下操作:



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



然后遍历地图,在模板中显示产品名称,价格,数量和数量*价格。

10-08 02:11