123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- using Hotline.Permissions;
- using Hotline.Push.FWMessage;
- using Hotline.Repository.SqlSugar.Extensions;
- using Hotline.Share.Dtos;
- using Hotline.Share.Dtos.Push;
- using Hotline.Share.Dtos.Push.FWMessage;
- using Hotline.Share.Enums.Push;
- using MapsterMapper;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
- using XF.Domain.Exceptions;
- using System.Security.Permissions;
- using XF.Domain.Filters;
- using XF.Domain.Repository;
- using XF.Utility.EnumExtensions;
- namespace Hotline.Api.Controllers
- {
- public class PushMessageController : ControllerBase //BaseController
- {
- #region 注入
- private readonly IRepository<Message> _messageRepository;
- private readonly IMapper _mapper;
- private readonly IPushDomainService _pushDomainService;
- /// <summary>
- ///
- /// </summary>
- /// <param name="messageRepository"></param>
- /// <param name="mapper"></param>
- /// <param name="pushDomainService"></param>
- public PushMessageController(IRepository<Message> messageRepository, IMapper mapper, IPushDomainService pushDomainService)
- {
- _messageRepository = messageRepository;
- _mapper = mapper;
- _pushDomainService = pushDomainService;
- }
- #endregion
- #region 新增
- /// <summary>
- /// 新增
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPut("add")]
- public async Task AddMessage([FromBody] MessageDto dto)
- {
- await _pushDomainService.PushAsync(dto, HttpContext.RequestAborted);
- }
- /// <summary>
- /// 再次发送
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- [HttpGet("{id}")]
- public async Task ResendMessage(string id)
- {
- var data = await _messageRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
- if (data is null)
- throw UserFriendlyException.SameMessage("重新发送失败");
- //修改重发次数
- data.ResendCount++;
- await _messageRepository.UpdateAsync(data, HttpContext.RequestAborted);
- //组装数据
- MessageDto dto = new()
- {
- PushBusiness = data.PushBusiness,
- ExternalId = data.ExternalId,
- PushPlatform = data.PushPlatform,
- // Status = EPushStatus.Pushing,
- Template = data.Template,
- Content = data.Content,
- Remark = data.Remark,
- Name = data.Name,
- TelNumber = data.TelNumber,
- OrderId = data.OrderId
- };
- await _pushDomainService.PushAsync(dto, HttpContext.RequestAborted);
- }
- #endregion
- #region 查询短信剩余数量
- /// <summary>
- /// 查询短信剩余数量
- /// </summary>
- /// <returns></returns>
- [HttpGet("query")]
- public async Task<string> GetAccountNum()
- {
- return await _pushDomainService.GetAccountNum();
- }
- #endregion
- #region 短信发送状态回调接口
- /// <summary>
- /// 短信发送状态回调接口
- /// </summary>
- /// <param name="receiveMessageDto"></param>
- /// <returns></returns>
- [HttpPost("receiveobtain")]
- [AllowAnonymous]
- [OriginResponse]
- public async Task<OpenResponse> ReceiveObtain([FromForm] ReceiveMessageDto receiveMessageDto)
- {
- var result = await _pushDomainService.ReceiveObtain(receiveMessageDto);
- return OpenResponse.Ok(result);
- }
- #endregion
- #region 短信接收
- /// <summary>
- /// 短信接收
- /// </summary>
- /// <param name="receiveMessageDto"></param>
- /// <returns></returns>
- [HttpPost("receivesms")]
- [AllowAnonymous]
- [OriginResponse]
- public async Task<OpenResponse> ReceiveSms([FromForm] ReceiveMessageDto receiveMessageDto)
- {
- var result = await _pushDomainService.ReceiveSms(receiveMessageDto);
- return OpenResponse.Ok(result);
- }
- #endregion
- #region 查询短信
- /// <summary>
- /// 查询短信
- /// </summary>
- /// <param name="pagedDto"></param>
- /// <returns></returns>
- [Permission(EPermission.AllMessage)]
- [HttpGet("getlist")]
- public async Task<PagedDto<MessageDataDto>> AllMessage([FromQuery] MessagePagedDto pagedDto)
- {
- var (total, items) = await _messageRepository
- .Queryable()
- .Includes(it => it.User)
- .Includes(it => it.SystemOrganize)
- .Includes(it => it.Order)
- .WhereIF(pagedDto.PushBusiness.HasValue, d => d.PushBusiness == pagedDto.PushBusiness)
- .WhereIF(pagedDto.Status.HasValue, d => d.SendState == pagedDto.Status)
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword),
- d => d.Name.Contains(pagedDto.Keyword!) || d.Content.Contains(pagedDto.Keyword!) ||
- d.TelNumber.Contains(pagedDto.Keyword!) || d.User.Name.Contains(pagedDto.Keyword!) ||
- d.SystemOrganize.Name.Contains(pagedDto.Keyword!))
- .WhereIF(pagedDto.StartTime.HasValue, d => d.SendTime >= pagedDto.StartTime)
- .WhereIF(pagedDto.EndTime.HasValue, d => d.SendTime <= pagedDto.EndTime)
- .OrderByDescending(it => it.CreationTime)
- .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<MessageDataDto>(total, _mapper.Map<IReadOnlyList<MessageDataDto>>(items));
- }
- /// <summary>
- /// 列表页面基础数据
- /// </summary>
- /// <returns></returns>
- [HttpGet("list-data")]
- public async Task<object> ListData()
- {
- var rsp = new
- {
- EPushBusinessData = EnumExts.GetDescriptions<EPushBusiness>(),
- ESendStateData = EnumExts.GetDescriptions<ESendState>()
- };
- return rsp;
- }
- #endregion
- }
- }
|