|
@@ -1097,7 +1097,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
//结束会签
|
|
//结束会签
|
|
currentCountersign.End(currentStep.Id, currentStep.Code, currentStep.BusinessType,
|
|
currentCountersign.End(currentStep.Id, currentStep.Code, currentStep.BusinessType,
|
|
operatorInfo.UserId, operatorInfo.UserName,
|
|
operatorInfo.UserId, operatorInfo.UserName,
|
|
- operatorInfo.OrgId,operatorInfo.OrgName,
|
|
|
|
|
|
+ operatorInfo.OrgId, operatorInfo.OrgName,
|
|
operatorInfo.OrgAreaCode, operatorInfo.OrgAreaName);
|
|
operatorInfo.OrgAreaCode, operatorInfo.OrgAreaName);
|
|
|
|
|
|
await _workflowCountersignRepository.UpdateAsync(currentCountersign, cancellationToken);
|
|
await _workflowCountersignRepository.UpdateAsync(currentCountersign, cancellationToken);
|
|
@@ -1266,64 +1266,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
.ToListAsync(cancellationToken);
|
|
.ToListAsync(cancellationToken);
|
|
}
|
|
}
|
|
|
|
|
|
- ///// <summary>
|
|
|
|
- ///// 批量改变办理对象
|
|
|
|
- ///// </summary>
|
|
|
|
- //public async Task<ICollection<string>> ChangeHandlerRangeAsync(string sendPoolId,
|
|
|
|
- // IReadOnlyList<(string userId, string username, string orgId, string orgName, IReadOnlyList<string> stepIds)> handlers,
|
|
|
|
- // CancellationToken cancellationToken)
|
|
|
|
- //{
|
|
|
|
- // var stepsIds = handlers.SelectMany(d => d.stepIds).ToList();
|
|
|
|
- // var steps = await _workflowStepRepository.Queryable()
|
|
|
|
- // .Includes(d => d.Workflow)
|
|
|
|
- // .Includes(d => d.WorkflowTrace)
|
|
|
|
- // //.Includes(d => d.StepHandlers)
|
|
|
|
- // .Where(d => stepsIds.Contains(d.Id))
|
|
|
|
- // .ToListAsync(cancellationToken);
|
|
|
|
- // foreach (var handler in handlers)
|
|
|
|
- // {
|
|
|
|
- // var thisHandlers = new List<Kv> { new(handler.userId, handler.username) };
|
|
|
|
- // var thisHandlerGroup = new HandlerGroupItem
|
|
|
|
- // {
|
|
|
|
- // GroupId = Guid.NewGuid().ToString(),
|
|
|
|
- // Key = handler.userId,
|
|
|
|
- // Value = handler.username,
|
|
|
|
- // };
|
|
|
|
- // var thisSteps = steps.Where(d => handler.stepIds.Contains(d.Id)).ToList();
|
|
|
|
- // foreach (var thisStep in thisSteps)
|
|
|
|
- // {
|
|
|
|
- // //var stepHandler = WorkflowStepHandler.Create(thisStep.Workflow.Id, thisStep.Workflow.ExternalId,
|
|
|
|
- // // thisStep.FlowAssignType ?? EFlowAssignType.User, handler.userId, handler.username, handler.orgId, handler.orgName);
|
|
|
|
- // //thisStep.StepHandlers.Clear();
|
|
|
|
- // //thisStep.StepHandlers.Add(stepHandler);
|
|
|
|
-
|
|
|
|
- // thisStep.Handlers = thisHandlers;
|
|
|
|
-
|
|
|
|
- // //update trace
|
|
|
|
- // thisStep.WorkflowTrace.Handlers = thisStep.Handlers;
|
|
|
|
-
|
|
|
|
- // // update workflow
|
|
|
|
- // thisStep.Workflow.FlowedUserIds.Remove(sendPoolId);
|
|
|
|
- // thisStep.Workflow.FlowedUserIds.Add(handler.userId);
|
|
|
|
- // thisStep.Workflow.UpdateHandlers(sendPoolId, null, EFlowAssignType.User,
|
|
|
|
- // new List<HandlerGroupItem> { thisHandlerGroup }, true);
|
|
|
|
-
|
|
|
|
- // var handlerUser = thisStep.Workflow.HandlerUsers.FirstOrDefault(d => d.Key == sendPoolId);
|
|
|
|
- // if (handlerUser == null) continue;
|
|
|
|
- // handlerUser.Key = handler.userId;
|
|
|
|
- // handlerUser.Value = handler.username;
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
- // await _workflowStepRepository.UpdateNav(steps)
|
|
|
|
- // .Include(d => d.WorkflowTrace)
|
|
|
|
- // .Include(d => d.Workflow)
|
|
|
|
- // //.Include(d => d.StepHandlers)
|
|
|
|
- // .ExecuteCommandAsync();
|
|
|
|
-
|
|
|
|
- // return steps.Select(d => d.WorkflowId).ToList();
|
|
|
|
- //}
|
|
|
|
-
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 批量修改工单办理对象
|
|
/// 批量修改工单办理对象
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -1733,13 +1675,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
FlowAssignInfo flowAssignInfo, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled,
|
|
FlowAssignInfo flowAssignInfo, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled,
|
|
EHandleMode handleMode, CancellationToken cancellationToken)
|
|
EHandleMode handleMode, CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
|
|
+ if(dto.ReverseFlowStepAssignInfo is null)
|
|
|
|
+ throw new UserFriendlyException("参数异常,需传入特提目标节点指派策略信息");
|
|
|
|
+
|
|
var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
|
|
var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
|
|
if (targetStep is null)
|
|
if (targetStep is null)
|
|
throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
|
|
throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
|
|
|
|
|
|
- //update uncompleted traces
|
|
|
|
- //await RecallTraceAsync(workflow.Traces, dto.Opinion, _sessionContext, cancellationToken);
|
|
|
|
-
|
|
|
|
var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
|
|
var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
|
|
traceType, expiredTime, isOrderFiled, handleMode, cancellationToken);
|
|
traceType, expiredTime, isOrderFiled, handleMode, cancellationToken);
|
|
|
|
|
|
@@ -2298,7 +2240,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
}
|
|
}
|
|
|
|
|
|
#region private method
|
|
#region private method
|
|
-
|
|
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 逆向流程指派节点的办理对象
|
|
/// 逆向流程指派节点的办理对象
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -2327,7 +2269,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
newStep.Assign(targetStep, EFlowAssignType.Role);
|
|
newStep.Assign(targetStep, EFlowAssignType.Role);
|
|
break;
|
|
break;
|
|
case EReverseFlowStepCreationPolicy.OriginStepOrgAndRole:
|
|
case EReverseFlowStepCreationPolicy.OriginStepOrgAndRole:
|
|
- if(string.IsNullOrEmpty(targetStep?.RoleId) || string.IsNullOrEmpty(targetStep?.HandlerOrgId))
|
|
|
|
|
|
+ if (string.IsNullOrEmpty(targetStep?.RoleId) || string.IsNullOrEmpty(targetStep?.HandlerOrgId))
|
|
throw new UserFriendlyException("参数异常:原节点办理角色或部门为空");
|
|
throw new UserFriendlyException("参数异常:原节点办理角色或部门为空");
|
|
newStep.Assign(targetStep, EFlowAssignType.OrgAndRole);
|
|
newStep.Assign(targetStep, EFlowAssignType.OrgAndRole);
|
|
break;
|
|
break;
|
|
@@ -2890,20 +2832,20 @@ namespace Hotline.FlowEngine.Workflows
|
|
newStep.StepExpiredTime = expiredTime;
|
|
newStep.StepExpiredTime = expiredTime;
|
|
newStep.InitId();
|
|
newStep.InitId();
|
|
|
|
|
|
- //退回场景:指派给原办理人,其余场景:按照原节点原始指派方式复制 //todo 重构为参数传入办理对象
|
|
|
|
- if (traceType is EWorkflowTraceType.Previous)
|
|
|
|
- {
|
|
|
|
- newStep.FlowAssignType = step.FlowAssignType;
|
|
|
|
- //newStep.FlowAssignType = EFlowAssignType.User;
|
|
|
|
- // 是否中心 临时紧急修改 后续在流程模版定义是否原办理人退回类型 来实现流程 禅道200
|
|
|
|
- //newStep.FlowAssignType = step.BusinessType is EBusinessType.Seat or EBusinessType.Send
|
|
|
|
- // ? step.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Role
|
|
|
|
- // : EFlowAssignType.Org;
|
|
|
|
- //if (newStep is { FlowAssignType: EFlowAssignType.Role, BusinessType: EBusinessType.Send })
|
|
|
|
- // newStep.FlowAssignType = EFlowAssignType.User;
|
|
|
|
-
|
|
|
|
- newStep.Assign(step.HandlerId, step.HandlerName, step.HandlerOrgId, step.HandlerOrgName, step.RoleId, step.RoleName);
|
|
|
|
- }
|
|
|
|
|
|
+ ////退回场景:指派给原办理人,其余场景:按照原节点原始指派方式复制 //todo 重构为参数传入办理对象
|
|
|
|
+ //if (traceType is EWorkflowTraceType.Previous)
|
|
|
|
+ //{
|
|
|
|
+ // newStep.FlowAssignType = step.FlowAssignType;
|
|
|
|
+ // //newStep.FlowAssignType = EFlowAssignType.User;
|
|
|
|
+ // // 是否中心 临时紧急修改 后续在流程模版定义是否原办理人退回类型 来实现流程 禅道200
|
|
|
|
+ // //newStep.FlowAssignType = step.BusinessType is EBusinessType.Seat or EBusinessType.Send
|
|
|
|
+ // // ? step.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Role
|
|
|
|
+ // // : EFlowAssignType.Org;
|
|
|
|
+ // //if (newStep is { FlowAssignType: EFlowAssignType.Role, BusinessType: EBusinessType.Send })
|
|
|
|
+ // // newStep.FlowAssignType = EFlowAssignType.User;
|
|
|
|
+
|
|
|
|
+ // newStep.Assign(step.HandlerId, step.HandlerName, step.HandlerOrgId, step.HandlerOrgName, step.RoleId, step.RoleName);
|
|
|
|
+ //}
|
|
|
|
|
|
return newStep;
|
|
return newStep;
|
|
}
|
|
}
|
|
@@ -3089,19 +3031,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
await _workflowTraceRepository.AddAsync(trace, cancellationToken);
|
|
await _workflowTraceRepository.AddAsync(trace, cancellationToken);
|
|
workflow.Traces.Add(trace);
|
|
workflow.Traces.Add(trace);
|
|
|
|
+ step.WorkflowTrace = trace;
|
|
}
|
|
}
|
|
|
|
|
|
- private async Task<WorkflowTrace> GetWorkflowTraceAsync(string workflowId, string stepId,
|
|
|
|
- CancellationToken cancellationToken)
|
|
|
|
- {
|
|
|
|
- var parentTrace = await _workflowTraceRepository.GetAsync(d =>
|
|
|
|
- d.WorkflowId == workflowId && d.StepId == stepId, cancellationToken);
|
|
|
|
- if (parentTrace == null)
|
|
|
|
- throw new UserFriendlyException($"未找到对应trace, workflowId: {workflowId}, stepId: {stepId}");
|
|
|
|
- return parentTrace;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private async Task<bool> RecallAsync(Workflow workflow, BasicWorkflowDto dto, FlowAssignInfo flowAssignInfo,
|
|
|
|
|
|
+ private async Task<bool> RecallAsync(Workflow workflow, RecallDto dto, FlowAssignInfo flowAssignInfo,
|
|
StepDefine targetStepDefine, WorkflowStep targetStep, EWorkflowTraceType traceType,
|
|
StepDefine targetStepDefine, WorkflowStep targetStep, EWorkflowTraceType traceType,
|
|
DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode, CancellationToken cancellationToken)
|
|
DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode, CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
@@ -3202,6 +3135,12 @@ namespace Hotline.FlowEngine.Workflows
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceType,
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceType,
|
|
null, expiredTime, cancellationToken: cancellationToken)).First();
|
|
null, expiredTime, cancellationToken: cancellationToken)).First();
|
|
|
|
|
|
|
|
+ ReverseFlowAssignStepHandler(dto.ReverseFlowStepAssignInfo, targetStepNew, targetStep);
|
|
|
|
+ _mapper.Map(targetStepNew, targetStepNew.WorkflowTrace);
|
|
|
|
+ await _workflowStepRepository.UpdateNav(targetStepNew)
|
|
|
|
+ .Include(d => d.WorkflowTrace)
|
|
|
|
+ .ExecuteCommandAsync();
|
|
|
|
+
|
|
//更新实际办理节点信息
|
|
//更新实际办理节点信息
|
|
workflow.UpdateActualStepWhenAssign(targetStepNew, new FlowStepHandler
|
|
workflow.UpdateActualStepWhenAssign(targetStepNew, new FlowStepHandler
|
|
{
|
|
{
|