|
@@ -115,6 +115,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
current.OrgAreaCode, current.OrgAreaName,
|
|
current.OrgAreaCode, current.OrgAreaName,
|
|
current.OrgLevel);
|
|
current.OrgLevel);
|
|
|
|
|
|
|
|
+ workflow.UpdateCurrentStepWhenHandle(startStep,
|
|
|
|
+ current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
|
+
|
|
var endTrace = await EndAsync(workflow, dto, firstStepDefine,
|
|
var endTrace = await EndAsync(workflow, dto, firstStepDefine,
|
|
startStep, current, expiredTime, cancellationToken);
|
|
startStep, current, expiredTime, cancellationToken);
|
|
return;
|
|
return;
|
|
@@ -636,6 +639,14 @@ namespace Hotline.FlowEngine.Workflows
|
|
//更新实际办理节点信息
|
|
//更新实际办理节点信息
|
|
workflow.UpdateActualStepWhenAssign(newPrevStep, prevStep.HandlerOrgId, prevStep.HandlerOrgName);
|
|
workflow.UpdateActualStepWhenAssign(newPrevStep, prevStep.HandlerOrgId, prevStep.HandlerOrgName);
|
|
|
|
|
|
|
|
+ workflow.UpdateCurrentStepWhenAssign(newPrevStep, new FlowStepHandler
|
|
|
|
+ {
|
|
|
|
+ UserId = prevStep.HandlerId,
|
|
|
|
+ Username = prevStep.HandlerName,
|
|
|
|
+ OrgId = prevStep.HandlerOrgId,
|
|
|
|
+ OrgName = prevStep.HandlerOrgName,
|
|
|
|
+ });
|
|
|
|
+
|
|
//更新流程可办理对象
|
|
//更新流程可办理对象
|
|
workflow.UpdatePreviousHandlers(applicantId, applicantOrgId, prevStep);
|
|
workflow.UpdatePreviousHandlers(applicantId, applicantOrgId, prevStep);
|
|
|
|
|
|
@@ -1047,10 +1058,34 @@ namespace Hotline.FlowEngine.Workflows
|
|
//todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
|
|
//todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
|
|
var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
|
|
var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
|
|
cancellationToken: cancellationToken);
|
|
cancellationToken: cancellationToken);
|
|
|
|
+ var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ await RecallToTargetStepAsync(workflow, startStep, opinion, current, cancellationToken);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 撤回至派单节点
|
|
|
|
+ /// </summary>
|
|
|
|
+ public async Task RecallToSendStepAsync(string workflowId, string opinion, ISessionContext current,
|
|
|
|
+ CancellationToken cancellationToken)
|
|
|
|
+ {
|
|
|
|
+ //todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
|
|
|
|
+ var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
|
|
|
|
+ cancellationToken: cancellationToken);
|
|
|
|
+ var startStep = workflow.Steps.FirstOrDefault(d=>d.BusinessType == EBusinessType.Send);
|
|
|
|
+ if (startStep is null)
|
|
|
|
+ throw new UserFriendlyException($"未找到派单节点, workflowId: {workflowId}", "该流程无派单节点");
|
|
|
|
+
|
|
|
|
+ await RecallToTargetStepAsync(workflow, startStep, opinion, current, cancellationToken);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private async Task RecallToTargetStepAsync(Workflow workflow, WorkflowStep targetStep, string opinion, ISessionContext current,
|
|
|
|
+ CancellationToken cancellationToken)
|
|
|
|
+ {
|
|
//update uncompleted traces
|
|
//update uncompleted traces
|
|
await RecallTraceAsync(workflow.Traces, opinion, current, cancellationToken);
|
|
await RecallTraceAsync(workflow.Traces, opinion, current, cancellationToken);
|
|
|
|
|
|
- var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
|
|
|
|
workflow.Steps.RemoveAll(d => true);
|
|
workflow.Steps.RemoveAll(d => true);
|
|
await _workflowStepRepository.RemoveRangeAsync(workflow.Steps, cancellationToken);
|
|
await _workflowStepRepository.RemoveRangeAsync(workflow.Steps, cancellationToken);
|
|
|
|
|
|
@@ -1060,26 +1095,28 @@ namespace Hotline.FlowEngine.Workflows
|
|
workflow.SetStatusRunnable();
|
|
workflow.SetStatusRunnable();
|
|
|
|
|
|
var newStartStep =
|
|
var newStartStep =
|
|
- await DuplicateStepWithTraceAsync(workflow, startStep, EWorkflowTraceType.Recall, cancellationToken);
|
|
|
|
|
|
+ await DuplicateStepWithTraceAsync(workflow, targetStep, EWorkflowTraceType.Recall, cancellationToken);
|
|
|
|
|
|
- //更新当前办理节点信息
|
|
|
|
- //workflow.UpdateWorkflowCurrentStepInfo(false,
|
|
|
|
- // _sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
|
- // _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
|
- // _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
|
- // nextStep: newStartStep);
|
|
|
|
- workflow.UpdateActualStepWhenAssign(startStep, startStep.HandlerOrgId, startStep.HandlerOrgName);
|
|
|
|
|
|
+ workflow.UpdateActualStepWhenAssign(targetStep, targetStep.HandlerOrgId, targetStep.HandlerOrgName);
|
|
|
|
|
|
- var isOrgToCenter = CheckIfFlowFromOrgToCenter(workflow, startStep);
|
|
|
|
|
|
+ workflow.UpdateCurrentStepWhenAssign(targetStep, new FlowStepHandler
|
|
|
|
+ {
|
|
|
|
+ UserId = targetStep.HandlerId,
|
|
|
|
+ Username = targetStep.HandlerName,
|
|
|
|
+ OrgId = targetStep.HandlerOrgId,
|
|
|
|
+ OrgName = targetStep.HandlerOrgName,
|
|
|
|
+ });
|
|
|
|
|
|
- var flowAssignInfo = FlowAssignInfo.Create(startStep.FlowAssignType.Value, startStep.Handlers);
|
|
|
|
|
|
+ var isOrgToCenter = CheckIfFlowFromOrgToCenter(workflow, targetStep);
|
|
|
|
+
|
|
|
|
+ var flowAssignInfo = FlowAssignInfo.Create(targetStep.FlowAssignType.Value, targetStep.Handlers);
|
|
workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
|
|
workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
|
|
|
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
|
|
|
|
- var dto = _mapper.Map<RecallDto>(startStep);
|
|
|
|
- dto.WorkflowId = workflowId;
|
|
|
|
- await _mediator.Publish(new RecallNotify(workflow, startStep, dto, isOrgToCenter), cancellationToken);
|
|
|
|
|
|
+ var dto = _mapper.Map<RecallDto>(targetStep);
|
|
|
|
+ dto.WorkflowId = workflow.Id;
|
|
|
|
+ await _mediator.Publish(new RecallNotify(workflow, targetStep, dto, isOrgToCenter), cancellationToken);
|
|
}
|
|
}
|
|
|
|
|
|
///// <summary>
|
|
///// <summary>
|
|
@@ -1393,12 +1430,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
return startStep;
|
|
return startStep;
|
|
}
|
|
}
|
|
|
|
|
|
- public async Task<Kv> FindActualHandlerAsync(string workflowId, CancellationToken cancellationToken)
|
|
|
|
- {
|
|
|
|
- var workflow = await GetWorkflowAsync(workflowId, cancellationToken: cancellationToken);
|
|
|
|
- return new Kv(workflow.ActualHandleOrgCode, workflow.ActualHandleOrgName);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 流程结束
|
|
/// 流程结束
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -2195,6 +2226,14 @@ namespace Hotline.FlowEngine.Workflows
|
|
//更新实际办理节点信息
|
|
//更新实际办理节点信息
|
|
workflow.UpdateActualStepWhenAssign(targetStepNew, targetStep.HandlerOrgId, targetStep.HandlerOrgName);
|
|
workflow.UpdateActualStepWhenAssign(targetStepNew, targetStep.HandlerOrgId, targetStep.HandlerOrgName);
|
|
|
|
|
|
|
|
+ workflow.UpdateCurrentStepWhenAssign(targetStepNew, new FlowStepHandler
|
|
|
|
+ {
|
|
|
|
+ UserId = targetStep.HandlerId,
|
|
|
|
+ Username = targetStep.HandlerName,
|
|
|
|
+ OrgId = targetStep.HandlerOrgId,
|
|
|
|
+ OrgName = targetStep.HandlerOrgName
|
|
|
|
+ });
|
|
|
|
+
|
|
workflow.Assign(flowAssignInfo.FlowAssignType, flowAssignInfo.GetHandlerIds());
|
|
workflow.Assign(flowAssignInfo.FlowAssignType, flowAssignInfo.GetHandlerIds());
|
|
workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
|
|
workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
|
|
|
|
|
|
@@ -2488,10 +2527,21 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//当topcsStep结束cs时,实际办理节点应该更新为newStep
|
|
//当topcsStep结束cs时,实际办理节点应该更新为newStep
|
|
if (startCountersignStep.Id == workflow.TopCountersignStepId)
|
|
if (startCountersignStep.Id == workflow.TopCountersignStepId)
|
|
|
|
+ {
|
|
workflow.UpdateActualStepWhenAssign(newStep,
|
|
workflow.UpdateActualStepWhenAssign(newStep,
|
|
startCountersignStep.HandlerOrgId,
|
|
startCountersignStep.HandlerOrgId,
|
|
startCountersignStep.HandlerOrgName);
|
|
startCountersignStep.HandlerOrgName);
|
|
|
|
|
|
|
|
+ workflow.UpdateCurrentStepWhenAssign(newStep,
|
|
|
|
+ new FlowStepHandler
|
|
|
|
+ {
|
|
|
|
+ UserId = startCountersignStep.HandlerId,
|
|
|
|
+ Username = startCountersignStep.HandlerName,
|
|
|
|
+ OrgId = startCountersignStep.HandlerOrgId,
|
|
|
|
+ OrgName = startCountersignStep.HandlerOrgName
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
//csEndStep又开启了cs,在结束会签时,如果该节点是topcs的end节点, workflow.topcsStep应该更新为前一cs开启stepId
|
|
//csEndStep又开启了cs,在结束会签时,如果该节点是topcs的end节点, workflow.topcsStep应该更新为前一cs开启stepId
|
|
if (startCountersignStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
if (startCountersignStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
workflow.TopCountersignStepId = startCountersignStep.CountersignStartStepId;
|
|
workflow.TopCountersignStepId = startCountersignStep.CountersignStartStepId;
|