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
         }