Java实时报表统计查询慢_报表统计——java实现查询某年某月每天数据,没数据补0...

标签:

一般图表绘制例如echarts等,返回数据格式都大同小异。重点是利用sql或者java实现数据格式的转型,接下来是关键部分:

1.前提1:提供的工具方法——获取某月有多少天

//通过年份和月份确定该月的最后一天

public static int getMaxDay(int year,int month ){

Calendar time=Calendar.getInstance();

time.clear();

time.set(Calendar.YEAR,year); //year 为 int

time.set(Calendar.MONTH,month-1); //month 为int

return time.getActualMaximum(Calendar.DAY_OF_MONTH);

}

2.mapper层sql语句书写

SELECT

sum(t.ordercount) ordercount,

t.[month] month ,

t.[day] day

from

order t

where 1=1

and t.year=convert(int, #{year})

and t.month=convert(int, #{month})

GROUP BY

t.[month],t.[day]

HAVING

1=1

ORDER BY t.[day] asc

3.service层实现,调用sql返回结果,及对其返回结果进行格式转换(重要)

Map resultMap = new HashMap();

//获取到数据库搜索的年份对应某月份的31天订单量

List orderCountList = orderCountManager.getAllOrderCountByYearAndMonth(pd);

//确定某个月的天数(如果日期截止只要到有数据的最大日期,那么可以修改sql语句排列方式,例如,日期从大到小排列,那么就是位置在0上的数据是最大天数,很简单实现,此处不列出来了)

int days = getMaxDay(Integer.parseInt(pd.get("year").toString()),Integer.parseInt(pd.get("month").toString()));

//定义vip与常规客户数组

int[] countVIP = new int[days];

//将获取到不同年份不同月份不同日期对应不同的订单量放在数组中

if (orderCountList.size()>0 && orderCountList!=null) {

for (int i=0;i

OrderCount oc = orderCountList.get(i);

//获取对应天

if(oc!=null){

countVIP[oc.getDay()-1] = oc.getOrderCount();

}

}

}

resultMap.put("orderStatistics", countVIP);

标签:

来源: https://www.cnblogs.com/yyk1226/p/10017661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值