关于java查询某个表本周和上周发生的数量,并根据天数分组(前端实现和后端实现)

最近公司项目有个需求,需要查询某个表本周和上周的量并且分组。我的解决思路是:根据当前时间找到起始时间 上周周一 00:00:00 以及 截止时间 本周周末 23:59:59,查出数据后再分组返回给前端。实体类时间数据类型是LocalDateTime,数据库是时间戳类型

上代码:

后端实现 

Map<String, List<Integer>> map = new HashMap<>();
//上周数据
int[] lastWeekAlarm = new int[7];
//本周数据
int[] theWeekAlarm = new int[7];
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter start = DateTimeFormatter.ofPattern("yyyy-MM-dd 00:00:00");
DateTimeFormatter end = DateTimeFormatter.ofPattern("yyyy-MM-dd 23:59:59");
String beginTime = now.minusWeeks(1).minusDays(now.getDayOfWeek().getValue()-1).format(start);
//上周末
String midTime = now.minusWeeks(1).plusDays(7- now.getDayOfWeek().getValue()).format(end);
String endTime = now.plusDays(7- now.getDayOfWeek().getValue()).format(end);
 getAlarmList(stationId, Timestamp.valueOf(beginTime), Timestamp.valueOf(endTime)).forEach(alarm -> {
    int index = alarm.getAlarmTime().getDayOfWeek().getValue() - 1;
     //比较如果大于0说明是本周数据 否则是上周的数据
    if(alarm.getAlarmTime().toString().compareTo(midTime) > 0){
        theWeekAlarm[index] += 1;
    }else {
        lastWeekAlarm[index] += 1;
    }
});
//int数组转换为Integer的list
map.put("lastWeekAlarm", Arrays.stream(lastWeekAlarm).boxed().collect(Collectors.toList()));
map.put("theWeekAlarm", Arrays.stream(theWeekAlarm).boxed().collect(Collectors.toList()));
return map;

 前端实现

const date = new dayjs();
//获取当前时间的星期数
const week = date.day();
//上周数据数组
let thisWeek = [0,0,0,0,0,0,0];
//本周数据数组
let lastWeek = [0,0,0,0,0,0,0];
//上周一
const start = date.subtract(6 + week, 'day').format('YYYY-MM-DD 00:00:00.0');
//上周末
const mid = date.subtract(week, 'day').format('YYYY-MM-DD 23:59:59.999');
//本周末
const end = date.add(7 - week, 'day').format('YYYY-MM-DD 23:59:59.999');
this.alarmList.forEach(item => {
   //判断是否是在上周开始日期到本周结束日期之间
  if(new Date(item.alarmTime) > new Date(start) && new Date(item.alarmTime) < new Date(end)){
    let index = new dayjs(item.alarmTime).day() - 1;
    //时间大于上周末说明是本周数据
    if(new Date(item.alarmTime) > new Date(mid)){
      thisWeek[index] += 1;
    }else {
      lastWeek[index] += 1;
    }
  }
})
this.lineChartData['theWeekAlarm'] = thisWeek;
this.lineChartData['lastWeekAlarm'] = lastWeek;

this.alarmList是调用后端接口查询出来的结果

我使用的是vue,lineChartData对象得提前声明好对应的数组属性,例如theWeekAlarm,不然赋值的时候无效

以上就是我的思路,大家有什么更好的思路可以评论区说明 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值