Răsfoiți Sursa

【feat】【v3】
1.修复数据统计:结算积分统计异常
2.修复数据统计:总任务数统计异常
3.修复打卡/撤销打卡异常:公历日期不能为空

ChenYL 10 luni în urmă
părinte
comite
cb5f3f824d

+ 2 - 0
src/main/java/com/punchsettle/server/service/manager/impl/PunchInManagerImpl.java

@@ -546,6 +546,7 @@ public class PunchInManagerImpl implements IPunchInManager {
             tempPiTaskHistory.setUserId(currentUserId);
         } else {
             tempPiTaskHistory.setId(oldPiTaskHistory.getId());
+            tempPiTaskHistory.setPunchInDate(oldPiTaskHistory.getPunchInDate());
         }
 
         // 打卡类型:单次打卡,
@@ -616,6 +617,7 @@ public class PunchInManagerImpl implements IPunchInManager {
         PiTaskHistory updatePiTaskHistory = new PiTaskHistory();
         updatePiTaskHistory.setId(piTaskHistory.getId());
         updatePiTaskHistory.setTaskId(piTask.getId());
+        updatePiTaskHistory.setPunchInDate(piTaskHistory.getPunchInDate());
 
         // 单次打卡,次数置为0
         if (PunchInMethodEnum.SINGLE.equals(piTask.getPunchInMethod())) {

+ 19 - 5
src/main/java/com/punchsettle/server/service/manager/impl/StatManagerImpl.java

@@ -218,8 +218,19 @@ public class StatManagerImpl implements IStatManager {
         piTaskHistoryQuery.setPunchInDateFrom(startDate.toString());
         piTaskHistoryQuery.setPunchInDateTo(endDate.toString());
         List<PiTaskHistory> piTaskHistoryList = piTaskHistoryService.queryByCondition(piTaskHistoryQuery);
+        // 打卡日期 - 打卡任务列表
         Map<String, List<PiTaskHistory>> piTaskHistoryMap = piTaskHistoryList.stream().collect(Collectors.groupingBy(v -> v.getPunchInDate().substring(5)));
 
+        // 任务结算数据
+        SettleTaskRelaHistoryQuery settleTaskRelaHistoryQuery = new SettleTaskRelaHistoryQuery();
+        settleTaskRelaHistoryQuery.setSettleDateFrom(startDate.toString());
+        settleTaskRelaHistoryQuery.setSettleDateTo(endDate.toString());
+        settleTaskRelaHistoryQuery.setUserIds(Arrays.asList(currentUserId));
+        settleTaskRelaHistoryQuery.setSettleResults(Arrays.asList(SettleResultEnum.SETTLED));
+        List<SettleTaskRelaHistory> settleTaskRelaHistories = settleTaskRelaHistoryService.queryByCondition(settleTaskRelaHistoryQuery);
+        // 打卡日期 - 结算信息列表 关联
+        Map<String, List<SettleTaskRelaHistory>> settleTaskRelaHistoryMap = settleTaskRelaHistories.stream().collect(Collectors.groupingBy(v -> v.getSettleDate().substring(5)));
+
         // 总任务数
         List<Integer> totalTaskCountList = new ArrayList<>(lineCategories.length);
         // 打卡任务数
@@ -227,16 +238,19 @@ public class StatManagerImpl implements IStatManager {
         // 完成打卡任务数
         List<Integer> doneTaskCountList = new ArrayList<>(lineCategories.length);
         for (String lineCategory : lineCategories) {
+            // 获取结算数据
+            List<SettleTaskRelaHistory> tempSettleTaskRelaHistories = settleTaskRelaHistoryMap.get(lineCategory);
+            // 总任数
+            totalTaskCountList.add(Optional.ofNullable(tempSettleTaskRelaHistories).orElse(List.of()).size());
+
+            // 获取打卡记录
             List<PiTaskHistory> piTaskHistories = piTaskHistoryMap.get(lineCategory);
             if (CollectionUtils.isEmpty(piTaskHistories)) {
-                totalTaskCountList.add(0);
                 punchInTaskCountList.add(0);
                 doneTaskCountList.add(0);
                 continue;
             }
-            // 总任数
-            totalTaskCountList.add(piTaskHistories.size());
-            // TODO 这里要单独弄一个统计表,不然无法计算
+            // 打卡任务数
             punchInTaskCountList.add(piTaskHistories.size());
             // 任务完成数
             doneTaskCountList.add(piTaskHistories.stream().filter(piTaskHistory -> piTaskHistory.getPunchInResult().equals(PunchInResultEnum.DONE)).collect(Collectors.toList()).size());
@@ -455,7 +469,7 @@ public class StatManagerImpl implements IStatManager {
             // 结算数据
             SettleUserHistory settleUserHistory = settleUserHistoryMap.get(userId);
             // 兑换列表
-            List<RewardExchangeHistory> rewardExchangeHistoryList = rewardExchangeHistoryMap.get(userId);
+            List<RewardExchangeHistory> rewardExchangeHistoryList = Optional.ofNullable(rewardExchangeHistoryMap.get(userId)).orElse(List.of());
             // 消耗总积分
             int consumePoints = rewardExchangeHistoryList.stream()
                     .mapToInt(rewardExchangeHistory -> Optional.ofNullable(rewardExchangeHistory.getExchangeTotalPoints()).orElse(0))