namespace Yw.Application
{
///
/// HealthQuotaEvaluationHandOnline
///
[Route("Health/Quota/Evaluation/Online/Logic")]
[ApiDescriptionSettings("Health", Name = "指标在线评价(业务)", Order = 900)]
public class HealthQuotaEvaluationHandOnline_LogicController : IDynamicApiController
{
///
/// 通过 EquipmentID 获取
///
[Route("GetByEquipmentID@V1.0")]
[HttpGet]
public List GetByEquipmentID([FromQuery][Required] EquipmentIDInput input)
{
var equipmentId = input.EquipmentID;
#region 获取所有设备
var serviceEquipment = new Service.Equipment();
var allEquipmentList = serviceEquipment.GetChildAndSelfByID(equipmentId);
if (allEquipmentList == null || allEquipmentList.Count < 1)
{
throw Oops.Oh(ErrorCodes.D001, $"EquipmentID:{equipmentId}");
}
#endregion
#region 获取设备测点映射
var allEquipmentIds = allEquipmentList.Select(x => x.ID).Distinct().ToList();
var serviceMonitorMapping = new Service.EquipmentMonitorMapping();
var allMonitorMappingList = serviceMonitorMapping.GetByEquipmentIds(allEquipmentIds);
if (allMonitorMappingList == null || allMonitorMappingList.Count < 1)
{
return default;
}
#endregion
#region 获取所有测点
var allMonitorIds = allMonitorMappingList.Select(x => x.MonitorPointID).Distinct().ToList();
var serviceMonitor = new Service.MonitorPoint();
var allMonitorList = serviceMonitor.GetExSignalWithSignalTypeByIds(allMonitorIds);
if (allMonitorList == null || allMonitorList.Count < 1)
{
return default;
}
#endregion
#region 获取所有测点组
var allGroupIds = allMonitorList.Select(x => x.GroupID).Distinct().ToList();
var serviceMonitorGroup = new Service.MonitorPointGroup();
var allGroupList = serviceMonitorGroup.GetByIds(allGroupIds);
if (allGroupList == null || allGroupList.Count < 1)
{
return default;
}
#endregion
#region 获取所有绑定
var allSignalIds = allMonitorList.SelectMany(x => x.SignalList.Select(t => t.ID)).ToList();
var allBindingList = new Service.HealthQuotaEvaluationModelBinding().GetValidBySignalIds(allSignalIds);
if (allBindingList == null || allBindingList.Count < 1)
{
return default;
}
#endregion
#region 获取所有绑定模型
var allModelIds = allBindingList.Select(x => x.ModelID).Distinct().ToList();
var allModelList = new Yw.Service.HealthQuotaEvaluationModel().GetByIds(allModelIds);
if (allModelList == null || allModelList.Count < 1)
{
return default;
}
#endregion
#region 遍历构造
var serviceMonitorRecord = new Lazy(() => new Service.MonitorRecord());
var serviceEvaluateRecord = new Lazy(() => new Service.HealthQuotaEvaluationRecord());
var vmList = new List();
foreach (var group in allGroupList)
{
var monitorList = allMonitorList.Where(x => x.GroupID == group.ID).OrderBy(x => x.SortCode).ToList();
if (monitorList == null || monitorList.Count < 1)
continue;
foreach (var monitor in monitorList)
{
var vm = new MonitorPointOnlineLogicDto(monitor);
foreach (var signal in monitor.SignalList)
{
var binding = allBindingList.Find(x => x.SignalID == signal.ID);
if (binding != null)
{
var model = allModelList.Find(x => x.ID == binding.ModelID);
if (model != null)
{
if (model.Way == eEvaluateWay.Hand)
{
var lastRecord = serviceMonitorRecord.Value.GetLastRecord(signal.ID);
if (lastRecord != null)
{
var lastEvaluateRecord = serviceEvaluateRecord.Value.GetLastRecord(signal.ID);
var vmSignal = new SignalOnlineLogicDto(signal, lastRecord, model, lastEvaluateRecord);
vm.SignalList.Add(vmSignal);
}
}
}
}
}
if (vm.SignalList.Count > 0)
{
vmList.Add(vm);
}
}
}
return vmList;
#endregion
}
}
}