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