|
@@ -111,7 +111,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
|
|
|
workflow.UpdateActualStepWhenHandle(startStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
-
|
|
|
+
|
|
|
workflow.UpdateCurrentStepWhenHandle(startStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
|
|
|
var endTrace = await EndAsync(workflow, dto, firstStepDefine, startStep, current, expiredTime, cancellationToken);
|
|
@@ -258,7 +258,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
var unhandlePreviousTrace = workflow.Traces.FirstOrDefault(d =>
|
|
|
d.Status is not EWorkflowStepStatus.Handled
|
|
|
- //&& d.TraceType is EWorkflowTraceType.Previous
|
|
|
+ //&& d.TraceType is EWorkflowTraceType.Previous
|
|
|
);
|
|
|
//var previousOpinion = unhandlePreviousTrace?.Opinion ?? null;
|
|
|
|
|
@@ -458,7 +458,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//var trace = await NextTraceAsync(workflow, dto, currentStep, cancellationToken);
|
|
|
|
|
|
-
|
|
|
#endregion
|
|
|
|
|
|
#region 处理流程
|
|
@@ -622,17 +621,18 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
applicantOrgAreaCode, applicantOrgAreaName,
|
|
|
applicantIsCenter, dto.Opinion);
|
|
|
|
|
|
- //await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
|
|
|
+ //await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
|
|
|
|
|
|
- //如果有传入期满时间 新节点为传入的期满时间
|
|
|
- if (dto.ExpiredTime.HasValue)
|
|
|
+ //如果有传入期满时间 新节点为传入的期满时间
|
|
|
+ if (dto.ExpiredTime.HasValue)
|
|
|
prevStep.StepExpiredTime = dto.ExpiredTime;
|
|
|
- //退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
|
|
|
- if (dto.NextHandlers.Any())
|
|
|
+ //退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
|
|
|
+ if (dto.NextHandlers.Any())
|
|
|
{
|
|
|
var handle = dto.NextHandlers.FirstOrDefault();
|
|
|
prevStep.Assign(handle.UserId, handle.Username, handle.OrgId, handle.OrgName, handle.RoleId, handle.RoleName);
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
//复制上一个节点为待接办
|
|
|
var newPrevStep =
|
|
|
await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
|
|
@@ -651,7 +651,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.SetStatusRunnable();
|
|
|
|
|
|
//更新实际办理节点信息
|
|
|
- workflow.UpdateActualStepWhenAssign(newPrevStep,new FlowStepHandler
|
|
|
+ workflow.UpdateActualStepWhenAssign(newPrevStep, new FlowStepHandler
|
|
|
{
|
|
|
UserId = prevStep.HandlerId,
|
|
|
Username = prevStep.HandlerName,
|
|
@@ -839,7 +839,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (step.WorkflowTrace is null)
|
|
|
throw new UserFriendlyException("未查询节点对应快照信息");
|
|
|
step.WorkflowTrace.FlowAssignType = EFlowAssignType.User;
|
|
|
- step.WorkflowTrace.Assign(handler.userId, handler.username,
|
|
|
+ step.WorkflowTrace.Assign(handler.userId, handler.username,
|
|
|
handler.orgId, handler.orgName, handler.roleId, handler.roleName);
|
|
|
}
|
|
|
}
|
|
@@ -924,7 +924,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
CancellationToken cancellation)
|
|
|
{
|
|
|
return await _workflowStepRepository.Queryable()
|
|
|
- .Where(d => d.WorkflowId == workflowId && d.HandlerOrgId == orgId && d.StepType != EStepType.End && d.StepType != EStepType.Summary)
|
|
|
+ .Where(d => d.WorkflowId == workflowId && d.HandlerOrgId == orgId && d.StepType != EStepType.End && d.StepType != EStepType.Summary)
|
|
|
//.Where(d => d.StepHandlers.Any(sh => sh.OrgId == orgId) && d.WorkflowId == workflowId)
|
|
|
.OrderByDescending(d => d.HandleTime)
|
|
|
.FirstAsync(cancellation);
|
|
@@ -937,13 +937,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
public async Task<WorkflowStep> FindTopHandleStepAsync(string workflowId, CancellationToken cancellation)
|
|
|
{
|
|
|
var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellation);
|
|
|
- return workflow.Steps.FirstOrDefault(x => x.Id == workflow.TopCountersignStepId);
|
|
|
+ return workflow.Steps.FirstOrDefault(x => x.Id == workflow.TopCountersignStepId);
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 查询流转方向
|
|
|
- /// </summary>
|
|
|
- public EFlowDirection GetFlowDirection(EBusinessType sourceStepBusinessType,
|
|
|
+ /// <summary>
|
|
|
+ /// 查询流转方向
|
|
|
+ /// </summary>
|
|
|
+ public EFlowDirection GetFlowDirection(EBusinessType sourceStepBusinessType,
|
|
|
EBusinessType directionStepBusinessType)
|
|
|
{
|
|
|
switch (sourceStepBusinessType)
|
|
@@ -1092,7 +1092,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
|
|
|
cancellationToken: cancellationToken);
|
|
|
var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
|
|
|
-
|
|
|
+ if(startStep is null)
|
|
|
+ throw new UserFriendlyException($"数据异常, workflowId: {workflowId}", "该流程无开始节点");
|
|
|
|
|
|
await RecallToTargetStepAsync(workflow, startStep, opinion, current, cancellationToken);
|
|
|
}
|
|
@@ -1103,14 +1104,36 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
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)
|
|
|
+ var sendStep = workflow.Steps.FirstOrDefault(d => d.BusinessType == EBusinessType.Send);
|
|
|
+ if (sendStep is null)
|
|
|
throw new UserFriendlyException($"未找到派单节点, workflowId: {workflowId}", "该流程无派单节点");
|
|
|
|
|
|
- await RecallToTargetStepAsync(workflow, startStep, opinion, current, cancellationToken);
|
|
|
+ await RecallToTargetStepAsync(workflow, sendStep, opinion, current, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 特提至中心(优先派单组其次坐席)
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task RecallToCenterFirstToSendAsync(string workflowId, string opinion, ISessionContext current,
|
|
|
+ CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
|
|
|
+ cancellationToken: cancellationToken);
|
|
|
+ var sendStep = workflow.Steps.FirstOrDefault(d => d.BusinessType == EBusinessType.Send);
|
|
|
+ if (sendStep is not null)
|
|
|
+ {
|
|
|
+ await RecallToTargetStepAsync(workflow, sendStep, opinion, current, cancellationToken);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
|
|
|
+ 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,
|
|
@@ -1130,7 +1153,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var newStartStep =
|
|
|
await DuplicateStepWithTraceAsync(workflow, targetStep, EWorkflowTraceType.Recall, cancellationToken);
|
|
|
|
|
|
- workflow.UpdateActualStepWhenAssign(targetStep,new FlowStepHandler
|
|
|
+ workflow.UpdateActualStepWhenAssign(targetStep, new FlowStepHandler
|
|
|
{
|
|
|
UserId = targetStep.HandlerId,
|
|
|
Username = targetStep.HandlerName,
|
|
@@ -1364,7 +1387,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var steps = workflow.Traces
|
|
|
.Where(d => d.StepType is EStepType.Normal)
|
|
|
.ToList();
|
|
|
- var items = steps.Where(d=> d.TraceType == EWorkflowTraceType.Normal || d.TraceType == EWorkflowTraceType.Jump).Select(d => new Kv(d.HandlerOrgId, d.HandlerOrgName))
|
|
|
+ var items = steps.Where(d => d.TraceType == EWorkflowTraceType.Normal || d.TraceType == EWorkflowTraceType.Jump)
|
|
|
+ .Select(d => new Kv(d.HandlerOrgId, d.HandlerOrgName))
|
|
|
.DistinctBy(d => d.Key).ToList();
|
|
|
return (new Kv(workflow.ActualHandleOrgCode, workflow.ActualHandleOrgName), items);
|
|
|
}
|
|
@@ -1500,11 +1524,11 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.UpdateCurrentStepWhenHandle(endStep,
|
|
|
current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
workflow.UpdateCurrentStepAcceptTime(endStep.AcceptTime.Value);
|
|
|
-
|
|
|
+
|
|
|
//workflow.UpdateActualStepWhenHandle(endStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
//workflow.UpdateActualStepAcceptTime(endStep.AcceptTime.Value);
|
|
|
|
|
|
- if(string.IsNullOrEmpty(workflow.OrgLevelOneCode))
|
|
|
+ if (string.IsNullOrEmpty(workflow.OrgLevelOneCode))
|
|
|
workflow.UpdateLevelOneOrg(workflow.ActualHandleOrgCode, workflow.ActualHandleOrgName);
|
|
|
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
@@ -1612,7 +1636,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
else
|
|
|
{
|
|
|
var nextHandler = dto.NextHandlers.First();
|
|
|
- workflow.UpdateActualStepWhenAssign(nextSteps.First(),nextHandler);
|
|
|
+ workflow.UpdateActualStepWhenAssign(nextSteps.First(), nextHandler);
|
|
|
}
|
|
|
|
|
|
//if ( /*workflow.FlowType is EFlowType.Handle &&*/
|
|
@@ -1803,10 +1827,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
var handlerType = stepDefine.CountersignPolicy switch
|
|
|
{
|
|
|
- EDynamicPolicyCountersign.OrgUpCenterTop => EHandlerType.OrgLevel,
|
|
|
- EDynamicPolicyCountersign.OrgUp => EHandlerType.OrgLevel,
|
|
|
- EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
- EDynamicPolicyCountersign.OrgDown => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicyCountersign.OrgUpCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicyCountersign.OrgUp => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicyCountersign.OrgDown => EHandlerType.OrgLevel,
|
|
|
null => throw new ArgumentOutOfRangeException(),
|
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
|
};
|
|
@@ -2022,7 +2046,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//newStep.FlowAssignType = EFlowAssignType.User;
|
|
|
// 是否中心 临时紧急修改 后续在流程模版定义是否原办理人退回类型 来实现流程 禅道200
|
|
|
- newStep.FlowAssignType = step.HandlerOrgIsCenter!.Value ? step.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Role : EFlowAssignType.Org;
|
|
|
+ newStep.FlowAssignType = step.HandlerOrgIsCenter!.Value
|
|
|
+ ? step.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Role
|
|
|
+ : EFlowAssignType.Org;
|
|
|
//if (newStep is { FlowAssignType: EFlowAssignType.Role, BusinessType: EBusinessType.Send })
|
|
|
// newStep.FlowAssignType = EFlowAssignType.User;
|
|
|
|
|
@@ -2309,7 +2335,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
null, expiredTime, cancellationToken: cancellationToken)).First();
|
|
|
|
|
|
//更新实际办理节点信息
|
|
|
- workflow.UpdateActualStepWhenAssign(targetStepNew,new FlowStepHandler
|
|
|
+ workflow.UpdateActualStepWhenAssign(targetStepNew, new FlowStepHandler
|
|
|
{
|
|
|
UserId = targetStep.HandlerId,
|
|
|
Username = targetStep.HandlerName,
|
|
@@ -2797,5 +2823,4 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
-
|
|
|
}
|