集合说明:
allUsersList 为昨日用户表里所有用户id集合-(前天所有用户id+新增用户id)
yesterdayIdList 为昨天的昨天(前天)所有用户id集合
map 为前日活跃用户的id(key)及活跃天数days(value)
visitUserList 为昨日活跃过的用户id集合
规则:
先需要将昨日用户活跃情况保存到表
前日活跃-昨日活跃 则类型为1 活跃天数在昨日基础上加1
昨日未活跃 则类型为0 活跃天数为0
昨日新增用户 则类型为1 活跃天数为1
List<DataUserActiveDetail> batchRecords = new ArrayList<>(10);
for (Long userId : allUsersList) {
DataUserActiveDetail detail = new DataUserActiveDetail();
detail.setUserId(userId);
detail.setCreateDate(LocalDateTime.now());
detail.setValueDate(DateUtils.getBeforeNDay(1));
// 旧用户 昨天有用户id
if(yesterdayIdList.contains(userId)){
// 前天访问过
if(map.containsKey(userId)){
if(visitUserList.contains(userId)){
// 昨天访问过
detail.setType(1);
detail.setDays(map.get(userId) + 1);
} else {
// 昨天没访问过
detail.setType(0);
detail.setDays(0);
}
} else {
// 前天没有访问过,昨天访问过
if(visitUserList.contains(userId)){
// 昨天访问过
detail.setType(1);
detail.setDays(1);
} else {
// 昨天没访问过
detail.setType(0);
detail.setDays(0);
}
}
} else {
// 新用户,肯定访问过
// 前天列表没有用户id
detail.setType(1);
detail.setDays(1);
}
batchRecords.add(detail);
}