跨年烟花活动-结算不清除榜单数据

This commit is contained in:
2022-12-27 20:40:14 +08:00
parent 9df11e0b7e
commit 17e74149e5
3 changed files with 25 additions and 24 deletions

View File

@@ -34,7 +34,6 @@ import com.accompany.core.service.SysConfService;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.Bus;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RMap; import org.redisson.api.RMap;
@@ -101,6 +100,8 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
private Queue<NewYearFireworkEventLog> logQueue; private Queue<NewYearFireworkEventLog> logQueue;
private RMap<String, Integer> dayOutputRecord; private RMap<String, Integer> dayOutputRecord;
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public NewYearFireworkConfigVo buildConfigVo(Long uid){ public NewYearFireworkConfigVo buildConfigVo(Long uid){
NewYearFireworkActConfigDTO config = getConfig(); NewYearFireworkActConfigDTO config = getConfig();
@@ -373,7 +374,9 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
} }
public NewYearFireworkRankVo getRank(Long uid, Byte type) { public NewYearFireworkRankVo getRank(Long uid, Byte type) {
String rankKey = getRankKeyByType(type); NewYearFireworkActConfigDTO config = getConfig();
String rankKey = getRankKeyByType(type, config.getEndTime());
if (StringUtils.isEmpty(rankKey)){ if (StringUtils.isEmpty(rankKey)){
throw new ServiceException(BusiStatus.PARAMERROR); throw new ServiceException(BusiStatus.PARAMERROR);
} }
@@ -439,14 +442,16 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
return rankVo; return rankVo;
} }
private String getRankKeyByType(Byte type) { private String getRankKeyByType(Byte type, LocalDateTime endTime) {
LocalDateTime now = LocalDateTime.now();
String dateStr = now.isAfter(endTime)? endTime.format(formatter): now.format(formatter);
switch (type){ switch (type){
case Constant.NewYearFireworkRankType.SEND_DAY_RANK: case Constant.NewYearFireworkRankType.SEND_DAY_RANK:
return RedisKey.new_year_firework_send_day_rank.getKey(DateTimeUtil.getTodayStr()); return RedisKey.new_year_firework_send_day_rank.getKey(dateStr);
case Constant.NewYearFireworkRankType.SEND_RANK: case Constant.NewYearFireworkRankType.SEND_RANK:
return RedisKey.new_year_firework_send_rank.getKey(); return RedisKey.new_year_firework_send_rank.getKey();
case Constant.NewYearFireworkRankType.RECV_DAY_RANK: case Constant.NewYearFireworkRankType.RECV_DAY_RANK:
return RedisKey.new_year_firework_recv_day_rank.getKey(DateTimeUtil.getTodayStr()); return RedisKey.new_year_firework_recv_day_rank.getKey(dateStr);
case Constant.NewYearFireworkRankType.RECV_RANK: case Constant.NewYearFireworkRankType.RECV_RANK:
return RedisKey.new_year_firework_recv_rank.getKey(); return RedisKey.new_year_firework_recv_rank.getKey();
default: default:
@@ -549,28 +554,25 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
} }
} }
public void settlement(LocalDateTime now, boolean needClear) { public void settlement(LocalDateTime now) {
NewYearFireworkActConfigDTO config = getConfig(); NewYearFireworkActConfigDTO config = getConfig();
String yesterDayStr = now.minusDays(1L).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN)); String yesterDayStr = now.minusDays(1L).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
if (config.inActTimeRange(now)){ if (config.inActTimeRange(now)){
sendDayRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_day_rank.getKey(yesterDayStr), needClear); sendDayRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_day_rank.getKey(yesterDayStr));
sendDayRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_day_rank.getKey(yesterDayStr), needClear); sendDayRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_day_rank.getKey(yesterDayStr));
dayOutputRecord.clear(); dayOutputRecord.clear();
} else if (null != config.getEndTime() && Duration.between(now, config.getEndTime()).toDays() <= 1L){ } else if (Duration.between(now, config.getEndTime()).toDays() == 0L){
sendDayRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_day_rank.getKey(yesterDayStr), needClear); sendDayRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_day_rank.getKey(yesterDayStr));
sendDayRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_day_rank.getKey(yesterDayStr), needClear); sendDayRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_day_rank.getKey(yesterDayStr));
sendRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_rank.getKey(), needClear); sendRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_rank.getKey());
sendRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_rank.getKey(), needClear); sendRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_rank.getKey());
dayOutputRecord.clear(); dayOutputRecord.clear();
} }
} }
private void sendRankReward(NewYearFireworkActConfigDTO config, byte type, String rankKey, boolean needClear) { private void sendRankReward(NewYearFireworkActConfigDTO config, byte type, String rankKey) {
RScoredSortedSet<Long> rank = redissonClient.getScoredSortedSet(rankKey); RScoredSortedSet<Long> rank = redissonClient.getScoredSortedSet(rankKey);
Collection<Long> uids = rank.valueRangeReversed(0, 9); Collection<Long> uids = rank.valueRangeReversed(0, 9);
if (needClear){
rank.clear();
}
List<List<NewYearFireworkRankRewardDTO>> rankRewards = config.getRankRewards().get(type); List<List<NewYearFireworkRankRewardDTO>> rankRewards = config.getRankRewards().get(type);
if (CollectionUtils.isEmpty(rankRewards) || CollectionUtils.isEmpty(uids)){ if (CollectionUtils.isEmpty(rankRewards) || CollectionUtils.isEmpty(uids)){
@@ -598,15 +600,13 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
} }
} }
rank.expire(3, TimeUnit.DAYS);
log.info("[新年烟花活动] 发送总榜奖励给 {}", uids); log.info("[新年烟花活动] 发送总榜奖励给 {}", uids);
} }
private void sendDayRankReward(NewYearFireworkActConfigDTO config, byte type, String rankKey, boolean needClear) { private void sendDayRankReward(NewYearFireworkActConfigDTO config, byte type, String rankKey) {
RScoredSortedSet<Long> dayRank = redissonClient.getScoredSortedSet(rankKey); RScoredSortedSet<Long> dayRank = redissonClient.getScoredSortedSet(rankKey);
Collection<Long> uids = dayRank.valueRangeReversed(0, 9); Collection<Long> uids = dayRank.valueRangeReversed(0, 9);
if (needClear){
dayRank.clear();
}
List<NewYearFireworkRankRewardDTO> dayRankRewards = config.getDayRankRewards().get(type); List<NewYearFireworkRankRewardDTO> dayRankRewards = config.getDayRankRewards().get(type);
if (CollectionUtils.isEmpty(dayRankRewards) || CollectionUtils.isEmpty(uids)){ if (CollectionUtils.isEmpty(dayRankRewards) || CollectionUtils.isEmpty(uids)){
@@ -628,6 +628,7 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
} }
} }
dayRank.expire(3, TimeUnit.DAYS);
log.info("[新年烟花活动] 发送日榜奖励给 {}", uids); log.info("[新年烟花活动] 发送日榜奖励给 {}", uids);
} }

View File

@@ -83,10 +83,10 @@ public class ActNewYearFireworkController extends BaseController {
@GetMapping("/settlement") @GetMapping("/settlement")
@Profile({"native","dev"}) @Profile({"native","dev"})
public BusiResult<Void> settlement(String date, Boolean needClear){ public BusiResult<Void> settlement(String date){
LocalDate day = LocalDate.parse(date); LocalDate day = LocalDate.parse(date);
LocalDateTime dateTime = LocalDateTime.of(day, LocalTime.MIDNIGHT); LocalDateTime dateTime = LocalDateTime.of(day, LocalTime.MIDNIGHT);
service.settlement(dateTime, null == needClear? Boolean.TRUE: needClear); service.settlement(dateTime);
return new BusiResult<>(BusiStatus.SUCCESS); return new BusiResult<>(BusiStatus.SUCCESS);
} }

View File

@@ -17,7 +17,7 @@ public class ActNewYearFireworkTask {
@Scheduled(cron = "0 0 0 * * ?") @Scheduled(cron = "0 0 0 * * ?")
public void settlement(){ public void settlement(){
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
service.settlement(now, true); service.settlement(now);
} }
} }