Эх сурвалжийг харах

order flow next publish with workflowtrace

xf 1 жил өмнө
parent
commit
2de26077a6

+ 22 - 5
src/Hotline.Application/Handlers/FlowEngine/NextStepHandler.cs

@@ -1,11 +1,15 @@
-using Hotline.Application.FlowEngine;
+using DotNetCore.CAP;
+using Hotline.Application.FlowEngine;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.Workflows;
 using Hotline.KnowledgeBase;
 using Hotline.Orders;
 using Hotline.Settings;
 using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Mq;
+using MapsterMapper;
 using MediatR;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
@@ -19,14 +23,20 @@ public class NextStepHandler : INotificationHandler<NextStepNotify>
     private readonly IOrderDomainService _orderDomainService;
     private readonly ILogger<NextStepHandler> _logger;
     private readonly IKnowledgeDomainService _knowledgeDomainService;
+    private readonly ICapPublisher _capPublisher;
+    private readonly IMapper _mapper;
 
     public NextStepHandler(
         IOrderDomainService orderDomainService,
         IKnowledgeDomainService knowledgeDomainService,
+        ICapPublisher capPublisher,
+        IMapper mapper,
         ILogger<NextStepHandler> logger)
     {
         _orderDomainService = orderDomainService;
         _knowledgeDomainService = knowledgeDomainService;
+        _capPublisher = capPublisher;
+        _mapper = mapper;
         _logger = logger;
     }
 
@@ -44,10 +54,17 @@ public class NextStepHandler : INotificationHandler<NextStepNotify>
         switch (workflow.ModuleCode)
         {
             case WorkflowModuleConsts.OrderManage:
-                await _orderDomainService.ManageFlowNextAsync(
-                    notification.FlowAssignMode, notification.IsCountersignStart, notification.IsCountersignEnd,
-                    workflow.ExternalId, workflow.CurrentStepTime, workflow.CurrentStepName, workflow.ExpiredTime, workflow.ProcessType,
-                    cancellationToken);
+                var orderDto = await _orderDomainService.ManageFlowNextAsync(
+                      notification.FlowAssignMode, notification.IsCountersignStart, notification.IsCountersignEnd,
+                      workflow.ExternalId, workflow.CurrentStepTime, workflow.CurrentStepName, workflow.ExpiredTime, workflow.ProcessType,
+                      cancellationToken);
+
+                await _capPublisher.PublishAsync(EventNames.HotlineOrderFlow, new OrderFlowDto
+                {
+                    Order = orderDto,
+                    WorkflowTrace = _mapper.Map<WorkflowTraceDto>(notification.Trace)
+                },
+                    cancellationToken: cancellationToken);
                 break;
             case WorkflowModuleConsts.KnowledgeAdd:
             case WorkflowModuleConsts.KnowledgeUpdate:

+ 25 - 0
src/Hotline.Share/Dtos/Order/OrderFlowDto.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Share.Dtos.FlowEngine;
+
+namespace Hotline.Share.Dtos.Order
+{
+    /// <summary>
+    /// 工单流转
+    /// </summary>
+    public class OrderFlowDto
+    {
+        /// <summary>
+        /// 工单信息
+        /// </summary>
+        public OrderDto Order { get; set; }
+
+        /// <summary>
+        /// 办理节点信息
+        /// </summary>
+        public WorkflowTraceDto WorkflowTrace { get; set; }
+    }
+}

+ 1 - 1
src/Hotline/FlowEngine/Notifications/WorkflowNotify.cs

@@ -9,7 +9,7 @@ public record WorkflowNotify(Workflow Workflow, BasicWorkflowDto Dto) : INotific
 
 public record StartWorkflowNotify(Workflow Workflow, BasicWorkflowDto Dto, bool IsCountersignStart, FlowAssignMode FlowAssignMode) : WorkflowNotify(Workflow, Dto);
 
-public record NextStepNotify(Workflow Workflow, BasicWorkflowDto Dto, bool IsCountersignStart, bool IsCountersignEnd, FlowAssignMode FlowAssignMode) : WorkflowNotify(Workflow, Dto);
+public record NextStepNotify(Workflow Workflow, BasicWorkflowDto Dto, WorkflowTrace Trace, bool IsCountersignStart, bool IsCountersignEnd, FlowAssignMode FlowAssignMode) : WorkflowNotify(Workflow, Dto);
 
 public record AcceptWorkflowNotify(Workflow Workflow) : INotification;
 

+ 5 - 3
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -426,11 +426,11 @@ namespace Hotline.FlowEngine.Workflows
 
             #region 流转记录
 
-            await NextTraceAsync(workflow, dto, currentStep, cancellationToken);
+            var trace = await NextTraceAsync(workflow, dto, currentStep, cancellationToken);
 
             #endregion
 
-            await _mediator.Publish(new NextStepNotify(workflow, dto, isStartCountersign, isCountersignOver, flowAssignMode), cancellationToken);
+            await _mediator.Publish(new NextStepNotify(workflow, dto, trace, isStartCountersign, isCountersignOver, flowAssignMode), cancellationToken);
         }
 
         /// <summary>
