記錄用戶登錄記錄

   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),進而更新用戶連續(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è)計一個更優(yōu)方案當(dāng)前存在的問題和預(yù)計后期維護成本;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容