package com.punchsettle.server.task; import com.punchsettle.server.atomic.entity.Account; import com.punchsettle.server.atomic.entity.Reward; import com.punchsettle.server.atomic.service.IAccountService; import com.punchsettle.server.atomic.service.IRewardService; import com.punchsettle.server.common.constant.CommonEnableStatusEnum; import com.punchsettle.server.constant.AccountCategoryEnum; import com.punchsettle.server.constant.VersionStatusEnum; import com.punchsettle.server.pojo.account.AccountQuery; import com.punchsettle.server.pojo.reward.RewardExchangeRequest; import com.punchsettle.server.pojo.reward.RewardQuery; import com.punchsettle.server.service.manager.IRewardManager; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; /** * @author tyuio * @version 1.0.0 * @date 2025/5/7 14:45 * @description 奖励自动兑换 定时任务 */ @Slf4j @Component public class RewardAutoExchangeTask { @Autowired private IRewardManager rewardManager; @Autowired private IRewardService rewardService; @Autowired private IAccountService accountService; public void execute() { log.info("========== 奖励自动兑换定时任务 开始执行 =========="); RewardQuery rewardQuery = new RewardQuery(); rewardQuery.setRewardStatus(VersionStatusEnum.ACTIVE); rewardQuery.setAutoStatus(CommonEnableStatusEnum.ENABLED); List rewards = rewardService.queryByCondition(rewardQuery); if (CollectionUtils.isEmpty(rewards)) { log.info("========== 奖励自动兑换定时任务,没有需要自动兑换的奖励 结束执行 =========="); return; } // 获取账户信息 Set userIds = rewards.stream().map(Reward::getUserId).collect(Collectors.toSet()); AccountQuery accountQuery = new AccountQuery(); accountQuery.setUserIds(userIds); accountQuery.setAccountCategory(AccountCategoryEnum.BASIC); List accounts = accountService.getAccountByCondition(accountQuery); Map accountMap = accounts.stream().collect(Collectors.toMap(Account::getUserId, Function.identity(), (key1, key2) -> key1)); for (Reward reward : rewards) { try { Account account = accountMap.get(reward.getUserId()); RewardExchangeRequest rewardExchangeRequest = new RewardExchangeRequest(); rewardExchangeRequest.setRewardId(reward.getId()); rewardExchangeRequest.setAccountId(account.getId()); rewardExchangeRequest.setExchangeCount(reward.getAutoExchangeCount()); rewardManager.exchangeReward(rewardExchangeRequest); } catch (Exception e) { log.info("自动兑换异常"); } } log.info("========== 奖励自动兑换定时任务 结束执行 =========="); } }