Definition.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Hotline.FlowEngine.Workflows;
  2. using Hotline.Share.Enums.FlowEngine;
  3. using SqlSugar;
  4. using XF.Domain.Exceptions;
  5. using XF.Domain.Repository;
  6. namespace Hotline.FlowEngine.Definitions;
  7. public class Definition : CreationEntity
  8. {
  9. /// <summary>
  10. /// 模板名称
  11. /// </summary>
  12. public string Name { get; set; }
  13. /// <summary>
  14. /// 模板编码
  15. /// </summary>
  16. public string Code { get; set; }
  17. /// <summary>
  18. /// 草稿版本号 == 0
  19. /// </summary>
  20. public int Version { get; set; }
  21. public string Description { get; set; }
  22. [SugarColumn(ColumnDataType = "varchar(4000)", IsJson = true)]
  23. public List<StepDefine> Steps { get; set; } = new();
  24. [SugarColumn(ColumnDataType = "varchar(4000)", IsNullable = true)]
  25. public string? ExternalData { get; set; }
  26. public EDefinitionStatus Status { get; set; }
  27. [SugarColumn(IsNullable = true)]
  28. public string? ModuleId { get; set; }
  29. /// <summary>
  30. /// 业务模块名称
  31. /// </summary>
  32. [SugarColumn(IsNullable = true)]
  33. public string? ModuleName { get; set; }
  34. [SugarColumn(IsNullable = true)]
  35. public string? ModuleCode { get; set; }
  36. #region Method
  37. public StepDefine FindStartStep() =>
  38. Steps.First(d => d.StepType is EStepType.Start);
  39. public List<StepDefine> FindSteps(List<NextStepDefine> steps) =>
  40. Steps.Where(d => steps.Select(x => x.Code).Contains(d.Code)).ToList();
  41. public List<StepDefine> FindSteps(List<NextStep> steps) =>
  42. Steps.Where(d => steps.Select(x => x.Code).Contains(d.Code)).ToList();
  43. public StepDefine? FindStep(string code)
  44. {
  45. if (!Steps.Any())
  46. throw new UserFriendlyException($"流程未配置节点,DefineCode: {Code}", "流程配置错误");
  47. return Steps.FirstOrDefault(d => d.Code == code);
  48. }
  49. #endregion
  50. }