ProcessOverviewRepository.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using AutoMapper;
  2. using Newtonsoft.Json;
  3. using OASystem.Domain;
  4. using OASystem.Domain.Entities.Groups;
  5. using OASystem.Domain.ViewModels.JuHeExchangeRate;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace OASystem.Infrastructure.Repositories.Groups
  12. {
  13. /// <summary>
  14. /// 团组流程总览表仓储
  15. /// </summary>
  16. public class ProcessOverviewRepository : BaseRepository<Grp_ProcessOverview, Grp_ProcessOverview>
  17. {
  18. private readonly IMapper _mapper;
  19. private readonly DelegationInfoRepository _groupRep;
  20. public ProcessOverviewRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository groupRep) : base(sqlSugar)
  21. {
  22. _mapper = mapper;
  23. _groupRep = groupRep;
  24. }
  25. /// <summary>
  26. /// 团组流程初始化
  27. /// </summary>
  28. /// <param name="request">创建流程请求参数</param>
  29. /// <returns>创建的流程信息</returns>
  30. public async Task<Result> ProcessInitAsync(int groupId,int currUserId)
  31. {
  32. //团组验证
  33. var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(g => g.Id == groupId);
  34. if (groupInfo == null)
  35. {
  36. return new Result { Code = 400, Msg = "团组不存在" };
  37. }
  38. // 检查是否已存在流程
  39. var existingProcesses = await _sqlSugar.Queryable<Grp_ProcessOverview>().Where(p => p.GroupId == groupId).ToListAsync();
  40. if (existingProcesses.Any())
  41. {
  42. return new Result { Code = 400, Msg = "该团组的流程已存在" };
  43. }
  44. //处理签证国家
  45. var visaCountries = _groupRep.GroupSplitCountry(groupInfo.VisitCountry);
  46. // 定义默认的流程节点
  47. var processs = Grp_ProcessOverview.ProcessInit(groupId,currUserId,visaCountries);
  48. _sqlSugar.BeginTran();
  49. foreach (var item in processs)
  50. {
  51. var processId = await _sqlSugar.Insertable(item).ExecuteReturnIdentityAsync();
  52. if (processId < 1 )
  53. {
  54. _sqlSugar.RollbackTran();
  55. return new Result { Code = 400, Msg = "团组流程进度总览表添加失败!" };
  56. }
  57. var nodes = item.Nodes.Select((nodeDto, index) => new Grp_ProcessNode
  58. {
  59. ProcessId = processId,
  60. NodeName = nodeDto.NodeName,
  61. NodeOrder = nodeDto.NodeOrder,
  62. OverallStatus = ProcessStatus.UnStarted,
  63. //Country = nodeDto.Country,
  64. IsCurrent = nodeDto.IsCurrent,
  65. Remark =nodeDto.Remark
  66. }).ToList();
  67. var nodeIds = await _sqlSugar.Insertable(nodes).ExecuteCommandAsync();
  68. if (nodeIds < 1)
  69. {
  70. _sqlSugar.RollbackTran();
  71. return new Result { Code = 400, Msg = "团组流程进度流程表添加失败!" };
  72. }
  73. }
  74. _sqlSugar.CommitTran();
  75. return new Result { Code = 200, Msg = "添加成功!" }; ;
  76. }
  77. /// <summary>
  78. /// 获取团组的所有流程及流程详情
  79. /// </summary>
  80. /// <param name="request">创建流程请求参数</param>
  81. /// <returns>创建的流程信息</returns>
  82. public async Task<Result> ProcessesDetailsAsync(int groupId)
  83. {
  84. //团组验证
  85. var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(g => g.Id == groupId);
  86. if (groupInfo == null)
  87. {
  88. return new Result { Code = 400, Msg = "团组不存在" };
  89. }
  90. // 检查是否已存在流程
  91. var existingProcesses = await _sqlSugar.Queryable<Grp_ProcessOverview>().Where(p => p.GroupId == groupId).ToListAsync();
  92. if (!existingProcesses.Any())
  93. {
  94. return new Result { Code = 400, Msg = "该团组的流程不存在" };
  95. }
  96. var users = await _sqlSugar.Queryable<Sys_Users>().ToListAsync();
  97. var processData = await _sqlSugar.Queryable<Grp_ProcessOverview>()
  98. .Where(p => p.GroupId == groupId && p.IsDel == 0)
  99. .Mapper(p => p.Nodes, p => p.Nodes.First().ProcessId)
  100. .ToListAsync();
  101. var processes = processData.Select(p => new
  102. {
  103. p.Id,
  104. p.GroupId,
  105. p.ProcessType,
  106. ProcessName = p.ProcessType.GetEnumDescription(),
  107. //p.OverallStatus,
  108. //StatusText = p.OverallStatus.GetDescription(),
  109. Nodes = p.Nodes.Select(n => {
  110. //单独处理签证板块
  111. var visaSubNodes = new List<VisaNode>();
  112. string remark = string.Empty;
  113. if (p.ProcessType == GroupProcessType.Visa)
  114. {
  115. visaSubNodes = JsonConvert.DeserializeObject<List<VisaNode>>(n.Remark);
  116. }
  117. return new
  118. {
  119. n.Id,
  120. n.ProcessId,
  121. n.NodeOrder,
  122. n.NodeName,
  123. n.OverallStatus,
  124. StatusText = p.OverallStatus.GetEnumDescription(),
  125. Operator = users.FirstOrDefault(u => u.Id == n.Operator)?.CnName ?? "-",
  126. OpeateTime = n.OperationTime.HasValue ? n.OperationTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "-",
  127. //节点类型为签证时使用
  128. visaSubNodes
  129. };
  130. }).OrderBy(n => n.NodeOrder).ToList()
  131. }).ToList();
  132. return new Result { Code = 200,Data = processes, Msg = "查询成功!" };
  133. }
  134. }
  135. }