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 _messageRepository; private readonly IMapper _mapper; private readonly IPushDomainService _pushDomainService; /// /// /// /// /// /// public PushMessageController(IRepository messageRepository, IMapper mapper, IPushDomainService pushDomainService) { _messageRepository = messageRepository; _mapper = mapper; _pushDomainService = pushDomainService; } #endregion #region 新增 /// /// 新增 /// /// /// [HttpPut("add")] public async Task AddMessage([FromBody] MessageDto dto) { await _pushDomainService.PushAsync(dto, HttpContext.RequestAborted); } /// /// 再次发送 /// /// /// [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 查询短信剩余数量 /// /// 查询短信剩余数量 /// /// [HttpGet("query")] public async Task GetAccountNum() { return await _pushDomainService.GetAccountNum(); } #endregion #region 短信发送状态回调接口 /// /// 短信发送状态回调接口 /// /// /// [HttpPost("receiveobtain")] [AllowAnonymous] [OriginResponse] public async Task ReceiveObtain([FromForm] ReceiveMessageDto receiveMessageDto) { var result = await _pushDomainService.ReceiveObtain(receiveMessageDto); return OpenResponse.Ok(result); } #endregion #region 短信接收 /// /// 短信接收 /// /// /// [HttpPost("receivesms")] [AllowAnonymous] [OriginResponse] public async Task ReceiveSms([FromForm] ReceiveMessageDto receiveMessageDto) { var result = await _pushDomainService.ReceiveSms(receiveMessageDto); return OpenResponse.Ok(result); } #endregion #region 查询短信 /// /// 查询短信 /// /// /// [Permission(EPermission.AllMessage)] [HttpGet("getlist")] public async Task> 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(total, _mapper.Map>(items)); } /// /// 列表页面基础数据 /// /// [HttpGet("list-data")] public async Task ListData() { var rsp = new { EPushBusinessData = EnumExts.GetDescriptions(), ESendStateData = EnumExts.GetDescriptions() }; return rsp; } #endregion } }