|
|
@@ -297,14 +297,34 @@ public class PointActivityServiceImpl extends ServiceImpl<PointActivityMapper, P
|
|
|
Map<Long, PointUserActivityTaskCompletion> completionMap = completionList.stream()
|
|
|
.collect(Collectors.toMap(PointUserActivityTaskCompletion::getTaskId, c -> c));
|
|
|
|
|
|
- // 5. 筛选【未完成】的任务
|
|
|
+ // 5. 对任务进行排序:未完成优先,创建时间正序
|
|
|
+ taskList.sort((t1, t2) -> {
|
|
|
+ PointUserActivityTaskCompletion comp1 = completionMap.get(t1.getId());
|
|
|
+ PointUserActivityTaskCompletion comp2 = completionMap.get(t2.getId());
|
|
|
+
|
|
|
+ // 判断是否已完成
|
|
|
+ boolean isCompleted1 = comp1 != null;
|
|
|
+ boolean isCompleted2 = comp2 != null;
|
|
|
+
|
|
|
+ // 未完成优先
|
|
|
+ if (isCompleted1 != isCompleted2) {
|
|
|
+ return isCompleted1 ? 1 : -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 同一状态按创建时间正序排列
|
|
|
+ if (t1.getCreateTime() != null && t2.getCreateTime() != null) {
|
|
|
+ return t1.getCreateTime().compareTo(t2.getCreateTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ });
|
|
|
+
|
|
|
+ // 6. 筛选任务并添加到结果列表
|
|
|
for (PointActivityTask task : taskList) {
|
|
|
if (resultList.size() >= TARGET_COUNT) break;
|
|
|
|
|
|
PointUserActivityTaskCompletion completion = completionMap.get(task.getId());
|
|
|
- if (isTaskIncomplete(task, completion)) {
|
|
|
- resultList.add(convertToVo(task, completion));
|
|
|
- }
|
|
|
+ resultList.add(convertToVo(task, completion));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -488,31 +508,6 @@ public class PointActivityServiceImpl extends ServiceImpl<PointActivityMapper, P
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 判断任务是否未完成
|
|
|
- */
|
|
|
- private boolean isTaskIncomplete(PointActivityTask task, PointUserActivityTaskCompletion completion) {
|
|
|
-
|
|
|
- // 1. 获取规则要求的次数
|
|
|
- int requiredCount = 0;
|
|
|
- try {
|
|
|
- requiredCount = Integer.parseInt(task.getTriggerValue());
|
|
|
- } catch (NumberFormatException e) {
|
|
|
- // 如果配置错误,为了安全起见,默认视为未完成(或根据业务抛出异常)
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- // 2. 获取用户实际完成的次数
|
|
|
- int actualCount = 0;
|
|
|
- if (ObjectUtil.isNotNull(completion) && ObjectUtil.isNotNull(completion.getCompletedCount())) {
|
|
|
- actualCount = completion.getCompletedCount();
|
|
|
- }
|
|
|
-
|
|
|
- // 3. 核心判断逻辑
|
|
|
- // 如果 实际次数 < 要求次数,则任务“未完成” (返回 true)
|
|
|
- return actualCount < requiredCount;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 组装 VO 对象
|
|
|
*/
|