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
}
}