|
@@ -0,0 +1,306 @@
|
|
|
+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
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// 团组流程总览表
|
|
|
+ /// </summary>
|
|
|
+ [SugarTable("Grp_ProcessOverview", "团组流程总览表")]
|
|
|
+ public class Grp_ProcessOverview : EntityBase
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// 团组Id
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "GroupId", ColumnDescription = "团组Id", IsNullable = true, ColumnDataType = "int")]
|
|
|
+ public int GroupId { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 流程顺序
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "ProcessOrder", ColumnDescription = "流程顺序", IsNullable = true, ColumnDataType = "int")]
|
|
|
+ public int ProcessOrder { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 流程类型
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "ProcessType", ColumnDescription = "流程类型", ColumnDataType = "int")]
|
|
|
+ public GroupProcessType ProcessType { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 整体状态
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "OverallStatus", ColumnDescription = "流程整体状态",ColumnDataType = "int")]
|
|
|
+ public ProcessStatus OverallStatus { get; set; } = ProcessStatus.UnStarted;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 开始时间
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "EndTime", ColumnDescription = "开始时间", IsNullable = true, ColumnDataType = "datetime")]
|
|
|
+ public DateTime? StartTime { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 结束时间
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "EndTime", ColumnDescription = "结束时间", IsNullable = true, ColumnDataType = "datetime")]
|
|
|
+ public DateTime? EndTime { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 更新人
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "UpdatedUserId", ColumnDescription = "更新人", IsNullable = true, ColumnDataType = "int")]
|
|
|
+ public int UpdatedUserId { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 更新时间
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "UpdatedTime", ColumnDescription = "更新时间", ColumnDataType = "datetime")]
|
|
|
+ public DateTime UpdatedTime { get; set; } = DateTime.Now;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 节点集合 - 流程包含的所有节点(导航属性)
|
|
|
+ /// </summary>
|
|
|
+ [Navigate(NavigateType.OneToMany, nameof(Grp_ProcessNode.ProcessId))]
|
|
|
+ public List<Grp_ProcessNode> Nodes { get; set; } = new List<Grp_ProcessNode>();
|
|
|
+
|
|
|
+ public Grp_ProcessOverview() { }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 流程进度默认模板
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="groupId"></param>
|
|
|
+ /// <param name="currUserId"></param>
|
|
|
+ /// <param name="visaCountries"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static List<Grp_ProcessOverview> ProcessInit(int groupId, int currUserId, List<string> visaCountries)
|
|
|
+ {
|
|
|
+ //单独处理签证流程节点
|
|
|
+ var visaDefualtNodes = new List<VisaNode>() {
|
|
|
+ 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<Grp_ProcessNode>();
|
|
|
+
|
|
|
+ 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<Grp_ProcessOverview>
|
|
|
+ {
|
|
|
+ //商邀报批流程
|
|
|
+ new()
|
|
|
+ {
|
|
|
+ GroupId = groupId,
|
|
|
+ ProcessOrder = 1,
|
|
|
+ ProcessType = GroupProcessType.Invitation,
|
|
|
+ OverallStatus = ProcessStatus.UnStarted,
|
|
|
+ StartTime = DateTime.Now,
|
|
|
+ UpdatedUserId = currUserId,
|
|
|
+ CreateUserId = currUserId,
|
|
|
+ Nodes = new List<Grp_ProcessNode>()
|
|
|
+ {
|
|
|
+ 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<Grp_ProcessNode>()
|
|
|
+ {
|
|
|
+ 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<Grp_ProcessNode>()
|
|
|
+ {
|
|
|
+ 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<Grp_ProcessNode>()
|
|
|
+ {
|
|
|
+ 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<Grp_ProcessNode>()
|
|
|
+ {
|
|
|
+ new(){NodeOrder = 1, NodeName="费用结算中", OverallStatus=ProcessStatus.UnStarted, IsCurrent=true,CreateUserId = currUserId },
|
|
|
+ new(){NodeOrder = 2, NodeName="费用结算完毕", OverallStatus=ProcessStatus.UnStarted, IsCurrent=false,CreateUserId = currUserId },
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 流程节点
|
|
|
+ /// </summary>
|
|
|
+ [SugarTable("Grp_ProcessNode", "流程节点")]
|
|
|
+ public class Grp_ProcessNode : EntityBase
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// 流程ID
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "ProcessId ", ColumnDescription = "流程ID", IsNullable = true, ColumnDataType = "int")]
|
|
|
+ public int ProcessId { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 节点名称
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "NodeName", ColumnDescription = "节点名称", ColumnDataType = "varchar(100)")]
|
|
|
+ public string NodeName { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 节点顺序
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "NodeOrder", ColumnDescription = "节点顺序", ColumnDataType = "int")]
|
|
|
+ public int NodeOrder { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 节点状态
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "OverallStatus", ColumnDescription = "节点状态", ColumnDataType = "int")]
|
|
|
+ public ProcessStatus OverallStatus { get; set; } = ProcessStatus.UnStarted;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 操作人
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "Operator ", ColumnDescription = "操作人", IsNullable = true, ColumnDataType = "int")]
|
|
|
+ public int Operator { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 操作时间
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "OperationTime ", ColumnDescription = "操作时间", ColumnDataType = "datetime")]
|
|
|
+ public DateTime OperationTime { get; set; } = DateTime.Now;
|
|
|
+
|
|
|
+ ///// <summary>
|
|
|
+ ///// 国家
|
|
|
+ ///// </summary>
|
|
|
+ //[SugarColumn(ColumnName = "Country", ColumnDescription = "国家", ColumnDataType = "varchar(100)",IsNullable = true)]
|
|
|
+ //public string? Country { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 是否为当前节点
|
|
|
+ /// </summary>
|
|
|
+ [SugarColumn(ColumnName = "IsCurrent", ColumnDescription = "是否为当前节点", ColumnDataType = "bit")]
|
|
|
+ [DefaultValue(false)]
|
|
|
+ public bool IsCurrent { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 流程信息 - 关联的流程信息(导航属性)
|
|
|
+ /// </summary>
|
|
|
+ [Navigate(NavigateType.OneToOne, nameof(ProcessId))]
|
|
|
+ public Grp_ProcessOverview Process { get; set; }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public class VisaNode
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// 节点顺序
|
|
|
+ /// </summary>
|
|
|
+ public int NodeOrder { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 节点名称
|
|
|
+ /// </summary>
|
|
|
+ public string NodeName { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 是否办理
|
|
|
+ /// </summary>
|
|
|
+ public bool IsHandle { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 办理时间
|
|
|
+ /// </summary>
|
|
|
+ public string HandleTime { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 归还人
|
|
|
+ /// NodeName = "归还护照" 时使用
|
|
|
+ /// </summary>
|
|
|
+ public string Returner { get; set; }
|
|
|
+ }
|
|
|
+}
|