新增用户每日活跃记录功能-捕获异常
This commit is contained in:
parent
b84935509d
commit
24a5a185e9
@ -10,6 +10,7 @@ import java.time.ZonedDateTime;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||||
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
||||||
import org.springframework.data.mongodb.core.query.Query;
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
@ -20,6 +21,7 @@ import org.springframework.stereotype.Service;
|
|||||||
/**
|
/**
|
||||||
* 用户每日活跃日志服务.
|
* 用户每日活跃日志服务.
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class UserDailyActiveServiceImpl implements UserDailyActiveService {
|
public class UserDailyActiveServiceImpl implements UserDailyActiveService {
|
||||||
@ -29,38 +31,42 @@ public class UserDailyActiveServiceImpl implements UserDailyActiveService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void record(Long userId, String sysOrigin, String registerCountryCode, String language) {
|
public void record(Long userId, String sysOrigin, String registerCountryCode, String language) {
|
||||||
ZonedDateTime now = ZonedDateTimeUtils.nowAsiaShanghai();
|
try {
|
||||||
String activeDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
ZonedDateTime now = ZonedDateTimeUtils.nowAsiaShanghai();
|
||||||
Timestamp nowTs = Timestamp.from(now.toInstant());
|
String activeDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||||
|
Timestamp nowTs = Timestamp.from(now.toInstant());
|
||||||
|
|
||||||
String redisKey = UserDailyActiveKey.ACTIVE_FLAG.getKey(userId, activeDate);
|
String redisKey = UserDailyActiveKey.ACTIVE_FLAG.getKey(userId, activeDate);
|
||||||
boolean isFirst = Boolean.TRUE.equals(
|
boolean isFirst = Boolean.TRUE.equals(
|
||||||
stringRedisTemplate.opsForValue().setIfAbsent(redisKey, "1", 2, TimeUnit.DAYS)
|
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
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
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