Просмотр исходного кода

1. 团组流程 -> 新增节点可操作人员列表及相关代码编写、测试

Lyyyi недель назад: 4
Родитель
Сommit
18990c3d5c

+ 9 - 1
OASystem/OASystem.Domain/Entities/Groups/Grp_ProcessOverview.cs

@@ -169,6 +169,11 @@ namespace OASystem.Domain.Entities.Groups
         [DefaultValue(false)]
         public bool IsPart { get; set; }
 
+        /// <summary>
+        /// 节点可操作用户列表
+        /// </summary>
+        [SugarColumn(ColumnName = "OpUserList", ColumnDescription = "节点可操作用户列表", ColumnDataType = "varchar(max)",IsJson = true)]
+        public List<int> OpUserList { get; set; } = new List<int>();
 
         public Grp_ProcessNode() { }
 
@@ -184,9 +189,11 @@ namespace OASystem.Domain.Entities.Groups
         /// <param name="isFileUp">是否上传文件</param>
         /// <param name="isPart">是否参与</param>
         /// <param name="currUserId">当前用户Id</param>
+        /// <param name="opUserList">节点可操作用户列表</param>
         /// <param name="remark">备注</param>
         /// <returns></returns>
-        public static Grp_ProcessNode Create(int nodeOrder, string nodeName, string nodeDescTips,ProcessStatus status, bool isCurrent, bool isAssist, bool isFileUp,bool isPart, int currUserId, string remark=null)
+        public static Grp_ProcessNode Create(int nodeOrder, string nodeName, string nodeDescTips, ProcessStatus status,
+            bool isCurrent, bool isAssist, bool isFileUp, bool isPart, int currUserId, List<int> opUserList, string remark = null)
         {
             return new Grp_ProcessNode
             {
@@ -199,6 +206,7 @@ namespace OASystem.Domain.Entities.Groups
                 IsPart = isPart,
                 IsFileUp = isFileUp,
                 CreateUserId = currUserId,
+                OpUserList = opUserList,
                 Remark = remark
             };
         }

+ 85 - 34
OASystem/OASystem.Infrastructure/Repositories/Groups/ProcessOverviewRepository.cs

@@ -47,6 +47,23 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 .ToListAsync();
             if (existingProcesses.Any()) return processs;
 
+            var users = await _sqlSugar.Queryable<Sys_Users>()
+                .LeftJoin<Sys_Company>((u, c) => u.CompanyId == c.Id)
+                .LeftJoin<Sys_Department>((u, c, d) => u.DepId == d.Id)
+                .LeftJoin<Sys_JobPost>((u, c, d, jp) => u.JobPostId == jp.Id)
+                .Where((u, c, d, jp) => u.IsDel == 0)
+                .Select((u, c, d, jp) => new {
+                    u.Id,
+                    u.CnName,
+                    u.CompanyId,
+                    c.CompanyName,
+                    u.DepId,
+                    d.DepName,
+                    u.JobPostId,
+                    jp.JobName,
+                })
+                .ToListAsync();
+
             #region 商邀报批流程
             var custInfo = await _sqlSugar.Queryable<Grp_TourClientList>()
                 .Where(c => c.DiId == groupId && c.IsDel == 0)
@@ -60,22 +77,33 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             var oaNode4Tips = $"请于{groupInfo.VisitDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(按进度实际公务活动落实情况,出发前5日落实公务)";
             var oaNode7Tips = $"请于{groupInfo.VisitEndDate.AddDays(-5):yyyy年MM月dd日}内完成该项工作(团组结束前完成)";
+
+            //节点可操作用户列表
+            var oaNodeOpUsers = users.Where(u =>
+                u.JobName != null && u.JobName.Contains("商邀主管")
+            ).Select(u => u.Id).ToList();
+
             processs.Add(
                 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),
-                        Grp_ProcessNode.Create(2, "报批邀请函资料准备",oaNode2Tips, ProcessStatus.InProgress, false,false,false,false,currUserId),
-                        Grp_ProcessNode.Create(3, "获得批件","提供完整的报批全套资源。",ProcessStatus.InProgress, false,false,false,false, currUserId ),
-                        Grp_ProcessNode.Create(4, "对接公务",oaNode4Tips,ProcessStatus.InProgress, false,false,false,false, currUserId),
-                        Grp_ProcessNode.Create(5, "参与翻译对接","",ProcessStatus.InProgress, false,false,false,true, currUserId),
-                        Grp_ProcessNode.Create(6, "商邀文案配合","",ProcessStatus.InProgress, false,false,false,false, currUserId),
-                        Grp_ProcessNode.Create(7, "票据上传(相关票据)",oaNode7Tips,ProcessStatus.InProgress, false,false,true,false, currUserId),
+                        Grp_ProcessNode.Create(1, "报批基础资料准备","更新报批行程和请示,提供其他报批所需材料,4个工作日内完成。",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(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(7, "票据上传(相关票据)",oaNode7Tips,ProcessStatus.InProgress, false,false,true,false, currUserId,oaNodeOpUsers),
                     }));
             #endregion
 
             #region 签证流程
 
