Explorar el Código

重构任务相关逻辑并新增验证器支持

- 引入新命名空间,优化代码组织结构。
- 重命名 `Apptask` 类属性及方法,提升可读性:
  - `TaskName` -> `Name`,移除默认值。
  - `TaskDesc` -> `Description`,改为可空类型。
  - `QueryProgressAsync` -> `GetProgressAsync`。
- 新增 `CreateName` 方法,自动生成任务名称。
- 为 `ETaskType` 枚举值添加 `Description` 特性。
- 在 `AddAsync` 方法中引入 `FluentValidation` 校验逻辑:
  - 使用 `ApptaskValidator` 校验任务参数。
  - 若任务名称为空,调用 `CreateName` 生成名称。
- 新增 `ApptaskValidator` 和 `ApptaskItemValidator` 验证器类:
  - 校验任务类型、子任务列表及业务 ID 等。
- 调整命名空间顺序,提升代码一致性。
xfe hace 3 semanas
padre
commit
ae812fdcf7

+ 9 - 3
src/Hotline/BatchTask/Apptask.cs

@@ -1,4 +1,6 @@
-using SqlSugar;
+using System.ComponentModel;
+using Exam.Infrastructure.Extensions;
+using SqlSugar;
 using XF.Domain.Repository;
 
 namespace Hotline.BatchTask;
@@ -11,12 +13,12 @@ public class Apptask : CreationEntity
     /// <summary>
     /// 任务名称
     /// </summary>
-    public string TaskName { get; set; } = string.Empty;
+    public string Name { get; set; }
 
     /// <summary>
     /// 任务描述
     /// </summary>
-    public string TaskDesc { get; set; } = string.Empty;
+    public string? Description { get; set; }
 
     /// <summary>
     /// 任务类型
@@ -25,6 +27,8 @@ public class Apptask : CreationEntity
 
     [Navigate(NavigateType.OneToMany, nameof(ApptaskItem.ApptaskId))]
     public List<ApptaskItem> ApptaskItems { get; set; }
+
+    public void CreateName() => Name = $"{TaskType.GetDescription()}-{DateTime.Now:yyyyMMddHHmmssfff}";
 }
 
 
@@ -99,10 +103,12 @@ public enum ETaskType
     /// <summary>
     /// 延期
     /// </summary>
+    [Description("延期任务")]
     Delay = 1,
 
     /// <summary>
     /// 甄别
     /// </summary>
+    [Description("甄别任务")]
     Screen = 2,
 }

+ 14 - 2
src/Hotline/BatchTask/ApptaskDomainService.cs

@@ -1,4 +1,7 @@
-namespace Hotline.BatchTask;
+using FluentValidation;
+using Hotline.Validators.BatchTask;
+
+namespace Hotline.BatchTask;
 
 public class ApptaskDomainService : IApptaskDomainService
 {
@@ -7,6 +10,15 @@ public class ApptaskDomainService : IApptaskDomainService
     /// </summary>
     public Task<string> AddAsync(Apptask apptask, CancellationToken cancellation)
     {
+        var validator = new ApptaskValidator();
+        var result = validator.Validate(apptask);
+        if (!result.IsValid)
+            throw new ValidationException(result.Errors.FirstOrDefault()?.ErrorMessage);
+
+        if(string.IsNullOrEmpty(apptask.Name))
+            apptask.CreateName();
+
+
         //todo 1.参数校验,
         //2. 任务名称可选:依据任务类型生成 3.类型、次数上限由主表冗余到明细
         throw new NotImplementedException();
@@ -16,7 +28,7 @@ public class ApptaskDomainService : IApptaskDomainService
     /// 查询任务进度
     /// </summary>
     /// <returns></returns>
-    public Task<ApptaskProgress> QueryProgressAsync(string taskId, CancellationToken cancellation)
+    public Task<ApptaskProgress> GetProgressAsync(string taskId, CancellationToken cancellation)
     {
         throw new NotImplementedException();
     }

+ 1 - 1
src/Hotline/BatchTask/IApptaskDomainService.cs

@@ -17,7 +17,7 @@ namespace Hotline.BatchTask
         /// 查询任务进度
         /// </summary>
         /// <returns></returns>
-        Task<ApptaskProgress> QueryProgressAsync(string taskId, CancellationToken cancellation);
+        Task<ApptaskProgress> GetProgressAsync(string taskId, CancellationToken cancellation);
 
         /// <summary>
         /// 终止任务

+ 38 - 0
src/Hotline/Validators/BatchTask/ApptaskValidator.cs

@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using FluentValidation;
+using Hotline.BatchTask;
+
+namespace Hotline.Validators.BatchTask;
+
+public class ApptaskValidator : AbstractValidator<Apptask>
+{
+    public ApptaskValidator()
+    {
+        RuleFor(d => d.TaskType)
+            .Cascade(CascadeMode.Stop)
+            .NotEmpty()
+            .IsInEnum()
+            .WithMessage("任务类型不能为空");
+
+        RuleFor(d => d.ApptaskItems)
+            .NotEmpty()
+            .WithMessage("任务明细不能为空");
+
+        RuleForEach(d => d.ApptaskItems)
+            .SetValidator(new ApptaskItemValidator());
+    }
+}
+
+public class ApptaskItemValidator : AbstractValidator<ApptaskItem>
+{
+    public ApptaskItemValidator()
+    {
+        RuleFor(d => d.BusinessId)
+            .NotEmpty()
+            .WithMessage("业务id不能为空");
+    }
+}