日活跃统计(过滤、去重)
@Override
public List<UserActiveCountRespVo> userActiveCount() {
int day = 15;
Date date = new Date();
QueryWrapper<UserActive> wrapper = new QueryWrapper<>();
wrapper.lambda().gt(UserActive::getCreateTime, DateUtil.offsetDay(date, -day));
List<UserActive> userActiveList = userActiveMapper.selectList(wrapper);
List<UserActiveCountRespVo> list = new ArrayList<>();
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < day; i++) {
DateTime dateTime = DateUtil.offsetDay(date, -day + i + 1);
String format = simpleDate.format(dateTime);
DateTime beginOfDay = DateUtil.beginOfDay(dateTime);
DateTime endOfDay = DateUtil.endOfDay(dateTime);
List<UserActive> filterList = userActiveList.stream().filter(
c -> c.getCreateTime().after(beginOfDay) && c.getCreateTime().before(endOfDay)
).collect(Collectors.toList());
ArrayList<UserActive> collect = filterList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(UserActive::getUserId))),
ArrayList::new
)
);
UserActiveCountRespVo vo = new UserActiveCountRespVo();
vo.setData(format);
vo.setCount((long) collect.size());
list.add(vo);
}
return list;
}