PushMessageController.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using Hotline.Permissions;
  2. using Hotline.Push.FWMessage;
  3. using Hotline.Repository.SqlSugar.Extensions;
  4. using Hotline.Share.Dtos;
  5. using Hotline.Share.Dtos.Push;
  6. using Hotline.Share.Dtos.Push.FWMessage;
  7. using Hotline.Share.Enums.Push;
  8. using MapsterMapper;
  9. using Microsoft.AspNetCore.Authorization;
  10. using Microsoft.AspNetCore.Mvc;
  11. using XF.Domain.Exceptions;
  12. using System.Security.Permissions;
  13. using XF.Domain.Filters;
  14. using XF.Domain.Repository;
  15. using XF.Utility.EnumExtensions;
  16. namespace Hotline.Api.Controllers
  17. {
  18. public class PushMessageController : ControllerBase //BaseController
  19. {
  20. #region 注入
  21. private readonly IRepository<Message> _messageRepository;
  22. private readonly IMapper _mapper;
  23. private readonly IPushDomainService _pushDomainService;
  24. /// <summary>
  25. ///
  26. /// </summary>
  27. /// <param name="messageRepository"></param>
  28. /// <param name="mapper"></param>
  29. /// <param name="pushDomainService"></param>
  30. public PushMessageController(IRepository<Message> messageRepository, IMapper mapper, IPushDomainService pushDomainService)
  31. {
  32. _messageRepository = messageRepository;
  33. _mapper = mapper;
  34. _pushDomainService = pushDomainService;
  35. }
  36. #endregion
  37. #region 新增
  38. /// <summary>
  39. /// 新增
  40. /// </summary>
  41. /// <param name="dto"></param>
  42. /// <returns></returns>
  43. [HttpPut("add")]
  44. public async Task AddMessage([FromBody] MessageDto dto)
  45. {
  46. await _pushDomainService.PushAsync(dto, HttpContext.RequestAborted);
  47. }
  48. /// <summary>
  49. /// 再次发送
  50. /// </summary>
  51. /// <param name="id"></param>
  52. /// <returns></returns>
  53. [HttpGet("{id}")]
  54. public async Task ResendMessage(string id)
  55. {
  56. var data = await _messageRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
  57. if (data is null)
  58. throw UserFriendlyException.SameMessage("重新发送失败");
  59. //修改重发次数
  60. data.ResendCount++;
  61. await _messageRepository.UpdateAsync(data, HttpContext.RequestAborted);
  62. //组装数据
  63. MessageDto dto = new()
  64. {
  65. PushBusiness = data.PushBusiness,
  66. ExternalId = data.ExternalId,
  67. PushPlatform = data.PushPlatform,
  68. // Status = EPushStatus.Pushing,
  69. Template = data.Template,
  70. Content = data.Content,
  71. Remark = data.Remark,
  72. Name = data.Name,
  73. TelNumber = data.TelNumber,
  74. OrderId = data.OrderId
  75. };
  76. await _pushDomainService.PushAsync(dto, HttpContext.RequestAborted);
  77. }
  78. #endregion
  79. #region 查询短信剩余数量
  80. /// <summary>
  81. /// 查询短信剩余数量
  82. /// </summary>
  83. /// <returns></returns>
  84. [HttpGet("query")]
  85. public async Task<string> GetAccountNum()
  86. {
  87. return await _pushDomainService.GetAccountNum();
  88. }
  89. #endregion
  90. #region 短信发送状态回调接口
  91. /// <summary>
  92. /// 短信发送状态回调接口
  93. /// </summary>
  94. /// <param name="receiveMessageDto"></param>
  95. /// <returns></returns>
  96. [HttpPost("receiveobtain")]
  97. [AllowAnonymous]
  98. [OriginResponse]
  99. public async Task<OpenResponse> ReceiveObtain([FromForm] ReceiveMessageDto receiveMessageDto)
  100. {
  101. var result = await _pushDomainService.ReceiveObtain(receiveMessageDto);
  102. return OpenResponse.Ok(result);
  103. }
  104. #endregion
  105. #region 短信接收
  106. /// <summary>
  107. /// 短信接收
  108. /// </summary>
  109. /// <param name="receiveMessageDto"></param>
  110. /// <returns></returns>
  111. [HttpPost("receivesms")]
  112. [AllowAnonymous]
  113. [OriginResponse]
  114. public async Task<OpenResponse> ReceiveSms([FromForm] ReceiveMessageDto receiveMessageDto)
  115. {
  116. var result = await _pushDomainService.ReceiveSms(receiveMessageDto);
  117. return OpenResponse.Ok(result);
  118. }
  119. #endregion
  120. #region 查询短信
  121. /// <summary>
  122. /// 查询短信
  123. /// </summary>
  124. /// <param name="pagedDto"></param>
  125. /// <returns></returns>
  126. [Permission(EPermission.AllMessage)]
  127. [HttpGet("getlist")]
  128. public async Task<PagedDto<MessageDataDto>> AllMessage([FromQuery] MessagePagedDto pagedDto)
  129. {
  130. var (total, items) = await _messageRepository
  131. .Queryable()
  132. .Includes(it => it.User)
  133. .Includes(it => it.SystemOrganize)
  134. .Includes(it => it.Order)
  135. .WhereIF(pagedDto.PushBusiness.HasValue, d => d.PushBusiness == pagedDto.PushBusiness)
  136. .WhereIF(pagedDto.Status.HasValue, d => d.SendState == pagedDto.Status)
  137. .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword),
  138. d => d.Name.Contains(pagedDto.Keyword!) || d.Content.Contains(pagedDto.Keyword!) ||
  139. d.TelNumber.Contains(pagedDto.Keyword!) || d.User.Name.Contains(pagedDto.Keyword!) ||
  140. d.SystemOrganize.Name.Contains(pagedDto.Keyword!))
  141. .WhereIF(pagedDto.StartTime.HasValue, d => d.SendTime >= pagedDto.StartTime)
  142. .WhereIF(pagedDto.EndTime.HasValue, d => d.SendTime <= pagedDto.EndTime)
  143. .OrderByDescending(it => it.CreationTime)
  144. .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
  145. return new PagedDto<MessageDataDto>(total, _mapper.Map<IReadOnlyList<MessageDataDto>>(items));
  146. }
  147. /// <summary>
  148. /// 列表页面基础数据
  149. /// </summary>
  150. /// <returns></returns>
  151. [HttpGet("list-data")]
  152. public async Task<object> ListData()
  153. {
  154. var rsp = new
  155. {
  156. EPushBusinessData = EnumExts.GetDescriptions<EPushBusiness>(),
  157. ESendStateData = EnumExts.GetDescriptions<ESendState>()
  158. };
  159. return rsp;
  160. }
  161. #endregion
  162. }
  163. }