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 }; } } }