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
}