using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using iWare.Wms.Core;
using iWare.Wms.Core.Util;
using Magicodes.ExporterAndImporter.Core.Extension;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Text;
using System.Web;
namespace iWare.Wms.Application
{
///
/// 设备运行历史服务
///
[ApiDescriptionSettings("数据查询服务", Name = "EquipmentWorkingLog", Order = 100)]
[Route("api/[Controller]")]
public class EquipmentWorkingLogService : IEquipmentWorkingLogService, IDynamicApiController, ITransient
{
private readonly IRepository _equipmentWorkingLogRep;
private readonly IRepository _equipmentBaseInfoRep;
private readonly IRepository _sysDictTypeRep;
private readonly IRepository _sysDictDataRep;
///
/// 设备运行历史服务构造函数
///
///
///
///
///
public EquipmentWorkingLogService(
IRepository equipmentWorkingLogRep,
IRepository equipmentBaseInfoRep,
IRepository sysDictTypeRep,
IRepository sysDictDataRep
)
{
_equipmentWorkingLogRep = equipmentWorkingLogRep;
_equipmentBaseInfoRep = equipmentBaseInfoRep;
_sysDictTypeRep = sysDictTypeRep;
_sysDictDataRep = sysDictDataRep;
}
///
/// 分页查询设备运行历史
///
/// 设备运行历史分页查询参数
///
[HttpGet("page")]
public async Task> Page([FromQuery] EquipmentWorkingLogSearch input)
{
var list = await _equipmentWorkingLogRep.DetachedEntities
.Join(_equipmentBaseInfoRep.DetachedEntities,u => u.EquipmentID, e => e.EquipmentId, (u, e) => new { u, e })
.Where(!string.IsNullOrEmpty(input.EquipmentID), w => w.u.EquipmentID == input.EquipmentID)
.Where(input.isSelectRedio == 1, w => w.u.FailureType != null && w.u.FailureType != "")
.Where(input.logAddBeginTime != null, w => w.u.LogAddTime >= input.logAddBeginTime)
.Where(input.logAddEndTime != null, w => w.u.LogAddTime <= input.logAddEndTime)
.Select(s => new EquipmentWorkingLogOutput
{
Id = s.u.Id,
EquipmentName = s.e.EquipmentName,
EquipmentID = s.u.EquipmentID,
LogAddTime = s.u.LogAddTime,
Remarks = s.u.Remarks,
FailureType = s.u.FailureType,
FailureStartTime=s.u.FailureStartTime,
FailureEndTime=s.u.FailureEndTime,
FailureMsg = s.u.FailureMsg,
EquipmentState = s.u.EquipmentState,
EquipmentStateStartTime = s.u.EquipmentStateStartTime,
EquipmentStateEndTime = s.u.EquipmentStateEndTime,
WarnType = s.u.WarnType,
Warnmsg = s.u.Warnmsg,
WarnStartTime = s.u.WarnStartTime,
WarnEndTime = s.u.WarnEndTime,
UpdateDesc = s.u.UpdateDesc,
})
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
//public string EquipmentState { get; set; }
//public DateTime? EquipmentStateStartTime { get; set; }
//public DateTime? EquipmentStateEndTime { get; set; }
//public string WarnType { get; set; }
//public DateTime? WarnStartTime { get; set; }
//public DateTime? WarnEndTime { get; set; }
//public string Warnmsg { get; set; }
//public string UpdateDesc { get; set; }
return list;
}
///
/// 根据设备运行历史查询参数导出Excel
///
/// 设备运行历史查询参数
/// 导出的Excel文件
[HttpGet("toExcel")]
public async Task ToExcelAsync([FromQuery] EquipmentWorkingLogSearch input)
{
var equipmentLogList = await _equipmentWorkingLogRep.DetachedEntities
.Join(_equipmentBaseInfoRep.DetachedEntities, u => u.EquipmentID, e => e.EquipmentId, (u, e) => new { u, e })
.Where(!string.IsNullOrEmpty(input.EquipmentID), w => w.u.EquipmentID == input.EquipmentID)
.Where(input.isSelectRedio == 1, w => w.u.FailureType != null && w.u.FailureType != "")
.Where(input.logAddBeginTime != null, w => w.u.LogAddTime >= input.logAddBeginTime)
.Where(input.logAddEndTime != null, w => w.u.LogAddTime <= input.logAddEndTime)
.Select(s => new EquipmentWorkingLogOutput
{
Id=s.u.Id,
EquipmentID = s.u.EquipmentID,
EquipmentName = s.e.EquipmentName,
//FailureType = s.u.FailureType,
//FailureMsg= s.u.FailureMsg,
LogAddTime = s.u.LogAddTime,
Remarks = s.u.Remarks,
FailureType = s.u.FailureType,
FailureStartTime = s.u.FailureStartTime,
FailureEndTime = s.u.FailureEndTime,
FailureMsg = s.u.FailureMsg,
EquipmentState = s.u.EquipmentState,
EquipmentStateStartTime = s.u.EquipmentStateStartTime,
EquipmentStateEndTime = s.u.EquipmentStateEndTime,
WarnType = s.u.WarnType,
Warnmsg = s.u.Warnmsg,
WarnStartTime = s.u.WarnStartTime,
WarnEndTime = s.u.WarnEndTime,
UpdateDesc = s.u.UpdateDesc,
})
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToListAsync();
MemoryStream ms = new();
DataConvertUtil.ToExcelData(equipmentLogList, _sysDictTypeRep, _sysDictDataRep, out List headers,
out List> data, out string sheetName);
ExcelUtil.ToExcel(headers, data, sheetName, ms);
ms.Position = 0;
var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8"));
return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
}
}
}