using Hotline.FlowEngine.Workflows; using Hotline.Share.Enums.FlowEngine; using SqlSugar; using XF.Domain.Exceptions; using XF.Domain.Repository; namespace Hotline.FlowEngine.Definitions; public class Definition : CreationEntity { /// /// 模板名称 /// public string Name { get; set; } /// /// 模板编码 /// public string Code { get; set; } /// /// 草稿版本号 == 0 /// public int Version { get; set; } public string Description { get; set; } [SugarColumn(ColumnDataType = "varchar(4000)", IsJson = true)] public List Steps { get; set; } = new(); [SugarColumn(ColumnDataType = "varchar(4000)", IsNullable = true)] public string? ExternalData { get; set; } public EDefinitionStatus Status { get; set; } [SugarColumn(IsNullable = true)] public string? ModuleId { get; set; } /// /// 业务模块名称 /// [SugarColumn(IsNullable = true)] public string? ModuleName { get; set; } [SugarColumn(IsNullable = true)] public string? ModuleCode { get; set; } #region Method public StepDefine FindStartStep() => Steps.First(d => d.StepType is EStepType.Start); public List FindSteps(List steps) => Steps.Where(d => steps.Select(x => x.Code).Contains(d.Code)).ToList(); public List FindSteps(List steps) => Steps.Where(d => steps.Select(x => x.Code).Contains(d.Code)).ToList(); public StepDefine? FindStep(string code) { if (!Steps.Any()) throw new UserFriendlyException($"流程未配置节点,DefineCode: {Code}", "流程配置错误"); return Steps.FirstOrDefault(d => d.Code == code); } #endregion }