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
|
{
|
/// <summary>
|
/// 设备运行历史服务
|
/// </summary>
|
[ApiDescriptionSettings("数据查询服务", Name = "EquipmentWorkingLog", Order = 100)]
|
[Route("api/[Controller]")]
|
public class EquipmentWorkingLogService : IEquipmentWorkingLogService, IDynamicApiController, ITransient
|
{
|
private readonly IRepository<EquipmentWorkingLog,MasterDbContextLocator> _equipmentWorkingLogRep;
|
private readonly IRepository<EquipmentBaseInfo, MasterDbContextLocator> _equipmentBaseInfoRep;
|
private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
|
private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
|
|
/// <summary>
|
/// 设备运行历史服务构造函数
|
/// </summary>
|
/// <param name="equipmentWorkingLogRep"></param>
|
/// <param name="equipmentBaseInfoRep"></param>
|
/// <param name="sysDictTypeRep"></param>
|
/// <param name="sysDictDataRep"></param>
|
public EquipmentWorkingLogService(
|
IRepository<EquipmentWorkingLog,MasterDbContextLocator> equipmentWorkingLogRep,
|
IRepository<EquipmentBaseInfo, MasterDbContextLocator> equipmentBaseInfoRep,
|
IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep,
|
IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
|
)
|
{
|
_equipmentWorkingLogRep = equipmentWorkingLogRep;
|
_equipmentBaseInfoRep = equipmentBaseInfoRep;
|
_sysDictTypeRep = sysDictTypeRep;
|
_sysDictDataRep = sysDictDataRep;
|
}
|
|
/// <summary>
|
/// 分页查询设备运行历史
|
/// </summary>
|
/// <param name="input">设备运行历史分页查询参数</param>
|
/// <returns></returns>
|
[HttpGet("page")]
|
public async Task<PageResult<EquipmentWorkingLogOutput>> 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<EquipmentWorkingLogSearch>(input))
|
.ProjectToType<EquipmentWorkingLogOutput>()
|
.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;
|
}
|
|
/// <summary>
|
/// 根据设备运行历史查询参数导出Excel
|
/// </summary>
|
/// <param name="input">设备运行历史查询参数</param>
|
/// <returns>导出的Excel文件</returns>
|
[HttpGet("toExcel")]
|
public async Task<IActionResult> 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<EquipmentWorkingLogSearch>(input))
|
.ProjectToType<EquipmentExcelOutput>()
|
.ToListAsync();
|
|
|
|
MemoryStream ms = new();
|
DataConvertUtil.ToExcelData(equipmentLogList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers,
|
out List<List<object>> 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 };
|
}
|
}
|
}
|