using System.Linq.Expressions;
using AutoMapper;
using Entity.Api.Req;
using Entity.DbModel.Station;
using Entity.Dto;
using Furion.LinqBuilder;
using HybirdFrameworkCore.Entity;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
using Repository.Station;
using Service.Station;
using SqlSugar;
namespace WebStarter.Controllers;
///
/// 换电设备报警
///
[ApiController]
[Route("api/[controller]")]
public class EquipAlarmRecordController : ControllerBase
{
private readonly EquipAlarmRecordService equipAlarmRecordService;
public readonly EquipAlarmProcessRecordRepository ProcessRecordRepository;
private readonly IStringLocalizer _localizer;
public EquipAlarmRecordController(IStringLocalizer localizer,EquipAlarmProcessRecordRepository equipAlarmProcessRecordRepository,EquipAlarmRecordService equipAlarmRecordService)
{
ProcessRecordRepository = equipAlarmProcessRecordRepository;
_localizer = localizer;
this.equipAlarmRecordService = equipAlarmRecordService;
}
///
/// 查询未处理报警列表
///
/// 设备类型:-1-查询全部;0-充电机;1-电表;2-水冷机;3-plc<
/// 设备编码
///
[HttpPost("QueryEquipAlarmPage")]
public Result> QueryEquipAlarmPage([FromBody] QueryAlarmReq req)
{
Result> result = equipAlarmRecordService.QueryEquipAlarmPage(req);
if (result.Data.Rows.Count > 0)
{
foreach (var recordAlarm in result.Data.Rows)
{
recordAlarm.ErrorMsg = _localizer[recordAlarm.ErrorMsg];
}
}
return result;
}
///
/// 导出未处理报警
///
///
[HttpPost]
[Route("ExportEquipAlarmRecord")]
public async Task ExportEquipAlarmRecord([FromBody] QueryAlarmReq req)
{
var language = Request.Headers["Accept-Language"].ToString().ToLower();
// 创建查询条件的表达式
Expression> predicate = it => true;
// 动态添加查询条件
if (req.TypeCode != -1)
{
predicate = predicate.And(it => it.EquipTypeCode == req.TypeCode);
}
if (!string.IsNullOrWhiteSpace(req.EquipCode))
{
predicate = predicate.And(it => it.EquipCode == req.EquipCode);
}
if (!string.IsNullOrWhiteSpace(req.ErrorLevel))
{
predicate = predicate.And(it => it.ErrorLevel == req.ErrorLevel);
}
if (req.StartTime.HasValue && req.ProcessTime.HasValue)
{
predicate = predicate.And(it => it.StartTime >= req.StartTime && it.StartTime <= req.ProcessTime);
}
// 执行查询
List equipAlarmRecords = await equipAlarmRecordService.QueryListByClauseAsync(
predicate,
it => it.CreatedTime,
OrderByType.Desc
);
if (equipAlarmRecords.Count > 0)
{
foreach (var recordAlarm in equipAlarmRecords)
{
recordAlarm.ErrorMsg = _localizer[recordAlarm.ErrorMsg];
}
}
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap().ReverseMap();
cfg.CreateMap().ReverseMap();
});
IMapper mapper = config.CreateMapper();
if (language == "en")
{
List logExList2 = mapper.Map>(equipAlarmRecords);
IExcelExporter excelExporter = new ExcelExporter();
var res = await excelExporter.ExportAsByteArray(logExList2);
return new FileStreamResult(new MemoryStream(res), "application/octet-stream")
{ FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "_Unhandled_Alarm_Logs.xlsx" };
}
else
{
List logExList = mapper.Map>(equipAlarmRecords);
IExcelExporter excelExporter = new ExcelExporter();
var res = await excelExporter.ExportAsByteArray(logExList);
return new FileStreamResult(new MemoryStream(res), "application/octet-stream")
{ FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "未处理报警日志.xlsx" };
}
}
///
/// 查询已处理报警列表
///
/// 设备类型:-1-查询全部;0-充电机;1-电表;2-水冷机;3-plc
/// 设备编码
///
[HttpPost("QueryEquipAlarmProcessPage")]
public Result> QueryEquipAlarmProcessPage([FromBody] QueryAlarmReq req)
{
Result> result = equipAlarmRecordService.QueryEquipAlarmProcessPage(req);
if (result.Data.Rows.Count > 0)
{
foreach (var recordAlarm in result.Data.Rows)
{
recordAlarm.ErrorMsg = _localizer[recordAlarm.ErrorMsg];
}
}
return result;
}
///
/// 导出已处理报警
///
///
[HttpPost]
[Route("ExportEquipAlarmProcessRecord")]
public async Task ExportEquipAlarmProcessRecord([FromBody] QueryAlarmReq req)
{
var language = Request.Headers["Accept-Language"].ToString().ToLower();
// 创建查询条件的表达式
Expression> predicate = it => true;
// 动态添加查询条件
if (req.TypeCode != -1)
{
predicate = predicate.And(it => it.EquipTypeCode == req.TypeCode);
}
if (!string.IsNullOrWhiteSpace(req.EquipCode))
{
predicate = predicate.And(it => it.EquipCode == req.EquipCode);
}
if (!string.IsNullOrWhiteSpace(req.ErrorLevel))
{
predicate = predicate.And(it => it.ErrorLevel == req.ErrorLevel);
}
if (req.StartTime.HasValue && req.ProcessTime.HasValue)
{
predicate = predicate.And(it => it.StartTime >= req.StartTime && it.ProcessTime <= req.ProcessTime);
}
// 执行查询
List equipAlarmProcessRecords = await ProcessRecordRepository.QueryListByClauseAsync(
predicate,
it => it.CreatedTime,
OrderByType.Desc
);
if (equipAlarmProcessRecords.Count > 0)
{
foreach (var recordAlarm in equipAlarmProcessRecords)
{
recordAlarm.ErrorMsg = _localizer[recordAlarm.ErrorMsg];
}
}
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap().ReverseMap();
cfg.CreateMap().ReverseMap();
});
IMapper mapper = config.CreateMapper();
if (language == "en")
{
List logExList2 = mapper.Map>(equipAlarmProcessRecords);
IExcelExporter excelExporter = new ExcelExporter();
var res = await excelExporter.ExportAsByteArray(logExList2);
return new FileStreamResult(new MemoryStream(res), "application/octet-stream")
{ FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "_Processed_Alarm_Logs.xlsx" };
}
else
{
List logExList = mapper.Map>(equipAlarmProcessRecords);
IExcelExporter excelExporter = new ExcelExporter();
var res = await excelExporter.ExportAsByteArray(logExList);
return new FileStreamResult(new MemoryStream(res), "application/octet-stream")
{ FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "已处理报警日志.xlsx" };
}
}
}