实现
This commit is contained in:
		@@ -65,7 +65,6 @@ func (app *Application) initializeSystemPlans() error {
 | 
			
		||||
			// 将数据库中已存在的计划的ID和运行时状态字段赋值给预定义计划
 | 
			
		||||
			predefinedPlan.ID = foundExistingPlan.ID
 | 
			
		||||
			predefinedPlan.ExecuteCount = foundExistingPlan.ExecuteCount
 | 
			
		||||
			predefinedPlan.Status = foundExistingPlan.Status
 | 
			
		||||
 | 
			
		||||
			if err := app.Infra.Repos.PlanRepo.UpdatePlan(predefinedPlan); err != nil {
 | 
			
		||||
				return fmt.Errorf("更新预定义计划 '%s' 失败: %w", predefinedPlan.Name, err)
 | 
			
		||||
@@ -191,8 +190,22 @@ func (app *Application) initializePendingTasks() error {
 | 
			
		||||
		affectedPlanIDs[log.PlanID] = struct{}{}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 3. 对于每个受影响的 PlanID,重置其 execute_count 并将其状态设置为 Failed
 | 
			
		||||
	// 3. 对于每个受影响的 PlanID,重置其 execute_count 并将其状态设置为 Failed, 系统计划不受此影响
 | 
			
		||||
	for planID := range affectedPlanIDs {
 | 
			
		||||
		// 首先,获取计划的详细信息以判断其类型
 | 
			
		||||
		plan, err := planRepo.GetBasicPlanByID(planID)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logger.Errorf("在尝试修正计划状态时,获取计划 #%d 的基本信息失败: %v", planID, err)
 | 
			
		||||
			continue // 获取失败,跳过此计划
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 如果是系统计划,则不应标记为失败,仅记录日志
 | 
			
		||||
		if plan.PlanType == models.PlanTypeSystem {
 | 
			
		||||
			logger.Warnf("检测到系统计划 #%d 在应用崩溃前处于未完成状态,但根据策略,将保持其原有状态不标记为失败。", planID)
 | 
			
		||||
			continue // 跳过,不处理
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 对于非系统计划,执行原有的失败标记逻辑
 | 
			
		||||
		logger.Warnf("检测到计划 #%d 在应用崩溃前处于未完成状态,将重置其计数并标记为失败。", planID)
 | 
			
		||||
		// 使用 UpdatePlanStateAfterExecution 来更新主表状态,避免影响关联数据
 | 
			
		||||
		if err := planRepo.UpdatePlanStateAfterExecution(planID, 0, models.PlanStatusFailed); err != nil {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user