|
@@ -101,7 +101,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 流程开始
|
|
|
/// </summary>
|
|
|
public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
|
- StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo,
|
|
|
+ StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo,
|
|
|
ECounterSignType counterSignType, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//1. 创建first节点 (和trace)2.办理开始节点
|
|
@@ -539,7 +539,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
// throw UserFriendlyException.SameMessage("会签流程不支持退回");
|
|
|
|
|
|
var currentStep = GetUnHandleStep(workflow.Steps, operater.OrgId, operater.Id);
|
|
|
- if (currentStep.IsInCountersign())
|
|
|
+ var isCurrentTopCountersignEndStep = currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId);
|
|
|
+ if (currentStep.IsInCountersign() && !isCurrentTopCountersignEndStep)
|
|
|
throw UserFriendlyException.SameMessage("会签节点不支持退回");
|
|
|
|
|
|
//保存附件
|
|
@@ -550,11 +551,30 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
|
|
|
|
//find prevStep, update handler
|
|
|
- var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
|
|
|
+ WorkflowStep? prevStep;
|
|
|
+ if (isCurrentTopCountersignEndStep)
|
|
|
+ {
|
|
|
+ //todo end countersign
|
|
|
+ //prev is topstart's prev
|
|
|
+ var countersignStartStep =
|
|
|
+ workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
+ prevStep = workflow.Steps.FirstOrDefault(d => d.Id == countersignStartStep.PrevStepId);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
|
|
|
+ }
|
|
|
if (prevStep == null)
|
|
|
throw UserFriendlyException.SameMessage("未查询到前一节点");
|
|
|
|
|
|
+ if(prevStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
|
+ prevStep = workflow.Steps.FirstOrDefault(d => d.Id == prevStep.CountersignStartStepId);
|
|
|
+ if (prevStep == null)
|
|
|
+ throw UserFriendlyException.SameMessage("未查询到会签发起节点");
|
|
|
+
|
|
|
var removeSteps = new List<WorkflowStep> { currentStep, prevStep };
|
|
|
+ //todo remove steps after prevStep
|
|
|
+
|
|
|
|
|
|
//1. remove steps between cs end to start except startStep 2. prev == start
|
|
|
if (prevStep.IsCountersignEndStep)
|