|
@@ -96,8 +96,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 流程开始
|
|
|
/// </summary>
|
|
|
public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
|
- StepDefine firstStepDefine,
|
|
|
- FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
|
|
|
+ StepDefine firstStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//1. 创建first节点 (和trace)2.办理开始节点
|
|
|
|
|
@@ -109,7 +108,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//办理开始节点
|
|
|
var counterSignType = GetCounterSignType(startStep.BusinessType);
|
|
|
- await HandleStepAsync(startStep, workflow, dto, counterSignType, cancellationToken);
|
|
|
+ await HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
|
|
|
+ cancellationToken);
|
|
|
//赋值当前节点的下级办理节点
|
|
|
if (dto.IsStartCountersign)
|
|
|
startStep.CreateCountersignSteps(firstSteps);
|
|
@@ -285,11 +285,11 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
var counterSignType = GetCounterSignType(currentStep.BusinessType);
|
|
|
|
|
|
- await HandleStepAsync(currentStep, workflow, dto, counterSignType, cancellationToken);
|
|
|
+ await HandleStepAsync(currentStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
|
|
|
+ cancellationToken);
|
|
|
|
|
|
currentStep.IsActualHandled = CheckIsActualHandle(workflow, currentStep, nextStepDefine, dto);
|
|
|
|
|
|
- //update realhandle info
|
|
|
_mapper.Map(dto, workflow);
|
|
|
|
|
|
var updateSteps = new List<WorkflowStep> { currentStep };
|
|
@@ -326,20 +326,36 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //操作为回到会签汇总时,更新开始会签节点的会签办理状态
|
|
|
- if (currentStep.IsInCountersign() && dto.BackToCountersignEnd)
|
|
|
+ if (currentStep.IsInCountersign())
|
|
|
{
|
|
|
- if (currentStep.IsCountersignEndStep)
|
|
|
+ //操作为回到会签汇总时,更新开始会签节点的会签办理状态
|
|
|
+ if (dto.BackToCountersignEnd)
|
|
|
{
|
|
|
- //汇总节点(非顶级)
|
|
|
- var csStartStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
- if (csStartStep is null)
|
|
|
- throw new UserFriendlyException("未查询到会签开始节点");
|
|
|
- PrevStepCsHandled(workflow, csStartStep, ref updateSteps);
|
|
|
+ if (currentStep.IsCountersignEndStep)
|
|
|
+ {
|
|
|
+ //汇总节点(非顶级)
|
|
|
+ var csStartStep =
|
|
|
+ workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
+ if (csStartStep is null)
|
|
|
+ throw new UserFriendlyException("未查询到会签开始节点");
|
|
|
+ PrevStepCsHandled(workflow, csStartStep, ref updateSteps);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PrevStepCsHandled(workflow, currentStep, ref updateSteps);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- PrevStepCsHandled(workflow, currentStep, ref updateSteps);
|
|
|
+ //会签中正常办理节点,更新会签members办理状态
|
|
|
+ var countersign = workflow.Countersigns.FirstOrDefault(d => d.Id == currentStep.CountersignId);
|
|
|
+ if (countersign is null)
|
|
|
+ throw new UserFriendlyException(
|
|
|
+ $"会签数据异常, workflowId: {currentStep.WorkflowId}, countersignId: {currentStep.CountersignId}",
|
|
|
+ "会签数据异常");
|
|
|
+ countersign.MemberHandled(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
|
|
|
+ //update cs
|
|
|
+ await _workflowCountersignRepository.UpdateAsync(countersign, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -632,7 +648,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
_sessionContext.RequiredUserId);
|
|
|
- await HandleStepAsync(currentStep, workflow, dto, null, cancellationToken);
|
|
|
+ await HandleStepAsync(currentStep, workflow, dto, null, null, cancellationToken);
|
|
|
|
|
|
var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
|
|
|
var endTrace = await EndAsync(workflow, dto, endStepDefine, currentStep, EReviewResult.Failed,
|
|
@@ -1036,7 +1052,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 办理节点
|
|
|
/// </summary>
|
|
|
private async Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
|
|
|
- ECounterSignType? counterSignType, CancellationToken cancellationToken)
|
|
|
+ EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (step.Status is EWorkflowStepStatus.Handled)
|
|
|
throw UserFriendlyException.SameMessage("当前节点状态已办理");
|
|
@@ -1049,7 +1065,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//创建会签数据
|
|
|
if (dto.IsStartCountersign)
|
|
|
- await StartCountersignAsync(workflow, step, dto, counterSignType.Value, cancellationToken);
|
|
|
+ await StartCountersignAsync(workflow, step, dto, flowAssignType, counterSignType, cancellationToken);
|
|
|
|
|
|
//办理参数
|
|
|
_mapper.Map(dto, step);
|
|
@@ -1058,7 +1074,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
HandleStep(step, dto.NextStepCode);
|
|
|
}
|
|
|
|
|
|
- private bool CheckIsActualHandle(Workflow workflow, WorkflowStep step, StepDefine nextStepDefine, BasicWorkflowDto dto)
|
|
|
+ private bool CheckIsActualHandle(Workflow workflow, WorkflowStep step, StepDefine nextStepDefine,
|
|
|
+ BasicWorkflowDto dto)
|
|
|
{
|
|
|
//1. workflow是否为办理类型 2. 非会签:当前是否为普通节点and下一节点是否为汇总 or endStep 3. 会签:当前操作为汇总还是继续往下办理?thk: 汇总以后但未回到top又往下办理的场景,前面实际办理部门也算作办理部门
|
|
|
if (workflow.FlowType is not EFlowType.Handle) return false;
|
|
@@ -1090,10 +1107,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 开始会签(创建会签数据,更新currentStep会签数据)
|
|
|
/// </summary>
|
|
|
private async Task StartCountersignAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
|
- ECounterSignType counterSignType, CancellationToken cancellationToken)
|
|
|
+ EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var countersign = await CreateCountersignAsync(
|
|
|
- workflow.Id, startStep, dto.NextHandlers.Count,
|
|
|
+ workflow.Id, startStep, dto.NextHandlers, flowAssignType,
|
|
|
counterSignType, startStep.StepExpiredTime.Value,
|
|
|
startStep.CountersignId, cancellationToken);
|
|
|
startStep.StartCountersign(countersign.Id);
|
|
@@ -1183,9 +1200,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
private async Task<WorkflowCountersign> CreateCountersignAsync(
|
|
|
- string workflowId, WorkflowStep startStep, int memberCount,
|
|
|
- ECounterSignType counterSignType, DateTime stepExpiredTime,
|
|
|
- string? parentId = null,
|
|
|
+ string workflowId, WorkflowStep startStep, List<Kv> handlers, EFlowAssignType? flowAssignType,
|
|
|
+ ECounterSignType? counterSignType, DateTime stepExpiredTime, string? parentId = null,
|
|
|
CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var countersign = new WorkflowCountersign
|
|
@@ -1203,9 +1219,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
StarterOrgAreaName = _sessionContext.OrgAreaName,
|
|
|
|
|
|
ParentId = parentId,
|
|
|
- Members = memberCount,
|
|
|
+ Members = _mapper.Map<List<CountersignMember>>(handlers),
|
|
|
+ FlowAssignType = flowAssignType,
|
|
|
CounterSignType = counterSignType,
|
|
|
- StartExpiredTime = stepExpiredTime,
|
|
|
};
|
|
|
await _workflowCountersignRepository.AddAsync(countersign, cancellationToken);
|
|
|
return countersign;
|