Java 从CustomerOrder提取数据以显示为总销售数据

Java 从CustomerOrder提取数据以显示为总销售数据,java,playframework,Java,Playframework,在我的Play Framework应用程序的管理页面中,我需要列出两个日期之间售出的产品,并显示产品名称,quantitysalled and totalprice。我已经在CustomerOrder模型中对该信息进行了建模。但我仍然对应该使用哪种数据结构来保存上述数据存在一些疑问 管理员应该能够以如下表格格式列出销售数据 我想在Admin类中编写一个方法,用于获取两个日期之间的CustomerOrders,但一直无法从CustomerOrder中提取信息。 我猜每个产品名称都应该是表的主键。

在我的Play Framework应用程序的管理页面中,我需要列出两个日期之间售出的
产品
,并显示
产品名称
quantity
salled and total
price
。我已经在
CustomerOrder
模型中对该信息进行了建模。但我仍然对应该使用哪种数据结构来保存上述数据存在一些疑问

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


我想在
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;
}
public void allSalesData(日期开始、日期结束){
List orders=CustomerOrder.find(“从CustomerOrder o中选择o,其中o.orderDate介于:startdate和:enddate之间”).bind(“startdate”,start).bind(“enddate”,end).fetch();
//现在如何提取?我应该使用地图吗?
}
导入play.db.jpa.Model;
类CustomerOrder扩展了模型{
...
公众客户;
公开日期订购日期;
公共集合订购项目;
公共税收;
公共航运;
...
}
类OrderItem扩展模型{
公共产品;
公共整数;
}
类产品扩展模型{
公共字符串名称;
公共价格;
}

这里您需要的是汇总客户订单列表中的所有产品以及相应的数量。
您应该遍历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);
}


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

这里需要的是汇总客户订单列表中的所有产品和相应数量。
您应该遍历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);
}


然后在地图中迭代模板,并显示产品名称、价格、数量和数量*价格。

您想准确显示什么?你需要列出每件商品的数量、价格和总额吗?我需要列出每件产品、售出数量和从itcheck获得的总收入,并在更新后的答案中注明税费和shipping@emt14谢谢你的回复。但是我意识到我的想法有一个缺陷。税和运费是针对每个客户订单计算的,不是针对每种产品。所以我认为将它们添加到产品实例的总价中是不正确的。您想要显示的确切内容是什么?你需要列出每件商品的数量、价格和总额吗?我需要列出每件产品、售出数量和从itcheck获得的总收入,并在更新后的答案中注明税费和shipping@emt14谢谢你的回复。但是我意识到我的想法有一个缺陷。税和运费是针对每个客户订单计算的,不是针对每种产品。所以我认为将它们添加到产品实例的总价中是不对的