Forráskód Böngészése

团组会务流程 建表、CURD 代码编写及本地测试

Lyyyi 3 nap óta
szülő
commit
684d87b762

+ 4 - 1
OASystem/EntitySync/Program.cs

@@ -180,6 +180,9 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_FeeEntryAcknowledge),//团组费用录入通知记录表 
     //typeof(Res_OverseaVehicle),//境外用车信息 
     //typeof(Res_OverseaVehicleTypePrice),//境外用车类型价格信息   
-    typeof(Pm_CompanyDailyKpi),//财务部绩效考核   
+    //typeof(Pm_CompanyDailyKpi),//财务部绩效考核    
+    //typeof(Grp_ConfProcessOverview),//会务流程总览    
+    //typeof(Grp_ConfProcessNode),//会务流程节点     
+    typeof(Grp_ConfProcessLog),//团组会务流程总览操作日志  
 });
 Console.WriteLine("数据库结构同步完成!");

+ 115 - 0
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -31440,6 +31440,121 @@ WHERE
 
         #endregion
 
+
+        #region 团组会务总览进程
+
+        /// <summary>
+        /// 团组会务总览进程 - 流程创建测试
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ConfProcessInitTest(int groupId, int currUserId)
+        {
+            return Ok(await _processOverviewRep.ProcessInitAsync(groupId, currUserId));
+
+        }
+
+        /// <summary>
+        /// 团组会务总览进程 - 基础信息集合(团组名称、节点模板信息、参与人信息)
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ConfProcessGroupNames(int groupId,int currUserId)
+        {
+            var groupNames = await _sqlSugar.Queryable<Grp_DelegationInfo>()
+                .Where(x => x.IsDel == 0)
+                .OrderByDescending(x => x.VisitDate)
+                .Select(x => new
+                {
+                    x.Id,
+                    GroupName = x.TeamName,
+                    HasProcess = SqlFunc.Subqueryable<Grp_ConfProcessOverview>()
+                        .Where(po => po.GroupId == x.Id && po.IsDel == 0)
+                        .Any()
+                })
+                .ToListAsync();
+
+            var nodeTemps1 = await _processOverviewRep.DefaultConfProcessTemps(groupId, currUserId);
+
+            var nodeTemps = nodeTemps1.Select(x => new
+            {
+                Id = x.ProcessOrder,
+                Name = $"情况{x.ProcessOrder}",
+                Nodes = x.Nodes
+            }).ToList();
+
+            var participators = await _sqlSugar.Queryable<Sys_Users>()
+                .Where(x => x.IsDel == 0 && x.DepId == 5)
+                .Select(x => new ParticipatorInfo()
+                {
+                    UserId = x.Id,
+                    UserName = x.CnName
+                })
+                .ToListAsync();
+
+            var view = new { groupNames, nodeTemps, participators };
+            return Ok(JsonView(view));
+
+        }
+
+        /// <summary>
+        /// 团组会务总览进程 - 流程详情
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ConfProcessDetails(int groupId)
+        {
+            var res = await _processOverviewRep.ConfProcessesDetailsAsync(groupId);
+
+            if (res.Code == StatusCodes.Status200OK)
+            {
+                return Ok(JsonView(res.Data));
+            }
+
+            return Ok(JsonView(false, res.Msg));
+        }
+
+        /// <summary>
+        /// 团组会务总览进程 - 更新节点状态
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ConfProcessUpdateNodeStatus(GroupProcessUpdateNodeStatusDto dto)
+        {
+            var res = await _processOverviewRep.UpdateConfNodeStatusAsync(dto.NodeId, dto.CurrUserId);
+
+            if (res.Code == StatusCodes.Status200OK)
+            {
+                return Ok(JsonView(res.Data));
+            }
+
+            return Ok(JsonView(false, res.Msg));
+        }
+
+        /// <summary>
+        /// 团组会务总览进程 - 设置实际完成时间及其他信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ConfProcessSetActualDone(ConfProcessSetActualDoneDto dto)
+        { 
+            var res = await _processOverviewRep.SetNodeInfoAsync(dto);
+
+            if (res.Code == StatusCodes.Status200OK)
+            {
+                return Ok(JsonView(res.Data));
+            }
+
+            return Ok(JsonView(false, res.Msg));
+        }
+
+        #endregion
+
         /// <summary>
         /// 123132123
         /// </summary>

+ 29 - 0
OASystem/OASystem.Domain/Dtos/Groups/VisaProcessDtos.cs

@@ -117,4 +117,33 @@ namespace OASystem.Domain.Dtos.Groups
         public bool IsCompleted { get; set; } = false;
     }
 
