抽奖weekKey问题修复,去除weekKey条件 并修复了数据

This commit is contained in:
tianfeng 2025-11-09 17:17:05 +08:00
parent 05f2a9990e
commit 7a00994663
5 changed files with 25 additions and 37 deletions

View File

@ -20,6 +20,7 @@ import com.red.circle.other.infra.database.rds.service.activity.LotteryTicketRec
import com.red.circle.other.infra.database.rds.service.activity.LotteryTicketService; import com.red.circle.other.infra.database.rds.service.activity.LotteryTicketService;
import com.red.circle.other.infra.database.rds.service.activity.LotteryUserCountService; import com.red.circle.other.infra.database.rds.service.activity.LotteryUserCountService;
import com.red.circle.other.infra.database.rds.service.activity.LotteryUserProgressService; import com.red.circle.other.infra.database.rds.service.activity.LotteryUserProgressService;
import com.red.circle.other.infra.utils.ZonedDateTimeUtils;
import com.red.circle.other.inner.asserts.lottery.LotteryErrorCode; import com.red.circle.other.inner.asserts.lottery.LotteryErrorCode;
import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.TimestampUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -31,6 +32,7 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -142,19 +144,19 @@ public class LotteryDrawExe {
* 获取或创建用户进度. * 获取或创建用户进度.
*/ */
private LotteryUserProgress getOrCreateUserProgress(Long userId, Long activityId) { private LotteryUserProgress getOrCreateUserProgress(Long userId, Long activityId) {
String weekKey = getWeekKey(); // String weekKey = ZonedDateTimeUtils.getWeekKey();
LotteryUserProgress progress = lotteryUserProgressService.query() LotteryUserProgress progress = lotteryUserProgressService.query()
.eq(LotteryUserProgress::getUserId, userId) .eq(LotteryUserProgress::getUserId, userId)
.eq(LotteryUserProgress::getActivityId, activityId) .eq(LotteryUserProgress::getActivityId, activityId)
.eq(LotteryUserProgress::getWeekKey, weekKey) // .eq(LotteryUserProgress::getWeekKey, weekKey)
.getOne(); .getOne();
if (progress == null) { if (progress == null) {
progress = new LotteryUserProgress(); progress = new LotteryUserProgress();
progress.setUserId(userId); progress.setUserId(userId);
progress.setActivityId(activityId); progress.setActivityId(activityId);
progress.setWeekKey(weekKey); // progress.setWeekKey(weekKey);
progress.setTotalAmount(BigDecimal.ZERO); progress.setTotalAmount(BigDecimal.ZERO);
progress.setTotalDrawCount(0); progress.setTotalDrawCount(0);
progress.setBigPrizeCount(0); progress.setBigPrizeCount(0);
@ -530,16 +532,6 @@ public class LotteryDrawExe {
.execute(); .execute();
} }
/**
* 生成周标识.
*/
private String getWeekKey() {
LocalDate now = LocalDate.now();
int year = now.getYear();
int weekOfYear = now.get(WeekFields.of(Locale.getDefault()).weekOfYear());
return String.format("%dW%02d", year, weekOfYear);
}
/** /**
* 生成记录编号. * 生成记录编号.
*/ */

View File

@ -21,6 +21,7 @@ import com.red.circle.other.infra.database.rds.service.activity.LotteryTicketRec
import com.red.circle.other.infra.database.rds.service.activity.LotteryTicketService; import com.red.circle.other.infra.database.rds.service.activity.LotteryTicketService;
import com.red.circle.other.infra.database.rds.service.activity.LotteryUserCountService; import com.red.circle.other.infra.database.rds.service.activity.LotteryUserCountService;
import com.red.circle.other.infra.database.rds.service.activity.LotteryUserProgressService; import com.red.circle.other.infra.database.rds.service.activity.LotteryUserProgressService;
import com.red.circle.other.infra.utils.ZonedDateTimeUtils;
import com.red.circle.other.inner.asserts.lottery.LotteryErrorCode; import com.red.circle.other.inner.asserts.lottery.LotteryErrorCode;
import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.TimestampUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -181,17 +182,17 @@ public class LotteryMultiDrawExe {
} }
private LotteryUserProgress getOrCreateUserProgress(Long userId, Long activityId) { private LotteryUserProgress getOrCreateUserProgress(Long userId, Long activityId) {
String weekKey = getWeekKey(); // String weekKey = ZonedDateTimeUtils.getWeekKey();
LotteryUserProgress progress = lotteryUserProgressService.query() LotteryUserProgress progress = lotteryUserProgressService.query()
.eq(LotteryUserProgress::getUserId, userId) .eq(LotteryUserProgress::getUserId, userId)
.eq(LotteryUserProgress::getActivityId, activityId) .eq(LotteryUserProgress::getActivityId, activityId)
.eq(LotteryUserProgress::getWeekKey, weekKey) // .eq(LotteryUserProgress::getWeekKey, weekKey)
.getOne(); .getOne();
if (progress == null) { if (progress == null) {
progress = new LotteryUserProgress(); progress = new LotteryUserProgress();
progress.setUserId(userId); progress.setUserId(userId);
progress.setActivityId(activityId); progress.setActivityId(activityId);
progress.setWeekKey(weekKey); // progress.setWeekKey(weekKey);
progress.setTotalAmount(BigDecimal.ZERO); progress.setTotalAmount(BigDecimal.ZERO);
progress.setTotalDrawCount(0); progress.setTotalDrawCount(0);
progress.setBigPrizeCount(0); progress.setBigPrizeCount(0);
@ -481,13 +482,6 @@ public class LotteryMultiDrawExe {
.execute(); .execute();
} }
private String getWeekKey() {
LocalDate now = LocalDate.now();
int year = now.getYear();
int weekOfYear = now.get(WeekFields.of(Locale.getDefault()).weekOfYear());
return String.format("%dW%02d", year, weekOfYear);
}
private LotteryDrawResultCO convertToResultCO(LotteryRecord record, LotteryPrize prize) { private LotteryDrawResultCO convertToResultCO(LotteryRecord record, LotteryPrize prize) {
LotteryDrawResultCO result = new LotteryDrawResultCO(); LotteryDrawResultCO result = new LotteryDrawResultCO();
result.setRecordNo(record.getRecordNo()); result.setRecordNo(record.getRecordNo());

View File

@ -30,11 +30,11 @@ public class LotteryWithdrawAmountQryExe {
public LotteryWithdrawAmountCO execute(Long userId, Long activityId) { public LotteryWithdrawAmountCO execute(Long userId, Long activityId) {
// 1. 获取用户本周累计金额 // 1. 获取用户本周累计金额
String weekKey = getCurrentWeekKey(); // String weekKey = getCurrentWeekKey();
LotteryUserProgress progress = lotteryUserProgressService.query() LotteryUserProgress progress = lotteryUserProgressService.query()
.eq(LotteryUserProgress::getUserId, userId) .eq(LotteryUserProgress::getUserId, userId)
.eq(LotteryUserProgress::getActivityId, activityId) .eq(LotteryUserProgress::getActivityId, activityId)
.eq(LotteryUserProgress::getWeekKey, weekKey) // .eq(LotteryUserProgress::getWeekKey, weekKey)
.getOne(); .getOne();
BigDecimal totalAmount = progress != null && progress.getTotalAmount() != null BigDecimal totalAmount = progress != null && progress.getTotalAmount() != null

View File

@ -6,6 +6,7 @@ import com.red.circle.other.infra.database.rds.entity.activity.LotteryUserProgre
import com.red.circle.other.infra.database.rds.entity.activity.LotteryWithdraw; import com.red.circle.other.infra.database.rds.entity.activity.LotteryWithdraw;
import com.red.circle.other.infra.database.rds.service.activity.LotteryUserProgressService; import com.red.circle.other.infra.database.rds.service.activity.LotteryUserProgressService;
import com.red.circle.other.infra.database.rds.service.activity.LotteryWithdrawService; import com.red.circle.other.infra.database.rds.service.activity.LotteryWithdrawService;
import com.red.circle.other.infra.utils.ZonedDateTimeUtils;
import com.red.circle.other.inner.asserts.lottery.LotteryErrorCode; import com.red.circle.other.inner.asserts.lottery.LotteryErrorCode;
import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.TimestampUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -41,11 +42,11 @@ public class LotteryWithdrawApplyExe {
amount.compareTo(BigDecimal.valueOf(10)) >= 0); amount.compareTo(BigDecimal.valueOf(10)) >= 0);
// 1. 获取用户本周累计金额 // 1. 获取用户本周累计金额
String weekKey = getCurrentWeekKey(); // String weekKey = ZonedDateTimeUtils.getWeekKey();
LotteryUserProgress progress = lotteryUserProgressService.query() LotteryUserProgress progress = lotteryUserProgressService.query()
.eq(LotteryUserProgress::getUserId, userId) .eq(LotteryUserProgress::getUserId, userId)
.eq(LotteryUserProgress::getActivityId, activityId) .eq(LotteryUserProgress::getActivityId, activityId)
.eq(LotteryUserProgress::getWeekKey, weekKey) // .eq(LotteryUserProgress::getWeekKey, weekKey)
.getOne(); .getOne();
ResponseAssert.notNull(LotteryErrorCode.NO_WITHDRAWAL_AMOUNT, progress); ResponseAssert.notNull(LotteryErrorCode.NO_WITHDRAWAL_AMOUNT, progress);
@ -109,16 +110,6 @@ public class LotteryWithdrawApplyExe {
.reduce(BigDecimal.ZERO, BigDecimal::add); .reduce(BigDecimal.ZERO, BigDecimal::add);
} }
/**
* 获取当前周标识.
*/
private String getCurrentWeekKey() {
LocalDate now = LocalDate.now();
int year = now.getYear();
int weekOfYear = now.get(WeekFields.of(Locale.getDefault()).weekOfYear());
return String.format("%dW%02d", year, weekOfYear);
}
/** /**
* 生成提现单号. * 生成提现单号.
*/ */

View File

@ -12,6 +12,7 @@ import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -472,6 +473,16 @@ public final class ZonedDateTimeUtils {
return Timestamp.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); return Timestamp.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
} }
/**
* 生成周标识ISO 8601标准周一为一周的开始.
*/
public static String getWeekKey() {
LocalDate now = LocalDate.now();
int year = now.get(WeekFields.ISO.weekBasedYear()); // 使用ISO周年
int weekOfYear = now.get(WeekFields.ISO.weekOfWeekBasedYear()); // ISO周数
return String.format("%dW%02d", year, weekOfYear);
}
/** /**
* 转换zoneId * 转换zoneId
* *