活动发放奖励配置更改
This commit is contained in:
parent
4b71322e1e
commit
b3b2c3b90d
@ -5,12 +5,16 @@ import com.red.circle.component.redis.annotation.TaskCacheLock;
|
|||||||
import com.red.circle.other.app.manager.activity.award.WeeklyRewardsSentManager;
|
import com.red.circle.other.app.manager.activity.award.WeeklyRewardsSentManager;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.sys.ActivityConfig;
|
import com.red.circle.other.infra.database.mongo.entity.sys.ActivityConfig;
|
||||||
import com.red.circle.other.infra.database.mongo.service.sys.ActivityConfigService;
|
import com.red.circle.other.infra.database.mongo.service.sys.ActivityConfigService;
|
||||||
|
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rankingActivity 活动奖励发放
|
* rankingActivity 活动奖励发放
|
||||||
@ -24,29 +28,115 @@ public class RankingActivityRewardTask {
|
|||||||
private final WeeklyRewardsSentManager weeklyRewardsSentManager;
|
private final WeeklyRewardsSentManager weeklyRewardsSentManager;
|
||||||
private final ActivityConfigService activityConfigService;
|
private final ActivityConfigService activityConfigService;
|
||||||
|
|
||||||
|
@Value("${activity.ranking.reward.ids:}")
|
||||||
|
private String configuredActivityIds;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每周一 0点0分执行.
|
* 每周一 0点0分执行.
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 0 ? * MON", zone = "Asia/Riyadh")
|
@Scheduled(cron = "0 */1 * * * ?", zone = "Asia/Riyadh")
|
||||||
@TaskCacheLock(key = "RANKING_ACTIVITY_REWARD_TASK", expireSecond = 86400)
|
@TaskCacheLock(key = "RANKING_ACTIVITY_REWARD_TASK", expireSecond = 86400)
|
||||||
public void sendRankingActivityReward() {
|
public void sendRankingActivityReward() {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
log.warn("========== rankingActivity 活动奖励发放定时任务开始 ==========");
|
log.warn("========== rankingActivity 活动奖励发放定时任务开始 ==========");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// 解析配置的活动ID列表
|
||||||
|
List<Long> activityIds = parseConfiguredActivityIds();
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(activityIds)) {
|
||||||
|
log.warn("未配置需要发放奖励的活动ID,跳过执行");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 查询上周结束的活动
|
log.info("配置的活动ID列表: {}", activityIds);
|
||||||
List<ActivityConfig> lastWeekActivities =
|
|
||||||
activityConfigService.listRecentlyEndedActivities("LIKEI", 10);
|
|
||||||
lastWeekActivities.forEach(activityConfig -> {
|
|
||||||
weeklyRewardsSentManager.sendLastRankingActivity(activityConfig.getTemplateId(), activityConfig.getActivityType());
|
|
||||||
});
|
|
||||||
|
|
||||||
log.warn("========== rankingActivity 活动奖励发放定时任务完成,耗时:{} ms ==========",
|
int successCount = 0;
|
||||||
System.currentTimeMillis() - startTime);
|
int skipCount = 0;
|
||||||
} catch (Exception e) {
|
int errorCount = 0;
|
||||||
log.error("========== rankingActivity 活动奖励发放定时任务异常 ==========", e);
|
|
||||||
}
|
// 遍历每个活动ID
|
||||||
|
for (Long activityId : activityIds) {
|
||||||
|
try {
|
||||||
|
// 查询活动配置
|
||||||
|
ActivityConfig activityConfig = activityConfigService.getById(activityId);
|
||||||
|
|
||||||
|
if (activityConfig == null) {
|
||||||
|
log.warn("活动不存在,跳过, activityId={}", activityId);
|
||||||
|
skipCount++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查活动是否上架
|
||||||
|
if (!isActivityOnline(activityConfig)) {
|
||||||
|
log.info("活动未上架,跳过, activityId={}, status={}",
|
||||||
|
activityId, activityConfig.getShowcase());
|
||||||
|
skipCount++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否已发放过奖励
|
||||||
|
if (isRewardAlreadySent(activityConfig)) {
|
||||||
|
log.info("活动已发放过奖励,跳过, activityId={}", activityId);
|
||||||
|
skipCount++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发放奖励
|
||||||
|
log.info("开始发放活动奖励, activityId={}, templateId={}, activityType={}",
|
||||||
|
activityId, activityConfig.getTemplateId(), activityConfig.getActivityType());
|
||||||
|
|
||||||
|
weeklyRewardsSentManager.sendLastRankingActivity(
|
||||||
|
activityConfig.getTemplateId(),
|
||||||
|
activityConfig.getActivityType()
|
||||||
|
);
|
||||||
|
|
||||||
|
successCount++;
|
||||||
|
log.info("活动奖励发放成功, activityId={}", activityId);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
errorCount++;
|
||||||
|
log.error("活动奖励发放失败, activityId={}", activityId, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.warn("========== rankingActivity 活动奖励发放定时任务完成,耗时:{} ms, 成功:{}, 跳过:{}, 失败:{} ==========",
|
||||||
|
System.currentTimeMillis() - startTime, successCount, skipCount, errorCount);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("========== rankingActivity 活动奖励发放定时任务异常 ==========", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
* 解析配置的活动ID列表
|
||||||
|
*/
|
||||||
|
private List<Long> parseConfiguredActivityIds() {
|
||||||
|
if (configuredActivityIds == null || configuredActivityIds.trim().isEmpty()) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Arrays.stream(configuredActivityIds.split(","))
|
||||||
|
.filter(id -> !id.isEmpty())
|
||||||
|
.map(String::trim)
|
||||||
|
.map(Long::valueOf)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查活动是否上架
|
||||||
|
*/
|
||||||
|
private boolean isActivityOnline(ActivityConfig activityConfig) {
|
||||||
|
return Objects.equals(activityConfig.getShowcase(), Boolean.TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否已发放过奖励
|
||||||
|
*
|
||||||
|
* @param activityConfig 活动配置
|
||||||
|
* @return true-已发放,false-未发放
|
||||||
|
*/
|
||||||
|
private boolean isRewardAlreadySent(ActivityConfig activityConfig) {
|
||||||
|
return activityConfig.getAwardStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user