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