+    public class ConfProcessSetActualDoneDto
+    {
+        /// <summary>
+        /// 节点Id
+        /// </summary>
+        public int NodeId { get; set; }
+
+        /// <summary>
+        /// 参与人
+        /// </summary>
+        public List<ParticipatorInfo> Participators { get; set; }
+
+        /// <summary>
+        /// 是否有文件(如需要)
+        /// </summary>
+        public bool IsFileUp { get; set; } = false;
+
+        /// <summary>
+        /// 实际完成时间
+        /// 情况1:正常使用
+        /// 情况2:IsFileUp == true,设置值
+        /// </summary>
+        public string ActualDone { get; set; }
+
+        /// <summary>
+        /// 当前用户Id  
+        /// </summary>
+        public int CurrUserId { get; set; }
+    }
 }

+ 268 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_ConfProcess.cs

@@ -0,0 +1,268 @@
+using AutoMapper.Configuration.Annotations;
+using OASystem.Domain.Enums;
+using System.ComponentModel;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 会务流程总览
+    /// </summary>
+    [SugarTable("Grp_ConfProcessOverview", "会务流程总览")]
+    public class Grp_ConfProcessOverview : 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 ConfProcessType ProcessType { get; set; }
+
+        /// <summary>
+        /// 整体状态 
+        /// </summary>
+        [SugarColumn(ColumnName = "OverallStatus", ColumnDescription = "流程整体状态", ColumnDataType = "int")]
+        public ProcessStatus OverallStatus { get; set; } = ProcessStatus.UnStarted;
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [SugarColumn(ColumnName = "StartTime", 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>
+        [Ignore]
+        [Navigate(NavigateType.OneToMany, nameof(Grp_ProcessNode.ProcessId))]
+        public List<Grp_ConfProcessNode> Nodes { get; set; } = new List<Grp_ConfProcessNode>();
+
+        public Grp_ConfProcessOverview() { }
+
+        public static Grp_ConfProcessOverview Create(int groupId, int processOrder, ProcessStatus overallStatus, int currUserId, List<Grp_ConfProcessNode> nodes)
+        {
+            return new Grp_ConfProcessOverview
+            {
+                GroupId = groupId,
+                ProcessOrder = processOrder,
+                ProcessType = ConfProcessType.Conference,
+                OverallStatus = overallStatus,
+                StartTime = DateTime.Now,
+                UpdatedUserId = currUserId,
+                CreateUserId = currUserId,
+                Nodes = nodes
+            };
+        }
+    }
+
+    /// <summary>
+    /// 会务流程节点
+    /// </summary>
+    [SugarTable("Grp_ConfProcessNode", "会务流程节点")]
+    public class Grp_ConfProcessNode : 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 = "NodeDescTips", ColumnDescription = "节点描述提示", ColumnDataType = "varchar(300)")]
+        public string NodeDescTips { 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 = "Participator", ColumnDescription = "参与人 [1,2,3]", IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string Participator { get; set; }
+
+        /// <summary>
+        /// 操作人 
+        /// </summary>
+        [SugarColumn(ColumnName = "Operator", ColumnDescription = "操作人", IsNullable = true, ColumnDataType = "int")]
+        public int? Operator { get; set; }
+
+        /// <summary>
+        /// 操作时间 
+        /// </summary>
+        [SugarColumn(ColumnName = "OperationTime", ColumnDescription = "操作时间", IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime? OperationTime { get; set; }
+
+        /// <summary>
+        /// 实际完成时间 
+        /// </summary>
+        [SugarColumn(ColumnName = "ActualDone", ColumnDescription = "实际完成时间", IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime? ActualDone { get; set; }
+
+        /// <summary>
+        /// 是否为当前节点
+        /// </summary>
+        [SugarColumn(ColumnName = "IsCurrent", ColumnDescription = "是否为当前节点", ColumnDataType = "bit")]
+        [DefaultValue(false)]
+        public bool IsCurrent { get; set; }
+
+        /// <summary>
+        /// 是否上传文件
+        /// </summary>
+        [SugarColumn(ColumnName = "IsFileUp", ColumnDescription = "是否上传文件", ColumnDataType = "bit")]
+        [DefaultValue(false)]
+        public bool IsFileUp { get; set; }
+
+        public Grp_ConfProcessNode() { }
+
+        /// <summary>
+        /// 是否启用文件上传
+        /// </summary>
+        [SugarColumn(IsIgnore = true)]
+        public bool IsEnaFileUpBtn { get; set; }
+
+        /// <summary>
+        /// 参与人
+        /// </summary>
+        [SugarColumn(IsIgnore = true)]
+        public List<ParticipatorInfo> Participators { get; set; }
+
+        /// <summary>
+        /// Create
+        /// </summary>
+        /// <param name="nodeOrder">排序</param>
+        /// <param name="nodeName">名称</param>
+        /// <param name="nodeDescTips">描述提示</param>
+        /// <param name="status">状态</param>
+        /// <param name="isCurrent">是否是当前节点</param>
+        /// <param name="isFileUp">是否上传文件</param>
+        /// <param name="currUserId">当前用户Id</param>
+        /// <param name="participators">参与人</param>
+        /// <param name="remark">备注</param>
+        /// <returns></returns>
+        public static Grp_ConfProcessNode Create(int nodeOrder, string nodeName, string nodeDescTips, ProcessStatus status, bool isCurrent, bool isFileUp, int currUserId,
+            List<ParticipatorInfo> participators, string remark = null)
+        {
+            bool isEnaFileUpBtn = isFileUp;
+
+            return new Grp_ConfProcessNode
+            {
+                NodeOrder = nodeOrder,
+                NodeName = nodeName,
+                NodeDescTips = nodeDescTips,
+                OverallStatus = status,
+                IsCurrent = isCurrent,
+                Participators = participators,
+                IsEnaFileUpBtn = isEnaFileUpBtn,
+                IsFileUp = isFileUp,
+                CreateUserId = currUserId,
+                Remark = remark
+            };
+        }
+
+    }
+    public class ParticipatorInfo
+    {
+        public int UserId { get; set; }
+        public string UserName { get; set; }
+    }
+
+    /// <summary>
+    /// 团组流程操作日志
+    /// </summary>
+    [SugarTable("Grp_ConfProcessLog", "团组会务流程总览操作日志")]
+    public class Grp_ConfProcessLog : EntityBase
+    {
+        /// <summary>
+        /// 流程ID
+        /// </summary>
+        [SugarColumn(ColumnName = "ProcessId", ColumnDescription = "流程ID", IsNullable = true, ColumnDataType = "int")]
+        public int? ProcessId { get; set; }
+
+        /// <summary>
+        /// 节点ID
+        /// </summary>
+        [SugarColumn(ColumnName = "NodeId", ColumnDescription = "节点ID", IsNullable = true, ColumnDataType = "int")]
+        public int? NodeId { get; set; }
+
+        /// <summary>
+        /// 团组ID
+        /// </summary>
+        [SugarColumn(ColumnName = "GroupId", ColumnDescription = "团组ID", IsNullable = true, ColumnDataType = "int")]
+        public int GroupId { get; set; }
+
+        /// <summary>
+        /// 操作类型
+        /// </summary>
+        [SugarColumn(ColumnName = "OpType", ColumnDescription = "操作类型", ColumnDataType = "varchar(50)")]
+        public string OpType { get; set; }
+
+        /// <summary>
+        /// 操作描述
+        /// </summary>
+        [SugarColumn(ColumnName = "OpDesc", ColumnDescription = "操作描述", ColumnDataType = "varchar(500)")]
+        public string OpDesc { get; set; }
+
+        /// <summary>
+        /// 变更前数据
+        /// </summary>
+        [SugarColumn(ColumnName = "BeforeData", ColumnDescription = "变更前数据", IsNullable = true, ColumnDataType = "nvarchar(max)")]
+        public string BeforeData { get; set; }
+
+        /// <summary>
+        /// 变更后数据
+        /// </summary>
+        [SugarColumn(ColumnName = "AfterData", ColumnDescription = "变更后数据", IsNullable = true, ColumnDataType = "nvarchar(max)")]
+        public string AfterData { get; set; }
+
+        /// <summary>
+        /// 变更字段
+        /// </summary>
+        [SugarColumn(ColumnName = "ChgFields", ColumnDescription = "变更字段", IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string ChgFields { get; set; }
+    }
+}

+ 13 - 6
OASystem/OASystem.Domain/Enums/GroupProcessType.cs

@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.ComponentModel;
 
 namespace OASystem.Domain.Enums
 {
@@ -67,4 +62,16 @@ namespace OASystem.Domain.Enums
         [Description("已完成")]
         Completed = 3
     }
+
+    /// <summary>
+    /// 会务流程类型
+    /// </summary>
+    public enum ConfProcessType
+    {
+        /// <summary>
+        /// 会务
+        /// </summary> 
+        [Description("会务")]
+        Conference = 1,
+    }
 }

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1002 - 276
OASystem/OASystem.Infrastructure/Repositories/Groups/ProcessOverviewRepository.cs


+ 0 - 1
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/CompanyDailyKpiRepository.cs

@@ -292,7 +292,6 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                         });
                     });
                 });
-
             }
             _jv.Code = StatusCodes.Status200OK;
             _jv.Data = info;