using OASystem.Domain.Enums; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OASystem.Domain.Entities.Groups { /// /// 团组流程总览表 /// [SugarTable("Grp_ProcessOverview", "团组流程总览表")] public class Grp_ProcessOverview : EntityBase { /// /// 团组Id /// [SugarColumn(ColumnName = "GroupId", ColumnDescription = "团组Id", IsNullable = true, ColumnDataType = "int")] public int GroupId { get; set; } /// /// 流程顺序 /// [SugarColumn(ColumnName = "ProcessOrder", ColumnDescription = "流程顺序", IsNullable = true, ColumnDataType = "int")] public int ProcessOrder { get; set; } /// /// 流程类型 /// [SugarColumn(ColumnName = "ProcessType", ColumnDescription = "流程类型", ColumnDataType = "int")] public GroupProcessType ProcessType { get; set; } /// /// 整体状态 /// [SugarColumn(ColumnName = "OverallStatus", ColumnDescription = "流程整体状态",ColumnDataType = "int")] public ProcessStatus OverallStatus { get; set; } = ProcessStatus.UnStarted; /// /// 开始时间 /// [SugarColumn(ColumnName = "EndTime", ColumnDescription = "开始时间", IsNullable = true, ColumnDataType = "datetime")] public DateTime? StartTime { get; set; } /// /// 结束时间 /// [SugarColumn(ColumnName = "EndTime", ColumnDescription = "结束时间", IsNullable = true, ColumnDataType = "datetime")] public DateTime? EndTime { get; set; } /// /// 更新人 /// [SugarColumn(ColumnName = "UpdatedUserId", ColumnDescription = "更新人", IsNullable = true, ColumnDataType = "int")] public int UpdatedUserId { get; set; } /// /// 更新时间 /// [SugarColumn(ColumnName = "UpdatedTime", ColumnDescription = "更新时间", ColumnDataType = "datetime")] public DateTime UpdatedTime { get; set; } = DateTime.Now; /// /// 节点集合 - 流程包含的所有节点(导航属性) /// [Navigate(NavigateType.OneToMany, nameof(Grp_ProcessNode.ProcessId))] public List Nodes { get; set; } = new List(); public Grp_ProcessOverview() { } /// /// 流程进度默认模板 /// /// /// /// /// public static List ProcessInit(int groupId, int currUserId, List visaCountries) { //单独处理签证流程节点 var visaDefualtNodes = new List() { new(){NodeOrder = 1, NodeName = "收集资料",IsHandle = false,HandleTime = "" }, new(){NodeOrder = 2, NodeName = "取护照资料",IsHandle = false,HandleTime = "" }, new(){NodeOrder = 3, NodeName = "填资料",IsHandle = false,HandleTime = "" }, new(){NodeOrder = 4, NodeName = "送签",IsHandle = false,HandleTime = "" }, new(){NodeOrder = 5, NodeName = "出签+取护照",IsHandle = false,HandleTime = "" }, new(){NodeOrder = 6, NodeName = "归还护照",IsHandle = false,HandleTime = "",Returner="" } }; var visaNodes = new List(); if (visaCountries != null && visaCountries.Count > 0) { for (int i = 1; i < visaCountries.Count + 1; i++) { visaNodes.Add(new Grp_ProcessNode() { NodeOrder = i, NodeName = visaCountries[i].ToString(), OverallStatus = ProcessStatus.UnStarted, IsCurrent = i == 1, CreateUserId = currUserId }); } } return new List { //商邀报批流程 new() { GroupId = groupId, ProcessOrder = 1, ProcessType = GroupProcessType.Invitation, OverallStatus = ProcessStatus.UnStarted, StartTime = DateTime.Now, UpdatedUserId = currUserId, CreateUserId = currUserId, Nodes = new List() { new(){NodeOrder = 1, NodeName="报批资料准备", OverallStatus=ProcessStatus.UnStarted, IsCurrent=true,CreateUserId = currUserId }, new(){NodeOrder = 2, NodeName="开始报批", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, new(){NodeOrder = 3, NodeName="报批中", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, new(){NodeOrder = 4, NodeName="报批已出", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId } } }, //签证流程 new() { GroupId = groupId, ProcessOrder = 2, ProcessType = GroupProcessType.Visa, OverallStatus = ProcessStatus.UnStarted, StartTime = DateTime.Now, UpdatedUserId = currUserId, CreateUserId = currUserId, Nodes=visaNodes }, //机票流程 new() { GroupId = groupId, ProcessOrder = 3, ProcessType = GroupProcessType.AirTicket, OverallStatus = ProcessStatus.UnStarted, StartTime = DateTime.Now, UpdatedUserId = currUserId, CreateUserId = currUserId, Nodes = new List() { new(){NodeOrder = 1, NodeName="机票占位中", OverallStatus=ProcessStatus.UnStarted, IsCurrent=true,CreateUserId = currUserId }, new(){NodeOrder = 2, NodeName="机票已出", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, } }, //酒店流程 new() { GroupId = groupId, ProcessOrder = 4, ProcessType = GroupProcessType.Hotel, OverallStatus = ProcessStatus.UnStarted, StartTime = DateTime.Now, UpdatedUserId = currUserId, CreateUserId = currUserId, Nodes = new List() { new(){NodeOrder = 1, NodeName="酒店占房中", OverallStatus=ProcessStatus.UnStarted, IsCurrent=true,CreateUserId = currUserId }, new(){NodeOrder = 2, NodeName="酒店已订", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, } }, //地接流程 new() { GroupId = groupId, ProcessOrder = 5, ProcessType = GroupProcessType.LocalGuide, OverallStatus = ProcessStatus.UnStarted, StartTime = DateTime.Now, UpdatedUserId = currUserId, CreateUserId = currUserId, Nodes = new List() { new(){NodeOrder = 1, NodeName="地接对接中", OverallStatus=ProcessStatus.UnStarted, IsCurrent=true,CreateUserId = currUserId }, new(){NodeOrder = 2, NodeName="地接已安排好", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, new(){NodeOrder = 2, NodeName="出行物资准备完毕", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, } }, //费用结算流程 new() { GroupId = groupId, ProcessOrder = 6, ProcessType = GroupProcessType.FeeSettle, OverallStatus = ProcessStatus.UnStarted, StartTime = DateTime.Now, UpdatedUserId = currUserId, CreateUserId = currUserId, Nodes = new List() { new(){NodeOrder = 1, NodeName="费用结算中", OverallStatus=ProcessStatus.UnStarted, IsCurrent=true,CreateUserId = currUserId }, new(){NodeOrder = 2, NodeName="费用结算完毕", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId }, } } }; } } /// /// 流程节点 /// [SugarTable("Grp_ProcessNode", "流程节点")] public class Grp_ProcessNode : EntityBase { /// /// 流程ID /// [SugarColumn(ColumnName = "ProcessId ", ColumnDescription = "流程ID", IsNullable = true, ColumnDataType = "int")] public int ProcessId { get; set; } /// /// 节点名称 /// [SugarColumn(ColumnName = "NodeName", ColumnDescription = "节点名称", ColumnDataType = "varchar(100)")] public string NodeName { get; set; } /// /// 节点顺序 /// [SugarColumn(ColumnName = "NodeOrder", ColumnDescription = "节点顺序", ColumnDataType = "int")] public int NodeOrder { get; set; } /// /// 节点状态 /// [SugarColumn(ColumnName = "OverallStatus", ColumnDescription = "节点状态", ColumnDataType = "int")] public ProcessStatus OverallStatus { get; set; } = ProcessStatus.UnStarted; /// /// 操作人 /// [SugarColumn(ColumnName = "Operator ", ColumnDescription = "操作人", IsNullable = true, ColumnDataType = "int")] public int Operator { get; set; } /// /// 操作时间 /// [SugarColumn(ColumnName = "OperationTime ", ColumnDescription = "操作时间", ColumnDataType = "datetime")] public DateTime OperationTime { get; set; } = DateTime.Now; ///// ///// 国家 ///// //[SugarColumn(ColumnName = "Country", ColumnDescription = "国家", ColumnDataType = "varchar(100)",IsNullable = true)] //public string? Country { get; set; } /// /// 是否为当前节点 /// [SugarColumn(ColumnName = "IsCurrent", ColumnDescription = "是否为当前节点", ColumnDataType = "bit")] [DefaultValue(false)] public bool IsCurrent { get; set; } /// /// 流程信息 - 关联的流程信息(导航属性) /// [Navigate(NavigateType.OneToOne, nameof(ProcessId))] public Grp_ProcessOverview Process { get; set; } } public class VisaNode { /// /// 节点顺序 /// public int NodeOrder { get; set; } /// /// 节点名称 /// public string NodeName { get; set; } /// /// 是否办理 /// public bool IsHandle { get; set; } /// /// 办理时间 /// public string HandleTime { get; set; } /// /// 归还人 /// NodeName = "归还护照" 时使用 /// public string Returner { get; set; } } }