Przeglądaj źródła

团组流程总览信息
1. (安卓、web)建团时初始化流程信息
2. 查询详情接口
3. 仓储、实体类 基础代码编写

Lyyyi 14 godzin temu
rodzic
commit
cca4df0d4a

+ 2 - 1
OASystem/EntitySync/Program.cs

@@ -173,6 +173,7 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_GamesBudgetMaster‌),//世运会成本预算明细 
     //typeof(Res_VisaFeeStandard),//签证费用标准 
     //typeof(Res_VisaFeeStandardDetails),//签证费用标准详情 
-    typeof(Grp_VisaProcessSteps),//签证流程管控步骤
+    typeof(Grp_ProcessOverview),//团组流程总览表
+    typeof(Grp_ProcessNode),//流程节点
 });
 Console.WriteLine("数据库结构同步完成!");

+ 48 - 2
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -120,6 +120,7 @@ namespace OASystem.API.Controllers
         private readonly EnterExitCostQuoteRepository _enterExitCostQuoteRep;
         private readonly GroupOrderPreInfoRepository _grpOrderPreInfoRep;
         private readonly VisaProcessRepository _visaProcessRep;
+        private readonly ProcessOverviewRepository _processOverviewRep;
 
         private readonly IDeepSeekService _deepSeekService;
 
@@ -170,6 +171,7 @@ namespace OASystem.API.Controllers
         /// <param name="enterExitCostQuoteRep"></param>
         /// <param name="grpOrderPreInfoRep"></param>
         /// <param name="visaProcessRep"></param>
+        /// <param name="processOverviewRep"></param>
         public GroupsController(
             ILogger<GroupsController> logger,
             ITextFileLogger eec_textLogger,
@@ -214,7 +216,8 @@ namespace OASystem.API.Controllers
             RestaurantRepository restaurantRep,
             EnterExitCostQuoteRepository enterExitCostQuoteRep,
             GroupOrderPreInfoRepository grpOrderPreInfoRep,
-            VisaProcessRepository visaProcessRep
+            VisaProcessRepository visaProcessRep,
+            ProcessOverviewRepository processOverviewRep
             )
         {
             _logger = logger;
@@ -276,6 +279,7 @@ namespace OASystem.API.Controllers
             _enterExitCostQuoteRep = enterExitCostQuoteRep;
             _grpOrderPreInfoRep = grpOrderPreInfoRep;
             _visaProcessRep = visaProcessRep;
+            _processOverviewRep = processOverviewRep;
         }
 
         #region 流程管控
@@ -1239,6 +1243,9 @@ namespace OASystem.API.Controllers
                     //默认创建签证流程
                     await _visaProcessRep.Create(dto.UserId, diId);
 
+                    //默认创建团组流程总览信息
+                    await _processOverviewRep.ProcessInitAsync(diId, dto.UserId);
+
                 }
                 else if (dto.Status == 2)
                 {
@@ -1429,9 +1436,14 @@ namespace OASystem.API.Controllers
                     }
                     #endregion
 
-
                     //默认创建倒推表
                     await _invertedListRep._Create(dto.UserId, diId);
+
+                    //默认创建签证流程
+                    await _visaProcessRep.Create(dto.UserId, diId);
+
+                    //默认创建团组流程总览信息
+                    await _processOverviewRep.ProcessInitAsync(diId, dto.UserId);
                 }
 
                 if (dto.Status == 2)
@@ -28366,6 +28378,40 @@ WHERE
 
         #endregion
 
+        #region 团组总览进程
+
+        /// <summary>
+        /// 团组总览进程 - 流程创建测试
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GroupProcessInitTest()
+        {
+            return Ok(await _processOverviewRep.ProcessInitAsync(2732, 208));
+
+        }
+
+        /// <summary>
+        /// 团组总览进程 - 流程详情
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GroupProcessDetails(int groupId)
+        {
+            var res = await _processOverviewRep.ProcessesDetailsAsync(groupId);
+
+            if (res.Code == StatusCodes.Status200OK)
+            {
+                return Ok(JsonView(res.Data));
+            }
+
+            return Ok(JsonView(false, res.Msg));
+        }
+
+        #endregion
+
         /// <summary>
         /// 123132123
         /// </summary>

