Bläddra i källkod

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 år sedan
förälder
incheckning
a47e17d272

+ 1 - 2
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -216,8 +216,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         var flowAssignInfo = await GetNextStepFlowAssignInfoAsync(workflow, currentStep, nextStepDefine, dto, cancellationToken);
 
-        await _workflowDomainService.NextAsync(workflow, currentStep, dto, nextStepDefine, flowAssignInfo, dto.StepExpiredTime,
-            cancellationToken);
+        await _workflowDomainService.NextAsync(workflow, currentStep, dto, nextStepDefine, flowAssignInfo, cancellationToken);
     }
 
     /// <summary>

+ 1 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -45,7 +45,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 办理(流转至下一节点)
         /// </summary>
-        Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, DateTime expiredTime, CancellationToken cancellationToken);
+        Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
 
         /// <summary>
         /// 退回(返回前一节点)

+ 21 - 20
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -286,8 +286,8 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 办理(流转至下一节点)
         /// </summary>
-        public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine,
-            FlowAssignInfo flowAssignInfo, DateTime expiredTime, CancellationToken cancellationToken)
+        public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto,
+            StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
         {
             //todo 1.汇总节点的创建不能简单看上级节点发起的是否全办完
             ValidatePermission(workflow);
@@ -307,23 +307,23 @@ namespace Hotline.FlowEngine.Workflows
             //结束当前会签流程
             if (currentStep.IsCountersignEndStep)
             {
-                var currentCountersign = workflow.Countersigns.FirstOrDefault(d => d.Id == currentStep.CountersignId);
-                if (currentCountersign is null)
+                var countersignStartStep =
+                    workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
+                if (countersignStartStep is null)
                     throw new UserFriendlyException(
-                        $"未查询到对应会签信息,workflowId:{workflow.Id}, countersignId:{currentStep.CountersignId}", "无效会签编号");
+                        $"未查询到会签开始step, workflowId: {workflow.Id}, currentStepId: {currentStep.Id}",
+                        "未查询到会签开始节点");
 
-                //1.根据当前节点配置查找结束节点对应开始节点 2.如该开始节点与当前会签开始节点吻合说明可以结束
-
-                //如果!=,说明未发起会签而是继承的外层会签
-                if (currentStep.CountersignStartStepId == currentCountersign.StartStepId)
+                if (countersignStartStep.IsStartCountersign)
                 {
-                    //结束step会签信息
-                    var countersignStartStep =
-                        workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
-                    if (countersignStartStep is null)
+                    var currentCountersign =
+                        workflow.Countersigns.FirstOrDefault(d => d.Id == countersignStartStep.StartCountersignId);
+                    if (currentCountersign is null)
                         throw new UserFriendlyException(
-                            $"未查询到会签开始step, workflowId: {workflow.Id}, startStepId: {currentCountersign.StartStepId}", "未查询到会签开始节点");
+                            $"未查询到对应会签信息,workflowId:{workflow.Id}, countersignId:{currentStep.CountersignId}",
+                            "无效会签编号");
 
+                    //结束step会签信息
                     countersignStartStep.CountersignEnd();
                     updateSteps.Add(countersignStartStep);
 
@@ -390,7 +390,7 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.CenterToOrg(CalculateExpiredTime(workflow.WorkflowDefinition.Code));//todo 过期时间
 
             //创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
-            var nextSteps = await CreateNextStepsAsync(workflow, nextStepDefine, currentStep, dto, expiredTime, cancellationToken);
+            var nextSteps = await CreateNextStepsAsync(workflow, nextStepDefine, currentStep, dto, dto.StepExpiredTime, cancellationToken);
 
             //赋值当前节点的下级办理节点
             if (dto.IsStartCountersign
@@ -481,7 +481,7 @@ namespace Hotline.FlowEngine.Workflows
                         if (csStartStep is null)
                             throw new UserFriendlyException("未查询到会签节点");
 
-                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, cancellationToken);
+                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, expiredTime, cancellationToken);
                     }
                 }
                 else
@@ -489,7 +489,7 @@ namespace Hotline.FlowEngine.Workflows
                     if (dto.BackToCountersignEnd)
                     {
                         //todo check if cs all complete, create next
-                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, cancellationToken);
+                        nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, expiredTime, cancellationToken);
                     }
                     else
                     {
@@ -541,7 +541,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 根据传入节点的上一节点创建会签汇总节点(汇总传入节点的前一节点)
         /// </summary>
         private async Task<List<WorkflowStep>> CreateCsEndStepsByPrevStepAsync(Workflow workflow, WorkflowStep step,
-            BasicWorkflowDto dto, CancellationToken cancellationToken)
+            BasicWorkflowDto dto, DateTime expiredTime, CancellationToken cancellationToken)
         {
             var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == step.PrevStepId);
             if (prevStep is null)
@@ -551,7 +551,7 @@ namespace Hotline.FlowEngine.Workflows
             if (prevStep.StartedCountersignHasAllHandled())
             {
                 //todo 创建会签汇总节点
-                var countersignEndStep = await CreateCountersignEndStepAsync(prevStep, dto, cancellationToken);
+                var countersignEndStep = await CreateCountersignEndStepAsync(prevStep, dto, expiredTime, cancellationToken);
                 nextSteps = new List<WorkflowStep> { countersignEndStep };
 
                 //create trace
@@ -564,7 +564,7 @@ namespace Hotline.FlowEngine.Workflows
         }
 
         private async Task<WorkflowStep> CreateCountersignEndStepAsync(WorkflowStep countersignStartStep,
-            BasicWorkflowDto dto, CancellationToken cancellationToken)
+            BasicWorkflowDto dto, DateTime expiredTime, CancellationToken cancellationToken)
         {
             var csEndStep = _mapper.Map<WorkflowStep>(countersignStartStep);
             csEndStep.Status = EWorkflowStepStatus.WaitForAccept;
@@ -578,6 +578,7 @@ namespace Hotline.FlowEngine.Workflows
             csEndStep.CountersignStartStepId = countersignStartStep.Id;
             csEndStep.Name = dto.NextStepName;
             csEndStep.TimeLimit = GetTimeLimit(""); //todo 过期时间
+            csEndStep.StepExpiredTime = expiredTime;
             csEndStep.Handlers = countersignStartStep.Handlers.Where(d => d.Key == countersignStartStep.HandlerId || d.Key == countersignStartStep.HandlerOrgId).ToList();
 
             csEndStep.Reset();