paiban/NPP.SmartSchedue.Api/Services/Integration/WorkOrderStatusValidator.cs
Asoka.Wang 2b3f9acdce 123
2025-09-22 19:09:47 +08:00

170 lines
6.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 任务状态验证器
/// 专门负责步骤3状态验证的详细分析
/// </summary>
public class WorkOrderStatusValidator
{
private readonly WorkOrderRepository _workOrderRepository;
private readonly ILogger<WorkOrderStatusValidator> _logger;
public WorkOrderStatusValidator(
WorkOrderRepository workOrderRepository,
ILogger<WorkOrderStatusValidator> logger)
{
_workOrderRepository = workOrderRepository;
_logger = logger;
}
/// <summary>
/// 修改操作状态验证(基于已查询的任务对象)
/// </summary>
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}");
}
}
/// <summary>
/// 删除操作状态验证(基于已查询的任务对象)
/// </summary>
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}");
}
}
/// <summary>
/// 取消操作状态验证(基于已查询的任务对象)
/// </summary>
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}");
}
}
}
}