统计年月周日数据时的补0操作

        在统计年,月,日等数据时,需要给前端返回连续月,连续日的数据,若有月份或者日无数据时,需要进行补0操作。

        我们的解决办法为,在后端进行数据处理,通过echartsUtil解决,组装好echarts数据直接返回给前端。

        echartsUtil:

public class EchartsUtils {
	private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    //月补0的方法
	public static Echarts createMonth(List<Map<String,Object>> list){
		try{
			String[] month = new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"};
            //实体类Echarts,各字段为vue的Echarts所需属性
			Echarts echarts = new Echarts();
            //x轴
			XAxis xAxis = new XAxis();
			xAxis.setType("category");
			xAxis.setData(Arrays.asList(month));
			Double[] data = new Double[12];
			for(int i = 0 ; i < 12 ; i++){
				data[i] = 0.0;
			}
			for(int i = 0 ; i < list.size() ; i++){
				Map<String,Object> row = list.get(i);
				Double total = Double.valueOf(String.valueOf(row.get("total")));
				Integer num = Integer.valueOf(String.valueOf(row.get("data")));
				BigDecimal bignum = new BigDecimal(total);   
				bignum.setScale(2, BigDecimal.ROUND_HALF_UP);
				total = bignum.doubleValue();
				data[num-1] = total;
			}
            //series属性
			List<Series> series = Lists.newArrayList();
			Series serie = new Series();
			serie.setType("bar");
			serie.setData(Arrays.asList(data));
			series.add(serie);
            //y轴属性
			YAxis yAxis = new YAxis();
			yAxis.setType("value");
			echarts.setyAxis(yAxis);
			echarts.setxAxis(xAxis);
			echarts.setSeries(series);
			return echarts;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
}

        controller:

public ResultBean selectApplyCountByYear(@RequestParam Map<String, Object> params) {

        try {
            String startTimeStr = String.valueOf(params.get("startTime"));
            String endTimeStr = String.valueOf(params.get("endTime"));
            startTimeStr = startTimeStr.replaceAll("/", "-");
            endTimeStr = endTimeStr.replaceAll("/", "-");
            Date startTime = sf.parse(startTimeStr);
            Date endTime = sf.parse(endTimeStr);
            params.put("startTime", startTime);
            params.put("endTime", endTime);
            List<Map<String, Object>> result = Lists.newArrayList();
            result = visitorAnalysisService.selectApplyCountByYear(params);
            System.out.println(EchartsUtils.createMonth(result));
            return ResultBean.success(EchartsUtils.createMonth(result));
        } catch (Exception e) {
            log.error("根据年查询访客申请数量", e);
            return ResultBean.error(e.getMessage());
        }
    }

         sql:

<select id="selectApplyCountByYear" resultType="map">
    SELECT
      MONTH ( start_time ) AS data,
      COUNT ( * ) AS 'total'
    FROM
      security_visitor v
    WHERE
      v.start_time BETWEEN #{startTime}
      AND #{endTime}
    GROUP BY
      MONTH ( start_time )
</select>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值