public void saveActiveUsersInPlatform(Long uid, String os, String version, String ip) {
if(uid == null || uid == 0)return;
UsersDTO usersDTO = usersManager.getUser(uid);
if (usersDTO == null) {
return;
}
//在線記錄 user_online_record,
//通過用戶在線狀態(tài)贸营,進(jìn)而更新用戶連續(xù)每天在線情況
Date date = new Date();
String today = DateFormatUtils.YYYY_MM_DD.date2Str(date);
//昨天
Date day = DateTimeUtils.addDay(date, -1);
String yesterday = DateFormatUtils.YYYY_MM_DD.date2Str(day);
Date seven = DateTimeUtils.addDay(date, -7);
String sevenDay = DateFormatUtils.YYYY_MM_DD.date2Str(seven);
String todayCacheKey = CacheKey.getCacheKey(CacheKey.USER_DAY_ONLINE_RECORD, today);
String uidStr = uid.toString();
//今天登錄記錄
String onlineFlag = redisManager.hget(todayCacheKey, uidStr);
//記錄用戶在線記錄
redisManager.hset(todayCacheKey, uidStr, "1");
//7天前登錄記錄
String sevenDayLogin = redisManager.hget(CacheKey.getCacheKey(CacheKey.USER_DAY_ONLINE_RECORD, sevenDay), uidStr);
//昨天前登錄記錄
String yesterdayLogin = redisManager.hget(CacheKey.getCacheKey(CacheKey.USER_DAY_ONLINE_RECORD, yesterday), uidStr);
if (StringUtils.isNotEmpty(onlineFlag)) {
NewUserListenCountDto countDto = listenCountDao.selectByUid(uid);
if (countDto != null) {
if(org.apache.commons.lang.StringUtils.isEmpty(yesterdayLogin)) {
//更新用戶為非連續(xù)登錄
listenCountDao.updateContinueFlagByUid(uid);
} else {
//在線天數(shù)加1
listenCountDao.updateOnLineDayByUid(uid);
}
}
} else{
//今天沒有在線記錄
UserOnlineRecordDto recordDto = new UserOnlineRecordDto();
recordDto.setUid(uid);
recordDto.setNewFlag(1);
//7天前登錄過 表示老用戶
if(StringUtils.isNotEmpty(sevenDayLogin)){
recordDto.setNewFlag(2);
}
recordDto.setCreateTime(date);
recordDto.setUpdateTime(date);
recordDto.setOs(os);
recordDto.setIp(ip);
recordDto.setVersion(version);
//記錄入庫
recordDao.save(recordDto);
}
redisManager.expire(todayCacheKey, 7, TimeUnit.DAYS);
}
1 畫出代碼邏輯流程圖
2 找出代碼邏輯缺陷和代碼缺陷捐腿;
3 設(shè)計(jì)一個(gè)更優(yōu)方案當(dāng)前存在的問題和預(yù)計(jì)后期維護(hù)成本清寇;