diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/user/active/impl/UserDailyActiveServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/user/active/impl/UserDailyActiveServiceImpl.java index a82dc8aa..73ca8bd8 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/user/active/impl/UserDailyActiveServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/user/active/impl/UserDailyActiveServiceImpl.java @@ -10,6 +10,7 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.concurrent.TimeUnit; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -20,6 +21,7 @@ import org.springframework.stereotype.Service; /** * 用户每日活跃日志服务. */ +@Slf4j @Service @RequiredArgsConstructor public class UserDailyActiveServiceImpl implements UserDailyActiveService { @@ -29,38 +31,42 @@ public class UserDailyActiveServiceImpl implements UserDailyActiveService { @Override public void record(Long userId, String sysOrigin, String registerCountryCode, String language) { - ZonedDateTime now = ZonedDateTimeUtils.nowAsiaShanghai(); - String activeDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); - Timestamp nowTs = Timestamp.from(now.toInstant()); + try { + ZonedDateTime now = ZonedDateTimeUtils.nowAsiaShanghai(); + String activeDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Timestamp nowTs = Timestamp.from(now.toInstant()); - String redisKey = UserDailyActiveKey.ACTIVE_FLAG.getKey(userId, activeDate); - boolean isFirst = Boolean.TRUE.equals( - stringRedisTemplate.opsForValue().setIfAbsent(redisKey, "1", 2, TimeUnit.DAYS) - ); - - if (isFirst) { - UserDailyActiveLog log = new UserDailyActiveLog() - .setId(IdWorkerUtils.getId()) - .setUserId(userId) - .setActiveDate(activeDate) - .setSysOrigin(sysOrigin) - .setRegisterCountryCode(registerCountryCode) - .setLanguage(language) - .setActiveCount(1) - .setFirstActiveTime(nowTs) - .setLastActiveTime(nowTs) - .setCreateTime(nowTs) - .setUpdateTime(nowTs); - mongoTemplate.insert(log); - } else { - mongoTemplate.updateFirst( - Query.query(Criteria.where("userId").is(userId).and("activeDate").is(activeDate)), - new Update() - .inc("activeCount", 1) - .set("lastActiveTime", nowTs) - .set("updateTime", nowTs), - UserDailyActiveLog.class + String redisKey = UserDailyActiveKey.ACTIVE_FLAG.getKey(userId, activeDate); + boolean isFirst = Boolean.TRUE.equals( + stringRedisTemplate.opsForValue().setIfAbsent(redisKey, "1", 2, TimeUnit.DAYS) ); + + if (isFirst) { + UserDailyActiveLog log = new UserDailyActiveLog() + .setId(IdWorkerUtils.getId()) + .setUserId(userId) + .setActiveDate(activeDate) + .setSysOrigin(sysOrigin) + .setRegisterCountryCode(registerCountryCode) + .setLanguage(language) + .setActiveCount(1) + .setFirstActiveTime(nowTs) + .setLastActiveTime(nowTs) + .setCreateTime(nowTs) + .setUpdateTime(nowTs); + mongoTemplate.insert(log); + } else { + mongoTemplate.updateFirst( + Query.query(Criteria.where("userId").is(userId).and("activeDate").is(activeDate)), + new Update() + .inc("activeCount", 1) + .set("lastActiveTime", nowTs) + .set("updateTime", nowTs), + UserDailyActiveLog.class + ); + } + } catch (Exception e) { + log.warn("[用户每日活跃] 记录失败 userId={}", userId, e); } }