PointsDistributeTask.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.punchsettle.server.task;
  2. import com.punchsettle.server.atomic.entity.Account;
  3. import com.punchsettle.server.atomic.entity.AccountTransferHistory;
  4. import com.punchsettle.server.atomic.entity.SettleUserHistory;
  5. import com.punchsettle.server.atomic.entity.User;
  6. import com.punchsettle.server.atomic.service.IAccountService;
  7. import com.punchsettle.server.atomic.service.IAccountTransferHistoryService;
  8. import com.punchsettle.server.atomic.service.ISettleUserHistoryService;
  9. import com.punchsettle.server.atomic.service.IUserService;
  10. import com.punchsettle.server.constant.AccountCategoryEnum;
  11. import com.punchsettle.server.constant.TransferCategoryEnum;
  12. import com.punchsettle.server.pojo.account.AccountQuery;
  13. import com.punchsettle.server.pojo.settle.SettleUserHistoryQuery;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import org.springframework.util.CollectionUtils;
  18. import java.time.LocalDate;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Optional;
  23. import java.util.Set;
  24. import java.util.function.Function;
  25. import java.util.stream.Collectors;
  26. /**
  27. * @author tyuio
  28. * @version 1.0.0
  29. * @date 2025/5/6 19:31
  30. * @description 积分分发 定时任务
  31. */
  32. @Slf4j
  33. @Component
  34. public class PointsDistributeTask {
  35. @Autowired
  36. private ISettleUserHistoryService settleUserHistoryService;
  37. @Autowired
  38. private IUserService userService;
  39. @Autowired
  40. private IAccountService accountService;
  41. @Autowired
  42. private IAccountTransferHistoryService accountTransferHistoryService;
  43. public void execute() {
  44. log.info("========== 积分分发定时任务 开始执行 ==========");
  45. // 结算日期
  46. LocalDate settleDate = LocalDate.now().minusDays(1);
  47. // 查询结算记录
  48. SettleUserHistoryQuery settleUserHistoryQuery = new SettleUserHistoryQuery();
  49. settleUserHistoryQuery.setSettleDate(settleDate.toString());
  50. List<SettleUserHistory> settleUserHistories = settleUserHistoryService.querySettleUserHistory(settleUserHistoryQuery);
  51. if (CollectionUtils.isEmpty(settleUserHistories)) {
  52. log.info("========== 积分分发定时任务,没有可分发的积分 结束执行 ==========");
  53. return;
  54. }
  55. // 用户ID-用户结算记录关联
  56. Map<Long, SettleUserHistory> settleUserHistoryMap = settleUserHistories.stream().collect(Collectors.toMap(SettleUserHistory::getUserId, Function.identity(), (key1, key2) -> key1));
  57. // 用户ID列表
  58. Set<Long> userIds = settleUserHistories.stream().map(SettleUserHistory::getUserId).collect(Collectors.toSet());
  59. // 用户信息, 用户ID-用户信息关联
  60. List<User> users = userService.listByIds(userIds);
  61. Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key1));
  62. // 获取账户信息,用户ID-账户信息关联
  63. AccountQuery accountQuery = new AccountQuery();
  64. accountQuery.setAccountCategory(AccountCategoryEnum.BASIC);
  65. accountQuery.setUserIds(userIds);
  66. List<Account> accounts = accountService.getAccountByCondition(accountQuery);
  67. Map<Long, Account> accountMap = accounts.stream().collect(Collectors.toMap(Account::getUserId, Function.identity(), (key1, key2) -> key1));
  68. // 用户信息 更新列表
  69. List<User> updateUserList = new ArrayList<>();
  70. // 账户信息 更新列表
  71. List<Account> updateAccountList = new ArrayList<>();
  72. // 转账记录 新增列表
  73. List<AccountTransferHistory> addAccountTransferHistories = new ArrayList<>();
  74. // 结算用户信息 更新列表
  75. List<SettleUserHistory> updateSettleUserHistories = new ArrayList<>();
  76. for (Long userId : userIds) {
  77. // 用户信息
  78. User user = userMap.get(userId);
  79. // 账户信息
  80. Account account = accountMap.get(userId);
  81. // 结算信息
  82. SettleUserHistory settleUserHistory = settleUserHistoryMap.get(userId);
  83. // 结算积分
  84. Integer settlePoints = Optional.ofNullable(settleUserHistory.getSettlePoints()).orElse(0);
  85. // 获取并设置用户信息
  86. Integer beforeTotalPoints = Optional.ofNullable(user.getTotalPoints()).orElse(0);
  87. Integer beforeUnusedPoints = Optional.ofNullable(user.getUnusedPoints()).orElse(0);
  88. User updateUser = new User();
  89. updateUser.setId(user.getId());
  90. updateUser.setTotalPoints(beforeTotalPoints + settlePoints);
  91. updateUser.setUnusedPoints(beforeUnusedPoints + settlePoints);
  92. updateUserList.add(user);
  93. // 更新账户信息
  94. Integer beforeAccountPoints = Optional.ofNullable(account.getPoints()).orElse(0);
  95. account.setPoints(beforeAccountPoints + settlePoints);
  96. updateAccountList.add(account);
  97. // 增加账户转账记录
  98. AccountTransferHistory accountTransferHistory = new AccountTransferHistory();
  99. accountTransferHistory.setTransferPoints(settlePoints);
  100. accountTransferHistory.setTransferCategory(TransferCategoryEnum.SETTLE);
  101. accountTransferHistory.setRecipientAccountId(account.getId());
  102. accountTransferHistory.setRaPointsAfterTransfer(beforeAccountPoints);
  103. accountTransferHistory.setRaPointsAfterTransfer(account.getPoints());
  104. addAccountTransferHistories.add(accountTransferHistory);
  105. // 设置结算积分记录
  106. SettleUserHistory updateSettleUserHistory = new SettleUserHistory();
  107. updateSettleUserHistory.setBeforeSettlePoints(beforeTotalPoints);
  108. updateSettleUserHistory.setAfterSettlePoints(beforeTotalPoints + settlePoints);
  109. updateSettleUserHistories.add(updateSettleUserHistory);
  110. }
  111. if (!CollectionUtils.isEmpty(updateUserList)) {
  112. userService.batchUpdate(updateUserList);
  113. }
  114. if (!CollectionUtils.isEmpty(updateAccountList)) {
  115. accountService.batchUpdate(updateAccountList);
  116. }
  117. if (!CollectionUtils.isEmpty(addAccountTransferHistories)) {
  118. accountTransferHistoryService.insertList(addAccountTransferHistories);
  119. }
  120. if (!CollectionUtils.isEmpty(updateSettleUserHistories)) {
  121. settleUserHistoryService.insertList(updateSettleUserHistories);
  122. }
  123. log.info("========== 积分分发定时任务 结束执行 ==========");
  124. }
  125. }