| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package com.punchsettle.server.task;
- import com.punchsettle.server.atomic.entity.Account;
- import com.punchsettle.server.atomic.entity.AccountTransferHistory;
- import com.punchsettle.server.atomic.entity.SettleUserHistory;
- import com.punchsettle.server.atomic.entity.User;
- import com.punchsettle.server.atomic.service.IAccountService;
- import com.punchsettle.server.atomic.service.IAccountTransferHistoryService;
- import com.punchsettle.server.atomic.service.ISettleUserHistoryService;
- import com.punchsettle.server.atomic.service.IUserService;
- import com.punchsettle.server.constant.AccountCategoryEnum;
- import com.punchsettle.server.constant.TransferCategoryEnum;
- import com.punchsettle.server.pojo.account.AccountQuery;
- import com.punchsettle.server.pojo.settle.SettleUserHistoryQuery;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import org.springframework.util.CollectionUtils;
- import java.time.LocalDate;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.Set;
- import java.util.function.Function;
- import java.util.stream.Collectors;
- /**
- * @author tyuio
- * @version 1.0.0
- * @date 2025/5/6 19:31
- * @description 积分分发 定时任务
- */
- @Slf4j
- @Component
- public class PointsDistributeTask {
- @Autowired
- private ISettleUserHistoryService settleUserHistoryService;
- @Autowired
- private IUserService userService;
- @Autowired
- private IAccountService accountService;
- @Autowired
- private IAccountTransferHistoryService accountTransferHistoryService;
- public void execute() {
- log.info("========== 积分分发定时任务 开始执行 ==========");
- // 结算日期
- LocalDate settleDate = LocalDate.now().minusDays(1);
- // 查询结算记录
- SettleUserHistoryQuery settleUserHistoryQuery = new SettleUserHistoryQuery();
- settleUserHistoryQuery.setSettleDate(settleDate.toString());
- List<SettleUserHistory> settleUserHistories = settleUserHistoryService.querySettleUserHistory(settleUserHistoryQuery);
- if (CollectionUtils.isEmpty(settleUserHistories)) {
- log.info("========== 积分分发定时任务,没有可分发的积分 结束执行 ==========");
- return;
- }
- // 用户ID-用户结算记录关联
- Map<Long, SettleUserHistory> settleUserHistoryMap = settleUserHistories.stream().collect(Collectors.toMap(SettleUserHistory::getUserId, Function.identity(), (key1, key2) -> key1));
- // 用户ID列表
- Set<Long> userIds = settleUserHistories.stream().map(SettleUserHistory::getUserId).collect(Collectors.toSet());
- // 用户信息, 用户ID-用户信息关联
- List<User> users = userService.listByIds(userIds);
- Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key1));
- // 获取账户信息,用户ID-账户信息关联
- AccountQuery accountQuery = new AccountQuery();
- accountQuery.setAccountCategory(AccountCategoryEnum.BASIC);
- accountQuery.setUserIds(userIds);
- List<Account> accounts = accountService.getAccountByCondition(accountQuery);
- Map<Long, Account> accountMap = accounts.stream().collect(Collectors.toMap(Account::getUserId, Function.identity(), (key1, key2) -> key1));
- // 用户信息 更新列表
- List<User> updateUserList = new ArrayList<>();
- // 账户信息 更新列表
- List<Account> updateAccountList = new ArrayList<>();
- // 转账记录 新增列表
- List<AccountTransferHistory> addAccountTransferHistories = new ArrayList<>();
- // 结算用户信息 更新列表
- List<SettleUserHistory> updateSettleUserHistories = new ArrayList<>();
- for (Long userId : userIds) {
- // 用户信息
- User user = userMap.get(userId);
- // 账户信息
- Account account = accountMap.get(userId);
- // 结算信息
- SettleUserHistory settleUserHistory = settleUserHistoryMap.get(userId);
- // 结算积分
- Integer settlePoints = Optional.ofNullable(settleUserHistory.getSettlePoints()).orElse(0);
- // 获取并设置用户信息
- Integer beforeTotalPoints = Optional.ofNullable(user.getTotalPoints()).orElse(0);
- Integer beforeUnusedPoints = Optional.ofNullable(user.getUnusedPoints()).orElse(0);
- User updateUser = new User();
- updateUser.setId(user.getId());
- updateUser.setTotalPoints(beforeTotalPoints + settlePoints);
- updateUser.setUnusedPoints(beforeUnusedPoints + settlePoints);
- updateUserList.add(user);
- // 更新账户信息
- Integer beforeAccountPoints = Optional.ofNullable(account.getPoints()).orElse(0);
- account.setPoints(beforeAccountPoints + settlePoints);
- updateAccountList.add(account);
- // 增加账户转账记录
- AccountTransferHistory accountTransferHistory = new AccountTransferHistory();
- accountTransferHistory.setTransferPoints(settlePoints);
- accountTransferHistory.setTransferCategory(TransferCategoryEnum.SETTLE);
- accountTransferHistory.setRecipientAccountId(account.getId());
- accountTransferHistory.setRaPointsAfterTransfer(beforeAccountPoints);
- accountTransferHistory.setRaPointsAfterTransfer(account.getPoints());
- addAccountTransferHistories.add(accountTransferHistory);
- // 设置结算积分记录
- SettleUserHistory updateSettleUserHistory = new SettleUserHistory();
- updateSettleUserHistory.setBeforeSettlePoints(beforeTotalPoints);
- updateSettleUserHistory.setAfterSettlePoints(beforeTotalPoints + settlePoints);
- updateSettleUserHistories.add(updateSettleUserHistory);
- }
- if (!CollectionUtils.isEmpty(updateUserList)) {
- userService.batchUpdate(updateUserList);
- }
- if (!CollectionUtils.isEmpty(updateAccountList)) {
- accountService.batchUpdate(updateAccountList);
- }
- if (!CollectionUtils.isEmpty(addAccountTransferHistories)) {
- accountTransferHistoryService.insertList(addAccountTransferHistories);
- }
- if (!CollectionUtils.isEmpty(updateSettleUserHistories)) {
- settleUserHistoryService.insertList(updateSettleUserHistories);
- }
- log.info("========== 积分分发定时任务 结束执行 ==========");
- }
- }
|