namespace IStation.Application { /// /// Map /// [Route("SZJT/Map/Mobile")] [ApiDescriptionSettings("SZJT", Name = "地图(手机)", Order = 1600)] public class Map_MobileController : IDynamicApiController { /// /// 获取泵站列表 /// [Route("GetStationList@V1.0")] [HttpGet] public List GetStationList() { var keyContent = $"SZJT_Map_Mobile_GetStationList"; var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent); var vm_list = MemoryCacheHelper.GetSet(cacheKey, () => { var allList = new Service.LogicSite().GetAll(); Service.LogicSite.PublishCache(cacheKey); if (allList == null || allList.Count < 1) { return default; } var serviceMap = new Yw.Service.MapInfo(); var vmList = new List(); foreach (var station in allList) { var vm = new StationMapMobileDto(station); vmList.Add(vm); var map = serviceMap.Get(IStation.DataType.LogicSite, station.ID, Yw.Map.Kind.Gaodei, Yw.Map.Purpose.Location); if (map != null) { var position = Yw.Model.Map.Marker.ToModel(map.Position); vm.Position = position; } } return vmList; }, Yw.Service.ConfigHelper.CacheLevel3); return vm_list; } /// /// 通过 StationID 获取监测Kpi信息 /// [Route("GetMonitorKpiInfoByStationID@V1.0")] [HttpGet] public StationMapMonitorKpiInfoMobileDto GetMonitorKpiInfoByStationID([FromQuery][Required] StationIDInput input) { var station = new Service.LogicSite().GetByID(input.StationID); if (station == null) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"StationID:{input.StationID} 数据不存在"); } var vm = new StationMapMonitorKpiInfoMobileDto(station); var allMonitorList = new Yw.Service.MonitorPoint().GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.DataType.LogicSite, station.ID); allMonitorList = allMonitorList?.Where(x => x.UseStatus == Yw.Model.eUseStatus.Enable).ToList(); allMonitorList = allMonitorList?.Where(x => x.CronType == Yw.Monitor.eCronType.Real).ToList(); if (allMonitorList != null && allMonitorList.Count > 0) { allMonitorList = allMonitorList.Where(x => x.Flags.Contains(Flags.KPI)).OrderByDescending(X => X.Importance).ToList(); if (allMonitorList.Count > 0) { var service_monitor_record = new Yw.Service.MonitorRealRecord(); allMonitorList = allMonitorList.Take(4).ToList(); foreach (var monitor in allMonitorList) { var monitorRecord = service_monitor_record.GetLastRecord(monitor.SignalList.First().ID); vm.LastRecordList.Add(new StationMapMonitorKpiLastRecordMobileDto(monitor, monitorRecord)); } } } var allEquipmentList = new Yw.Service.Equipment().GetByBelongTypeAndBelongID(IStation.DataType.LogicSite, station.ID); allEquipmentList = allEquipmentList?.Where(x => x.ParentIds.Count < 1).ToList(); if (allEquipmentList != null && allEquipmentList.Count > 0) { var service_run_record = new Yw.Service.RunRealRecord(); foreach (var equipment in allEquipmentList) { var runRecord = service_run_record.GetLastRecord(Yw.Assets.DataType.Equipment, equipment.ID); vm.LastStatusList.Add(new StationMapMonitorKpiLastStatusMobileDto(equipment, runRecord)); } } return vm; } /// /// 获取流量计列表 /// [Route("GetFlowMeterList@V1.0")] [HttpGet] public List GetFlowMeterList() { var keyContent = $"SZJT_Map_Mobile_GetFlowMeterList"; var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent); var vm_list = MemoryCacheHelper.GetSet(cacheKey, () => { var catalogList = new Yw.Service.SysCatalog().GetChildAndSelfByCode(IStation.Catalog.FlowMeter); Yw.Service.SysCatalog.PublishCache(cacheKey); 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(IStation.DataType.LogicDma, 1); Yw.Service.Equipment.PublishCache(cacheKey); allMeterList = allMeterList?.Where(x => catalogIds.Contains(x.CatalogID)).ToList(); if (allMeterList == null || allMeterList.Count < 1) { return default; } var service_map = new Lazy(() => new Yw.Service.MapInfo()); var vmList = new List(); foreach (var meter in allMeterList) { var vm = new FlowMeterMapMobileDto(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); } } return vmList; }, Yw.Service.ConfigHelper.CacheLevel3); return vm_list; } /// /// 通过 FlowMeterID 获取监测Kpi信息 /// [Route("GetMonitorKpiInfoByFlowMeterID@V1.0")] [HttpGet] public FlowMeterMapMonitorKpiInfoMobileDto GetMonitorKpiInfoByFlowMeterID([FromQuery][Required] FlowMeterIDInput input) { var equipment = new Yw.Service.Equipment().GetByID(input.FlowMeterID); if (equipment == null) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"FlowMeterID:{input.FlowMeterID} 数据不存在"); } 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(); if (!catalogIds.Contains(equipment.CatalogID)) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"FlowMeterID:{input.FlowMeterID} 请输入正确流量计id"); } var vm = new FlowMeterMapMonitorKpiInfoMobileDto(); vm.FlowMeterID = input.FlowMeterID; vm.Name = equipment.Name; vm.LastRecordList = new List(); var service_monitor_mapping = new Yw.Service.EquipmentMonitorMapping(); var mappingList = new Yw.Service.EquipmentMonitorMapping().GetByEquipmentID(input.FlowMeterID); if (mappingList != null && mappingList.Count > 0) { var monitorIds = mappingList.Select(x => x.MonitorPointID).Distinct().ToList(); var monitorList = new Yw.Service.MonitorPoint().GetExSignalWithSignalTypeByIds(monitorIds); monitorList = monitorList?.Where(x => x.UseStatus == Yw.Model.eUseStatus.Enable).ToList(); monitorList = monitorList?.Where(x => x.CronType == Yw.Monitor.eCronType.Real).ToList(); if (monitorList != null && monitorList.Count > 0) { var service_monitor_record = new Lazy(() => new Yw.Service.MonitorRealRecord()); var monitorQ = monitorList.Find(x => x.Flags.Contains(IStation.Flags.默认) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.瞬时流量)); if (monitorQ == null) { monitorQ = monitorList.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 FlowMeterMapMonitorKpiLastRecordMobileDto(monitorQ, last_record)); } } var monitorQl = monitorList.Find(x => x.Flags.Contains(IStation.Flags.默认) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.累积流量)); if (monitorQl == null) { monitorQl = monitorList.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 FlowMeterMapMonitorKpiLastRecordMobileDto(monitorQl, last_record)); } } } } return vm; } /// /// 获取压力计列表 /// [Route("GetPressMeterList@V1.0")] [HttpGet] public List GetPressMeterList() { var keyContent = $"SZJT_Map_Mobile_GetPressMeterList"; var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent); var vm_list = MemoryCacheHelper.GetSet(cacheKey, () => { var catalogList = new Yw.Service.SysCatalog().GetChildAndSelfByCode(IStation.Catalog.PressMeter); Yw.Service.SysCatalog.PublishCache(cacheKey); 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(IStation.DataType.LogicDma, 1); Yw.Service.Equipment.PublishCache(cacheKey); allMeterList = allMeterList?.Where(x => catalogIds.Contains(x.CatalogID)).ToList(); if (allMeterList == null || allMeterList.Count < 1) { return default; } var service_map = new Lazy(() => new Yw.Service.MapInfo()); var vmList = new List(); foreach (var meter in allMeterList) { var vm = new FlowMeterMapMobileDto(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); } } return vmList; }, Yw.Service.ConfigHelper.CacheLevel3); return vm_list; } /// /// 通过 PressMeterID 获取监测Kpi信息 /// [Route("GetMonitorKpiInfoByPressMeterID@V1.0")] [HttpGet] public PressMeterMapMonitorKpiInfoMobileDto GetMonitorKpiInfoByPressMeterID([FromQuery][Required] PressMeterIDInput input) { var equipment = new Yw.Service.Equipment().GetByID(input.PressMeterID); if (equipment == null) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"PressMeterID:{input.PressMeterID} 数据不存在"); } var catalogList = new Yw.Service.SysCatalog().GetChildAndSelfByCode(IStation.Catalog.PressMeter); if (catalogList == null || catalogList.Count < 1) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, "压力计分类编码验证失败"); } var catalogIds = catalogList.Select(x => x.ID).Distinct().ToList(); if (!catalogIds.Contains(equipment.CatalogID)) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"PressMeterID:{input.PressMeterID} 请输入正确压力计id"); } var vm = new PressMeterMapMonitorKpiInfoMobileDto(); vm.PressMeterID = input.PressMeterID; vm.Name = equipment.Name; vm.LastRecordList = new List(); var service_monitor_mapping = new Yw.Service.EquipmentMonitorMapping(); var mappingList = new Yw.Service.EquipmentMonitorMapping().GetByEquipmentID(input.PressMeterID); if (mappingList != null && mappingList.Count > 0) { var monitorIds = mappingList.Select(x => x.MonitorPointID).Distinct().ToList(); var monitorList = new Yw.Service.MonitorPoint().GetExSignalWithSignalTypeByIds(monitorIds); monitorList = monitorList?.Where(x => x.UseStatus == Yw.Model.eUseStatus.Enable).ToList(); monitorList = monitorList?.Where(x => x.CronType == Yw.Monitor.eCronType.Real).ToList(); if (monitorList != null && monitorList.Count > 0) { var service_monitor_record = new Lazy(() => new Yw.Service.MonitorRealRecord()); var monitorPr = monitorList.Find(x => x.Flags.Contains(IStation.Flags.默认) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.压力)); if (monitorPr == null) { monitorPr = monitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.压力)); } if (monitorPr != null) { var signalPr = monitorPr.SignalList.First(); var last_record = service_monitor_record.Value.GetLastRecord(signalPr.ID); if (last_record != null) { vm.LastRecordList.Add(new PressMeterMapMonitorKpiLastRecordMobileDto(monitorPr, last_record)); } } } } return vm; } /// /// 获取工单列表 /// [Route("GetRepairList@V1.0")] [HttpGet] public List GetRepairList() { var vmList = new List(); var requestList = new Yw.Service.RepairRequestForm().GetPendingList(); if (requestList != null && requestList.Count > 0) { foreach (var request in requestList) { var vmRequest = new RepairMapMobileDto(request, Yw.Map.Kind.Gaodei); vmList.Add(vmRequest); } } var taskList = new Yw.Service.RepairTaskForm().GetUnCheckedList(); if (taskList != null && taskList.Count > 0) { foreach (var task in taskList) { var vmTask = new RepairMapMobileDto(task, Yw.Map.Kind.Gaodei); vmList.Add(vmTask); } } return vmList; } /// /// 获取工单状态信息 /// [Route("GetRepairStatusInfo@V1.0")] [HttpGet] public RepairMapStatusMobileDto GetRepairStatusInfo ( [Required] string FormType, [Required] long FormID ) { if (FormType == Yw.Repair.DataType.RepairRequestForm) { var request = new Yw.Service.RepairRequestForm().GetByID(FormID); if (request == null) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"FormID:{FormID} 数据不存在"); } return new RepairMapStatusMobileDto(request); } else if (FormType == Yw.Repair.DataType.RepairTaskForm) { var task = new Yw.Service.RepairTaskForm().GetByID(FormID); if (task == null) { throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"FormID:{FormID} 数据不存在"); } return new RepairMapStatusMobileDto(task); } throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"FormType 参数错误"); } /// /// 获取Dma分区列表 /// [Route("GetDmaAreaList@V1.0")] [HttpGet] public List GetDmaAreaList() { var keyContent = $"SZJT_Map_Mobile_GetDmaAreaList"; var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent); var vm_list = MemoryCacheHelper.GetSet(cacheKey, () => { var allAreaList = new Yw.Service.DmaArea().GetByBelongTypeAndBelongID(IStation.DataType.LogicDma, 1); Yw.Service.DmaArea.PublishCache(cacheKey); if (allAreaList == null || allAreaList.Count < 1) { return default; } var serviceMapInfo = new Yw.Service.MapInfo(); var vm_list = new List(); foreach (var area in allAreaList) { var vm = new DmaAreaMapMobileDto(area); vm_list.Add(vm); var area_map_info = serviceMapInfo.Get(Yw.DMA.DataType.DmaArea, area.ID, Yw.Map.Kind.Gaodei, Yw.Map.Purpose.Location); if (area_map_info != null) { vm.Position = Yw.Model.Map.Polygon.ToModel(area_map_info.Position); } } return vm_list; }, Yw.Service.ConfigHelper.CacheLevel3); return vm_list; } } }