ApprovalProcessRepository.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using AutoMapper;
  2. using OASystem.Domain.Dtos.Groups;
  3. using OASystem.Domain.Dtos.System;
  4. using OASystem.Domain.Entities.Groups;
  5. namespace OASystem.Infrastructure.Repositories.System
  6. {
  7. /// <summary>
  8. /// 审核流程 仓储
  9. /// </summary>
  10. public class ApprovalProcessRepository : BaseRepository<Sys_AuditFlow, Sys_AuditFlow>
  11. {
  12. private readonly IMapper _mapper;
  13. public ApprovalProcessRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
  14. {
  15. _mapper = mapper;
  16. }
  17. /// <summary>
  18. /// 创建审核流程模板
  19. /// </summary>
  20. /// <param name="dto"></param>
  21. /// <returns></returns>
  22. public async Task<bool> CreateAuditTemplateAsync(ApprovalProcessDto dto)
  23. {
  24. var currUserId = dto.CurrUserId;
  25. var auditTemp = new Sys_AuditTemplate()
  26. {
  27. TemplateName = dto.TemplateName,
  28. TemplateCode = dto.TemplateCode,
  29. BusinessType = dto.BusinessType,
  30. Status = dto.Status,
  31. };
  32. _sqlSugar.BeginTran();
  33. var tempId = await _sqlSugar.Insertable(auditTemp).ExecuteReturnIdentityAsync();
  34. if (tempId < 1)
  35. {
  36. _sqlSugar.RollbackTran();
  37. return false;
  38. }
  39. foreach (var item in dto.TempNodes)
  40. {
  41. var auditTempNodes = _mapper.Map<Sys_AuditTemplateNode>(item);
  42. auditTempNodes.TemplateId = tempId;
  43. auditTempNodes.CreateUserId = currUserId;
  44. var nodeId = await _sqlSugar.Insertable(auditTempNodes).ExecuteReturnIdentityAsync();
  45. if (nodeId < 1)
  46. {
  47. _sqlSugar.RollbackTran();
  48. return false;
  49. }
  50. var nodeUsers = _mapper.Map<List<Sys_AuditTemplateNodeUser>>(item.NodeUsers);
  51. nodeUsers.ForEach(x =>
  52. {
  53. x.NodeId = nodeId;
  54. x.CreateUserId = currUserId;
  55. });
  56. if (nodeUsers.Any())
  57. {
  58. var nodeUsersStatus = await _sqlSugar.Insertable(nodeUsers).ExecuteCommandAsync();
  59. if (nodeUsersStatus < 1)
  60. {
  61. _sqlSugar.RollbackTran();
  62. return false;
  63. }
  64. }
  65. }
  66. _sqlSugar.CommitTran();
  67. return true;
  68. }
  69. /// <summary>
  70. /// 获取审核流程模板
  71. /// </summary>
  72. /// <param name="auditTempId"></param>
  73. /// <returns></returns>
  74. public async Task<ApprovalProcessView> GetTemplateByBusinessTypeAsync(int auditTempId)
  75. {
  76. var tempInfo = new ApprovalProcessView();
  77. var auditTempInfo = await _sqlSugar.Queryable<Sys_AuditTemplate>()
  78. .FirstAsync(x => x.Id == auditTempId && x.IsDel == 0);
  79. if (auditTempInfo == null) return tempInfo;
  80. tempInfo.Id = auditTempInfo.Id;
  81. tempInfo.TemplateName = auditTempInfo.TemplateName;
  82. tempInfo.BusinessType = auditTempInfo.BusinessType;
  83. tempInfo.Status = auditTempInfo.Status;
  84. var nodes = await _sqlSugar.Queryable<Sys_AuditTemplateNode>()
  85. .Where(x => x.TemplateId == auditTempId && x.IsDel == 0)
  86. .Select(x => new AuditTemplateNodeView()
  87. {
  88. Id = x.Id,
  89. TemplateId = x.TemplateId,
  90. NodeName = x.NodeName,
  91. NodeOrder = x.NodeOrder,
  92. ApproveType = x.ApproveType,
  93. IsRequired = x.IsRequired
  94. })
  95. .OrderBy(x => x.NodeOrder)
  96. .ToListAsync();
  97. foreach (var node in nodes)
  98. {
  99. node.NodeUsers = await _sqlSugar.Queryable<Sys_AuditTemplateNodeUser>()
  100. .Where(x => x.NodeId == node.Id && x.IsDel == 0)
  101. .Select(x => new AuditTemplateNodeUserView()
  102. {
  103. Id = x.Id,
  104. NodeId = x.NodeId,
  105. UserId = x.UserId,
  106. UserName = x.UserName
  107. })
  108. .ToListAsync();
  109. }
  110. tempInfo.TempNodes = nodes;
  111. return tempInfo;
  112. }
  113. /// <summary>
  114. /// 获取审核流程
  115. /// </summary>
  116. /// <param name="auditTempId"></param>
  117. /// <returns></returns>
  118. public async Task<Sys_AuditFlow> GetFlowByBusinessAsync(int businessId, int businessType)
  119. {
  120. return await _sqlSugar.Queryable<Sys_AuditFlow>()
  121. .FirstAsync(x => x.IsDel == 0 && x.BusinessId == businessId && x.BusinessType == businessType);
  122. }
  123. }
  124. }