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
}