using System; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using NPP.SmartSchedue.Api.Contracts.Core.Enums; using NPP.SmartSchedue.Api.Contracts.Domain.Work; using NPP.SmartSchedue.Api.Contracts.Services.Integration.Models; using NPP.SmartSchedue.Api.Repositories.Work; namespace NPP.SmartSchedue.Api.Services.Integration { /// /// 任务状态验证器 /// 专门负责步骤3:状态验证的详细分析 /// public class WorkOrderStatusValidator { private readonly WorkOrderRepository _workOrderRepository; private readonly ILogger _logger; public WorkOrderStatusValidator( WorkOrderRepository workOrderRepository, ILogger logger) { _workOrderRepository = workOrderRepository; _logger = logger; } /// /// 修改操作状态验证(基于已查询的任务对象) /// public WorkOrderValidationResult ValidateModifyStatus(WorkOrderEntity task) { if (task == null) { return WorkOrderValidationResult.Fail("任务不存在"); } try { // 详细状态分析 switch ((WorkOrderStatusEnum)task.Status) { case WorkOrderStatusEnum.PendingSubmit: case WorkOrderStatusEnum.PendingReview: case WorkOrderStatusEnum.PendingAssignment: case WorkOrderStatusEnum.PendingIntegration: // 这些状态允许修改 return WorkOrderValidationResult.Success(); case WorkOrderStatusEnum.Assigned: // 已分配状态:需要检查是否已开始执行 if (task.ActualStartTime.HasValue) { return WorkOrderValidationResult.Fail("任务已开始执行,不允许修改"); } return WorkOrderValidationResult.Success(); case WorkOrderStatusEnum.InProgress: return WorkOrderValidationResult.Fail("任务进行中,不允许修改"); case WorkOrderStatusEnum.Completed: return WorkOrderValidationResult.Fail("任务已完成,不允许修改"); case WorkOrderStatusEnum.Cancelled: return WorkOrderValidationResult.Fail("任务已取消,不允许修改"); default: return WorkOrderValidationResult.Fail("未知的任务状态"); } } catch (Exception ex) { _logger.LogError(ex, "验证任务修改状态时发生错误,TaskId: {TaskId}", task.Id); return WorkOrderValidationResult.Fail($"验证失败:{ex.Message}"); } } /// /// 删除操作状态验证(基于已查询的任务对象) /// public WorkOrderValidationResult ValidateDeleteStatus(WorkOrderEntity task) { if (task == null) { return WorkOrderValidationResult.Fail("任务不存在"); } try { // 详细状态分析 switch ((WorkOrderStatusEnum)task.Status) { case WorkOrderStatusEnum.PendingSubmit: case WorkOrderStatusEnum.PendingReview: case WorkOrderStatusEnum.PendingAssignment: case WorkOrderStatusEnum.PendingIntegration: // 这些状态允许删除 return WorkOrderValidationResult.Success(); case WorkOrderStatusEnum.Assigned: // 已分配但未开始可以删除 if (!task.ActualStartTime.HasValue) { return WorkOrderValidationResult.Success(); } return WorkOrderValidationResult.Fail("任务已开始执行,不允许删除,请使用取消操作"); case WorkOrderStatusEnum.InProgress: return WorkOrderValidationResult.Fail("任务进行中,不允许删除,请使用取消操作"); case WorkOrderStatusEnum.Completed: return WorkOrderValidationResult.Fail("任务已完成,不允许删除"); case WorkOrderStatusEnum.Cancelled: // 已取消的任务可以物理删除 return WorkOrderValidationResult.Success(); default: return WorkOrderValidationResult.Fail("未知的任务状态"); } } catch (Exception ex) { _logger.LogError(ex, "验证任务删除状态时发生错误,TaskId: {TaskId}", task.Id); return WorkOrderValidationResult.Fail($"验证失败:{ex.Message}"); } } /// /// 取消操作状态验证(基于已查询的任务对象) /// public WorkOrderValidationResult ValidateCancelStatus(WorkOrderEntity task) { if (task == null) { return WorkOrderValidationResult.Fail("任务不存在"); } try { // 详细状态分析 switch ((WorkOrderStatusEnum)task.Status) { case WorkOrderStatusEnum.PendingSubmit: case WorkOrderStatusEnum.PendingReview: case WorkOrderStatusEnum.PendingAssignment: case WorkOrderStatusEnum.PendingIntegration: case WorkOrderStatusEnum.Assigned: case WorkOrderStatusEnum.InProgress: // 这些状态允许取消 return WorkOrderValidationResult.Success(); case WorkOrderStatusEnum.Completed: return WorkOrderValidationResult.Fail("任务已完成,不能取消"); case WorkOrderStatusEnum.Cancelled: return WorkOrderValidationResult.Fail("任务已经是取消状态"); default: return WorkOrderValidationResult.Fail("未知的任务状态"); } } catch (Exception ex) { _logger.LogError(ex, "验证任务取消状态时发生错误,TaskId: {TaskId}", task.Id); return WorkOrderValidationResult.Fail($"验证失败:{ex.Message}"); } } } }