+ 19 - 14
OASystem/OASystem.Domain/Entities/Groups/Grp_ProcessOverview.cs

@@ -1,4 +1,6 @@
-using OASystem.Domain.Enums;
+using AutoMapper.Configuration.Annotations;
+using Newtonsoft.Json;
+using OASystem.Domain.Enums;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -41,7 +43,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 开始时间
         /// </summary>
-        [SugarColumn(ColumnName = "EndTime", ColumnDescription = "开始时间", IsNullable = true, ColumnDataType = "datetime")]
+        [SugarColumn(ColumnName = "StartTime", ColumnDescription = "开始时间", IsNullable = true, ColumnDataType = "datetime")]
         public DateTime? StartTime { get; set; }
 
         /// <summary>
@@ -65,6 +67,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 节点集合 - 流程包含的所有节点(导航属性)
         /// </summary>
+        [Ignore]
         [Navigate(NavigateType.OneToMany, nameof(Grp_ProcessNode.ProcessId))]
         public List<Grp_ProcessNode> Nodes { get; set; } = new List<Grp_ProcessNode>();
 
@@ -93,7 +96,7 @@ namespace OASystem.Domain.Entities.Groups
 
             if (visaCountries != null && visaCountries.Count > 0)
             {
-                for (int i = 1; i < visaCountries.Count + 1; i++)
+                for (int i = 0; i < visaCountries.Count; i++)
                 {
                     visaNodes.Add(new Grp_ProcessNode()
                     {
@@ -101,7 +104,8 @@ namespace OASystem.Domain.Entities.Groups
                         NodeName = visaCountries[i].ToString(),
                         OverallStatus = ProcessStatus.UnStarted,
                         IsCurrent = i == 1,
-                        CreateUserId = currUserId
+                        CreateUserId = currUserId,
+                        Remark = JsonConvert.SerializeObject(visaDefualtNodes)
                     });
                 }
             }
@@ -221,7 +225,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 流程ID
         /// </summary>
-        [SugarColumn(ColumnName = "ProcessId ", ColumnDescription = "流程ID", IsNullable = true, ColumnDataType = "int")]
+        [SugarColumn(ColumnName = "ProcessId", ColumnDescription = "流程ID", IsNullable = true, ColumnDataType = "int")]
         public int ProcessId { get; set; }
 
         /// <summary>
@@ -245,14 +249,14 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 操作人 
         /// </summary>
-        [SugarColumn(ColumnName = "Operator ", ColumnDescription = "操作人", IsNullable = true, ColumnDataType = "int")]
-        public int Operator { get; set; }
+        [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;
+        [SugarColumn(ColumnName = "OperationTime", ColumnDescription = "操作时间", IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime? OperationTime { get; set; }
 
         ///// <summary>
         ///// 国家
@@ -267,11 +271,12 @@ namespace OASystem.Domain.Entities.Groups
         [DefaultValue(false)]
         public bool IsCurrent { get; set; }
 
-        /// <summary>
-        /// 流程信息 - 关联的流程信息(导航属性)
-        /// </summary>
-        [Navigate(NavigateType.OneToOne, nameof(ProcessId))]
-        public Grp_ProcessOverview Process { get; set; }
+        ///// <summary>
+        ///// 流程信息 - 关联的流程信息(导航属性)
+        ///// </summary>
+        //[Ignore]
+        //[Navigate(NavigateType.OneToOne, nameof(ProcessId))]
+        //public Grp_ProcessOverview Process { get; set; }
     }
 
 

+ 11 - 1
OASystem/OASystem.Domain/Enums/GroupProcessType.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -14,27 +15,33 @@ namespace OASystem.Domain.Enums
     {
         /// <summary>
         /// 商邀报批
-        /// </summary>
+        /// </summary> 
+        [Description("商邀报批")]
         Invitation = 1,
         /// <summary>
         /// 签证
         /// </summary>
+        [Description("签证")]
         Visa = 2,
         /// <summary>
         /// 机票
         /// </summary>
+        [Description("机票")]
         AirTicket = 4,
         /// <summary>
         /// 酒店
         /// </summary>
+        [Description("酒店")]
         Hotel = 5,
         /// <summary>
         /// 地接
         /// </summary>
+        [Description("地接")]
         LocalGuide = 6,
         /// <summary>
         /// 费用结算
         /// </summary>
+        [Description("费用结算")]
         FeeSettle = 7
     }
 
@@ -47,14 +54,17 @@ namespace OASystem.Domain.Enums
         /// <summary>
         /// 未开始
         /// </summary>
+        [Description("未开始")]
         UnStarted = 1,
         /// <summary>
         /// 进行中
         /// </summary>
+        [Description("进行中")]
         InProgress = 2,
         /// <summary>
         /// 已完成
         /// </summary>
+        [Description("已完成")]
         Completed = 3
     }
 }

