lg_backend/langguanApi/Service/AlertService.cs

119 lines
4.4 KiB
C#

using langguanApi.Common.Proxy;
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>
{
private readonly HttpProxy _httpProxy;
private readonly IConfiguration _configuration;
public AlertService(IConfiguration config, HttpProxy httpProxy) : base(config, nameof(Alert))
{
_httpProxy = httpProxy;
_configuration = config;
}
/// <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;
List<Alert> result = new List<Alert>();
//获取接口报警数据
Dictionary<string, string> dic = new Dictionary<string, string>() { };
dic.Add("BeginTime", start.Value.ToString("yyyy-MM-dd HH:mm:ss"));
dic.Add("EndTime", end.Value.ToString("yyyy-MM-dd HH:mm:ss"));
var AlermResp = await _httpProxy.Get<RespModel<alarmList>>(dic,_configuration.GetValue<string>("Apis:AlertUrl"));
if (AlermResp.code == 0)
{
var romte = AlermResp.data.List.Select(s => new Alert
{
AlertContent = s.AlarmName,
deviceName = s.DeviceName,
CreateDateTime = DateTime.Parse(s.Time)
}).ToList();
if (romte.Any())
{
result.AddRange(romte);
}
}
var list = (await base.GetListWithExp(exp)).OrderByDescending(s => s.CreateDateTime).ToList();
if (list.Any())
{
result.AddRange(list);
}
if (result.Any())
{
result = result.OrderByDescending(s => s.CreateDateTime).ToList();
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, result, 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);
}
}
}