+            //节点可操作用户列表
+            var visaNodeOpUsers = users.Where(u =>
+                u.JobName != null && u.JobName.Contains("签证")
+            ).Select(u => u.Id).ToList();
+
             //单独处理签证流程节点
             var visaNodes = new List<Grp_ProcessNode>();
 
@@ -88,8 +116,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 }
 
                 var visaNode2Tips = $"请于{groupInfo.VisitDate:yyyy年MM月dd日}内完成该项工作(按进度实际签证办理落实情况,团组出发前上传票据。)";
-                visaNodes.Add(Grp_ProcessNode.Create(1, "签证信息", "", ProcessStatus.InProgress, true, false, false, false, currUserId, JsonConvert.SerializeObject(visaDefualtNodes)));
-                visaNodes.Add(Grp_ProcessNode.Create(2, "票据上传(明细表、费用票据、保单及超支费用账单)", visaNode2Tips, ProcessStatus.InProgress, false, false, true, false, currUserId));
+                visaNodes.Add(Grp_ProcessNode.Create(1, "签证信息", "", 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));
             }
 
             processs.Add(Grp_ProcessOverview.Create(groupId, 2, GroupProcessType.Visa, ProcessStatus.UnStarted, currUserId, visaNodes));
@@ -110,18 +138,23 @@ namespace OASystem.Infrastructure.Repositories.Groups
             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折扣出具机票报销蓝联、行程单及机票说明";
 
+            //节点可操作用户列表
+            var airNodeOpUsers = users.Where(u =>
+                u.JobName != null && u.JobName.Contains("机票")
+            ).Select(u => u.Id).ToList();
+
             processs.Add(
                 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 ),
-                        Grp_ProcessNode.Create(2, "机票占位、续位",   "", ProcessStatus.UnStarted, false,false,false,false,currUserId ),
-                        Grp_ProcessNode.Create(3, "完成机票采购确认",  airNode3Tips, ProcessStatus.UnStarted,false,false,false,false, currUserId),
-                        Grp_ProcessNode.Create(4, "进行出票操作并核查信息", "", ProcessStatus.UnStarted, false,false,false,false, currUserId),
-                        Grp_ProcessNode.Create(5, "机票已出",  airNode5Tips, ProcessStatus.UnStarted, false,false,false,false, currUserId),
-                        Grp_ProcessNode.Create(6, "完成机票选座", "", ProcessStatus.UnStarted, false,false,false,false,currUserId),
-                        Grp_ProcessNode.Create(7, "票据上传(机票超支费用账单)", airNode7Tips, ProcessStatus.UnStarted, false,false,true,false, currUserId),
-                        Grp_ProcessNode.Create(8, "票据上传", airNode8Tips, ProcessStatus.UnStarted, false,false,true,false, currUserId)
+                        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(7, "票据上传(机票超支费用账单)", airNode7Tips, ProcessStatus.UnStarted, false,false,true,false, currUserId,airNodeOpUsers),
+                        Grp_ProcessNode.Create(8, "票据上传", airNode8Tips, ProcessStatus.UnStarted, false,false,true,false, currUserId, airNodeOpUsers)
                     }
                 )
              );
@@ -141,15 +174,20 @@ namespace OASystem.Infrastructure.Repositories.Groups
             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天内)";
 
+            //节点可操作用户列表
+            var hotelNodeOpUsers = users.Where(u =>
+                u.JobName != null && u.JobName.Contains("酒店")
+            ).Select(u => u.Id).ToList();
+
             processs.Add(
                 Grp_ProcessOverview.Create(groupId, 4, GroupProcessType.Hotel, ProcessStatus.InProgress, currUserId,
                      new List<Grp_ProcessNode>()
                     {
-                        Grp_ProcessNode.Create(1, "按照预算,询价、比价、谈价", hotelNode1Tips, ProcessStatus.InProgress, true, false, false, false, currUserId),
-                        Grp_ProcessNode.Create(2, "获取酒店确认函与入住名单核对", "", ProcessStatus.UnStarted, false, false, false,false, currUserId ),
-                        Grp_ProcessNode.Create(3, "预订酒店并录入OA",  "", ProcessStatus.UnStarted,false, false, false,false,currUserId ),
-                        Grp_ProcessNode.Create(4, "行前再次确认酒店相关情况",  hotelNode4Tips,ProcessStatus.UnStarted, false, false, false,false,currUserId ),
-                        Grp_ProcessNode.Create(5, "行程结束后整理酒店发票与结算",  hotelNode5Tips, ProcessStatus.UnStarted, false, false, true,false, currUserId ),
+                        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(4, "行前再次确认酒店相关情况",  hotelNode4Tips,ProcessStatus.UnStarted, false, false, false,false,currUserId , hotelNodeOpUsers),
+                        Grp_ProcessNode.Create(5, "行程结束后整理酒店发票与结算",  hotelNode5Tips, ProcessStatus.UnStarted, false, false, true,false, currUserId ,hotelNodeOpUsers),
                     }
                 )
             );
