using Hotline.FlowEngine.Definitions;
using Hotline.FlowEngine.WorkflowModules;
using Hotline.Share.Dtos;
using Hotline.Share.Dtos.FlowEngine;
using Hotline.Share.Dtos.Settings;
using Hotline.Share.Enums.FlowEngine;
using Hotline.Share.Enums.Settings;
using XF.Domain.Entities;
namespace Hotline.FlowEngine.Workflows
{
public interface IWorkflowDomainService
{
///
/// 创建流程
///
Task CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId, string userCode,
string? externalId = null, string? timelimitText = null, DateTime? expiredTime = null,
CancellationToken cancellationToken = default);
///
/// 进行流程的开始节点
///
Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
///
/// 查询工作流
///
Task GetWorkflowAsync(string workflowId, bool withDefine = false, bool withSteps = false, bool withTraces = false,
bool withSupplements = false, bool withCountersigns = false, CancellationToken cancellationToken = default);
///
/// 查询工作流包含当前用户办理权限(是否可办理)
///
Task<(Workflow, bool)> GetWorkflowHandlePermissionAsync(string workflowId,
string userId, string orgCode, bool withDefine = false, bool withSteps = false, bool withTraces = false,
bool withSupplements = false, bool withCountersigns = false, CancellationToken cancellationToken = default);
///
/// 受理,接办
///
Task AcceptAsync(Workflow workflow,
string userId, string? userName,
string orgId, string? orgName,
string? orgAreaCode, string? orgAreaName,
CancellationToken cancellationToken);
///
/// 办理(流转至下一节点)
///
Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
///
/// 退回(返回前一节点)
///
///
Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken);
///
/// 撤回(返回到之前任意节点)
///
Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
///
/// 跳转(直接将流程跳转至任意节点)
///
Task JumpAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
///
/// 重办
///
Task RedoAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
///
/// 否决(审批流程不通过)
///
///
Task RejectAsync(Workflow workflow, BasicWorkflowDto dto, CancellationToken cancellationToken);
///
/// 补充
///
///
Task SupplementAsync(Workflow workflow, EndWorkflowDto dto, CancellationToken cancellationToken);
///
/// 终止流程
///
Task TerminateAsync(TerminateDto dto, CancellationToken cancellationToken);
StepDefine GetStepDefine(WorkflowDefinition workflowDefinition, string stepCode);
///
/// 查询当前待办理节点
///
WorkflowStep FindCurrentStepWaitForHandle(Workflow workflow);
///
/// 查询待回访部门
///
Task<(Kv, IReadOnlyList)> GetUnvisitOrgsAsync(string workflowId,
CancellationToken cancellationToken);
///
/// 依据配置过滤下一节点
///
List NextStepDefineFilter(EPathPolicy pathPolicy, List nextStepDefines);
///
/// 撤销流程
///
Task CancelAsync(CancelDto dto, CancellationToken cancellationToken);
///
/// 更新期满时间
///
Task UpdateExpiredTimeAsync(DateTime expiredTime, string timelimitText, int? timelimie,
ETimeType? timelimitUnit, CancellationToken cancellationToken);
}
}