|
@@ -102,11 +102,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
ECounterSignType? counterSignType, DateTime? expiredTime,
|
|
|
ISessionContext current, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- //1. 创建first节点 (和trace)2.办理开始节点
|
|
|
-
|
|
|
if (firstStepDefine.StepType is EStepType.End)
|
|
|
{
|
|
|
- await _mediator.Publish(new StartWorkflowNotify(workflow, dto, flowAssignInfo, startStep.WorkflowTrace),
|
|
|
+ await _mediator.Publish(
|
|
|
+ new StartWorkflowNotify(workflow, dto, flowAssignInfo, startStep.WorkflowTrace),
|
|
|
cancellationToken);
|
|
|
|
|
|
//firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
|
|
@@ -116,8 +115,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
current.OrgAreaCode, current.OrgAreaName,
|
|
|
current.OrgLevel);
|
|
|
|
|
|
- var endTrace = await EndAsync(workflow, dto, firstStepDefine, startStep, current, expiredTime,
|
|
|
- cancellationToken);
|
|
|
+ var endTrace = await EndAsync(workflow, dto, firstStepDefine,
|
|
|
+ startStep, current, expiredTime, cancellationToken);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -153,6 +152,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//指派实际办理节点
|
|
|
UpdateActualStep(workflow, dto, firstStepDefine, firstSteps);
|
|
|
|
|
|
+ //更新实际办理节点
|
|
|
+ UpdateCurrentStep(workflow, dto, firstSteps);
|
|
|
|
|
|
//发起会签时记录顶层会签节点(必须在update currentStep之后)
|
|
|
if (dto.IsStartCountersign && !workflow.IsInCountersign)
|
|
@@ -235,7 +236,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 查询工作流包含当前用户结束会签权限(是否可结束)
|
|
|
/// </summary>
|
|
|
public async Task<(Workflow Workflow, string? CountersignId, bool CanHandle, bool CanPrevious, WorkflowTrace?
|
|
|
- Trace)>
|
|
|
+ Trace)>
|
|
|
GetWorkflowHandlePermissionAsync(
|
|
|
string workflowId, string userId, string orgId, string[] roleIds,
|
|
|
CancellationToken cancellationToken = default)
|
|
@@ -256,14 +257,14 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
var unhandlePreviousTrace = workflow.Traces.FirstOrDefault(d =>
|
|
|
- d.Status is not EWorkflowStepStatus.Handled
|
|
|
+ d.Status is not EWorkflowStepStatus.Handled
|
|
|
//&& d.TraceType is EWorkflowTraceType.Previous
|
|
|
);
|
|
|
//var previousOpinion = unhandlePreviousTrace?.Opinion ?? null;
|
|
|
|
|
|
var unCompletedCountersign = workflow.Countersigns
|
|
|
.FirstOrDefault(d => !d.IsCompleted() && d.StarterOrgId == orgId);
|
|
|
- if (unCompletedCountersign is null)
|
|
|
+ if (unCompletedCountersign is null)
|
|
|
return (workflow, null, canHandle, canPrevious, unhandlePreviousTrace);
|
|
|
|
|
|
//var existCountersignEndStep = workflow.Steps.Exists(d =>
|
|
@@ -477,6 +478,12 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
current.OrgLevel);
|
|
|
}
|
|
|
|
|
|
+ if(workflow.CurrentStepId == currentStep.Id)
|
|
|
+ {
|
|
|
+ workflow.UpdateCurrentStepWhenHandle(currentStep,
|
|
|
+ current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
+ }
|
|
|
+
|
|
|
//检查是否流转到流程终点
|
|
|
if (nextStepDefine.StepType is EStepType.End)
|
|
|
{
|
|
@@ -509,6 +516,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//指派实际办理节点
|
|
|
UpdateActualStep(workflow, dto, nextStepDefine, nextSteps);
|
|
|
|
|
|
+ //更新实际办理节点
|
|
|
+ UpdateCurrentStep(workflow, dto, nextSteps);
|
|
|
+
|
|
|
//发起会签时记录顶层会签节点
|
|
|
if (dto.IsStartCountersign && !workflow.IsInCountersign)
|
|
|
workflow.StartCountersign(currentStep.Id, counterSignType);
|
|
@@ -631,7 +641,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.SetStatusRunnable();
|
|
|
|
|
|
//更新实际办理节点信息
|
|
|
- workflow.UpdateActualStepWhenAssign(newPrevStep, prevStep.HandlerOrgName, prevStep.HandlerOrgId);
|
|
|
+ workflow.UpdateActualStepWhenAssign(newPrevStep, prevStep.HandlerOrgId, prevStep.HandlerOrgName);
|
|
|
|
|
|
//更新流程可办理对象
|
|
|
workflow.UpdatePreviousHandlers(applicantId, applicantOrgId, prevStep);
|
|
@@ -1065,7 +1075,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
// _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
// _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
// nextStep: newStartStep);
|
|
|
- workflow.UpdateActualStepWhenAssign(startStep, startStep.HandlerOrgName, startStep.HandlerOrgId);
|
|
|
+ workflow.UpdateActualStepWhenAssign(startStep, startStep.HandlerOrgId, startStep.HandlerOrgName);
|
|
|
|
|
|
var isOrgToCenter = CheckIfFlowFromOrgToCenter(workflow, startStep);
|
|
|
|
|
@@ -1480,6 +1490,15 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
#region private method
|
|
|
|
|
|
+ private static void UpdateCurrentStep(Workflow workflow, BasicWorkflowDto dto, List<WorkflowStep> nextSteps)
|
|
|
+ {
|
|
|
+ if (dto.IsStartCountersign) return;
|
|
|
+ if (workflow.IsInCountersign) return;
|
|
|
+
|
|
|
+ var nextHandler = dto.NextHandlers.First();
|
|
|
+ workflow.UpdateCurrentStepWhenAssign(nextSteps.First(), nextHandler);
|
|
|
+ }
|
|
|
+
|
|
|
private static void UpdateActualStep(Workflow workflow, BasicWorkflowDto dto, StepDefine nextStepDefine,
|
|
|
List<WorkflowStep> nextSteps)
|
|
|
{
|
|
@@ -1489,14 +1508,16 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
if (nextStepDefine.BusinessType is EBusinessType.Center or EBusinessType.Send)
|
|
|
{
|
|
|
- workflow.UpdateActualStepWhenAssign(nextSteps.First(), actualHandleOrgCode: OrgSeedData.CenterId,
|
|
|
+ workflow.UpdateActualStepWhenAssign(nextSteps.First(),
|
|
|
+ actualHandleOrgCode: OrgSeedData.CenterId,
|
|
|
actualHandleOrgName: "市民热线服务中心");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var nextHandler = dto.NextHandlers.First();
|
|
|
workflow.UpdateActualStepWhenAssign(nextSteps.First(),
|
|
|
- actualHandleOrgCode: nextHandler.Key, actualHandleOrgName: nextHandler.Value);
|
|
|
+ actualHandleOrgCode: nextHandler.Key,
|
|
|
+ actualHandleOrgName: nextHandler.Value);
|
|
|
}
|
|
|
|
|
|
//if ( /*workflow.FlowType is EFlowType.Handle &&*/
|
|
@@ -2164,7 +2185,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
null, expiredTime, cancellationToken: cancellationToken)).First();
|
|
|
|
|
|
//更新实际办理节点信息
|
|
|
- workflow.UpdateActualStepWhenAssign(targetStepNew, targetStep.HandlerOrgName, targetStep.HandlerOrgId);
|
|
|
+ workflow.UpdateActualStepWhenAssign(targetStepNew, targetStep.HandlerOrgId, targetStep.HandlerOrgName);
|
|
|
|
|
|
workflow.Assign(flowAssignInfo.FlowAssignType, flowAssignInfo.GetHandlerIds());
|
|
|
workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
|
|
@@ -2459,8 +2480,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//当topcsStep结束cs时,实际办理节点应该更新为newStep
|
|
|
if (startCountersignStep.Id == workflow.TopCountersignStepId)
|
|
|
- workflow.UpdateActualStepWhenAssign(newStep, startCountersignStep.HandlerOrgName,
|
|
|
- startCountersignStep.HandlerOrgId);
|
|
|
+ workflow.UpdateActualStepWhenAssign(newStep,
|
|
|
+ startCountersignStep.HandlerOrgId,
|
|
|
+ startCountersignStep.HandlerOrgName);
|
|
|
|
|
|
//csEndStep又开启了cs,在结束会签时,如果该节点是topcs的end节点, workflow.topcsStep应该更新为前一cs开启stepId
|
|
|
if (startCountersignStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|