using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using iWare.Wms.Core; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Internal; using System.Diagnostics; using System.Linq.Dynamic.Core; namespace iWare.Wms.Application { /// /// 设备监控服务 /// [ApiDescriptionSettings("数据查询服务", Name = "EquipmentCurrentMonitor", Order = 100)] [Route("api/[Controller]")] public class EquipmentCurrentMonitorService : IEquipmentCurrentMonitorService, IDynamicApiController, ITransient { private readonly IRepository _equipmentCurrentMonitorRep; private readonly IRepository _equipmentBaseInfoRep; private readonly IRepository _sysDictTypeRep; private readonly IRepository _sysDictDataRep; /// /// 设备监控构造 /// /// /// /// /// public EquipmentCurrentMonitorService( IRepository equipmentCurrentMonitorRep, IRepository equipmentBaseInfoRep, IRepository sysDictTypeRep, IRepository sysDictDataRep ) { _equipmentCurrentMonitorRep = equipmentCurrentMonitorRep; _equipmentBaseInfoRep = equipmentBaseInfoRep; _sysDictTypeRep = sysDictTypeRep; _sysDictDataRep = sysDictDataRep; } /// /// 获取设备状态获取设备实时列表 /// /// /// [HttpGet("page")] public async Task> GetEquipmentLst([FromQuery] EquipmentCurrentMonitorSearch input) { var equipmentCurrentMonitors = await (from monitor in _equipmentCurrentMonitorRep.DetachedEntities join baseinfo in _equipmentBaseInfoRep.DetachedEntities on monitor.EquipmentID equals baseinfo.EquipmentId into joinedEmpty from baseinfo2 in joinedEmpty.DefaultIfEmpty() where monitor.EquipmentID != "HMI" select new EquipmentCurrentMonitorOutput { Id = monitor.Id, EquipmentID = monitor.EquipmentID, EquipmentName = baseinfo2.EquipmentName, EquipmentCurrentState = monitor.EquipmentCurrentState, //EquipmentCurrentStateName = monitor.Value, WorkingProcedure = monitor.WorkingProcedure, WorkPieceID = monitor.WorkPieceID, OnlineTime = monitor.OnlineTime, WorkTime = monitor.WorkTime, KnifeToolLife = monitor.KnifeToolLife, SpindleCurrent = monitor.SpindleCurrent, SpindleTorque = monitor.SpindleTorque, SpindleLoad = monitor.SpindleLoad, AlertTime = monitor.AlertTime, FailureType = monitor.FailureType, Alertmsg = monitor.Alertmsg, Remarks = monitor.Remarks, WarnType = monitor.WarnType, Warnmsg=monitor.Warnmsg, WarnTime=monitor.WarnTime }) .ProjectToType() .OrderBy(o => o.EquipmentID) .ToListAsync(); //var equipmentCurrentMonitors = await _equipmentCurrentMonitorRep.DetachedEntities // .LeftJoin(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a, b }) // //.Join(_sysDictDataRep.DetachedEntities, e => e.a.EquipmentCurrentState, f => f.Code, (e, f) => new { e, f }) // //.Join(_sysDictTypeRep.DetachedEntities, g => g.f.TypeId, h => h.Id, (f, g) => new { f, g }) // //.Where(x => (x.g.Code.Equals("equipment_state") &&(string.IsNullOrEmpty(input.EquipmentCurrentState)?true:x.f.f.Code.Equals(input.EquipmentCurrentState)))) // .Select(s => new EquipmentCurrentMonitorOutput // { // Id = s.a.Id, // EquipmentID = s.a.EquipmentID, // EquipmentName = s.b.EquipmentName, // EquipmentCurrentState = s.a.EquipmentCurrentState, // //EquipmentCurrentStateName = s.a.Value, // WorkingProcedure = s.a.WorkingProcedure, // WorkPieceID = s.a.WorkPieceID, // OnlineTime = s.a.OnlineTime, // WorkTime = s.a.WorkTime, // KnifeToolLife = s.a.KnifeToolLife, // SpindleCurrent = s.a.SpindleCurrent, // SpindleTorque = s.a.SpindleTorque, // SpindleLoad = s.a.SpindleLoad, // AlertTime = s.a.AlertTime, // FailureType = s.a.FailureType, // Alertmsg = s.a.Alertmsg, // Remarks = s.a.Remarks, // }) // .ProjectToType() // .OrderBy( o => o.EquipmentID) // .ToListAsync(); return equipmentCurrentMonitors; } /// /// 查询设备状态相关信息 /// /// [HttpGet("getEquipmentStatu")] public async Task> GetEquipmentStatu() { List equipmentStatuInfoLst = new List(); EquipmentStatuOutput statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.全部).ToString(); equipmentStatuInfoLst.Add(statuOutput); statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.生产).ToString(); equipmentStatuInfoLst.Add(statuOutput); statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.完成).ToString(); equipmentStatuInfoLst.Add(statuOutput); statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.待机).ToString(); equipmentStatuInfoLst.Add(statuOutput); statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.警告).ToString(); equipmentStatuInfoLst.Add(statuOutput); statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.故障).ToString(); equipmentStatuInfoLst.Add(statuOutput); statuOutput = new EquipmentStatuOutput(); statuOutput.EquipmentState = ((int)EnumEquipmentCurrentState.离线).ToString(); equipmentStatuInfoLst.Add(statuOutput); equipmentStatuInfoLst = equipmentStatuInfoLst.OrderBy(o => o.EquipmentState).ToList(); foreach (EquipmentStatuOutput item in equipmentStatuInfoLst) { // 根据状态统计获取设备信息 int EquiPmentStatuCount = 0; if (item.EquipmentState.Equals("0")) { EquiPmentStatuCount = await _equipmentCurrentMonitorRep.Where(o=>!o.EquipmentID.Contains("HMI")) .CountAsync(); } else { EquiPmentStatuCount = await _equipmentCurrentMonitorRep.Where(o => !o.EquipmentID.Contains("HMI")) .Where(x => x.EquipmentCurrentState == item.EquipmentState) .CountAsync(); } item.EquipmentStateNum = EquiPmentStatuCount; } return equipmentStatuInfoLst; } } }