|
|
@@ -6,6 +6,7 @@ using OASystem.Domain.Entities.Groups;
|
|
|
using OASystem.Domain.Entities.Resource;
|
|
|
using OASystem.Domain.ViewModels.Groups;
|
|
|
using Org.BouncyCastle.Asn1.X500;
|
|
|
+using System.Diagnostics;
|
|
|
using System.Reflection;
|
|
|
using System.Runtime.Intrinsics.Arm;
|
|
|
using System.Text.RegularExpressions;
|
|
|
@@ -37,11 +38,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
{
|
|
|
var processs = new List<Grp_ProcessOverview>();
|
|
|
|
|
|
- //团组验证
|
|
|
+ // 团组验证
|
|
|
var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(g => g.Id == groupId);
|
|
|
if (groupInfo == null) return processs;
|
|
|
|
|
|
- // 检查是否已存在流程
|
|
|
+ // 流程验证
|
|
|
var existingProcesses = await _sqlSugar.Queryable<Grp_ProcessOverview>()
|
|
|
.Where(p => p.IsDel == 0 && p.GroupId == groupId)
|
|
|
.ToListAsync();
|
|
|
@@ -65,18 +66,14 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
.ToListAsync();
|
|
|
|
|
|
#region 商邀报批流程
|
|
|
- var custInfo = await _sqlSugar.Queryable<Grp_TourClientList>()
|
|
|
- .Where(c => c.DiId == groupId && c.IsDel == 0)
|
|
|
- .OrderByDescending(c => c.CreateTime)
|
|
|
- .FirstAsync();
|
|
|
- string oaNode2Tips = "客户提供完整名单后,2周内取得邀请函(翻译件)。";
|
|
|
- if (custInfo != null)
|
|
|
- {
|
|
|
- oaNode2Tips = $"请于{custInfo.CreateTime.AddDays(14):yyyy年MM月dd日}内完成该项工作(客户提供完整名单后,2周内取得邀请函(翻译件))";
|
|
|
- }
|
|
|
|
|
|
- var oaNode4Tips = $"请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(按进度实际公务活动落实情况,出发前5日落实公务)";
|
|
|
- var oaNode7Tips = $"请于{groupInfo.VisitEndDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组结束前完成)";
|
|
|
+ string oaNode1Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 1);
|
|
|
+ string oaNode2Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 2);
|
|
|
+ string oaNode3Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 3);
|
|
|
+ string oaNode4Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 4);
|
|
|
+ string oaNode5Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 5);
|
|
|
+ string oaNode6Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 6);
|
|
|
+ string oaNode7Tips = NodeTipsMsg(groupInfo, GroupProcessType.Invitation, 7);
|
|
|
|
|
|
//节点可操作用户列表
|
|
|
var oaNodeOpUsers = users.Where(u =>
|
|
|
@@ -87,12 +84,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
Grp_ProcessOverview.Create(groupId, 1, GroupProcessType.Invitation, ProcessStatus.InProgress, currUserId,
|
|
|
new List<Grp_ProcessNode>()
|
|
|
{
|
|
|
- Grp_ProcessNode.Create(1, "报批基础资料准备","更新报批行程和请示,提供其他报批所需材料,4个工作日内完成。",ProcessStatus.InProgress, true,false,false,false,currUserId,oaNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(1, "报批基础资料准备",oaNode1Tips,ProcessStatus.InProgress, true,false,false,false,currUserId,oaNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(2, "报批邀请函资料准备",oaNode2Tips, ProcessStatus.InProgress, false,false,false,false,currUserId,oaNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(3, "获得批件","提供完整的报批全套资源。",ProcessStatus.InProgress, false,false,false,false, currUserId ,oaNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(3, "获得批件",oaNode3Tips,ProcessStatus.InProgress, false,false,false,false, currUserId ,oaNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(4, "对接公务",oaNode4Tips,ProcessStatus.InProgress, false,false,false,false, currUserId,oaNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(5, "参与翻译对接","",ProcessStatus.InProgress, false,false,false,true, currUserId,oaNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(6, "商邀文案配合","",ProcessStatus.InProgress, false,false,false,false, currUserId,oaNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(5, "参与翻译对接",oaNode5Tips,ProcessStatus.InProgress, false,false,false,true, currUserId,oaNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(6, "商邀文案配合",oaNode6Tips,ProcessStatus.InProgress, false,false,false,false, currUserId,oaNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(7, "票据上传(相关票据)",oaNode7Tips,ProcessStatus.InProgress, false,false,true,false, currUserId,oaNodeOpUsers),
|
|
|
}));
|
|
|
#endregion
|
|
|
@@ -115,8 +112,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
visaDefualtNodes.Add(VisaProcessNode.Info(i, visaCountries[i - 1].ToString()));
|
|
|
}
|
|
|
|
|
|
- var visaNode2Tips = $"请于{groupInfo.VisitDate:yyyy年MM月dd日}内完成该项工作(按进度实际签证办理落实情况,团组出发前上传票据。)";
|
|
|
- visaNodes.Add(Grp_ProcessNode.Create(1, "签证信息", "", ProcessStatus.InProgress, true, false, false, false, currUserId, visaNodeOpUsers, JsonConvert.SerializeObject(visaDefualtNodes)));
|
|
|
+ string visaNode1Tips = NodeTipsMsg(groupInfo, GroupProcessType.Visa, 1);
|
|
|
+ string visaNode2Tips = NodeTipsMsg(groupInfo, GroupProcessType.Visa, 2);
|
|
|
+ visaNodes.Add(Grp_ProcessNode.Create(1, "签证信息", visaNode1Tips, ProcessStatus.InProgress, true, false, false, false, currUserId, visaNodeOpUsers, JsonConvert.SerializeObject(visaDefualtNodes)));
|
|
|
visaNodes.Add(Grp_ProcessNode.Create(2, "票据上传(明细表、费用票据、保单及超支费用账单)", visaNode2Tips, ProcessStatus.InProgress, false, false, true, false, currUserId, oaNodeOpUsers));
|
|
|
}
|
|
|
|
|
|
@@ -124,19 +122,14 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
#endregion
|
|
|
|
|
|
#region 机票流程
|
|
|
- string airNode1Tips = "建团后打勾确认出团的时候开始24小时内。";
|
|
|
- if (groupInfo.Step == 1 || groupInfo.Step == 2)
|
|
|
- {
|
|
|
- if (groupInfo.StepOperationTime.HasValue)
|
|
|
- {
|
|
|
- airNode1Tips = $"请于{groupInfo.StepOperationTime.Value.AddDays(1):yyyy年MM月dd日}内完成该项工作(建团后打勾确认出团的时候开始24小时内)";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var airNode3Tips = $"完成机票采购确认(含预算核对、出票确认等)";
|
|
|
- var airNode5Tips = $"请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组出发前5日)";
|
|
|
- var airNode7Tips = $"请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(团组归国后5个工作日内)";
|
|
|
- var airNode8Tips = $"1. 票据上传(机票报销蓝联、行程单及机票说明) \r\n 2. 请于{groupInfo.VisitEndDate.AddDays(10):yyyy年MM月dd日}内完成该项工作(团组归国后10个工作日内) *按机票报价*0.999折扣出具机票报销蓝联、行程单及机票说明";
|
|
|
+ string airNode1Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 1);
|
|
|
+ string airNode2Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 2);
|
|
|
+ string airNode3Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 3);
|
|
|
+ string airNode4Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 4);
|
|
|
+ string airNode5Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 5);
|
|
|
+ string airNode6Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 6);
|
|
|
+ string airNode7Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 7);
|
|
|
+ string airNode8Tips = NodeTipsMsg(groupInfo, GroupProcessType.AirTicket, 8);
|
|
|
|
|
|
//节点可操作用户列表
|
|
|
var airNodeOpUsers = users.Where(u =>
|
|
|
@@ -147,12 +140,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
Grp_ProcessOverview.Create(groupId, 3, GroupProcessType.AirTicket, ProcessStatus.InProgress, currUserId,
|
|
|
new List<Grp_ProcessNode>()
|
|
|
{
|
|
|
- Grp_ProcessNode.Create(1, "初步拟定航程方案及价格", airNode1Tips, ProcessStatus.InProgress, true,false,false,false, currUserId ,airNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(2, "机票占位、续位", "", ProcessStatus.UnStarted, false,false,false,false,currUserId,airNodeOpUsers ),
|
|
|
- Grp_ProcessNode.Create(3, "完成机票采购确认", airNode3Tips, ProcessStatus.UnStarted,false,false,false,false, currUserId, airNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(4, "进行出票操作并核查信息", "", ProcessStatus.UnStarted, false,false,false,false, currUserId, airNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(5, "机票已出", airNode5Tips, ProcessStatus.UnStarted, false,false,false,false, currUserId, airNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(6, "完成机票选座", "", ProcessStatus.UnStarted, false,false,false,false,currUserId, airNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(1, "初步拟定航程方案及价格", airNode1Tips, ProcessStatus.InProgress, true,false,false,false, currUserId ,airNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(2, "机票占位、续位", airNode2Tips, ProcessStatus.UnStarted, false,false,false,false,currUserId,airNodeOpUsers ),
|
|
|
+ Grp_ProcessNode.Create(3, "完成机票采购确认", airNode3Tips, ProcessStatus.UnStarted,false,false,false,false, currUserId, airNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(4, "进行出票操作并核查信息", airNode4Tips, ProcessStatus.UnStarted, false,false,false,false, currUserId, airNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(5, "机票已出", airNode5Tips, ProcessStatus.UnStarted, false,false,false,false, currUserId, airNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(6, "完成机票选座", airNode6Tips, ProcessStatus.UnStarted, false,false,false,false,currUserId, airNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(7, "票据上传(机票超支费用账单)", airNode7Tips, ProcessStatus.UnStarted, false,false,true,false, currUserId,airNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(8, "票据上传", airNode8Tips, ProcessStatus.UnStarted, false,false,true,false, currUserId, airNodeOpUsers)
|
|
|
}
|
|
|
@@ -162,17 +155,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
|
|
|
#region 酒店流程
|
|
|
|
|
|
- string hotelNode1Tips = "1. 筛选并按照预算标准,对目标酒店进行询价、比价、谈价 \r\n2. 建团后打勾确认出团的时候开始2个工作日。";
|
|
|
- if (groupInfo.Step == 1 || groupInfo.Step == 2)
|
|
|
- {
|
|
|
- if (groupInfo.StepOperationTime.HasValue)
|
|
|
- {
|
|
|
- hotelNode1Tips = $"请于{groupInfo.StepOperationTime.Value.AddDays(2):yyyy年MM月dd日}内完成该项工作(建团后打勾确认出团的时候开始2个工作日)";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var hotelNode4Tips = $"1.行前再次确认酒店订单、付款状态及入住安排 \r\n 2.请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组出发前5天)";
|
|
|
- var hotelNode5Tips = $"1.行程结束后整理酒店发票(含超支费用发票)与结算 \r\n 2.请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(团组结束后5天内)";
|
|
|
+ string hotelNode1Tips = NodeTipsMsg(groupInfo, GroupProcessType.Hotel, 1);
|
|
|
+ string hotelNode2Tips = NodeTipsMsg(groupInfo, GroupProcessType.Hotel, 2);
|
|
|
+ string hotelNode3Tips = NodeTipsMsg(groupInfo, GroupProcessType.Hotel, 3);
|
|
|
+ string hotelNode4Tips = NodeTipsMsg(groupInfo, GroupProcessType.Hotel, 4);
|
|
|
+ string hotelNode5Tips = NodeTipsMsg(groupInfo, GroupProcessType.Hotel, 5);
|
|
|
|
|
|
//节点可操作用户列表
|
|
|
var hotelNodeOpUsers = users.Where(u =>
|
|
|
@@ -184,8 +171,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
new List<Grp_ProcessNode>()
|
|
|
{
|
|
|
Grp_ProcessNode.Create(1, "按照预算,询价、比价、谈价", hotelNode1Tips, ProcessStatus.InProgress, true, false, false, false, currUserId, hotelNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(2, "获取酒店确认函与入住名单核对", "", ProcessStatus.UnStarted, false, false, false,false, currUserId , hotelNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(3, "预订酒店并录入OA", "", ProcessStatus.UnStarted,false, false, false,false,currUserId , hotelNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(2, "获取酒店确认函与入住名单核对", hotelNode2Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId , hotelNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(3, "预订酒店并录入OA", hotelNode3Tips, ProcessStatus.UnStarted,false, false, false,false,currUserId , hotelNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(4, "行前再次确认酒店相关情况", hotelNode4Tips,ProcessStatus.UnStarted, false, false, false,false,currUserId , hotelNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(5, "行程结束后整理酒店发票与结算", hotelNode5Tips, ProcessStatus.UnStarted, false, false, true,false, currUserId ,hotelNodeOpUsers),
|
|
|
}
|
|
|
@@ -194,32 +181,13 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
#endregion
|
|
|
|
|
|
#region 地接流程
|
|
|
- var airTripCodeInfo = await _sqlSugar.Queryable<Air_TicketBlackCode>()
|
|
|
- .Where(x => x.IsDel == 0 && x.DiId == groupId)
|
|
|
- .OrderByDescending(x => x.CreateTime)
|
|
|
- .FirstAsync();
|
|
|
- string opNode1Tips = $"机票行程代码最后一段录入后1个工作日内。";
|
|
|
- if (airTripCodeInfo != null)
|
|
|
- {
|
|
|
- opNode1Tips = $"请于{airTripCodeInfo.CreateTime.AddDays(1):yyyy年MM月dd日}内完成该项工作(机票行程代码最后一段录入后1个工作日内)";
|
|
|
- }
|
|
|
-
|
|
|
- string opNode2Tips = $"1.联系并询价地接、餐厅、用车、景点等供应商 \r\n 2. 请于{groupInfo.CreateTime.AddDays(7):yyyy年MM月dd日}内完成该项工作(建团完成后7个工作日内)";
|
|
|
- string opNode3Tips = $"请于{groupInfo.CreateTime.AddDays(10):yyyy年MM月dd日}内完成该项工作(上一步往后3个工作日内)";
|
|
|
- string opNode4Tips = $"请于{groupInfo.CreateTime.AddDays(12):yyyy年MM月dd日}内完成该项工作(上一步往后2个工作日内)";
|
|
|
-
|
|
|
- var backListInfo = await _sqlSugar.Queryable<Grp_InvertedList>().Where(x => x.DiId == groupId && x.IsDel == 0).FirstAsync();
|
|
|
- string opNode5Tips = $"1.制定最终《行程单》及《出行手册》 \r\n2. 倒推表里开行前会 -3天。";
|
|
|
- if (backListInfo != null)
|
|
|
- {
|
|
|
-
|
|
|
- if (DateTime.TryParse(backListInfo.PreTripMeetingDt, out DateTime dateTime))
|
|
|
- {
|
|
|
- opNode5Tips = $"请于{dateTime.AddDays(-3):yyyy年MM月dd日}内完成该项工作(倒推表里开行前会 -3天)";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- string opNode7Tips = $"请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(团组归国后5个工作日内) *上传最终报批行程,确定城市间交通最终版报价分配;地接账单(清楚标注超时及其他项超支费用)、地接交通费用原始票据、城市间交通明细表;";
|
|
|
+ string opNode1Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 1);
|
|
|
+ string opNode2Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 2);
|
|
|
+ string opNode3Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 3);
|
|
|
+ string opNode4Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 4);
|
|
|
+ string opNode5Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 5);
|
|
|
+ string opNode6Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 6);
|
|
|
+ string opNode7Tips = NodeTipsMsg(groupInfo, GroupProcessType.LocalGuide, 7);
|
|
|
|
|
|
//节点可操作用户列表
|
|
|
var opNodeOpUsers = users.Where(u =>
|
|
|
@@ -235,7 +203,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
Grp_ProcessNode.Create(3,"提交供应商报价及比价表", opNode3Tips, ProcessStatus.UnStarted, false, false, false, false,currUserId,opNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(4,"执行采购流程", opNode4Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId,opNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(5,"制定最终行程单及出行手册", opNode5Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId ,opNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(6,"送机", "", ProcessStatus.UnStarted, false, false, false,false, currUserId,opNodeOpUsers ),
|
|
|
+ Grp_ProcessNode.Create(6,"送机", opNode6Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId,opNodeOpUsers ),
|
|
|
Grp_ProcessNode.Create(7,"最终版报批行程、票据上传", opNode7Tips, ProcessStatus.UnStarted, false, false, true, false,currUserId,opNodeOpUsers )
|
|
|
}
|
|
|
)
|
|
|
@@ -244,8 +212,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
#endregion
|
|
|
|
|
|
#region 费用结算流程
|
|
|
- var feeNode3Tips = $"1.整理统计团组超支费用、三公报销资料给到各单位 \r\n 2. 请于{groupInfo.VisitEndDate.AddDays(12):yyyy年MM月dd日}内完成该项工作(团组归国后12个工作日内)";
|
|
|
-
|
|
|
+ var feeNode1Tips = NodeTipsMsg(groupInfo, GroupProcessType.FeeSettle, 1);
|
|
|
+ var feeNode2Tips = NodeTipsMsg(groupInfo, GroupProcessType.FeeSettle, 2);
|
|
|
+ var feeNode3Tips = NodeTipsMsg(groupInfo, GroupProcessType.FeeSettle, 3);
|
|
|
+ var feeNode4Tips = NodeTipsMsg(groupInfo, GroupProcessType.FeeSettle, 4);
|
|
|
//节点可操作用户列表
|
|
|
var feeNodeOpUsers = users.Where(u =>
|
|
|
u.JobName != null && u.JobName.Contains("会计") && u.CnName.Equals("曾艳")
|
|
|
@@ -255,10 +225,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
Grp_ProcessOverview.Create(groupId, 6, GroupProcessType.FeeSettle, ProcessStatus.InProgress, currUserId,
|
|
|
new List<Grp_ProcessNode>()
|
|
|
{
|
|
|
- Grp_ProcessNode.Create(1, "城市间交通报批金额核定", "团组报批前", ProcessStatus.InProgress, true, true, false,false,currUserId,feeNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(2, "团组全程各段机票打票金额的核定", "团组报批后、订票前", ProcessStatus.UnStarted, false, false, false,false,currUserId,feeNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(1, "城市间交通报批金额核定", feeNode1Tips, ProcessStatus.InProgress, true, true, false,false,currUserId,feeNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(2, "团组城市间交通及国际机票数据分配的合理性核对", feeNode2Tips, ProcessStatus.UnStarted, false, false, false,false,currUserId,feeNodeOpUsers),
|
|
|
Grp_ProcessNode.Create(3, "整理统计相关财务资料给到各单位", feeNode3Tips, ProcessStatus.UnStarted, false, false, false,false,currUserId,feeNodeOpUsers),
|
|
|
- Grp_ProcessNode.Create(4, "费用结算完毕", "", ProcessStatus.UnStarted, false, false, false,false, currUserId , feeNodeOpUsers),
|
|
|
+ Grp_ProcessNode.Create(4, "费用结算完毕", feeNode4Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId , feeNodeOpUsers),
|
|
|
}
|
|
|
)
|
|
|
);
|
|
|
@@ -440,6 +410,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
operatorName = name;
|
|
|
}
|
|
|
|
|
|
+ string nodeTipsMsg = NodeTipsMsg(groupInfo, p.ProcessType, n.NodeOrder);
|
|
|
+
|
|
|
return new
|
|
|
{
|
|
|
n.Id,
|
|
|
@@ -452,7 +424,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
OpeateTime = n.OperationTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? "-",
|
|
|
ActualDone = n.ActualDone?.ToString("yyyy-MM-dd HH:mm:ss") ?? "",
|
|
|
n.OpUserList, //可操作用户列表
|
|
|
- n.NodeDescTips,
|
|
|
+ NodeDescTips = nodeTipsMsg,
|
|
|
isEnaAssistBtn, // 是否启用财务流程首节点协助按钮
|
|
|
n.IsAssist, // 财务流程首节点 存储值
|
|
|
isEnaFileUpBtn, // 是否启用上传文件按钮
|
|
|
@@ -468,6 +440,180 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
return new Result { Code = 200, Data = processes, Msg = "查询成功!" };
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 节点提示消息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="groupInfo"></param>
|
|
|
+ /// <param name="procType"></param>
|
|
|
+ /// <param name="nodeOrder"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string NodeTipsMsg(Grp_DelegationInfo groupInfo, GroupProcessType procType, int nodeOrder)
|
|
|
+ {
|
|
|
+ string msg = string.Empty;
|
|
|
+ int groupId = groupInfo.Id;
|
|
|
+ switch (procType)
|
|
|
+ {
|
|
|
+ case GroupProcessType.Invitation:
|
|
|
+ switch (nodeOrder)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ msg = "更新报批行程和请示,提供其他报批所需材料,4个工作日内完成。";
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ var custInfo = _sqlSugar.Queryable<Grp_TourClientList>()
|
|
|
+ .Where(c => c.DiId == groupId && c.IsDel == 0)
|
|
|
+ .OrderByDescending(c => c.CreateTime)
|
|
|
+ .First();
|
|
|
+ msg = "客户提供完整名单后,2周内取得邀请函(翻译件)。";
|
|
|
+ if (custInfo != null)
|
|
|
+ {
|
|
|
+ msg = $"请于{custInfo.CreateTime.AddDays(14):yyyy年MM月dd日}内完成该项工作(客户提供完整名单后,2周内取得邀请函(翻译件))";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ msg = "提供完整的报批全套资源。";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ msg = $"请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(按进度实际公务活动落实情况,出发前5日落实公务)";
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ msg = $"请于{groupInfo.VisitEndDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组结束前完成)";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case GroupProcessType.Visa:
|
|
|
+ switch (nodeOrder)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ msg = $"请于{groupInfo.VisitDate:yyyy年MM月dd日}内完成该项工作(按进度实际签证办理落实情况,团组出发前上传票据。)";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case GroupProcessType.AirTicket:
|
|
|
+ switch (nodeOrder)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ msg = "建团后打勾确认出团的时候开始24小时内。";
|
|
|
+ if (groupInfo.Step == 1 || groupInfo.Step == 2)
|
|
|
+ {
|
|
|
+ if (groupInfo.StepOperationTime.HasValue)
|
|
|
+ {
|
|
|
+ msg = $"请于{groupInfo.StepOperationTime.Value.AddDays(1):yyyy年MM月dd日}内完成该项工作(建团后打勾确认出团的时候开始24小时内)";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ msg = $"完成机票采购确认(含预算核对、出票确认等)";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ msg = $"请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组出发前5日)";
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ msg = $"请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(机票蓝联打票及上传机票超支费用账单,团组归国后5个工作日内)";
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ msg = $"1. 票据上传(机票报销蓝联、行程单及机票说明) \r\n 2. 请于{groupInfo.VisitEndDate.AddDays(10):yyyy年MM月dd日}内完成该项工作(团组归国后10个工作日内) *按机票报价*0.999折扣出具机票报销蓝联、行程单及机票说明";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case GroupProcessType.Hotel:
|
|
|
+ switch (nodeOrder)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ msg = "1. 筛选并按照预算标准,对目标酒店进行询价、比价、谈价 \r\n2. 建团后打勾确认出团的时候开始2个工作日。";
|
|
|
+ if (groupInfo.Step == 1 || groupInfo.Step == 2)
|
|
|
+ {
|
|
|
+ if (groupInfo.StepOperationTime.HasValue)
|
|
|
+ {
|
|
|
+ msg = $"请于{groupInfo.StepOperationTime.Value.AddDays(2):yyyy年MM月dd日}内完成该项工作(建团后打勾确认出团的时候开始2个工作日)";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ msg = $"1.行前再次确认酒店订单、付款状态及入住安排 \r\n 2.请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组出发前5天)";
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ msg = $"1.行程结束后整理酒店发票(含超支费用发票)与结算 \r\n 2.请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(团组结束后5天内)";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case GroupProcessType.LocalGuide:
|
|
|
+ switch (nodeOrder)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ var airTripCodeInfo = _sqlSugar.Queryable<Air_TicketBlackCode>()
|
|
|
+ .Where(x => x.IsDel == 0 && x.DiId == groupId)
|
|
|
+ .OrderByDescending(x => x.CreateTime)
|
|
|
+ .First();
|
|
|
+ msg = $"机票行程代码最后一段录入后1个工作日内。";
|
|
|
+ if (airTripCodeInfo != null)
|
|
|
+ {
|
|
|
+ msg = $"请于{airTripCodeInfo.CreateTime.AddDays(1):yyyy年MM月dd日}内完成该项工作(机票行程代码最后一段录入后1个工作日内)";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ msg = $"1.联系并询价地接、餐厅、用车、景点等供应商 \r\n 2. 请于{groupInfo.CreateTime.AddDays(7):yyyy年MM月dd日}内完成该项工作(建团完成后7个工作日内)";
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ msg = $"请于{groupInfo.CreateTime.AddDays(10):yyyy年MM月dd日}内完成该项工作(上一步往后3个工作日内)";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ msg = $"请于{groupInfo.CreateTime.AddDays(12):yyyy年MM月dd日}内完成该项工作(上一步往后2个工作日内)";
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ var backListInfo = _sqlSugar.Queryable<Grp_InvertedList>().Where(x => x.DiId == groupId && x.IsDel == 0).First();
|
|
|
+ msg = $"1.制定最终《行程单》及《出行手册》 \r\n2. 倒推表里开行前会 -3天。";
|
|
|
+ if (backListInfo != null)
|
|
|
+ {
|
|
|
+ if (DateTime.TryParse(backListInfo.PreTripMeetingDt, out DateTime dateTime))
|
|
|
+ {
|
|
|
+ msg = $"请于{dateTime.AddDays(-3):yyyy年MM月dd日}内完成该项工作(倒推表里开行前会 -3天)";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ msg = $"请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(团组归国后5个工作日内) *上传最终报批行程,确定城市间交通最终版报价分配;地接账单(清楚标注超时及其他项超支费用)、地接交通费用原始票据、城市间交通明细表;";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case GroupProcessType.FeeSettle:
|
|
|
+ switch (nodeOrder)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ msg = "团组报批前";
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ msg = "团组报批前三公费用表";
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ msg = $"1.整理统计团组超支费用、三公报销资料给到各单位 \r\n 2. 请于{groupInfo.VisitEndDate.AddDays(12):yyyy年MM月dd日}内完成该项工作(团组归国后12个工作日内)";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 更新节点状态
|
|
|
/// </summary>
|
|
|
@@ -781,7 +927,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
if (allSubNodesCompleted)
|
|
|
{
|
|
|
node.OverallStatus = ProcessStatus.Completed;
|
|
|
-
|
|
|
process.OverallStatus = ProcessStatus.Completed;
|
|
|
process.EndTime = DateTime.Now;
|
|
|
process.UpdatedUserId = dto.CurrUserId;
|
|
|
@@ -866,7 +1011,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
await _sqlSugar.Updateable(node)
|
|
|
.UpdateColumns(n => new
|
|
|
{
|
|
|
- ActualDone = isDtNul ? node.ActualDone : null,
|
|
|
+ n.ActualDone,
|
|
|
n.IsAssist,
|
|
|
n.IsFileUp,
|
|
|
n.IsPart,
|
|
|
@@ -875,6 +1020,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
|
|
|
//记录节点日志
|
|
|
await LogNodeOpAsync(nodeBefore, node, "Update", currUserId);
|
|
|
|
|
|
+ //当前节点未完成则更改节点状态为已完成
|
|
|
+ if (node.OverallStatus == ProcessStatus.InProgress)
|
|
|
+ {
|
|
|
+ await UpdateNodeStatusAsync(node.Id,dto.CurrUserId);
|
|
|
+ }
|
|
|
+
|
|
|
return new Result { Code = 200, Msg = "实际操作时间设置成功。" };
|
|
|
}
|
|
|
|