@@ -753,12 +753,14 @@ namespace Hotline.FlowEngine.Workflows
         //    await _workflowTraceRepository.AddAsync(trace, cancellationToken);
         //}
 
-        private async Task NextTraceAsync(Workflow workflow, BasicWorkflowDto dto, WorkflowStep step, CancellationToken cancellationToken)
+        private async Task<WorkflowTrace> NextTraceAsync(Workflow workflow, BasicWorkflowDto dto, WorkflowStep step, CancellationToken cancellationToken)
         {
             var trace = await GetWorkflowTraceAsync(workflow.Id, step.Id, cancellationToken);
             _mapper.Map(dto, trace);
             _mapper.Map(step, trace);
             await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
+
+            return trace;
         }
 
         private async Task AcceptTraceAsync(Workflow workflow, WorkflowStep step, CancellationToken cancellationToken)

+ 2 - 1
src/Hotline/Orders/IOrderDomainService.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using Hotline.FlowEngine;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
 using XF.Domain.Entities;
 
@@ -32,7 +33,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 工单办理流程流转(每个节点办理都会触发)
         /// </summary>
-        Task ManageFlowNextAsync(FlowAssignMode assignMode, bool isCountersignStart, bool isCountersignEnd,
+        Task<OrderDto> ManageFlowNextAsync(FlowAssignMode assignMode, bool isCountersignStart, bool isCountersignEnd,
             string? orderId, DateTime? currentStepTime, string? currentStepName, DateTime expiredTime, EProcessType processType, CancellationToken cancellationToken);
 
         /// <summary>

+ 4 - 3
src/Hotline/Orders/OrderDomainService.cs

@@ -103,7 +103,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     /// <summary>
     /// 工单办理(每个节点都会触发)
     /// </summary>
-    public async Task ManageFlowNextAsync(FlowAssignMode assignMode,
+    public async Task<OrderDto> ManageFlowNextAsync(FlowAssignMode assignMode,
         bool isCountersignStart, bool isCountersignEnd,
         string? orderId, DateTime? currentStepTime, string? currentStepName, DateTime expiredTime, EProcessType processType,
         CancellationToken cancellationToken)
@@ -120,8 +120,9 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
         await _orderRepository.UpdateAsync(order, cancellationToken);
 
-        await _capPublisher.PublishAsync(EventNames.HotlineOrderFlow, _mapper.Map<OrderDto>(order),
-            cancellationToken: cancellationToken);
+        return _mapper.Map<OrderDto>(order);
+        //await _capPublisher.PublishAsync(EventNames.HotlineOrderFlow, _mapper.Map<OrderDto>(order),
+        //    cancellationToken: cancellationToken);
     }
 
     /// <summary>