|
@@ -40,15 +40,15 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
private readonly IRepository<User> _userRepository;
|
|
|
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
|
|
|
|
- public WorkflowDomainService(
|
|
|
+ public WorkflowDomainService(
|
|
|
IWorkflowRepository workflowRepository,
|
|
|
IRepository<WorkflowStep> workflowStepRepository,
|
|
|
IRepository<WorkflowTrace> workflowTraceRepository,
|
|
|
IRepository<WorkflowSupplement> workflowSupplementRepository,
|
|
|
IRepository<WorkflowCountersign> workflowCountersignRepository,
|
|
|
- //IRepository<WorkflowStepHandler> workflowStepHandlerRepository,
|
|
|
- ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
- ISessionContext sessionContext,
|
|
|
+ //IRepository<WorkflowStepHandler> workflowStepHandlerRepository,
|
|
|
+ ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
+ ISessionContextProvider sessionContextProvider,
|
|
|
IMapper mapper,
|
|
|
Publisher publisher,
|
|
|
ILogger<WorkflowDomainService> logger,
|
|
@@ -60,13 +60,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
_workflowSupplementRepository = workflowSupplementRepository;
|
|
|
_workflowCountersignRepository = workflowCountersignRepository;
|
|
|
//_workflowStepHandlerRepository = workflowStepHandlerRepository;
|
|
|
- _sessionContext = sessionContext;
|
|
|
+ _sessionContext = sessionContextProvider.SessionContext;
|
|
|
_mapper = mapper;
|
|
|
_publisher = publisher;
|
|
|
_logger = logger;
|
|
|
_fileRepository = fileRepository;
|
|
|
_systemSettingCacheManager = systemSettingCacheManager;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
|
|
|
string orgId, string? externalId = null, CancellationToken cancellationToken = default)
|
|
@@ -102,7 +102,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
|
StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo,
|
|
|
ECounterSignType? counterSignType, DateTime? expiredTime,
|
|
|
- ISessionContext current, CancellationToken cancellationToken)
|
|
|
+ CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (firstStepDefine.StepType is EStepType.End)
|
|
|
{
|
|
@@ -111,11 +111,11 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
PublishStrategy.ParallelWhenAll, cancellationToken);
|
|
|
|
|
|
//firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
|
|
|
- workflow.UpdateActualStepWhenHandle(startStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
+ workflow.UpdateActualStepWhenHandle(startStep, _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
|
|
|
|
|
|
- workflow.UpdateCurrentStepWhenHandle(startStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
+ workflow.UpdateCurrentStepWhenHandle(startStep, _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
|
|
|
|
|
|
- var endTrace = await EndAsync(workflow, dto, firstStepDefine, startStep, current, expiredTime, cancellationToken);
|
|
|
+ var endTrace = await EndAsync(workflow, dto, firstStepDefine, startStep, expiredTime, cancellationToken);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -259,7 +259,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;
|
|
|
|
|
@@ -379,7 +379,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- await HandleStepAsync(current, currentStep, workflow, dto, flowAssignInfo.FlowAssignType,
|
|
|
+ await HandleStepAsync(currentStep, workflow, dto, flowAssignInfo.FlowAssignType,
|
|
|
counterSignType, expiredTime, cancellationToken);
|
|
|
|
|
|
//创建会签数据
|
|
@@ -486,8 +486,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//检查是否流转到流程终点
|
|
|
if (nextStepDefine.StepType is EStepType.End)
|
|
|
{
|
|
|
- var endTrace = await EndAsync(workflow, dto, nextStepDefine, currentStep, current, expiredTime,
|
|
|
- cancellationToken);
|
|
|
+ var endTrace = await EndAsync(workflow, dto, nextStepDefine, currentStep, expiredTime, cancellationToken);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -633,7 +632,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
|
|
|
|
|
|
//退给派单组节点,需按照平均分配原则派给一个派单员 禅道299 TODO
|
|
|
- if (dto.Handler != null)//todo 改为按策略判断
|
|
|
+ if (dto.Handler != null) //todo 改为按策略判断
|
|
|
{
|
|
|
var handle = dto.Handler;
|
|
|
newPrevStep.Assign(handle.UserId, handle.Username, handle.OrgId, handle.OrgName, handle.RoleId, handle.RoleName);
|
|
@@ -641,7 +640,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//remove workflow.steps
|
|
|
await _workflowStepRepository.RemoveRangeAsync(removeSteps, cancellationToken);
|
|
|
-
|
|
|
+
|
|
|
var stepIds = removeSteps.Select(d => d.Id).ToList();
|
|
|
var updateTraces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
|
|
|
await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByPrevious, cancellationToken);
|
|
@@ -1114,7 +1113,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
new FlowStepHandler
|
|
|
{
|
|
|
- Key= startStep.RoleId,
|
|
|
+ Key = startStep.RoleId,
|
|
|
Value = startStep.RoleName,
|
|
|
RoleId = startStep.RoleId,
|
|
|
RoleName = startStep.RoleName,
|
|
@@ -1163,7 +1162,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
new FlowStepHandler
|
|
|
{
|
|
|
- Key= sendStep.RoleId,
|
|
|
+ Key = sendStep.RoleId,
|
|
|
Value = sendStep.RoleName,
|
|
|
RoleId = sendStep.RoleId,
|
|
|
RoleName = sendStep.RoleName,
|
|
@@ -1210,8 +1209,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
new FlowStepHandler
|
|
|
{
|
|
|
- Key= sendStep.RoleId,
|
|
|
- Value= sendStep.RoleName,
|
|
|
+ Key = sendStep.RoleId,
|
|
|
+ Value = sendStep.RoleName,
|
|
|
RoleId = sendStep.RoleId,
|
|
|
RoleName = sendStep.RoleName,
|
|
|
UserId = sendStep.HandlerId,
|
|
@@ -1246,7 +1245,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
new FlowStepHandler
|
|
|
{
|
|
|
- Key= startStep.RoleId,
|
|
|
+ Key = startStep.RoleId,
|
|
|
Value = startStep.RoleName,
|
|
|
RoleId = startStep.RoleId,
|
|
|
RoleName = startStep.RoleName,
|
|
@@ -1435,7 +1434,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
|
|
|
|
|
|
var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
|
|
|
- var endTrace = await EndAsync(workflow, basicDto, endStepDefine, currentStep, current,
|
|
|
+ var endTrace = await EndAsync(workflow, basicDto, endStepDefine, currentStep,
|
|
|
expiredTime, cancellationToken: cancellationToken);
|
|
|
|
|
|
await _publisher.PublishAsync(new CancelWorkflowNotify(workflow), PublishStrategy.ParallelWhenAll,
|
|
@@ -1495,7 +1494,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 流程结束
|
|
|
/// </summary>
|
|
|
public async Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto,
|
|
|
- StepDefine endStepDefine, WorkflowStep currentStep, ISessionContext current,
|
|
|
+ StepDefine endStepDefine, WorkflowStep currentStep,
|
|
|
DateTime? expiredTime, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//var endStepHandles = new List<WorkflowStepHandler>
|
|
@@ -1505,7 +1504,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//};
|
|
|
|
|
|
//create endStep
|
|
|
- var endStep = await CreateEndStepAsync(current, workflow, endStepDefine, currentStep, expiredTime,
|
|
|
+ var endStep = await CreateEndStepAsync(workflow, endStepDefine, currentStep, expiredTime,
|
|
|
cancellationToken);
|
|
|
//workflow.Steps.Add(endStep);
|
|
|
|
|
@@ -1515,8 +1514,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.Complete(endStep, dto.ReviewResult);
|
|
|
|
|
|
//需求调整:归档时当前节点显示为归档节点
|
|
|
- workflow.UpdateCurrentStepWhenHandle(endStep,
|
|
|
- current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
|
+ workflow.UpdateCurrentStepWhenHandle(endStep, _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName, _sessionContext.OrgLevel);
|
|
|
workflow.UpdateCurrentStepAcceptTime(endStep.AcceptTime.Value);
|
|
|
|
|
|
//workflow.UpdateActualStepWhenHandle(endStep, current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
|
|
@@ -1558,7 +1556,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 办理节点
|
|
|
/// </summary>
|
|
|
- public async Task HandleStepAsync(ISessionContext current, WorkflowStep step, Workflow workflow,
|
|
|
+ public async Task HandleStepAsync(WorkflowStep step, Workflow workflow,
|
|
|
BasicWorkflowDto dto, EFlowAssignType? flowAssignType, ECounterSignType? counterSignType,
|
|
|
DateTime? expiredTime, CancellationToken cancellationToken)
|
|
|
{
|
|
@@ -1581,7 +1579,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
step.Remark = dto.Remark;
|
|
|
|
|
|
//step办理状态
|
|
|
- HandleStep(current, step, dto.Opinion, dto.NextStepCode);
|
|
|
+ HandleStep(step, dto.Opinion, dto.NextStepCode);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1799,7 +1797,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
EDynamicPolicy.OrgUpLead => EHandlerType.OrgLevel,
|
|
|
EDynamicPolicy.ArriveCenter => EHandlerType.OrgLevel,
|
|
|
EDynamicPolicy.ArriveOneOrg => EHandlerType.OrgLevel,
|
|
|
- EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
EDynamicPolicy.OrgDown => EHandlerType.OrgLevel,
|
|
|
null => throw new ArgumentOutOfRangeException(),
|
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
@@ -1835,7 +1833,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
EDynamicPolicyCountersign.OrgUpLead => EHandlerType.OrgLevel,
|
|
|
EDynamicPolicyCountersign.ArriveCenter => EHandlerType.OrgLevel,
|
|
|
EDynamicPolicyCountersign.ArriveOneOrg => EHandlerType.OrgLevel,
|
|
|
- EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
EDynamicPolicyCountersign.OrgDown => EHandlerType.OrgLevel,
|
|
|
null => throw new ArgumentOutOfRangeException(),
|
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
@@ -1941,12 +1939,12 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 办理节点(赋值节点的办理对象信息)
|
|
|
/// </summary>
|
|
|
- private void HandleStep(ISessionContext current, WorkflowStep step, string opinion, string nextStepCode)
|
|
|
+ private void HandleStep(WorkflowStep step, string opinion, string nextStepCode)
|
|
|
{
|
|
|
- step.Handle(current.RequiredUserId, current.UserName,
|
|
|
- current.RequiredOrgId, current.OrgName,
|
|
|
- current.OrgAreaCode, current.OrgAreaName,
|
|
|
- current.OrgIsCenter, opinion, nextStepCode);
|
|
|
+ step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
+ _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
+ _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
+ _sessionContext.OrgIsCenter, opinion, nextStepCode);
|
|
|
|
|
|
//var handler = step.FindActualHandler(current.Roles, current.RequiredUserId, current.RequiredOrgId);
|
|
|
//if (handler is not null)
|
|
@@ -2413,7 +2411,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
private async Task<WorkflowStep> CreateEndStepAsync(
|
|
|
- ISessionContext current,
|
|
|
Workflow workflow,
|
|
|
StepDefine endStepDefine,
|
|
|
WorkflowStep prevStep,
|
|
@@ -2425,12 +2422,12 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
var handler = new FlowStepHandler
|
|
|
{
|
|
|
- Key = current.UserId,
|
|
|
- Value = current.UserName,
|
|
|
- UserId = current.RequiredUserId,
|
|
|
- Username = current.UserName,
|
|
|
- OrgId = current.OrgId,
|
|
|
- OrgName = current.OrgName,
|
|
|
+ Key = _sessionContext.UserId,
|
|
|
+ Value = _sessionContext.UserName,
|
|
|
+ UserId = _sessionContext.RequiredUserId,
|
|
|
+ Username = _sessionContext.UserName,
|
|
|
+ OrgId = _sessionContext.OrgId,
|
|
|
+ OrgName = _sessionContext.OrgName,
|
|
|
};
|
|
|
|
|
|
var step = CreateStep(workflow, endStepDefine, prevStep, EFlowAssignType.User, handler,
|
|
@@ -2441,7 +2438,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
// _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
// _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
|
|
|
|
|
|
- HandleStep(current, step, "流程归档", string.Empty);
|
|
|
+ HandleStep(step, "流程归档", string.Empty);
|
|
|
|
|
|
await _workflowStepRepository.AddAsync(step, cancellationToken);
|
|
|
workflow.Steps.Add(step);
|
|
@@ -2567,8 +2564,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// </summary>
|
|
|
public bool DynamicShouldTerminal(StepDefine currentStepDefine, int currentOrgLevel)
|
|
|
{
|
|
|
-
|
|
|
- if (currentStepDefine.InstanceMode is not EInstanceMode.Dynamic)
|
|
|
+ if (currentStepDefine.InstanceMode is not EInstanceMode.Dynamic)
|
|
|
throw new UserFriendlyException("非动态节点");
|
|
|
switch (currentStepDefine.InstancePolicy)
|
|
|
{
|
|
@@ -2578,19 +2574,19 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
case EDynamicPolicy.ArriveOneOrg:
|
|
|
case EDynamicPolicy.OrgUpHandleCenterTop:
|
|
|
case EDynamicPolicy.OrgUpHandle:
|
|
|
- if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark))
|
|
|
+ if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark))
|
|
|
throw new UserFriendlyException(
|
|
|
$"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
|
|
|
return currentOrgLevel <= tMark;
|
|
|
case EDynamicPolicy.OrgUpLeadCenterTop:
|
|
|
case EDynamicPolicy.OrgUpLead:
|
|
|
- if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark2))
|
|
|
- throw new UserFriendlyException(
|
|
|
- $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
|
|
|
- var leadRoleCode = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao)?.SettingValue[0];
|
|
|
- var isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
|
|
|
- return (currentOrgLevel <= tMark2) && isLead;
|
|
|
- case EDynamicPolicy.OrgDownCenterTop:
|
|
|
+ if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark2))
|
|
|
+ throw new UserFriendlyException(
|
|
|
+ $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
|
|
|
+ var leadRoleCode = _systemSettingCacheManager.GetSetting(SettingConstants.RoleLingDao)?.SettingValue[0];
|
|
|
+ var isLead = _sessionContext.Roles.Any(x => x == leadRoleCode);
|
|
|
+ return (currentOrgLevel <= tMark2) && isLead;
|
|
|
+ case EDynamicPolicy.OrgDownCenterTop:
|
|
|
case EDynamicPolicy.OrgDown:
|
|
|
if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark1))
|
|
|
throw new UserFriendlyException(
|
|
@@ -2889,6 +2885,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
throw new ArgumentOutOfRangeException();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
#endregion
|
|
|
}
|
|
|
}
|