using JNPF.Common.Extension; using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.LinqBuilder; using JNPF.Message.Entitys.Dto.MessageMonitor; using JNPF.Message.Entitys.Entity; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Interfaces.Permission; using Mapster; using Microsoft.AspNetCore.Mvc; using SqlSugar; namespace JNPF.Message.Service; /// /// 消息监控 /// 版 本:V3.2 /// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com) /// 日 期:2021-06-01. /// [ApiDescriptionSettings(Tag = "Message", Name = "MessageMonitor", Order = 240)] [Route("api/message/[controller]")] public class MessageMonitorService : IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly IUsersService _usersService; public MessageMonitorService( ISqlSugarRepository repository, IUsersService usersService) { _repository = repository; _usersService = usersService; } #region Get /// /// 列表. /// /// 请求参数. /// [HttpGet("")] public async Task GetList([FromQuery] MessageMonitorQuery input) { var whereLambda = LinqExpression.And(); whereLambda = whereLambda.And(a => a.DeleteMark == null); var start = new DateTime(); var end = new DateTime(); if (input.endTime != null && input.startTime != null) { start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime())); end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime())); whereLambda = whereLambda.And(a => SqlFunc.Between(a.SendTime, start, end)); } // 关键字(用户、IP地址、功能名称) if (!string.IsNullOrEmpty(input.keyword)) whereLambda = whereLambda.And(a => a.Title.Contains(input.keyword)); if (input.messageSource.IsNotEmptyOrNull()) whereLambda = whereLambda.And(a => a.MessageSource.Contains(input.messageSource)); if (input.messageType.IsNotEmptyOrNull()) whereLambda = whereLambda.And(m => m.MessageType.Contains(input.messageType)); var list = await _repository.AsSugarClient().Queryable() .Where(whereLambda) .OrderBy(a => a.CreatorTime, OrderByType.Desc) .OrderBy(a => a.LastModifyTime, OrderByType.Desc) .Select(a => new MessageMonitorListOutput { id = a.Id, messageType = SqlFunc.Subqueryable().Where(u => u.Type == "1" && u.EnCode == a.MessageType).Select(u => u.FullName), messageSource = SqlFunc.Subqueryable().Where(u => u.Type == "4" && u.EnCode == a.MessageSource).Select(u => u.FullName), title = a.Title, sendTime = a.SendTime, }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(list); } /// /// 详情. /// /// [HttpGet("detail/{id}")] public async Task GetInfo(string id) { return await _repository.AsSugarClient().Queryable().Where(a => a.Id == id && a.DeleteMark == null).Select(a => new MessageMonitorListOutput { id = a.Id, messageType = SqlFunc.Subqueryable().Where(u => u.Type == "1" && u.EnCode == a.MessageType).Select(u => u.FullName), messageSource = SqlFunc.Subqueryable().Where(u => u.Type == "4" && u.EnCode == a.MessageSource).Select(u => u.FullName), title = a.Title, sendTime = a.SendTime, receiveUser = SqlFunc.Subqueryable().Where(u => u.Id == SqlFunc.ToString(a.ReceiveUser)).Select(u => SqlFunc.MergeString(u.RealName, "/", u.Account)), content = a.Content }).FirstAsync(); } #endregion #region POST /// /// 批量删除. /// /// 请求参数. /// [HttpDelete("batchRemove")] public async Task Delete([FromBody] MessageMonitorDelInput input) { await _repository.AsDeleteable().In(it => it.Id, input.ids).ExecuteCommandAsync(); } /// /// 一键删除. /// /// [HttpDelete("empty")] public async Task Delete() { await _repository.DeleteAsync(x => x.DeleteMark == null); } #endregion }