xf 2 年之前
父節點
當前提交
90fc4159e7
共有 1 個文件被更改,包括 20 次插入6 次删除
  1. 20 6
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

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

@@ -440,20 +440,34 @@ namespace Hotline.FlowEngine.Workflows
 
             //重置上级节点办理数据
             //prevStep.Status = EWorkflowStepStatus.Assigned;
+            if (prevStepBox.Status is EWorkflowStepStatus.Completed)
+            {
+                prevStepBox.Status = EWorkflowStepStatus.Assigned;
+                await _workflowStepRepository.UpdateAsync(prevStepBox, cancellationToken);
+            }
+
             prevStep.Reset();
-            await _workflowStepRepository.UpdateAsync(prevStep, cancellationToken);
+            var newPrevStep = _mapper.Map<WorkflowStep>(prevStep);
+            newPrevStep.PreviousId = prevStep.PreviousId;
+            newPrevStep.IsMain = prevStep.IsMain;
+            newPrevStep.ParentId = prevStep.ParentId;
+            newPrevStep.Handlers = prevStep.Handlers;
+            newPrevStep.StartCountersignId = prevStep.StartCountersignId;
+            newPrevStep.CountersignId = prevStep.CountersignId;
+            newPrevStep.IsStartedCountersignComplete = prevStep.IsStartedCountersignComplete;
+            await _workflowStepRepository.AddAsync(newPrevStep, cancellationToken);
+
+            //remove workflow.steps
+            await _workflowStepRepository.RemoveRangeAsync(new List<WorkflowStep> { prevStep, currentStep },
+                cancellationToken);
 
             //更新流程可办理对象
-            workflow.UpdatePreviousHandlers(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgCode, prevStep);
+            workflow.UpdatePreviousHandlers(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgCode, newPrevStep);
             await _workflowRepository.UpdateAsync(workflow, cancellationToken);
 
             //update trace
             await PreviousTraceAsync(workflow.Id, dto, currentStep, cancellationToken);
 
-            //remove workflow.steps
-            await _workflowStepRepository.RemoveRangeAsync(new List<WorkflowStep> { currentStepBox, currentStep },
-                cancellationToken);
-
             //todo publish
         }