签到修复

This commit is contained in:
tianfeng 2026-02-05 10:48:42 +08:00
parent 0ae11c76e6
commit c2be8d1e43

View File

@ -45,12 +45,14 @@ public class CheckInExe {
private final PropsSendCommon propsSendCommon;
public Integer execute(CheckInRewardCmd cmd) {
boolean inrAzizi = false;
if (StringUtils.isBlank(cmd.getDailyKey())) {
cmd.setDailyKey(CheckInKeys.DAILY_CHECK_IN.getKey("DAILY_CHECK_IN_" + cmd.getReqUserId() + ZonedDateTimeAsiaRiyadhUtils.nowDateToInt()));
} else {
inrAzizi = true;
// 判断是否为Azizi签到根据dailyKey是否为空
boolean isAziziCheckIn = StringUtils.isNotBlank(cmd.getDailyKey());
// 设置每日签到key
if (isAziziCheckIn) {
cmd.setDailyKey(CheckInKeys.AZIZI_CHECK_IN.getKey("AZIZI_CHECK_IN" + cmd.getReqUserId() + ZonedDateTimeAsiaRiyadhUtils.nowDateToInt()));
} else {
cmd.setDailyKey(CheckInKeys.DAILY_CHECK_IN.getKey("DAILY_CHECK_IN_" + cmd.getReqUserId() + ZonedDateTimeAsiaRiyadhUtils.nowDateToInt()));
}
@ -69,14 +71,14 @@ public class CheckInExe {
checkInCacheService.checkDailyCheckIn(cmd.getReqUserId(), cmd.getDailyKey()));
ResponseAssert.isFalse(GameErrorCode.CHECKED_IN,
Objects.equals(checkInCacheService.getCheckInDays(buildKey(cmd)), 7));
Objects.equals(checkInCacheService.getCheckInDays(buildSevenCheckInKey(isAziziCheckIn, cmd.getReqUserId())), 7));
// 累计打卡天数
Long inDays;
if (!inrAzizi) {
inDays = checkInCacheService.incrCheckInDays(CheckInKeys.SEVEN_CHECK_IN.getKey(cmd.getReqUserId()), getExpiredTime(cmd));
} else {
inDays = checkInCacheService.incrCheckInDays(CheckInKeys.AZIZI_SEVEN_CHECK_IN.getKey(cmd.getReqUserId()), getExpiredTime(cmd));
String sevenCheckInKey = buildSevenCheckInKey(isAziziCheckIn, cmd.getReqUserId());
Long inDays = checkInCacheService.incrCheckInDays(sevenCheckInKey, getExpiredTime(isAziziCheckIn, cmd.getReqUserId()));
// Azizi签到需要检查最大天数限制
if (isAziziCheckIn) {
ResponseAssert.isTrue(GameErrorCode.MAX_CHECK_IN, inDays <= 7);
}
@ -115,24 +117,39 @@ public class CheckInExe {
);
return checkInCacheService.getCheckInDays(buildKey(cmd));
return checkInCacheService.getCheckInDays(sevenCheckInKey);
} finally {
redisService.unlock(lockKey);
}
}
private String buildKey(CheckInRewardCmd cmd) {
if (StringUtils.isBlank(cmd.getDailyKey())) {
return CheckInKeys.SEVEN_CHECK_IN.getKey(cmd.getReqUserId());
}
return CheckInKeys.AZIZI_SEVEN_CHECK_IN.getKey(cmd.getReqUserId());
}
/**
* 构建7日签到统计key
* @param isAziziCheckIn 是否为Azizi签到
* @param userId 用户ID
* @return 签到统计key
*/
private String buildSevenCheckInKey(boolean isAziziCheckIn, Long userId) {
return isAziziCheckIn
? CheckInKeys.AZIZI_SEVEN_CHECK_IN.getKey(userId)
: CheckInKeys.SEVEN_CHECK_IN.getKey(userId);
}
private long getExpiredTime(CheckInRewardCmd cmd) {
/**
* 获取过期时间
* @param isAziziCheckIn 是否为Azizi签到
* @param userId 用户ID
* @return 过期时间毫秒
*/
private long getExpiredTime(boolean isAziziCheckIn, Long userId) {
Duration duration = getDuration();
long expiredTime = duration.plusDays(1).toMillis();
if (Objects.equals(6, checkInCacheService.getCheckInDays(buildKey(cmd)))) {
String sevenCheckInKey = buildSevenCheckInKey(isAziziCheckIn, userId);
Integer checkInDays = checkInCacheService.getCheckInDays(sevenCheckInKey);
// 第6天及以上包括脏数据都在今天结束时过期准备开始新周期
if (checkInDays != null && checkInDays >= 6) {
expiredTime = duration.toMillis();
}
return expiredTime;