xf 2 tygodni temu
rodzic
commit
49718399f5

+ 9 - 2
src/Hotline.Api/Controllers/OrderApi/OrderDelayController.cs

@@ -38,8 +38,15 @@ public class OrderDelayController : BaseController
     /// 延期审核
     /// </summary>
     [HttpPost("review")]
-    public Task ReviewAsync([FromBody]OrderDelayReviewRequest request) =>
+    public Task Review([FromBody]OrderDelayReviewRequest request) =>
         _orderDelayApplication.ReviewAsync(request, HttpContext.RequestAborted);
 
-
+    /// <summary>
+    /// 延期批量审核
+    /// </summary>
+    /// <param name="request"></param>
+    /// <returns></returns>
+    [HttpPost("batch-review")]
+    public Task BatchReview([FromBody]BatchOrderDelayReviewRequest request) =>
+        _orderDelayApplication.BatchReviewAsync(request, HttpContext.RequestAborted);
 }

+ 5 - 4
src/Hotline.Application/Jobs/ApptaskJob.cs

@@ -5,6 +5,7 @@ using Hotline.Share.Dtos.Order;
 using Microsoft.Extensions.DependencyInjection;
 using Hotline.Application.OrderApp.OrderVisitApp;
 using Hotline.Share.Dtos.Order.OrderVisit;
+using Hotline.Share.Dtos.Order.OrderDelay;
 
 namespace Hotline.Application.Jobs
 {
@@ -27,11 +28,11 @@ namespace Hotline.Application.Jobs
             if (task is null) return;
             switch (task.TaskType)
             {
-                case ETaskType.Delay:
-                    //var delayExecutor = _serviceProvider.GetService<IApptaskExecutor<BatchDelayNextFlowDto>>();
-                    //await _apptaskDomainService.ExecuteAsync(delayExecutor, task, context.CancellationToken);
+                case ETaskType.OrderDelay:
+                    var delayExecutor = _serviceProvider.GetService<IApptaskExecutor<OrderDelayReviewRequest>>();
+                    await _apptaskDomainService.ExecuteAsync(delayExecutor, task, context.CancellationToken);
                     break;
-                case ETaskType.Screen:
+                case ETaskType.OrderScreen:
                     break;
                 case ETaskType.VoiceVisit:
                     var vvExecutor = _serviceProvider.GetService<IApptaskExecutor<VoiceVisitRequest>>();

+ 8 - 0
src/Hotline.Application/OrderApp/OrderDelayApp/IOrderDelayApplication.cs

@@ -20,4 +20,12 @@ public interface IOrderDelayApplication
     /// <param name="cancellation"></param>
     /// <returns></returns>
     Task ReviewAsync(OrderDelayReviewRequest request, CancellationToken cancellation);
+
+    /// <summary>
+    /// 延期批量审核
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellation"></param>
+    /// <returns></returns>
+    Task BatchReviewAsync(BatchOrderDelayReviewRequest request, CancellationToken cancellation);
 }

+ 15 - 20
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayApplication.cs

@@ -175,7 +175,7 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
     }
 
     /// <summary>
-    /// 批量审核
+    /// 延期批量审核
     /// </summary>
     /// <returns></returns>
     public async Task BatchReviewAsync(BatchOrderDelayReviewRequest request, CancellationToken cancellation)
@@ -185,32 +185,27 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
             .Where(d => delayIds.Contains(d.Id))
             .ToListAsync(cancellation);
 
-        var apptaskItems = new List<ApptaskItem>();
+        var apptaskItems = new List<AddApptaskItemRequest>();
+        var req = new OrderDelayReviewRequest
+        {
+            IsPass = request.IsPass,
+            NextWorkflow = request.NextWorkflow
+        };
         foreach (var delay in delays)
         {
-            var stepId = request.DelayWithStepIds.First(d => d.DelayId == delay.Id).StepId;
-            request.NextWorkflow.StepId = stepId;
-            apptaskItems.Add(new ApptaskItem
+            req.NextWorkflow.StepId = request.DelayWithStepIds.First(d => d.DelayId == delay.Id).StepId;
+            apptaskItems.Add(new AddApptaskItemRequest
             {
                 BusinessId = delay.Id,
-                TaskType = ETaskType.Delay,
-                TaskParams = System.Text.Json.JsonSerializer.Serialize(request.NextWorkflow)
+                TaskParams = req
             });
         }
 
-        var apptask = new Apptask
+        await _apptaskDomainService.AddAsync(new AddApptaskRequest
         {
-            TaskType = ETaskType.Delay,
-            ApptaskItems = apptaskItems,
-        };
-        
-        //
-        //var addApptask = new AddApptaskRequest
-        //{
-            
-        //}
-        
-        
-        //_apptaskDomainService.AddAsync()
+            TaskType = ETaskType.OrderDelay,
+            Priority = 0,
+            ApptaskItems = apptaskItems
+        }, cancellation);
     }
 }

