NOBLE_VIP冗余定时任务处理

This commit is contained in:
tianfeng 2025-12-26 10:31:33 +08:00
parent 3089fabac0
commit 530cd0567e

View File

@ -42,6 +42,7 @@ import com.red.circle.wallet.inner.model.cmd.GoldReceiptCmd;
import com.red.circle.wallet.inner.model.dto.WalletReceiptResDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@ -55,19 +56,14 @@ import static com.red.circle.common.business.core.enums.SysOriginPlatformEnum.LI
@Slf4j
@Component
@AllArgsConstructor
@ConditionalOnProperty(name = "scheduler.noble-daily-reward", havingValue = "true", matchIfMissing = true)
public class DailyTask {
private final PropsActivitySendCommon sendPropsManager;
private final RedisService redisService;
private final PropsActivityRuleConfigService propsActivityRuleConfigService;
private final RoomFanVotesActivityCountService roomFanVotesActivityCountService;
private final FamilyDailyTaskTriggerRecordService familyDailyTaskTriggerRecordService;
private final PropsStoreGateway propsStoreGateway;
private final RunningWaterUserPropsService runningWaterUserPropsService;
private final RunningWaterUserPropsDAO runningWaterUserPropsDAO;
private final PropsBackpackService propsBackpackService;
private final WalletGoldClient walletGoldClient;
private final PropsPurchasingCmdExe propsPurchasingCmdExe;
/**
* 每日处理数据.
@ -82,139 +78,6 @@ public class DailyTask {
log.info("exec daily_process_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 每日19:31处理 [印度孟加拉巴基斯坦] 区域粉丝人气票活动发奖.
*/
@Scheduled(cron = "0 31 19 1/1 * ?", zone = "Asia/Riyadh")
@TaskCacheLock(key = "ROOM_FAN_VOTES_ACTIVITY_IN_TASK", expireSecond = 10000)
public void roomFanVotesActivityInTask() {
long startTime = System.currentTimeMillis();
log.info("exec room_fan_votes_activity_in_task start");
log.warn("Start - 每日19:31处理 [印度,孟加拉,巴基斯坦] 区域粉丝人气票活动发奖");
// 重置倒计时
cacheCountDown(CacheKeysEnum.ROOM_FAN_VOTES_ACTIVITY_IN_COUNT_DOWN);
SysOriginPlatformEnum.getVoiceSystems().forEach(sysOrigin -> {
sendFanVotesReward(sysOrigin.name(), "IN");
sendFanVotesReward(sysOrigin.name(), "PK");
sendFanVotesReward(sysOrigin.name(), "BD");
});
log.warn("End - 每日19:31处理 [印度,孟加拉,巴基斯坦] 区域粉丝人气票活动发奖");
log.info("exec room_fan_votes_activity_in_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 每日18:30[印度孟加拉巴基斯坦] 重置倒计时重置榜单.
*/
@Scheduled(cron = "0 30 18 1/1 * ?", zone = "Asia/Riyadh")
@TaskCacheLock(key = "ROOM_FAN_VOTES_ACTIVITY_IN_START_TASK", expireSecond = 10000)
public void roomFanVotesActivityInStartTask() {
long startTime = System.currentTimeMillis();
log.info("exec room_fan_votes_activity_in_start_task start");
// 重置倒计时 60分钟
long countDown = Duration.between(ZonedDateTimeUtils.nowAsiaRiyadh(),
ZonedDateTimeUtils.nowAsiaRiyadh().plusHours(1)).toMillis() - 1000;
redisService.setString(CacheKeysEnum.ROOM_FAN_VOTES_ACTIVITY_IN_COUNT_DOWN.name(),
countDown, countDown, TimeUnit.MILLISECONDS);
List<String> codes = List.of("IN", "PK", "BD");
// 将昨天数据修改历史
roomFanVotesActivityCountService.upHistory(codes);
// 删除昨天之前的数据
roomFanVotesActivityCountService.del(codes);
log.info("exec room_fan_votes_activity_in_start_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 每日16:31处理 [印尼] 区域粉丝人气票活动发奖.
*/
@Scheduled(cron = "0 31 16 1/1 * ?", zone = "Asia/Riyadh")
@TaskCacheLock(key = "ROOM_FAN_VOTES_ACTIVITY_ID_TASK", expireSecond = 10000)
public void roomFanVotesActivityIdTask() {
long startTime = System.currentTimeMillis();
log.info("exec room_fan_votes_activity_id_task start");
log.warn("Start - 每日16:31处理 [印尼] 区域粉丝人气票活动发奖");
// 重置倒计时
cacheCountDown(CacheKeysEnum.ROOM_FAN_VOTES_ACTIVITY_ID_COUNT_DOWN);
SysOriginPlatformEnum.getVoiceSystems()
.forEach(sysOrigin -> sendFanVotesReward(sysOrigin.name(), "ID"));
log.warn("End - 每日16:31处理 [印尼] 区域粉丝人气票活动发奖");
log.info("exec room_fan_votes_activity_id_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 每日15:30[印尼] 重置倒计时重置榜单.
*/
@Scheduled(cron = "0 30 15 1/1 * ?", zone = "Asia/Riyadh")
@TaskCacheLock(key = "ROOM_FAN_VOTES_ACTIVITY_ID_START_TASK", expireSecond = 10000)
public void roomFanVotesActivityIdStartTask() {
long startTime = System.currentTimeMillis();
log.info("exec room_fan_votes_activity_id_start_task start");
// 重置倒计时 60分钟
long countDown = Duration.between(ZonedDateTimeUtils.nowAsiaRiyadh(),
ZonedDateTimeUtils.nowAsiaRiyadh().plusHours(1)).toMillis() - 1000;
redisService.setString(CacheKeysEnum.ROOM_FAN_VOTES_ACTIVITY_ID_COUNT_DOWN.name(),
countDown, countDown, TimeUnit.MILLISECONDS);
List<String> codes = List.of("ID");
// 将昨天数据修改历史
roomFanVotesActivityCountService.upHistory(codes);
// 删除昨天之前的数据
roomFanVotesActivityCountService.del(codes);
log.info("exec room_fan_votes_activity_id_start_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 每日22:31处理 [阿拉伯] 区域粉丝人气票活动发奖.
*/
@Scheduled(cron = "0 31 22 1/1 * ?", zone = "Asia/Riyadh")
@TaskCacheLock(key = "ROOM_FAN_VOTES_ACTIVITY_AR_TASK", expireSecond = 10000)
public void roomFanVotesActivityArTask() {
long startTime = System.currentTimeMillis();
log.info("exec room_fan_votes_activity_ar_task start");
log.warn("Start - 每日22:31处理 [阿拉伯] 区域粉丝人气票活动发奖");
// 重置倒计时
cacheCountDown(CacheKeysEnum.ROOM_FAN_VOTES_ACTIVITY_AR_COUNT_DOWN);
SysOriginPlatformEnum.getVoiceSystems()
.forEach(sysOrigin -> sendFanVotesReward(sysOrigin.name(), "AR"));
log.warn("End - 每日22:31处理 [阿拉伯] 区域粉丝人气票活动发奖");
log.info("exec room_fan_votes_activity_ar_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 每日21:30[阿拉伯] 重置倒计时重置榜单.
*/
@Scheduled(cron = "0 30 21 1/1 * ?", zone = "Asia/Riyadh")
@TaskCacheLock(key = "ROOM_FAN_VOTES_ACTIVITY_AR_START_TASK", expireSecond = 10000)
public void roomFanVotesActivityArStartTask() {
long startTime = System.currentTimeMillis();
log.info("exec room_fan_votes_activity_ar_start_task start");
// 重置倒计时 60分钟
long countDown = Duration.between(ZonedDateTimeUtils.nowAsiaRiyadh(),
ZonedDateTimeUtils.nowAsiaRiyadh().plusHours(1)).toMillis() - 1000;
redisService.setString(CacheKeysEnum.ROOM_FAN_VOTES_ACTIVITY_AR_COUNT_DOWN.name(),
countDown, countDown, TimeUnit.MILLISECONDS);
List<String> codes = List.of("AR");
// 将昨天数据修改历史
roomFanVotesActivityCountService.upHistory(codes);
// 删除昨天之前的数据
roomFanVotesActivityCountService.del(codes);
log.info("exec room_fan_votes_activity_ar_start_task end with {}",System.currentTimeMillis()-startTime);
}
/**
* 贵族每日金币奖励发放 - 沙特时间每日0点执行.
*/
@ -446,71 +309,4 @@ public class DailyTask {
return hasValidRecord ? currentValidEndTime : null;
}
private void sendFanVotesReward(String code, String sysOrigin) {
List<RoomFanVotesActivityCount> votesCounts = roomFanVotesActivityCountService
.listCurrent(code, sysOrigin, 10);
if (CollectionUtils.isEmpty(votesCounts)) {
log.warn("[execute] {} 区域粉丝人气票活动发奖,没有房间获奖", code);
return;
}
List<PropsActivityRuleConfig> resources = listRuleConfigs(sysOrigin);
if (CollectionUtils.isEmpty(resources) || resources.size() < 3) {
log.warn("[execute] {} 区域粉丝人气票活动发奖,资源数据不对", code);
return;
}
log.warn("[execute] {} 区域粉丝人气票活动发奖,获奖数据:{}", code, votesCounts);
try {
for (int index = 0; index < votesCounts.size(); index++) {
if (index > 2) {
break;
}
RoomFanVotesActivityCount count = votesCounts.get(index);
if (Objects.equals(count.getAlreadySent(), Boolean.TRUE)) {
log.warn("[execute] {} 区域粉丝人气票活动发奖,已发过奖,无需重复再发:{}", code, count);
continue;
}
PropsActivityRuleConfig resource = resources.get(index);
// 发送奖励
sendPropsManager.sendActivityGroup(SendRewardGroup.builder()
.trackId(resource.getId())
.sysOrigin(SysOriginPlatformEnum.valueOf(sysOrigin))
.acceptUserId(count.getUserId())
.resourceGroupId(resource.getResourceGroupId())
.origin(SendPropsOrigin.ROOM_FAN_VOTES_ACTIVITY)
.build());
}
} catch (Exception ex) {
log.warn("[execute] {} 区域粉丝人气票活动发奖: {}", code, ex.getMessage());
}
// 修改区域为已经领取
roomFanVotesActivityCountService.upAlreadySent(code);
}
private List<PropsActivityRuleConfig> listRuleConfigs(String sysOrigin) {
return propsActivityRuleConfigService.listPlatformByActivityType(
sysOrigin,
PropsActivityTypeEnum.ROOM_FAN_VOTES_ACTIVITY);
}
/**
* 缓存区域粉丝人气票活动倒计时.
*/
private void cacheCountDown(CacheKeysEnum keysEnum) {
long countDown = Duration.between(ZonedDateTimeUtils.nowAsiaRiyadh(),
ZonedDateTimeUtils.nowAsiaRiyadh().plusDays(1)).toMillis() - 3660000;
redisService.setString(keysEnum.name(), countDown, countDown, TimeUnit.MILLISECONDS);
}
}