xfe преди 1 година
родител
ревизия
dbe5fb54d9

+ 14 - 7
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -149,10 +149,18 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto,
             new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) });
 
-        startStep.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
-            _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-            _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-            _sessionContext.OrgIsCenter, firstStepDefine.Code);
+        var flowAssignInfo =
+            await GetNextStepFlowAssignInfoAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic, cancellationToken);
+
+        var counterSignType = _workflowDomainService.GetCounterSignType(startStep.BusinessType);
+
+        //办理开始节点
+        await _workflowDomainService.HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
+            cancellationToken);
+        //startStep.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
+        //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+        //    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+        //    _sessionContext.OrgIsCenter, firstStepDefine.Code);
 
         if (dto.Files.Any())
             startStep.FileJson = await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, startStep.Id, cancellationToken);
@@ -168,11 +176,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         await _workflowTraceRepository.AddAsync(startTrace, cancellationToken);
         workflow.Traces.Add(startTrace);
 
-        var flowAssignInfo =
-            await GetNextStepFlowAssignInfoAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic, cancellationToken);
+
 
         await _workflowDomainService.StartAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic,
-            flowAssignInfo, cancellationToken);
+            flowAssignInfo, counterSignType, cancellationToken);
 
         return workflow.Id;
     }

+ 13 - 2
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -6,6 +6,7 @@ using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Settings;
 using Hotline.Users;
+using XF.Domain.Entities;
 
 namespace Hotline.FlowEngine.Workflows
 {
@@ -22,7 +23,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 进行流程的开始节点
         /// </summary>
         Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
-            bool isNextDynamic, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
+            bool isNextDynamic, FlowAssignInfo flowAssignInfo, ECounterSignType counterSignType, CancellationToken cancellationToken);
 
         /// <summary>
         /// 查询工作流
@@ -184,6 +185,16 @@ namespace Hotline.FlowEngine.Workflows
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         Task<Kv> FindActualHandlerAsync(string workflowId, CancellationToken cancellationToken);
-        
+
+        /// <summary>
+        /// 办理节点
+        /// </summary>
+        Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
+            EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 获取会签类型
+        /// </summary>
+        ECounterSignType GetCounterSignType(EBusinessType businessType);
     }
 }

+ 10 - 9
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -101,7 +101,8 @@ namespace Hotline.FlowEngine.Workflows
         /// 流程开始
         /// </summary>
         public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
-            StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
+            StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo, 
+            ECounterSignType counterSignType, CancellationToken cancellationToken)
         {
             //1. 创建first节点 (和trace)2.办理开始节点 
 
@@ -127,10 +128,10 @@ namespace Hotline.FlowEngine.Workflows
             if (firstSteps.Any())
                 workflow.Steps.AddRange(firstSteps);
 
-            //办理开始节点
-            var counterSignType = GetCounterSignType(startStep.BusinessType);
-            await HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
-                cancellationToken);
+            //var counterSignType = GetCounterSignType(startStep.BusinessType);
+            ////办理开始节点
+            //await HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
+            //    cancellationToken);
 
             //赋值当前节点的下级办理节点
             if (dto.IsStartCountersign)
@@ -1252,7 +1253,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <param name="businessType"></param>
         /// <returns></returns>
         /// <exception cref="ArgumentOutOfRangeException"></exception>
-        private ECounterSignType GetCounterSignType(EBusinessType businessType) =>
+        public ECounterSignType GetCounterSignType(EBusinessType businessType) =>
             businessType switch
             {
                 EBusinessType.Center => ECounterSignType.Center,
@@ -1264,7 +1265,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 办理节点
         /// </summary>
-        private async Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
+        public async Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
             EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, CancellationToken cancellationToken)
         {
             if (step.Status is EWorkflowStepStatus.Handled)
@@ -1289,8 +1290,8 @@ namespace Hotline.FlowEngine.Workflows
             //办理参数
             _mapper.Map(dto, step);
 
-            ////step办理状态
-            //HandleStep(step, dto.NextStepCode);
+            //step办理状态
+            HandleStep(step, dto.NextStepCode);
         }
 
         private bool CheckIsActualHandle(Workflow workflow, WorkflowStep step, StepDefine nextStepDefine,