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
|
{
|
/// <summary>
|
/// 设备监控服务
|
/// </summary>
|
[ApiDescriptionSettings("数据查询服务", Name = "EquipmentCurrentMonitor", Order = 100)]
|
[Route("api/[Controller]")]
|
public class EquipmentCurrentMonitorService : IEquipmentCurrentMonitorService, IDynamicApiController, ITransient
|
{
|
private readonly IRepository<EquipmentCurrentMonitor,MasterDbContextLocator> _equipmentCurrentMonitorRep;
|
private readonly IRepository<EquipmentBaseInfo, MasterDbContextLocator> _equipmentBaseInfoRep;
|
private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
|
private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
|
|
/// <summary>
|
/// 设备监控构造
|
/// </summary>
|
/// <param name="equipmentCurrentMonitorRep"></param>
|
/// <param name="equipmentBaseInfoRep"></param>
|
/// <param name="sysDictTypeRep"></param>
|
/// <param name="sysDictDataRep"></param>
|
public EquipmentCurrentMonitorService(
|
IRepository<EquipmentCurrentMonitor,MasterDbContextLocator> equipmentCurrentMonitorRep,
|
IRepository<EquipmentBaseInfo, MasterDbContextLocator> equipmentBaseInfoRep,
|
IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep,
|
IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
|
)
|
{
|
_equipmentCurrentMonitorRep = equipmentCurrentMonitorRep;
|
_equipmentBaseInfoRep = equipmentBaseInfoRep;
|
_sysDictTypeRep = sysDictTypeRep;
|
_sysDictDataRep = sysDictDataRep;
|
}
|
|
/// <summary>
|
/// 获取设备状态获取设备实时列表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("page")]
|
public async Task<List<EquipmentCurrentMonitorOutput>> 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<EquipmentCurrentMonitorOutput>()
|
.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<EquipmentCurrentMonitorOutput>()
|
// .OrderBy( o => o.EquipmentID)
|
// .ToListAsync();
|
|
return equipmentCurrentMonitors;
|
}
|
|
/// <summary>
|
/// 查询设备状态相关信息
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet("getEquipmentStatu")]
|
public async Task<List<EquipmentStatuOutput>> GetEquipmentStatu()
|
{
|
List<EquipmentStatuOutput> equipmentStatuInfoLst = new List<EquipmentStatuOutput>();
|
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;
|
}
|
}
|
}
|