跨年烟花活动-结算不清除榜单数据
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user