开斋节排行榜活动累计处理
This commit is contained in:
parent
d3bf87c5fc
commit
840282cb7e
@ -42,8 +42,11 @@ import com.red.circle.other.inner.enums.material.GiftTabEnum;
|
|||||||
import com.red.circle.other.inner.model.dto.sys.SysActivityCountType;
|
import com.red.circle.other.inner.model.dto.sys.SysActivityCountType;
|
||||||
import com.red.circle.tool.core.collection.CollectionUtils;
|
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||||
import com.red.circle.tool.core.date.TimestampUtils;
|
import com.red.circle.tool.core.date.TimestampUtils;
|
||||||
|
import com.red.circle.tool.core.date.DateFormatConstant;
|
||||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||||
import com.red.circle.tool.core.regex.RegexConstant;
|
import com.red.circle.tool.core.regex.RegexConstant;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -415,39 +418,39 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 固定周期活动类型集合(使用活动自身的 startTime-endTime 作为周期)
|
||||||
|
*/
|
||||||
|
private static final Set<RankingActivityType> FIXED_CYCLE_ACTIVITY_TYPES = Set.of(
|
||||||
|
RankingActivityType.OPEN_RAMADAN
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 累计新排行榜数据
|
* 累计新排行榜数据
|
||||||
*/
|
*/
|
||||||
private void accumulateNewRankingData(GiftGiveRunningWater runningWater, BigDecimal giftRatio) {
|
private void accumulateNewRankingData(GiftGiveRunningWater runningWater, BigDecimal giftRatio) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// 先查询上架且进行中的活动
|
|
||||||
List<ActivityConfig> ongoingActivities = activityConfigService.listOngoingActivities(runningWater.getSysOrigin());
|
List<ActivityConfig> ongoingActivities = activityConfigService.listOngoingActivities(runningWater.getSysOrigin());
|
||||||
if (CollectionUtils.isEmpty(ongoingActivities)) {
|
if (CollectionUtils.isEmpty(ongoingActivities)) {
|
||||||
log.debug("没有进行中的活动,跳过排行榜累计");
|
log.debug("没有进行中的活动,跳过排行榜累计");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算实际金额
|
|
||||||
Long actualAmount = runningWater.getGiftValue().getActualAmount().longValue();
|
Long actualAmount = runningWater.getGiftValue().getActualAmount().longValue();
|
||||||
|
|
||||||
// 遍历活动,找到对应的type再累计对应活动类型的数据
|
|
||||||
for (ActivityConfig activity : ongoingActivities) {
|
for (ActivityConfig activity : ongoingActivities) {
|
||||||
String cycleKey = generateWeeklyCycleKey();
|
if (!matchActivityRule(runningWater, activity)) {
|
||||||
|
continue;
|
||||||
if (!matchActivityRule(runningWater, activity)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 将活动类型转换为RankingActivityType枚举
|
|
||||||
try {
|
|
||||||
RankingActivityType activityType = RankingActivityType.valueOf(activity.getActivityType());
|
|
||||||
Integer cycleType = RankingCycleType.WEEKLY.getCode();
|
|
||||||
|
|
||||||
getDataUpdateCmd(runningWater, cycleKey, actualAmount, activityType, cycleType);
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
log.warn("未识别的活动类型: {}, activityId={}", activity.getActivityType(), activity.getId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RankingActivityType activityType = RankingActivityType.getByConstantName(activity.getActivityType());
|
||||||
|
if (activityType == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmutablePair<Integer, String> cycleInfo = resolveCycleInfo(activityType, activity);
|
||||||
|
getDataUpdateCmd(runningWater, cycleInfo.getRight(), actualAmount, activityType, cycleInfo.getLeft());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -455,6 +458,21 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析活动周期类型和 cycleKey.
|
||||||
|
* 固定周期活动使用 startTime-endTime,其余默认周榜.
|
||||||
|
*/
|
||||||
|
private ImmutablePair<Integer, String> resolveCycleInfo(RankingActivityType activityType, ActivityConfig activity) {
|
||||||
|
if (FIXED_CYCLE_ACTIVITY_TYPES.contains(activityType)) {
|
||||||
|
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateFormatConstant.yyyyMMdd)
|
||||||
|
.withZone(ZoneId.of("Asia/Riyadh"));
|
||||||
|
String start = fmt.format(activity.getStartTime().toInstant());
|
||||||
|
String end = fmt.format(activity.getEndTime().toInstant());
|
||||||
|
return ImmutablePair.of(RankingCycleType.SEASON.getCode(), start + "-" + end);
|
||||||
|
}
|
||||||
|
return ImmutablePair.of(RankingCycleType.WEEKLY.getCode(), generateWeeklyCycleKey());
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean matchActivityRule(GiftGiveRunningWater runningWater, ActivityConfig activity) {
|
private static boolean matchActivityRule(GiftGiveRunningWater runningWater, ActivityConfig activity) {
|
||||||
RankingActivityType activityType = RankingActivityType.getByConstantName(activity.getActivityType());
|
RankingActivityType activityType = RankingActivityType.getByConstantName(activity.getActivityType());
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user