跨年烟花活动-结算不清除榜单数据
This commit is contained in:
@@ -34,7 +34,6 @@ import com.accompany.core.service.SysConfService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.cxf.Bus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RMap;
|
||||
@@ -101,6 +100,8 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
|
||||
private Queue<NewYearFireworkEventLog> logQueue;
|
||||
private RMap<String, Integer> dayOutputRecord;
|
||||
|
||||
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
public NewYearFireworkConfigVo buildConfigVo(Long uid){
|
||||
NewYearFireworkActConfigDTO config = getConfig();
|
||||
|
||||
@@ -373,7 +374,9 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
|
||||
}
|
||||
|
||||
public NewYearFireworkRankVo getRank(Long uid, Byte type) {
|
||||
String rankKey = getRankKeyByType(type);
|
||||
NewYearFireworkActConfigDTO config = getConfig();
|
||||
|
||||
String rankKey = getRankKeyByType(type, config.getEndTime());
|
||||
if (StringUtils.isEmpty(rankKey)){
|
||||
throw new ServiceException(BusiStatus.PARAMERROR);
|
||||
}
|
||||
@@ -439,14 +442,16 @@ public class ActNewYearFireworkService implements InitializingBean, ApplicationL
|
||||
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){
|
||||
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:
|
||||
return RedisKey.new_year_firework_send_rank.getKey();
|
||||
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:
|
||||
return RedisKey.new_year_firework_recv_rank.getKey();
|
||||
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();
|
||||
String yesterDayStr = now.minusDays(1L).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
|
||||
if (config.inActTimeRange(now)){
|
||||
sendDayRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_day_rank.getKey(yesterDayStr), needClear);
|
||||
sendDayRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_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));
|
||||
dayOutputRecord.clear();
|
||||
} else if (null != config.getEndTime() && Duration.between(now, config.getEndTime()).toDays() <= 1L){
|
||||
sendDayRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_day_rank.getKey(yesterDayStr), needClear);
|
||||
sendDayRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_day_rank.getKey(yesterDayStr), needClear);
|
||||
sendRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_rank.getKey(), needClear);
|
||||
sendRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_rank.getKey(), needClear);
|
||||
} else if (Duration.between(now, config.getEndTime()).toDays() == 0L){
|
||||
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));
|
||||
sendRankReward(config, Constant.NewYearFireworkDrawType.VOW, RedisKey.new_year_firework_send_rank.getKey());
|
||||
sendRankReward(config, Constant.NewYearFireworkDrawType.WISH, RedisKey.new_year_firework_recv_rank.getKey());
|
||||
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);
|
||||
Collection<Long> uids = rank.valueRangeReversed(0, 9);
|
||||
if (needClear){
|
||||
rank.clear();
|
||||
}
|
||||
|
||||
List<List<NewYearFireworkRankRewardDTO>> rankRewards = config.getRankRewards().get(type);
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
Collection<Long> uids = dayRank.valueRangeReversed(0, 9);
|
||||
if (needClear){
|
||||
dayRank.clear();
|
||||
}
|
||||
|
||||
List<NewYearFireworkRankRewardDTO> dayRankRewards = config.getDayRankRewards().get(type);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -83,10 +83,10 @@ public class ActNewYearFireworkController extends BaseController {
|
||||
|
||||
@GetMapping("/settlement")
|
||||
@Profile({"native","dev"})
|
||||
public BusiResult<Void> settlement(String date, Boolean needClear){
|
||||
public BusiResult<Void> settlement(String date){
|
||||
LocalDate day = LocalDate.parse(date);
|
||||
LocalDateTime dateTime = LocalDateTime.of(day, LocalTime.MIDNIGHT);
|
||||
service.settlement(dateTime, null == needClear? Boolean.TRUE: needClear);
|
||||
service.settlement(dateTime);
|
||||
return new BusiResult<>(BusiStatus.SUCCESS);
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,7 @@ public class ActNewYearFireworkTask {
|
||||
@Scheduled(cron = "0 0 0 * * ?")
|
||||
public void settlement(){
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
service.settlement(now, true);
|
||||
service.settlement(now);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user