我想创建一个报告,您选择product和storeName并返回每个日期的所有销售额(在一个范围内)。
帮助我处理其他报告的db视图如下所示: product - store_name - date
到目前为止,我的方法是从列表中的db返回所有记录,然后执行以下操作:
public void salesReport(String product, String store, String date){
List<RecordSalesInfo> salesResults = salesDao.getSales();
Map<String, Integer> mapper = new HashMap();
//calculation
for (RecordSalesInfo record : salesResults) {
StringBuilder key = new StringBuilder();
key.append(record.getProduct()).append(":")
.append(record.getStoreName()).append(":")
.append(record.getWageredDate()).append(":");
if (mapper.containsKey(key.toString())) {
Integer get = mapper.get(key.toString());
get++;
mapper.put(key.toString(), get);
} else {
mapper.put(key.toString(), 1);
}
}
for (String key : mapper.keySet()) {
if(key.toString.equals("Pen:London:13June2016"){
System.out.println("sales:" + mapper.get(key.toString);
}
}
}
salesDao中的查询(另存为“RecordSalesInfo”)是:
SELECT
rs.product AS product,
rs.store_name AS store,
rs.date AS date,
rs.product_id AS productId
FROM sales rs
ORDER BY rs.product,rs.store_name,rs.date
我没有查询“Count(blabla)where product ='a'和store_name ='b'和date ='c'”的原因是因为用户经常使用jSlider更改输入(输入=产品) ,存储,日期),这意味着太多的查询。所以我认为最好从db获取所有结果,然后显示用户需要的内容。
A)有更好的方法吗?
B)在下一阶段,用户只会输入产品和商店,我必须按日期返回销售清单,如下所示:
笔 - 伦敦(手动输入) 2016年6月12日100 2016年6月15日30 19July2016 67
到目前为止我所做的事情,我不能只获得销售的日期,而且我必须从hashMap“搜索”所有日期(特定范围)。我认为作为一种解决方案,将“product:storeName”的密钥更改为现有地图,并将另一个地图作为一个值,其中String将是日期,而Integer是销售额。
再次有更好的方法吗?
答案 0 :(得分:2)
我要做的是我不会保留/保留地图,而是在查询根据JSlider等进行更改时获取结果。
您可以做一件事,当发送查询直到其结果可用时,您可以禁用Jslider并显示一个微调器,通知用户正在进行处理。
一旦结果可用,启用滑块并隐藏微调器。
让地图中的所有数据看起来都不是一个好主意。它将是一种断开连接的数据状态。