Bläddra i källkod

fix(health): 方案任务设置repeatType=daily,幂等检查限定当天deadline

- generateDailyTasksFromPlan 添加 task.setRepeatType('daily')
- 幂等检查加 deadline 日期窗口过滤,避免历史任务阻塞当天生成
- RepeatTaskGenerator 每天凌晨5点可正确识别并再生方案任务
Xiaogang Liao 1 månad sedan
förälder
incheckning
3d0d5502ae

+ 11 - 2
cfc-backend/src/main/java/com/etotem/cfc/service/impl/HealthPlanServiceImpl.java

@@ -136,12 +136,20 @@ public class HealthPlanServiceImpl implements HealthPlanService {
         Date now = new Date();
 
         for (String line : taskLines) {
-            // 幂等:同一方案同一天已有同名任务则跳过
+            // 幂等:同一方案今天已有同名任务则跳过(deadline 限定当天)
+            Calendar todayStart = Calendar.getInstance();
+            todayStart.set(Calendar.HOUR_OF_DAY, 0); todayStart.set(Calendar.MINUTE, 0);
+            todayStart.set(Calendar.SECOND, 0); todayStart.set(Calendar.MILLISECOND, 0);
+            Calendar todayEnd = (Calendar) todayStart.clone();
+            todayEnd.add(Calendar.DAY_OF_MONTH, 1);
+
             boolean exists = taskMapper.selectCount(new QueryWrapper<Task>()
                 .eq("family_id", familyId)
                 .eq("source_type", "plan")
                 .eq("source_id", plan.getId())
-                .eq("title", line.trim())) > 0;
+                .eq("title", line.trim())
+                .ge("deadline", todayStart.getTime())
+                .lt("deadline", todayEnd.getTime())) > 0;
             if (exists) continue;
 
             Task task = new Task();
@@ -158,6 +166,7 @@ public class HealthPlanServiceImpl implements HealthPlanService {
             task.setSourceType("plan");
             task.setSourceId(plan.getId());
             task.setFrequency("daily");
+            task.setRepeatType("daily");
             task.setCategory("健康方案");
             task.setNeedReview(0);
             task.setCreatedAt(now);