xf 1 year ago
parent
commit
618238dba2
1 changed files with 28 additions and 16 deletions
  1. 28 16
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

+ 28 - 16
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -109,14 +109,8 @@ namespace Hotline.FlowEngine.Workflows
                 PrevChosenStepCode = null,
             };
             _mapper.Map(workflow.WorkflowDefinition, startStep);
-            _mapper.Map(dto, startStep);
-            await _workflowStepRepository.AddAsync(startStep, cancellationToken);
-
-            //starttrace
-            var startTrace = _mapper.Map<WorkflowTrace>(startStep);
-            startTrace.StepId = startStep.Id;
-            startTrace.Status = EWorkflowTraceStatus.Normal;
-            await _workflowTraceRepository.AddAsync(startTrace, cancellationToken);
+            workflow.Steps.Add(startStep);
+            //await _workflowStepRepository.AddAsync(startStep, cancellationToken);
 
             //firststep
             var firstStep = new WorkflowStep
@@ -128,21 +122,34 @@ namespace Hotline.FlowEngine.Workflows
                 PrevChosenStepCode = dto.NextStepCode,
             };
             _mapper.Map(workflow.WorkflowDefinition, firstStep);
-            await _workflowStepRepository.AddAsync(firstStep, cancellationToken);
+            workflow.Steps.Add(firstStep);
+            //await _workflowStepRepository.AddAsync(firstStep, cancellationToken);
+            await _workflowStepRepository.AddRangeAsync(workflow.Steps, cancellationToken);
+
+            //starttrace
+            var startTrace = _mapper.Map<WorkflowTrace>(startStep);
+            startTrace.StepId = startStep.Id;
+            startTrace.Status = EWorkflowTraceStatus.Normal;
+            workflow.Traces.Add(startTrace);
+            //await _workflowTraceRepository.AddAsync(startTrace, cancellationToken);
 
             //firsttrace
             var firstTrace = _mapper.Map<WorkflowTrace>(firstStep);
             firstTrace.StepId = firstStep.Id;
             firstTrace.Status = EWorkflowTraceStatus.Normal;
-            await _workflowTraceRepository.AddAsync(firstTrace, cancellationToken);
+            workflow.Traces.Add(firstTrace);
+            //await _workflowTraceRepository.AddAsync(firstTrace, cancellationToken);
+            await _workflowTraceRepository.AddRangeAsync(workflow.Traces, cancellationToken);
 
             //办理开始节点
             var counterSignType = GetCounterSignType(firstStep.BusinessType);
 
             await HandleStepAsync(startStep, workflow, dto, counterSignType, cancellationToken);
-
             await _workflowStepRepository.UpdateAsync(startStep, cancellationToken);
 
+            //handle trace
+            await NextTraceAsync(workflow, dto, startStep, cancellationToken);
+
             //更新实际办理节点信息
             workflow.UpdateWorkflowActualHandleInfo(startStep,
                 _sessionContext.RequiredUserId, _sessionContext.UserName,
@@ -903,10 +910,18 @@ namespace Hotline.FlowEngine.Workflows
             _mapper.Map(dto, step);
 
             //step办理状态
+            HandleStep(step, dto.NextStepCode);
+        }
+
+        /// <summary>
+        /// 办理节点(赋值节点的办理对象信息)
+        /// </summary>
+        private void HandleStep(WorkflowStep step, string nextStepCode)
+        {
             step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-                dto.NextStepCode);
+                nextStepCode);
         }
 
 
@@ -1319,10 +1334,7 @@ namespace Hotline.FlowEngine.Workflows
                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
 
-            step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
-                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-                string.Empty);
+            HandleStep(step, string.Empty);
 
             await _workflowStepRepository.AddAsync(step, cancellationToken);