+ 34 - 16
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayAuditTaskExecutor.cs

@@ -1,20 +1,38 @@
-//using Hotline.BatchTask;
-//using Hotline.Share.Dtos.Order;
-//using XF.Domain.Dependency;
+using Hotline.BatchTask;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Dtos.Order.OrderDelay;
+using XF.Domain.Dependency;
 
-//namespace Hotline.Application.OrderApp.OrderDelayApp;
+namespace Hotline.Application.OrderApp.OrderDelayApp;
 
-//public class OrderDelayAuditTaskExecutor : IApptaskExecutor<BatchDelayNextFlowDto>, IScopeDependency
-//{
-//    /// <summary>
-//    /// 执行任务
-//    /// </summary>
-//    /// <param name="request"></param>
-//    /// <param name="cancellation"></param>
-//    /// <returns>是否成功执行</returns>
-//    public async Task<ApptaskExecuteResult> ExecuteAsync(BatchDelayNextFlowDto? request, CancellationToken cancellation)
-//    {
+public class OrderDelayAuditTaskExecutor : IApptaskExecutor<OrderDelayReviewRequest>, IScopeDependency
+{
+    private readonly IOrderDelayApplication _orderDelayApplication;
 
-//    }
+    public OrderDelayAuditTaskExecutor(IOrderDelayApplication orderDelayApplication)
+    {
+        _orderDelayApplication = orderDelayApplication;
+    }
 
-//}
+    /// <summary>
+    /// 执行任务
+    /// </summary>
+    /// <param name="request"></param>
+    /// <param name="cancellation"></param>
+    /// <returns>是否成功执行</returns>
+    public async Task<ApptaskExecuteResult> ExecuteAsync(OrderDelayReviewRequest? request, CancellationToken cancellation)
+    {
+        if (request == null)
+            return ApptaskExecuteResult.Fail("请求参数为空");
+        try
+        {
+            await _orderDelayApplication.ReviewAsync(request, cancellation);
+        }
+        catch (Exception ex)
+        {
+            return ApptaskExecuteResult.Fail(ex.Message);
+        }
+
+        return ApptaskExecuteResult.Success();
+    }
+}

+ 0 - 2
src/Hotline.Share/Dtos/Order/OrderDelay/OrderDelayReviewRequest.cs

@@ -4,8 +4,6 @@ namespace Hotline.Share.Dtos.Order.OrderDelay;
 
 public class OrderDelayReviewRequest
 {
-    public string DelayId { get; set; }
-
     /// <summary>
     /// 是否通过
     /// </summary>

+ 2 - 2
src/Hotline.Share/Enums/BatchTask/ETaskType.cs

@@ -11,13 +11,13 @@ public enum ETaskType
     /// 延期
     /// </summary>
     [Description("延期任务")]
-    Delay = 1,
+    OrderDelay = 1,
 
     /// <summary>
     /// 甄别
     /// </summary>
     [Description("甄别任务")]
-    Screen = 2,
+    OrderScreen = 2,
 
     /// <summary>
     /// 语音回访

+ 5 - 1
src/Hotline/BatchTask/ApptaskDomainService.cs

@@ -40,6 +40,9 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
         if (!result.IsValid)
             throw new ValidationException(result.Errors.FirstOrDefault()?.ErrorMessage);
 
+        var priority = 9;
+        if (request.Priority.HasValue && request.Priority.Value >= 0 && request.Priority.Value < 9)
+            priority = request.Priority.Value;
         var apptask = new Apptask
         {
             Name = request.Name,
@@ -52,7 +55,7 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
                 TaskStatus = ETaskStatus.Waiting,
                 TaskParams = d.TaskParams is null ? null : System.Text.Json.JsonSerializer.Serialize(d.TaskParams),
                 TryLimit = request.TryLimit,
-                Priority = request.Priority ?? 9,
+                Priority = priority,
             }).ToList()
         };
 
@@ -117,6 +120,7 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
         var taskItems = await _apptaskItemRepository.Queryable()
             .Where(d => d.Tries < d.TryLimit
                         && (d.TaskStatus == ETaskStatus.Waiting || d.TaskStatus == ETaskStatus.Failed))
+            .OrderBy(d => d.Priority)
             .OrderBy(d => d.CreationTime)
             .Take(10)
             .ToListAsync(cancellation);