namespace IStation.Application
{
///
/// FlowMeterMap
///
[Route("SZJT/Flow/Meter/Map/Logic")]
[ApiDescriptionSettings("SZJT", Name = "流量计地图(Logic)", Order = 4000)]
public class FlowMeterMap_LogicController : IDynamicApiController
{
///
/// 获取监测Kpi列表
///
[Route("GetMonitorKpiList@V1.0")]
[HttpGet]
public List GetMonitorKpiList([FromQuery][Required] BelongInput input)
{
var catalogList = new Yw.Service.SysCatalog().GetChildAndSelfByCode(IStation.Catalog.FlowMeter);
if (catalogList == null || catalogList.Count < 1)
{
throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, "流量计分类编码验证失败");
}
var catalogIds = catalogList.Select(x => x.ID).Distinct().ToList();
var allMeterList = new Yw.Service.Equipment().GetByBelongTypeAndBelongID(input.BelongType, input.BelongID);
allMeterList = allMeterList?.Where(x => catalogIds.Contains(x.CatalogID)).ToList();
if (allMeterList == null || allMeterList.Count < 1)
{
return default;
}
var service_monitor_mapping = new Yw.Service.EquipmentMonitorMapping();
var service_monitor = new Lazy(() => new Yw.Service.MonitorPoint());
var service_monitor_record = new Lazy(() => new Yw.Service.MonitorRealRecord());
var service_map = new Lazy(() => new Yw.Service.MapInfo());
var vmList = new List();
foreach (var meter in allMeterList)
{
var vm = new FlowMeterMapMonitorKpiInfoDto(meter);
vmList.Add(vm);
var mapInfo = service_map.Value.Get(Yw.Assets.DataType.Equipment, meter.ID, Yw.Map.Kind.Gaodei, Yw.Map.Purpose.Location);
if (mapInfo != null)
{
vm.Position = Yw.Model.Map.Marker.ToModel(mapInfo.Position);
}
var monitor_mapping_list = service_monitor_mapping.GetByEquipmentID(meter.ID);
if (monitor_mapping_list != null && monitor_mapping_list.Count > 0)
{
var monitorIds = monitor_mapping_list.Select(x => x.MonitorPointID).Distinct().ToList();
var monitor_list = service_monitor.Value.GetExSignalWithSignalTypeByIds(monitorIds);
monitor_list = monitor_list?.Where(x => x.UseStatus == Yw.Model.eUseStatus.Enable).ToList();
monitor_list = monitor_list?.Where(x => x.CronType == Yw.Monitor.eCronType.Real).ToList();
if (monitor_list != null && monitor_list.Count > 0)
{
var monitorQ = monitor_list.Find(x => x.Flags.Contains(IStation.Flags.默认) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.瞬时流量));
if (monitorQ == null)
{
monitorQ = monitor_list.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.瞬时流量));
}
if (monitorQ != null)
{
var signalQ = monitorQ.SignalList.First();
var last_record = service_monitor_record.Value.GetLastRecord(signalQ.ID);
if (last_record != null)
{
vm.LastRecordList.Add(new FlowMeterMapMonitorKpiLastRecordDto(monitorQ, last_record));
}
}
var monitorQl = monitor_list.Find(x => x.Flags.Contains(IStation.Flags.默认) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.累积流量));
if (monitorQl == null)
{
monitorQl = monitor_list.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.累积流量));
}
if (monitorQl != null)
{
var signalQl = monitorQl.SignalList.First();
var last_record = service_monitor_record.Value.GetLastRecord(signalQl.ID);
if (last_record != null)
{
vm.LastRecordList.Add(new FlowMeterMapMonitorKpiLastRecordDto(monitorQl, last_record));
}
}
}
}
}
return vmList;
}
}
}