新增用户每日活跃记录功能-捕获异常
This commit is contained in:
parent
b84935509d
commit
24a5a185e9
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user