|
@@ -31,6 +31,8 @@ using Microsoft.Extensions.Logging;
|
|
using System.Text;
|
|
using System.Text;
|
|
using System.Diagnostics;
|
|
using System.Diagnostics;
|
|
using Hotline.Configurations;
|
|
using Hotline.Configurations;
|
|
|
|
+using Hotline.Share.Dtos.Order.Handle;
|
|
|
|
+using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.Options;
|
|
using Microsoft.Extensions.Options;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json;
|
|
using NPOI.SS.Formula.Functions;
|
|
using NPOI.SS.Formula.Functions;
|
|
@@ -579,6 +581,72 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
return await GetNextStepsAsync(workflow, currentStep, cancellationToken);
|
|
return await GetNextStepsAsync(workflow, currentStep, cancellationToken);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 跨级指派查询下一步可选节点及办理对象参数
|
|
|
|
+ /// </summary>
|
|
|
|
+ public async Task<NextStepsDto<NextStepOption>> GetCrossLevelStepsAsync(GetCrossLevelStepsDto dto, CancellationToken cancellationToken)
|
|
|
|
+ {
|
|
|
|
+ WorkflowDefinition definition;
|
|
|
|
+ if (string.IsNullOrEmpty(dto.WorkflowId))
|
|
|
|
+ {
|
|
|
|
+ var wfModule = await GetWorkflowModuleAsync(WorkflowModuleConsts.OrderHandle, cancellationToken);
|
|
|
|
+ definition = wfModule.Definition;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withDefine: true, cancellationToken: cancellationToken);
|
|
|
|
+ definition = workflow.WorkflowDefinition;
|
|
|
|
+ }
|
|
|
|
+ if (definition == null)
|
|
|
|
+ throw new UserFriendlyException("无效模板编码");
|
|
|
|
+ if (definition.Status is not EDefinitionStatus.Enable)
|
|
|
|
+ throw new UserFriendlyException("该模板不可用");
|
|
|
|
+
|
|
|
|
+ var currentStepDefine = definition.FindStepDefine(dto.StepCode);
|
|
|
|
+ var nextStepDefines = definition.FindStepDefines(currentStepDefine.NextSteps.Select(d => d.Code))
|
|
|
|
+ .Where(d => d.StepType == EStepType.Normal && d.BusinessType == EBusinessType.Department)
|
|
|
|
+ .ToList();
|
|
|
|
+
|
|
|
|
+ var stepOptions = new List<NextStepOption>();
|
|
|
|
+ foreach (var stepDefine in nextStepDefines)
|
|
|
|
+ {
|
|
|
|
+ var success = int.TryParse(stepDefine.HandlerTypeItems.First().Key, out var level);
|
|
|
|
+ int? orgLevel = success ? level : null;
|
|
|
|
+ var nextStepOption = new NextStepOption
|
|
|
|
+ {
|
|
|
|
+ Key = stepDefine.Code,
|
|
|
|
+ Value = stepDefine.Name,
|
|
|
|
+ StepType = stepDefine.StepType,
|
|
|
|
+ BusinessType = stepDefine.BusinessType,
|
|
|
|
+ HandlerType = stepDefine.HandlerType,
|
|
|
|
+ OrgLevel = stepDefine.HandlerType is EHandlerType.OrgLevel ? orgLevel : null,
|
|
|
|
+ };
|
|
|
|
+ var orgs = await _organizeRepository.Queryable()
|
|
|
|
+ .Where(d => d.IsEnable &&
|
|
|
|
+ d.Level == orgLevel &&
|
|
|
|
+ dto.OrgIds.Contains(d.ParentId))
|
|
|
|
+ .ToListAsync(cancellationToken);
|
|
|
|
+ nextStepOption.Items = orgs.Select(d => new FlowStepHandler
|
|
|
|
+ {
|
|
|
|
+ Key = d.Id,
|
|
|
|
+ Value = d.Name,
|
|
|
|
+ OrgId = d.Id,
|
|
|
|
+ OrgName = d.Name
|
|
|
|
+ })
|
|
|
|
+ .ToList();
|
|
|
|
+ nextStepOption.FlowDirection = _workflowDomainService.GetFlowDirection(dto.BusinessType, stepDefine.BusinessType);
|
|
|
|
+ stepOptions.Add(nextStepOption);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new NextStepsDto<NextStepOption>
|
|
|
|
+ {
|
|
|
|
+ CanReject = false,
|
|
|
|
+ CanStartCountersign = true,
|
|
|
|
+ CurrentStepBusinessType = dto.BusinessType,
|
|
|
|
+ Steps = stepOptions
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
private async Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(Workflow workflow, WorkflowStep currentStep,
|
|
private async Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(Workflow workflow, WorkflowStep currentStep,
|
|
CancellationToken cancellationToken)
|
|
CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
@@ -831,8 +899,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
private async Task<List<NextStepOption>> GetConfigStepsAsync(
|
|
private async Task<List<NextStepOption>> GetConfigStepsAsync(
|
|
Workflow workflow,
|
|
Workflow workflow,
|
|
WorkflowStep currentStep,
|
|
WorkflowStep currentStep,
|
|
- //EStepType currentStepType,
|
|
|
|
- //EBusinessType currentBusinessType,
|
|
|
|
List<StepDefine> stepDefines,
|
|
List<StepDefine> stepDefines,
|
|
CancellationToken cancellationToken)
|
|
CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
@@ -1002,12 +1068,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
}
|
|
}
|
|
|
|
|
|
handlers = orgs1.Select(d => new FlowStepHandler
|
|
handlers = orgs1.Select(d => new FlowStepHandler
|
|
- {
|
|
|
|
- Key = d.Id,
|
|
|
|
- Value = d.Name,
|
|
|
|
- OrgId = d.Id,
|
|
|
|
- OrgName = d.Name
|
|
|
|
- })
|
|
|
|
|
|
+ {
|
|
|
|
+ Key = d.Id,
|
|
|
|
+ Value = d.Name,
|
|
|
|
+ OrgId = d.Id,
|
|
|
|
+ OrgName = d.Name
|
|
|
|
+ })
|
|
.ToList();
|
|
.ToList();
|
|
break;
|
|
break;
|
|
case EHandlerType.OrgType:
|
|
case EHandlerType.OrgType:
|
|
@@ -1019,12 +1085,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
.ToListAsync(cancellationToken);
|
|
.ToListAsync(cancellationToken);
|
|
|
|
|
|
handlers = orgs2.Select(d => new FlowStepHandler
|
|
handlers = orgs2.Select(d => new FlowStepHandler
|
|
- {
|
|
|
|
- Key = d.Id,
|
|
|
|
- Value = d.Name,
|
|
|
|
- OrgId = d.Id,
|
|
|
|
- OrgName = d.Name
|
|
|
|
- })
|
|
|
|
|
|
+ {
|
|
|
|
+ Key = d.Id,
|
|
|
|
+ Value = d.Name,
|
|
|
|
+ OrgId = d.Id,
|
|
|
|
+ OrgName = d.Name
|
|
|
|
+ })
|
|
.ToList();
|
|
.ToList();
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|