InviteCodeApplication.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using Hotline.Application.Snapshot.Contracts;
  2. using Hotline.Share.Dtos.Snapshot;
  3. using Hotline.Share.Tools;
  4. using Hotline.Snapshot;
  5. using Hotline.Snapshot.IRepository;
  6. using Hotline.Tools;
  7. using Mapster;
  8. using SqlSugar;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.ComponentModel;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using XF.Domain.Dependency;
  16. using XF.Domain.Exceptions;
  17. namespace Hotline.Application.Snapshot;
  18. public class InviteCodeApplication : IInviteCodeApplication, IScopeDependency
  19. {
  20. private readonly IInviteCodeRepository _inviteCodeRepository;
  21. private readonly IInviteCodeRecordRepository _inviteCodeRecordRepository;
  22. public InviteCodeApplication(IInviteCodeRepository inviteCodeRepository, IInviteCodeRecordRepository inviteCodeRecordRepository)
  23. {
  24. _inviteCodeRepository = inviteCodeRepository;
  25. _inviteCodeRecordRepository = inviteCodeRecordRepository;
  26. }
  27. public async Task<string> AddInviteCodeAsync(AddInviteCodeInDto dto)
  28. {
  29. if (_inviteCodeRepository.Queryable().Where(m => m.OrgName == dto.OrgName).Any())
  30. {
  31. throw UserFriendlyException.SameMessage("部门名称已存在");
  32. }
  33. var entity = dto.Adapt<InviteCode>();
  34. if (dto.BeginCode >= dto.EndCode)
  35. {
  36. throw UserFriendlyException.SameMessage("开始邀请码不能大于结束邀请码");
  37. }
  38. return await _inviteCodeRepository.AddAsync(entity);
  39. }
  40. /// <summary>
  41. /// 删除邀请码
  42. /// </summary>
  43. /// <param name="ids"></param>
  44. /// <returns></returns>
  45. public async Task DeleteInviteCodeAsync(IList<string> ids)
  46. {
  47. await _inviteCodeRepository.Queryable()
  48. .Where(m => ids.Contains(m.Id))
  49. .ToListAsync()
  50. .Then(async invite =>
  51. {
  52. for (int i = 0;i < invite.Count;i++)
  53. {
  54. invite[i].IsDeleted = true;
  55. await _inviteCodeRepository.UpdateAsync(invite[i]);
  56. }
  57. });
  58. }
  59. public ISugarQueryable<InviteCode> GetInviteCodeItems()
  60. {
  61. return _inviteCodeRepository.Queryable();
  62. }
  63. [Description("邀请码统计")]
  64. public ISugarQueryable<InviteCodeStatisticOutDto> GetInviteCodeStatisticAsync(GetInviteCodeStatisticInDto dto)
  65. {
  66. dto.ValidateObject();
  67. var items = _inviteCodeRecordRepository.Queryable()
  68. .Where(m => m.CreationTime >= dto.StartTime && m.CreationTime <= dto.EndTime)
  69. .GroupBy(m => new { m.Id, m.OrgName })
  70. .Select(m => new InviteCodeStatisticOutDto
  71. {
  72. Id = m.Id,
  73. OrgName = m.OrgName,
  74. Count = SqlFunc.AggregateCount(m.OrgName)
  75. });
  76. return items;
  77. }
  78. /// <summary>
  79. /// 邀请码统计明细
  80. /// </summary>
  81. /// <param name="dto"></param>
  82. /// <returns></returns>
  83. public ISugarQueryable<InviteCodeStatisticDetailOutDto> GetInviteCodeStatisticDetail(GetInviteCodeStatisticDetailInDto dto)
  84. {
  85. dto.ValidateObject();
  86. var query = _inviteCodeRecordRepository.Queryable()
  87. .Where(m => m.CreationTime >= dto.StartTime && m.CreationTime <= dto.EndTime && m.OrgId == dto.OrgId)
  88. .WhereIF(dto.Name.NotNullOrEmpty(), m => m.Name.Contains(dto.Name))
  89. .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), m => m.PhoneNumber.Contains(dto.PhoneNumber))
  90. .WhereIF(dto.InviteCode.NotNullOrEmpty(), m => m.InviteCode.Contains(dto.InviteCode))
  91. .Select(m => new InviteCodeStatisticDetailOutDto
  92. {
  93. OpenId = m.WXOpenId
  94. }, true);
  95. return query;
  96. }
  97. public async Task UpdateInviteCodeAsync(UpdateInviteCodeInDto dto)
  98. {
  99. var entity = await _inviteCodeRepository.GetAsync(dto.Id)
  100. ?? throw UserFriendlyException.SameMessage("邀请码不存在");
  101. dto.Adapt(entity);
  102. if (dto.BeginCode >= dto.EndCode)
  103. {
  104. throw UserFriendlyException.SameMessage("开始邀请码不能大于结束邀请码");
  105. }
  106. await _inviteCodeRepository.UpdateAsync(entity);
  107. }
  108. }