|
|
@@ -12,6 +12,16 @@ import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import com.punchsettle.server.atomic.entity.Account;
|
|
|
+import com.punchsettle.server.atomic.entity.AccountTransferHistory;
|
|
|
+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.IUserService;
|
|
|
+import com.punchsettle.server.constant.AccountCategoryEnum;
|
|
|
+import com.punchsettle.server.constant.PointsDistributeStatusEnum;
|
|
|
+import com.punchsettle.server.constant.TransferCategoryEnum;
|
|
|
+import com.punchsettle.server.pojo.account.AccountQuery;
|
|
|
import com.punchsettle.server.pojo.settle.SettleUserHistoryQuery;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -112,6 +122,15 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
@Autowired
|
|
|
private ISettleTaskRelaHistoryService settleTaskRelaHistoryService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IUserService userService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IAccountService accountService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IAccountTransferHistoryService accountTransferHistoryService;
|
|
|
+
|
|
|
@Override
|
|
|
@Cacheable(cacheNames = CacheNameConstant.SETTLE_POINTS_HISTORY, key = "#userId+'_'+settleMonth", condition = "#userId != null && settleMont != null && !settleMonth.isBlank()")
|
|
|
public List<SettlePointsHistoryVO> querySettlePointsHistory(Long userId, String settleMonth) {
|
|
|
@@ -163,6 +182,10 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
addSettleUserHistory.setUserId(settleData.getUserId());
|
|
|
addSettleUserHistory.setSettleDate(punchInDateStr);
|
|
|
addSettleUserHistory.setSettleTaskHistoryId(settleTaskHistoryId);
|
|
|
+ addSettleUserHistory.setBeforeSettlePoints(0);
|
|
|
+ addSettleUserHistory.setAfterSettlePoints(0);
|
|
|
+ addSettleUserHistory.setSettleResult(SettleResultEnum.SETTLE);
|
|
|
+ addSettleUserHistory.setDistributeStatus(PointsDistributeStatusEnum.NOT_DISTRIBUTE);
|
|
|
addSettleUserHistories.add(addSettleUserHistory);
|
|
|
|
|
|
// 不存在打卡任务则跳过
|
|
|
@@ -192,7 +215,7 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
addSettleTaskRelaHistory.setPiTaskUniqueId(piTask.getUniqueId());
|
|
|
|
|
|
// 有打卡任务,但是今天无需结算
|
|
|
- boolean repeatResult = punchInCoreManager.judgeRepeat(piTask, punchInDateStr);
|
|
|
+ boolean repeatResult = punchInCoreManager.judgeRepeat(piTask, punchInDate);
|
|
|
if (!repeatResult) {
|
|
|
addSettleTaskRelaHistory.setSettleResult(SettleResultEnum.NOT_SETTLED);
|
|
|
addSettleTaskRelaHistory.setSettlePoints(0);
|
|
|
@@ -218,7 +241,13 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
|
|
|
// 计算积分,要先刷新打卡状态
|
|
|
int settlePoints = settleCoreManager.calculatePointsInTask(piTask, piTaskExtList, piTaskHistory, oldPiStatus);
|
|
|
+ // 计算总积分
|
|
|
+ totalSettlePoints += settlePoints;
|
|
|
|
|
|
+ // 没有打过卡时,没有打卡记录
|
|
|
+ if (Objects.nonNull(piTaskHistory)) {
|
|
|
+ addSettleTaskRelaHistory.setPiTaskHistoryId(piTaskHistory.getId());
|
|
|
+ }
|
|
|
addSettleTaskRelaHistory.setSettleResult(SettleResultEnum.SETTLE);
|
|
|
addSettleTaskRelaHistory.setSettlePoints(settlePoints);
|
|
|
addSettleTaskRelaHistories.add(addSettleTaskRelaHistory);
|
|
|
@@ -330,39 +359,39 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
Map<Long, List<PiTaskExt>> piTaskExtGroupList =
|
|
|
piTaskExtList.stream().collect(Collectors.groupingBy(PiTaskExt::getTaskId));
|
|
|
|
|
|
- return userIds.stream().map(userId -> {
|
|
|
+ return userIds.stream().filter(userId -> piTaskMap.containsKey(userId)).map(userId -> {
|
|
|
SettleData settleData = new SettleData();
|
|
|
|
|
|
// 设置用户ID
|
|
|
settleData.setUserId(userId);
|
|
|
|
|
|
// TODO 获取并设置多任务打卡信息,这个不可能为空,为空则用户初始注册时创建时有问题
|
|
|
- PiMultiTask piMultiTask = piMultiTaskMap.get(userId);
|
|
|
- settleData.setPiMultiTask(piMultiTask);
|
|
|
-
|
|
|
- // 获取并设置对应的拓展信息
|
|
|
- List<PiMultiTaskExt> tempPiMultiTaskExtList = piMultiTaskExtMap.get(piMultiTask.getId());
|
|
|
- settleData.setPiMultiTaskExtList(tempPiMultiTaskExtList);
|
|
|
+// PiMultiTask piMultiTask = piMultiTaskMap.get(userId);
|
|
|
+// settleData.setPiMultiTask(piMultiTask);
|
|
|
+//
|
|
|
+// // 获取并设置对应的拓展信息
|
|
|
+// List<PiMultiTaskExt> tempPiMultiTaskExtList = piMultiTaskExtMap.get(piMultiTask.getId());
|
|
|
+// settleData.setPiMultiTaskExtList(tempPiMultiTaskExtList);
|
|
|
|
|
|
// 获取并设置对应的多任务打卡记录
|
|
|
- PiMultiTaskHistory piMultiTaskHistory = piMultiTaskHistoryMap.get(piMultiTask.getUniqueId());
|
|
|
- settleData.setPiMultiTaskHistory(piMultiTaskHistory);
|
|
|
-
|
|
|
- // 获取多任务与打卡任务的关联信息
|
|
|
- List<PiMultiTaskRela> tempPiMultiTaskRelaList = piMultiTaskRelaMap.get(piMultiTask.getId());
|
|
|
- Set<Long> relaContainTaskIdList =
|
|
|
- tempPiMultiTaskRelaList.stream().map(PiMultiTaskRela::getTaskId).collect(Collectors.toSet());
|
|
|
-
|
|
|
- // 获取并设置多任务的状态信息
|
|
|
- PiStatus piStatusInMultiTask = piStatusMapInMultiTask.get(piMultiTask.getUniqueId());
|
|
|
- settleData.setPiStatus(piStatusInMultiTask);
|
|
|
+// PiMultiTaskHistory piMultiTaskHistory = piMultiTaskHistoryMap.get(piMultiTask.getUniqueId());
|
|
|
+// settleData.setPiMultiTaskHistory(piMultiTaskHistory);
|
|
|
+//
|
|
|
+// // 获取多任务与打卡任务的关联信息
|
|
|
+// List<PiMultiTaskRela> tempPiMultiTaskRelaList = piMultiTaskRelaMap.get(piMultiTask.getId());
|
|
|
+// Set<Long> relaContainTaskIdList =
|
|
|
+// tempPiMultiTaskRelaList.stream().map(PiMultiTaskRela::getTaskId).collect(Collectors.toSet());
|
|
|
+//
|
|
|
+// // 获取并设置多任务的状态信息
|
|
|
+// PiStatus piStatusInMultiTask = piStatusMapInMultiTask.get(piMultiTask.getUniqueId());
|
|
|
+// settleData.setPiStatus(piStatusInMultiTask);
|
|
|
|
|
|
// 获取任务列表
|
|
|
List<PiTask> piTasksList = piTaskMap.get(userId);
|
|
|
// 打卡任务数据
|
|
|
List<PiTaskData> piTaskDataList = new ArrayList<>(piTasksList.size());
|
|
|
// 关联的打卡任务记录
|
|
|
- List<PiTaskHistory> relaPunchInTaskHistories = new ArrayList<>(relaContainTaskIdList.size());
|
|
|
+// List<PiTaskHistory> relaPunchInTaskHistories = new ArrayList<>(relaContainTaskIdList.size());
|
|
|
|
|
|
for (PiTask piTask : piTasksList) {
|
|
|
PiTaskData piTaskData = new PiTaskData();
|
|
|
@@ -373,9 +402,9 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
piTaskData.setPiTaskHistory(piTaskHistory);
|
|
|
|
|
|
//设置多任务与打卡记录的关联信息
|
|
|
- if (relaContainTaskIdList.contains(piTask.getId())) {
|
|
|
- relaPunchInTaskHistories.add(piTaskHistory);
|
|
|
- }
|
|
|
+// if (relaContainTaskIdList.contains(piTask.getId())) {
|
|
|
+// relaPunchInTaskHistories.add(piTaskHistory);
|
|
|
+// }
|
|
|
|
|
|
// 获取并设置拓展信息
|
|
|
List<PiTaskExt> tempPiTaskExtList = piTaskExtGroupList.get(piTask.getId());
|
|
|
@@ -389,7 +418,7 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
}
|
|
|
|
|
|
settleData.setPiTaskDataList(piTaskDataList);
|
|
|
- settleData.setRelaPunchInTaskHistories(relaPunchInTaskHistories);
|
|
|
+// settleData.setRelaPunchInTaskHistories(relaPunchInTaskHistories);
|
|
|
|
|
|
return settleData;
|
|
|
}).collect(Collectors.toList());
|
|
|
@@ -475,21 +504,21 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
|
|
|
// 设置实时数据
|
|
|
piStatus.setRepeatPrevTotalCountInWeek(prevTotalCountInWeek + oldPrevTotalCountInWeek);
|
|
|
- piStatus.setPunchInTotalCountInWeek(piStatus.getRepeatPrevTotalCountInWeek() + punchInTotalCountInWeek);
|
|
|
+ piStatus.setPunchInTotalCountInWeek(Optional.ofNullable(piStatus.getRepeatPrevTotalCountInWeek()).orElse(0) + punchInTotalCountInWeek);
|
|
|
piStatus.setRepeatPrevTotalCountInMonth(prevTotalCountInMonth + oldPrevTotalCountInMonth);
|
|
|
- piStatus.setPunchInTotalCountInMonth(piStatus.getRepeatPrevTotalCountInMonth() + punchInTotalCountInMonth);
|
|
|
+ piStatus.setPunchInTotalCountInMonth(Optional.ofNullable(piStatus.getRepeatPrevTotalCountInMonth()).orElse(0) + punchInTotalCountInMonth);
|
|
|
}
|
|
|
|
|
|
// 存在打卡记录则已打卡数加1
|
|
|
if (Objects.nonNull(piTaskHistory)) {
|
|
|
- piStatus.setPunchInCountInWeek(piStatus.getPunchInCountInWeek() + 1);
|
|
|
- piStatus.setPunchInCountInMonth(piStatus.getPunchInCountInMonth() + 1);
|
|
|
+ piStatus.setPunchInCountInWeek(Optional.ofNullable(piStatus.getPunchInCountInWeek()).orElse(0) + 1);
|
|
|
+ piStatus.setPunchInCountInMonth(Optional.ofNullable(piStatus.getPunchInCountInMonth()).orElse(0) + 1);
|
|
|
}
|
|
|
|
|
|
// 完成打卡则完成打卡数记录加一
|
|
|
if (PunchInResultEnum.DONE.equals(punchInResult)) {
|
|
|
- piStatus.setPunchInDoneCountInWeek(piStatus.getPunchInDoneCountInWeek() + 1);
|
|
|
- piStatus.setPunchInDoneCountInMonth(piStatus.getPunchInDoneCountInMonth() + 1);
|
|
|
+ piStatus.setPunchInDoneCountInWeek(Optional.ofNullable(piStatus.getPunchInDoneCountInWeek()).orElse(0) + 1);
|
|
|
+ piStatus.setPunchInDoneCountInMonth(Optional.ofNullable(piStatus.getPunchInDoneCountInMonth()).orElse(0) + 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -534,4 +563,103 @@ public class SettleManagerImpl implements ISettleManager {
|
|
|
piStatus.setStageStartDate(punchInDate);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void distributePoints(LocalDate settleDate) {
|
|
|
+ // 查询结算记录
|
|
|
+ SettleUserHistoryQuery settleUserHistoryQuery = new SettleUserHistoryQuery();
|
|
|
+ settleUserHistoryQuery.setSettleDate(settleDate.toString());
|
|
|
+ settleUserHistoryQuery.setDistributeStatus(PointsDistributeStatusEnum.NOT_DISTRIBUTE);
|
|
|
+ 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 oldSettleUserHistory = settleUserHistoryMap.get(userId);
|
|
|
+ // 结算积分
|
|
|
+ Integer settlePoints = Optional.ofNullable(oldSettleUserHistory.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.setUserId(userId);
|
|
|
+ accountTransferHistory.setTransferPoints(settlePoints);
|
|
|
+ accountTransferHistory.setTransferCategory(TransferCategoryEnum.SETTLE);
|
|
|
+ accountTransferHistory.setRecipientAccountId(account.getId());
|
|
|
+ accountTransferHistory.setRaPointsBeforeTransfer(beforeAccountPoints);
|
|
|
+ accountTransferHistory.setRaPointsAfterTransfer(account.getPoints());
|
|
|
+ addAccountTransferHistories.add(accountTransferHistory);
|
|
|
+
|
|
|
+ // 设置结算积分记录
|
|
|
+ SettleUserHistory updateSettleUserHistory = new SettleUserHistory();
|
|
|
+ updateSettleUserHistory.setId(oldSettleUserHistory.getId());
|
|
|
+ updateSettleUserHistory.setBeforeSettlePoints(beforeTotalPoints);
|
|
|
+ updateSettleUserHistory.setAfterSettlePoints(beforeTotalPoints + settlePoints);
|
|
|
+ updateSettleUserHistory.setDistributeStatus(PointsDistributeStatusEnum.DISTRIBUTE);
|
|
|
+ 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.batchUpdate(updateSettleUserHistories);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|