lg_backend/langguanApi/Service/AlertService.cs

92 lines
3.1 KiB
C#

using langguanApi.Extensions.AutoDI;
using langguanApi.Model;
using langguanApi.Model.Dto;
using langguanApi.Model.Entity;
using Mapster;
using Npoi.Mapper;
using System.Linq.Expressions;
namespace langguanApi.Service
{
[ServiceInjection(InjectionType.Transient)]
public class AlertService : BaseService<Alert>
{
public AlertService(IConfiguration config) : base(config, nameof(Alert))
{
}
/// <summary>
/// 新加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<ApiResult> Add(AddAlertDto input)
{
if (input != null)
{
var entity = input.Adapt<Alert>();
await base.CreateAsync(entity);
return new ApiResult { code = 0, msg = "" };
}
return new ApiResult { code = -1, msg = "" }; ;
}
/// <summary>
/// 首页数据,最近7天的
/// </summary>
/// <returns></returns>
public async Task<object> IndexData(int num = 50)
{
Expression<Func<Alert, bool>> exp = filter => filter.IsDelete == false;
return (await base.GetListWithExp(exp))
.OrderByDescending(s => s.CreateDateTime)
.Take(num)
.Select(s => new
{
s.AlertContent,
s.deviceName,
s.CreateDateTime
}).ToList();
}
/// <summary>
///导出数据
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public async Task<byte[]> ExportData(DateTime? start, DateTime? end)
{
Expression<Func<Alert, bool>> exp = filter => filter.CreateDateTime >= start
&& filter.CreateDateTime <= end
&& filter.IsDelete == false;
var list = (await base.GetListWithExp(exp)).OrderByDescending(s => s.CreateDateTime).ToList();
if (list.Any())
{
var mapper = new Mapper();
mapper.Map<Alert>("报警开始时间", s => s.CreateDateTime)
.Map<Alert>("设备名称", s => s.deviceName)
// .Map<Alert>("工序", s => s.)
.Map<Alert>("内容", s => s.AlertContent)
.Format<Alert>("yyyy-MM-dd HH:mm:ss", s => s.CreateDateTime);
MemoryStream stream = new MemoryStream();
mapper.Save(stream, list, sheetName: "sheet1", leaveOpen: true);
return stream.ToArray();
}
return null;
}
/// <summary>
/// 分页取数据
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<object> GetPage(reqpage input)
{
Expression<Func<Alert, bool>> exp = filter => filter.IsDelete == false;
return await base.GetPager(new ReqPaing()
{
pageSize = input.pageSize,
current = input.current
}, exp);
}
}
}