+ 67 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/ProcessOverviewRepository.cs

@@ -1,4 +1,5 @@
 using AutoMapper;
+using Newtonsoft.Json;
 using OASystem.Domain;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels.JuHeExchangeRate;
@@ -50,7 +51,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
             // 定义默认的流程节点
             var processs = Grp_ProcessOverview.ProcessInit(groupId,currUserId,visaCountries);
 
-
             _sqlSugar.BeginTran();
 
             foreach (var item in processs)
@@ -71,6 +71,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     OverallStatus = ProcessStatus.UnStarted,
                     //Country = nodeDto.Country,
                     IsCurrent = nodeDto.IsCurrent,
+                    Remark =nodeDto.Remark
                 }).ToList();
 
                 var nodeIds = await _sqlSugar.Insertable(nodes).ExecuteCommandAsync();
@@ -80,9 +81,73 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     return new Result { Code = 400, Msg = "团组流程进度流程表添加失败!" };
                 }
             }
-
+            _sqlSugar.CommitTran();
            return new Result { Code = 200, Msg = "添加成功!" }; ;
         }
 
+        /// <summary>
+        /// 获取团组的所有流程及流程详情
+        /// </summary>
+        /// <param name="request">创建流程请求参数</param>
+        /// <returns>创建的流程信息</returns>
+        public async Task<Result> ProcessesDetailsAsync(int groupId)
+        {
+            //团组验证
+            var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(g => g.Id == groupId);
+            if (groupInfo == null)
+            {
+                return new Result { Code = 400, Msg = "团组不存在" };
+            }
+
+            // 检查是否已存在流程
+            var existingProcesses = await _sqlSugar.Queryable<Grp_ProcessOverview>().Where(p => p.GroupId == groupId).ToListAsync();
+            if (!existingProcesses.Any())
+            {
+                return new Result { Code = 400, Msg = "该团组的流程不存在" };
+            }
+
+            var users = await _sqlSugar.Queryable<Sys_Users>().ToListAsync();
+
+            var processData = await _sqlSugar.Queryable<Grp_ProcessOverview>()
+                .Where(p => p.GroupId == groupId && p.IsDel == 0)
+                .Mapper(p => p.Nodes, p => p.Nodes.First().ProcessId) 
+                .ToListAsync();
+
+            var processes = processData.Select(p => new
+            {
+                p.Id,
+                p.GroupId,
+                p.ProcessType,
+                ProcessName = p.ProcessType.GetEnumDescription(),
+                //p.OverallStatus,
+                //StatusText = p.OverallStatus.GetDescription(),
+                Nodes = p.Nodes.Select(n => {
+
+                    //单独处理签证板块
+                    var visaSubNodes = new List<VisaNode>();
+                    string remark = string.Empty;
+                    if (p.ProcessType == GroupProcessType.Visa)
+                    {
+                        visaSubNodes = JsonConvert.DeserializeObject<List<VisaNode>>(n.Remark);
+                    }
+
+                    return new
+                    {
+                        n.Id,
+                        n.ProcessId,
+                        n.NodeOrder,
+                        n.NodeName,
+                        n.OverallStatus,
+                        StatusText = p.OverallStatus.GetEnumDescription(),
+                        Operator = users.FirstOrDefault(u => u.Id == n.Operator)?.CnName ?? "-",
+                        OpeateTime = n.OperationTime.HasValue ? n.OperationTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "-",
+                        //节点类型为签证时使用
+                        visaSubNodes
+                    };
+                }).OrderBy(n => n.NodeOrder).ToList()
+            }).ToList();
+
+            return new Result { Code = 200,Data = processes, Msg = "查询成功!" }; 
+        }
     }
 }