|
|
@@ -0,0 +1,81 @@
|
|
|
+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<Reward> rewards = rewardService.queryByCondition(rewardQuery);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(rewards)) {
|
|
|
+ log.info("========== 奖励自动兑换定时任务,没有需要自动兑换的奖励 结束执行 ==========");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取账户信息
|
|
|
+ Set<Long> userIds = rewards.stream().map(Reward::getUserId).collect(Collectors.toSet());
|
|
|
+ AccountQuery accountQuery = new AccountQuery();
|
|
|
+ accountQuery.setUserIds(userIds);
|
|
|
+ accountQuery.setAccountCategory(AccountCategoryEnum.BASIC);
|
|
|
+ List<Account> accounts = accountService.getAccountByCondition(accountQuery);
|
|
|
+ Map<Long, Account> 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("========== 奖励自动兑换定时任务 结束执行 ==========");
|
|
|
+ }
|
|
|
+}
|