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