using Hotline.Share.Dtos.FlowEngine.Workflow; using Hotline.Share.Enums.FlowEngine; using SqlSugar; using XF.Domain.Entities; using XF.Domain.Exceptions; using XF.Domain.Repository; namespace Hotline.FlowEngine.Workflows { public class WorkflowCountersign : CreationEntity { public string WorkflowId { get; set; } #region 发起会签 /// /// 发起会签节点id(从开始节点直接发起的会签,该id和code为start节点的id与code) /// public string StartStepId { get; set; } //冗余 public string StartStepCode { get; set; } /// /// 业务属性 /// public EBusinessType StartStepBusiType { get; set; } /// /// 发起人 /// public string StarterId { get; set; } public string StarterName { get; set; } /// /// 发起人部门code /// public string StarterOrgId { get; set; } public string? StarterOrgName { get; set; } /// /// 发起人部门行政区划代码 /// public string StarterOrgAreaCode { get; set; } /// /// 发起人部门行政区划名称 /// public string StarterOrgAreaName { get; set; } #endregion #region 结束会签 /// /// 会签汇总节点id /// 人工结束会签为null /// public string? EndStepId { get; set; } //冗余 public string? EndStepCode { get; set; } /// /// 业务属性 /// public EBusinessType EndStepBusiType { get; set; } /// /// 接办人 /// public string? FinisherId { get; set; } public string? FinisherName { get; set; } /// /// 接办人部门code /// public string? FinisherOrgId { get; set; } public string? FinisherOrgName { get; set; } /// /// 接办人部门行政区划代码 /// public string? FinisherOrgAreaCode { get; set; } /// /// 接办人部门行政区划名称 /// public string? FinisherOrgAreaName { get; set; } /// /// 会签结束时间 /// public DateTime? EndTime { get; set; } #endregion /// /// 会签嵌套会签场景记录上级会签Id /// public string? ParentId { get; set; } /// /// 会签类型(非工单办理为null) /// public ECounterSignType? CounterSignType { get; set; } /// /// 该会签参与成员数量 /// // public int Members { get; set; } [Navigate(NavigateType.OneToMany, nameof(WorkflowCountersignMember.WorkflowCountersignId))] public List Members { get; set; } /// /// 流程指派类型(冗余,非工单办理为null) /// public EFlowAssignType? FlowAssignType { get; set; } /// /// 超期时间(期满时间) /// public DateTime? ExpiredTime { get; set; } /// /// 是否超期 /// public bool? IsExpired { get; set; } [SugarColumn(IsIgnore = true)] public List Children { get; set; } #region method /// /// 会签是否完成(如有嵌套会签,表示下级所有会签都完成了) /// public bool IsCompleted() => EndTime.HasValue; /// /// 结束会签(需提前确认所有子集都已结束) /// public void End( string endStepId, string endStepCode, EBusinessType businessType, string userId, string? userName, string orgId, string? orgName, string? orgAreaCode, string? orgAreaName) { EndStepId = endStepId; EndStepCode = endStepCode; EndStepBusiType = businessType; FinisherId = userId; FinisherName = userName; FinisherOrgId = orgId; FinisherOrgName = orgName; FinisherOrgAreaCode = orgAreaCode; FinisherOrgAreaName = orgAreaName; EndTime = DateTime.Now; IsExpired = EndTime.HasValue && ExpiredTime.HasValue && EndTime > ExpiredTime; } public void MemberHandled(string userId, string orgId) { var member = FlowAssignType == EFlowAssignType.Org ? Members.FirstOrDefault(d => d.Key == orgId) : Members.FirstOrDefault(d => d.Key == userId); if (member is null) throw new UserFriendlyException($"未找到会签办理对象"); member.IsHandled = true; } #endregion } }