IWorkflowDomainService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. using Hotline.FlowEngine.Definitions;
  2. using Hotline.FlowEngine.WorkflowModules;
  3. using Hotline.Settings;
  4. using Hotline.Share.Dtos;
  5. using Hotline.Share.Dtos.FlowEngine;
  6. using Hotline.Share.Enums.FlowEngine;
  7. using Hotline.Share.Enums.Settings;
  8. using Hotline.Users;
  9. using XF.Domain.Authentications;
  10. using XF.Domain.Entities;
  11. namespace Hotline.FlowEngine.Workflows
  12. {
  13. public interface IWorkflowDomainService
  14. {
  15. /// <summary>
  16. /// 创建流程
  17. /// </summary>
  18. Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId, string orgId,
  19. string? externalId = null, CancellationToken cancellationToken = default);
  20. /// <summary>
  21. /// 进行流程的开始节点
  22. /// </summary>
  23. Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
  24. bool isNextDynamic, FlowAssignInfo flowAssignInfo, ECounterSignType? counterSignType, DateTime? expiredTime,
  25. ISessionContext current, CancellationToken cancellationToken);
  26. /// <summary>
  27. /// 查询工作流
  28. /// </summary>
  29. Task<Workflow> GetWorkflowAsync(string workflowId, bool withDefine = false, bool withSteps = false,
  30. bool withTraces = false, bool withTracesTree = false, bool withSupplements = false,
  31. bool withCountersigns = false, CancellationToken cancellationToken = default);
  32. /// <summary>
  33. /// 查询工作流包含当前用户办理权限(是否可办理)
  34. /// </summary>
  35. Task<(Workflow Workflow, string? CountersignId, bool CanHandle, bool CanPrevious,string? previousOpinion)> GetWorkflowHandlePermissionAsync(
  36. string workflowId, string userId, string orgId, string[] roleIds, CancellationToken cancellationToken = default);
  37. /// <summary>
  38. /// 受理,接办
  39. /// </summary>
  40. Task AcceptAsync(Workflow workflow, string userId, string? userName, string orgId, string? orgName,
  41. string? orgAreaCode, string? orgAreaName, CancellationToken cancellationToken);
  42. /// <summary>
  43. /// 办理(流转至下一节点)
  44. /// </summary>
  45. Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine,
  46. bool isNextDynamic, FlowAssignInfo flowAssignInfo, DateTime? expiredTime,
  47. ISessionContext current, CancellationToken cancellationToken);
  48. /// <summary>
  49. /// 退回(返回前一节点)
  50. /// </summary>
  51. /// <returns></returns>
  52. Task<EFlowDirection> PreviousAsync(Workflow workflow, PreviousWorkflowDto dto,
  53. string applicantId, string applicantName,
  54. string applicantOrgId, string applicantOrgName,
  55. string applicantOrgAreaCode, string applicantOrgAreaName,
  56. bool applicantIsCenter, string[] applicantRoleIds,
  57. CancellationToken cancellationToken);
  58. /// <summary>
  59. /// 撤回(返回到之前任意节点)
  60. /// </summary>
  61. Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
  62. DateTime? expiredTime, CancellationToken cancellationToken);
  63. /// <summary>
  64. /// 撤回至开始节点
  65. /// </summary>
  66. Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken);
  67. ///// <summary>
  68. ///// 跳转(直接将流程跳转至任意节点)
  69. ///// </summary>
  70. //Task JumpAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
  71. // CancellationToken cancellationToken);
  72. ///// <summary>
  73. ///// 重办
  74. ///// </summary>
  75. //Task RedoAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
  76. // CancellationToken cancellationToken);
  77. ///// <summary>
  78. ///// 否决(审批流程不通过)
  79. ///// </summary>
  80. ///// <returns></returns>
  81. //Task RejectAsync(Workflow workflow, BasicWorkflowDto dto, CancellationToken cancellationToken);
  82. /// <summary>
  83. /// 补充
  84. /// </summary>
  85. /// <returns></returns>
  86. Task SupplementAsync(Workflow workflow, EndWorkflowDto dto, CancellationToken cancellationToken);
  87. /// <summary>
  88. /// 终止流程
  89. /// </summary>
  90. Task TerminateAsync(TerminateDto dto, CancellationToken cancellationToken);
  91. /// <summary>
  92. /// 结束流程(流程直接流转至结束节点)
  93. /// </summary>
  94. Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto, StepDefine endStepDefine,
  95. WorkflowStep currentStep, ISessionContext current, DateTime? expiredTime, CancellationToken cancellationToken);
  96. StepDefine GetStepDefine(WorkflowDefinition workflowDefinition, string stepCode);
  97. /// <summary>
  98. /// 查询当前待办理节点
  99. /// </summary>
  100. WorkflowStep FindCurrentStepWaitForHandle(Workflow workflow, string userId, string orgId, string[] roleIds);
  101. /// <summary>
  102. /// 查询当前节点中最后一个节点
  103. /// </summary>
  104. Task<WorkflowStep?> FindLastStepAsync(string workflowId, CancellationToken cancellationToken);
  105. /// <summary>
  106. /// 查询所有办理部门及实际办理部门
  107. /// </summary>
  108. Task<(Kv, IReadOnlyList<Kv>)> GetHandleOrgsAsync(string workflowId, CancellationToken cancellationToken);
  109. /// <summary>
  110. /// 依据配置过滤下一节点
  111. /// </summary>
  112. List<StepDefine> NextStepDefineFilter(EPathPolicy pathPolicy, List<StepDefine> nextStepDefines);
  113. /// <summary>
  114. /// 撤销流程
  115. /// </summary>
  116. Task CancelAsync(CancelDto dto, DateTime? expiredTime, ISessionContext current, CancellationToken cancellationToken);
  117. ///// <summary>
  118. ///// 更新期满时间
  119. ///// </summary>
  120. //Task UpdateExpiredTimeAsync(Workflow workflow, DateTime expiredTime, string timelimit, int? timelimiteCount,
  121. // ETimeType? timelimitUnit, DateTime nearlyExpiredTime, CancellationToken cancellationToken);
  122. /// <summary>
  123. /// 新增流程流转记录
  124. /// </summary>
  125. Task AddTracesAsync(string workflowId, List<WorkflowTrace> traces, CancellationToken cancellationToken);
  126. /// <summary>
  127. /// 创建开始节点
  128. /// </summary>
  129. WorkflowStep CreateStartStep(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto,
  130. FlowStepHandler handler, DateTime? expiredTime);
  131. /// <summary>
  132. /// 查询未完成节点
  133. /// </summary>
  134. /// <param name="steps"></param>
  135. /// <param name="orgId"></param>
  136. /// <param name="userId"></param>
  137. /// <returns></returns>
  138. WorkflowStep GetUnHandleStep(List<WorkflowStep> steps, string orgId, string userId, string[] roleIds);
  139. /// <summary>
  140. /// 检查当前办理节点是否为开始节点
  141. /// </summary>
  142. /// <param name="workflowId"></param>
  143. /// <param name="userId">当前办理人Id</param>
  144. /// <param name="orgId">当前办理人orgId</param>
  145. /// <param name="cancellationToken"></param>
  146. /// <returns></returns>
  147. Task<bool> CheckCurrentIsStartStepAsync(string workflowId, string userId, string orgId,
  148. CancellationToken cancellationToken);
  149. /// <summary>
  150. /// 检查动态节点是否该终止
  151. /// </summary>
  152. bool DynamicShouldTerminal(StepDefine currentStepDefine, int currentOrgLevel);
  153. /// <summary>
  154. /// 终止会签
  155. /// </summary>
  156. /// <param name="countersignId"></param>
  157. /// <param name="cancellationToken"></param>
  158. /// <returns></returns>
  159. Task<Workflow> TerminalCountersignAsync(string countersignId, CancellationToken cancellationToken);
  160. /// <summary>
  161. /// 查询实际办理对象信息
  162. /// </summary>
  163. /// <param name="workflowId"></param>
  164. /// <param name="cancellationToken"></param>
  165. /// <returns></returns>
  166. Task<Kv> FindActualHandlerAsync(string workflowId, CancellationToken cancellationToken);
  167. /// <summary>
  168. /// 办理节点
  169. /// </summary>
  170. Task HandleStepAsync(ISessionContext current, WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
  171. EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime,
  172. CancellationToken cancellationToken);
  173. /// <summary>
  174. /// 获取会签类型
  175. /// </summary>
  176. //ECounterSignType? GetCounterSignType(EBusinessType businessType);
  177. ECounterSignType? GetCounterSignType(bool isStartCountersign);
  178. /// <summary>
  179. /// 查询退回节点信息
  180. /// </summary>
  181. (WorkflowStep currentStep, WorkflowStep prevStep, WorkflowStep? countersignStartStep) GetPreviousStep(
  182. Workflow workflow, string operaterId, string operaterOrgId, string[] roleIds);
  183. /// <summary>
  184. /// 查询派单池中流程节点id
  185. /// </summary>
  186. Task<IReadOnlyList<string>> GetUnhandleStepIdsFromSendPoolAsync(string sendPoolId, CancellationToken cancellationToken);
  187. /// <summary>
  188. /// 查询归属某用户的所有流程节点
  189. /// </summary>
  190. Task<List<WorkflowStep>> GetStepsBelongsToAsync(string userId, CancellationToken cancellationToken);
  191. ///// <summary>
  192. ///// 批量改派工单至指定用户
  193. ///// </summary>
  194. //Task<ICollection<string>> ChangeHandlerRangeAsync(string sendPoolId,
  195. // IReadOnlyList<(string userId, string username, string orgId, string orgName, IReadOnlyList<string> stepIds)> handlers,
  196. // CancellationToken cancellationToken);
  197. /// <summary>
  198. /// 批量修改工单办理对象
  199. /// </summary>
  200. Task ChangeHandlerBatchAsync(
  201. IReadOnlyList<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)> handlers,
  202. CancellationToken cancellationToken);
  203. /// <summary>
  204. /// 查询工单办理中的一级部门
  205. /// </summary>
  206. Task<ICollection<Kv>> GetLevelOneOrgsAsync(string workflowId, CancellationToken cancellation);
  207. /// <summary>
  208. /// 更新未办理节点的期满时间
  209. /// </summary>
  210. Task UpdateUnhandleExpiredTimeAsync(string workflowId, DateTime expiredTime, CancellationToken cancellation);
  211. /// <summary>
  212. /// 查询该部门最后办理节点
  213. /// </summary>
  214. /// <returns></returns>
  215. Task<WorkflowStep> FindLastHandleStepAsync(string workflowId, string orgId, CancellationToken cancellation);
  216. /// <summary>
  217. /// 查询流转方向
  218. /// </summary>
  219. EFlowDirection GetFlowDirection(EBusinessType sourceStepBusinessType, EBusinessType directionStepBusinessType);
  220. /// <summary>
  221. /// 流程被签收至某个用户(更新流转对象,办理对象,节点办理对象以及stepHandlers)
  222. /// </summary>
  223. Task<Workflow> SignToSomebodyAsync(string workflowId, string userId, string username, string orgId, string orgName, CancellationToken cancellationToken);
  224. /// <summary>
  225. /// 非节点办理人员查询待办节点
  226. /// </summary>
  227. /// <returns></returns>
  228. Task<ICollection<WorkflowStep>> GetUnhandleStepsByOthersAsync(string workflowId, CancellationToken cancellationToken);
  229. }
  230. }