@@ -166,7 +204,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 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个工作日内)";
@@ -183,17 +220,23 @@ namespace OASystem.Infrastructure.Repositories.Groups
             }
 
             string opNode7Tips = $"请于{groupInfo.VisitEndDate.AddDays(5):yyyy年MM月dd日}内完成该项工作(团组归国后5个工作日内) *上传最终报批行程,确定城市间交通最终版报价分配;地接账单(清楚标注超时及其他项超支费用)、地接交通费用原始票据、城市间交通明细表;";
+
+            //节点可操作用户列表
+            var opNodeOpUsers = users.Where(u =>
+                u.JobName != null && u.JobName.Equals("OP")
+            ).Select(u => u.Id).ToList();
+
             processs.Add(
                 Grp_ProcessOverview.Create(groupId, 5, GroupProcessType.LocalGuide, ProcessStatus.InProgress, currUserId,
                      new List<Grp_ProcessNode>()
                     {
-                        Grp_ProcessNode.Create(1,"根据机票方案出框架行程", opNode1Tips,ProcessStatus.InProgress, true, false, false,false,currUserId ),
-                        Grp_ProcessNode.Create(2,"联系并询价地接相关的供应商", opNode2Tips,ProcessStatus.UnStarted, false, false, false,false, currUserId ),
-                        Grp_ProcessNode.Create(3,"提交供应商报价及比价表", opNode3Tips, ProcessStatus.UnStarted, false, false, false, false,currUserId),
-                        Grp_ProcessNode.Create(4,"执行采购流程", opNode4Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId),
-                        Grp_ProcessNode.Create(5,"制定最终行程单及出行手册", opNode5Tips, ProcessStatus.UnStarted, false, false, false,false, currUserId ),
-                        Grp_ProcessNode.Create(6,"送机", "", ProcessStatus.UnStarted, false, false, false,false, currUserId ),
-                        Grp_ProcessNode.Create(7,"最终版报批行程、票据上传", opNode7Tips, ProcessStatus.UnStarted, false, false, true, false,currUserId )
+                        Grp_ProcessNode.Create(1,"根据机票方案出框架行程", opNode1Tips,ProcessStatus.InProgress, true, false, false,false,currUserId,opNodeOpUsers),
+                        Grp_ProcessNode.Create(2,"联系并询价地接相关的供应商", opNode2Tips,ProcessStatus.UnStarted, false, false, false,false, currUserId,opNodeOpUsers),
+                        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(7,"最终版报批行程、票据上传", opNode7Tips, ProcessStatus.UnStarted, false, false, true, false,currUserId,opNodeOpUsers )
                     }
                 )
             );
@@ -202,14 +245,20 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             #region 费用结算流程
             var feeNode3Tips = $"1.整理统计团组超支费用、三公报销资料给到各单位 \r\n 2. 请于{groupInfo.VisitEndDate.AddDays(12):yyyy年MM月dd日}内完成该项工作(团组归国后12个工作日内)";
+
+            //节点可操作用户列表
+            var feeNodeOpUsers = users.Where(u =>
+                u.JobName != null && u.JobName.Contains("会计") && u.CnName.Equals("曾艳")
+            ).Select(u => u.Id).ToList();
+
             processs.Add(
                 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 ),
-                        Grp_ProcessNode.Create(2, "团组全程各段机票打票金额的核定", "团组报批后、订票前", ProcessStatus.UnStarted, false, false, false,false,currUserId ),
-                        Grp_ProcessNode.Create(3, "整理统计相关财务资料给到各单位", feeNode3Tips, ProcessStatus.UnStarted, false, false, false,false,currUserId ),
-                        Grp_ProcessNode.Create(4, "费用结算完毕", "", ProcessStatus.UnStarted, false, false, false,false, currUserId ),
+                        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(3, "整理统计相关财务资料给到各单位", feeNode3Tips, ProcessStatus.UnStarted, false, false, false,false,currUserId,feeNodeOpUsers),
+                        Grp_ProcessNode.Create(4, "费用结算完毕", "", ProcessStatus.UnStarted, false, false, false,false, currUserId , feeNodeOpUsers),
                     }
                 )
             );
@@ -269,6 +318,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     NodeOrder = nodeDto.NodeOrder,
                     OverallStatus = nodeDto.OverallStatus,
                     NodeDescTips = nodeDto.NodeDescTips,
+                    OpUserList = nodeDto.OpUserList,
                     //Country = nodeDto.Country,
                     IsCurrent = nodeDto.IsCurrent,
                     IsAssist = nodeDto.IsAssist,
@@ -401,6 +451,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             Operator = operatorName,
                             OpeateTime = n.OperationTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? "-",
                             ActualDone = n.ActualDone?.ToString("yyyy-MM-dd HH:mm:ss") ?? "",
+                            n.OpUserList,    //可操作用户列表
                             n.NodeDescTips,
                             isEnaAssistBtn,  // 是否启用财务流程首节点协助按钮
                             n.IsAssist,      // 财务流程首节点 存储值