using Microsoft.VisualBasic; namespace IStation.Application { /// /// BigScreen /// [Route("SZJT/Big/Screen/Logic")] [ApiDescriptionSettings("SZJT", Name = "大屏(Logic)", Order = 1000)] public class BigScreen_LogicController : IDynamicApiController { #region 所有 /// /// 获取所有泵站kpi信息(待完善) /// [Route("GetAllStationKpiInfo@V1.0")] [HttpGet] public BigScreenAllStationKpiDto GetAllStationKpiInfo() { var vm = new BigScreenAllStationKpiDto(); vm.Lws = new BigScreenAllStationKpiItemDto() { Name = "当日累计供水量", Value = "1120", UnitName = "m³" }; vm.Lps = new BigScreenAllStationKpiItemDto() { Name = "当日累计用电量", Value = "2300", UnitName = "kW‧h" }; vm.Sws = new BigScreenAllStationKpiItemDto() { Name = "当前瞬时总流量", Value = "2300.2", UnitName = "m³/h" }; vm.Sps = new BigScreenAllStationKpiItemDto() { Name = "当前瞬时总功率", Value = "2600.2", UnitName = "kW" }; vm.Tsc = new BigScreenAllStationKpiItemDto() { Name = "泵站总数量", Value = "13", UnitName = "座" }; vm.Rsc = new BigScreenAllStationKpiItemDto() { Name = "运行泵站数量", Value = "10", UnitName = "座" }; vm.Tpc = new BigScreenAllStationKpiItemDto() { Name = "机组总数", Value = "50", UnitName = "台" }; vm.Rpc = new BigScreenAllStationKpiItemDto() { Name = "运行机组数量", Value = "40", UnitName = "台" }; return vm; } /// /// 获取所有泵站项列表 /// [Route("GetAllStationItemList@V1.0")] [HttpGet] public List GetAllStationItemList() { var allStationList = new Service.LogicSite().GetAll(); if (allStationList == null || allStationList.Count < 1) { return default; } var service_monitor = new Lazy(() => new Yw.Service.MonitorPoint()); var service_monitor_record = new Lazy(() => new Yw.Service.MonitorRealRecord()); var vmList = new List(); foreach (var station in allStationList) { var vm = new BigScreenAllStationListItemDto(); vm.ID = station.ID; vm.Name = station.Name; vmList.Add(vm); var allMonitorList = service_monitor.Value.GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.DataType.LogicSite, station.ID, Yw.Monitor.eCronType.Real); if (allMonitorList != null && allMonitorList.Count > 0) { var monitorQ = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.瞬时流量)); if (monitorQ != null) { var signalQ = monitorQ.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.瞬时流量); vm.Qk = new BigScreenAllStationListKpiItemDto() { Name = "瞬时流量", Value = null, UnitName = signalQ.GetDisplayUnitName() }; var recordQ = service_monitor_record.Value.GetLastRecord(signalQ.ID); if (recordQ != null) { vm.Qk.Value = signalQ.GetDisplayValue(recordQ.DataValue); } } var monitorPr = allMonitorList.Find(x => x.Flags.Contains(Yw.Monitor.Flags.出口) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.压力)); if (monitorPr != null) { var signalPr = monitorPr.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.压力); vm.Prk = new BigScreenAllStationListKpiItemDto() { Name = "出口压力", Value = null, UnitName = signalPr.GetDisplayUnitName() }; var recordPr = service_monitor_record.Value.GetLastRecord(signalPr.ID); if (recordPr != null) { vm.Prk.Value = signalPr.GetDisplayValue(recordPr.DataValue); } } } } return vmList; } /// /// 获取所有泵站工单Kpi信息 /// [Route("GetAllStationRepairKpiInfo@V1.0")] [HttpGet] public BigScreenAllStationRepairKpiDto GetAllStationRepairKpiInfo() { var vm = new BigScreenAllStationRepairKpiDto(); vm.Cd = 10; vm.Cm = 235; vm.Cy = 1230; vm.Pending = 5; vm.Accepted = 5; vm.Progress = 35; vm.Checked = 680; return vm; } /// /// 获取所有泵站工单日统计(最近一月) /// [Route("GetAllStationRepairDayStatisticsInfo@V1.0")] [HttpGet] public List GetAllStationRepairDayStatisticsInfo() { var dtEnd = DateTime.Now.Date; var dtStart = dtEnd.AddMonths(-1); var vmList = new List(); for (DateTime dt = dtStart; dt <= dtEnd; dt = dt.AddDays(1)) { var vm = new BigScreenAllStationRepairDayCountDto(); vm.Day = dt; vm.Count = Yw.Untity.RandomHelper.Random(10, 100); vmList.Add(vm); } return vmList; } /// /// 获取所有泵站工单月统计(最近一年) /// [Route("GetAllStationRepairMonthStatisticsInfo@V1.0")] [HttpGet] public List GetAllStationRepairMonthStatisticsInfo() { var dtNow = DateTime.Now; var dtEnd = new DateTime(dtNow.Year, dtNow.Month, 1); var dtStart = dtEnd.AddMonths(-11); var vmList = new List(); for (DateTime dt = dtStart; dt <= dtEnd; dt = dt.AddMonths(1)) { var vm = new BigScreenAllStationRepairMonthCountDto(); vm.Year = dt.Year; vm.Month = dt.Month; vm.Count = Yw.Untity.RandomHelper.Random(100, 1000); vmList.Add(vm); } return vmList; } /// /// 获取所有泵站报警信息 /// [Route("GetAllStationAlarmInfo@V1.0")] [HttpGet] public List GetAllStationAlarmInfo() { var vmList = new List(); vmList.Add(new BigScreenAllStationAlarmItemDto() { ID = 1, Name = "金庭中腰泵站", Content = "1#机组出口压力过低,请关注状态变化" }); vmList.Add(new BigScreenAllStationAlarmItemDto() { ID = 2, Name = "凯泉一体化加压泵站", Content = "2#瞬时流量数据异常,请检修" }); vmList.Add(new BigScreenAllStationAlarmItemDto() { ID = 3, Name = "凯泉一体化加压泵站", Content = "2#瞬时流量数据异常,请检修" }); vmList.Add(new BigScreenAllStationAlarmItemDto() { ID = 4, Name = "凯泉一体化加压泵站", Content = "2#瞬时流量数据异常,请检修" }); vmList.Add(new BigScreenAllStationAlarmItemDto() { ID = 5, Name = "凯泉一体化加压泵站", Content = "2#瞬时流量数据异常,请检修" }); vmList.Add(new BigScreenAllStationAlarmItemDto() { ID = 6, Name = "凯泉一体化加压泵站", Content = "2#瞬时流量数据异常,请检修" }); return vmList; } #endregion #region 单站 /// /// 获取单泵站kpi信息 /// [Route("GetSingleStationKpiInfo@V1.0")] [HttpGet] public BigScreenSingleStationKpiDto GetSingleStationKpiInfo([FromQuery][Required] StationIDInput input) { var vm = new BigScreenSingleStationKpiDto(); var service_monitor = new Lazy(() => new Yw.Service.MonitorPoint()); var service_monitor_record = new Lazy(() => new Yw.Service.MonitorRealRecord()); var service_equipment = new Lazy(() => new Yw.Service.Equipment()); var service_run_record = new Lazy(() => new Yw.Service.RunRealRecord()); var allMonitorList = service_monitor.Value.GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.DataType.LogicSite, input.StationID, Yw.Monitor.eCronType.Real); if (allMonitorList != null && allMonitorList.Count > 0) { var monitorQ = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.瞬时流量)); if (monitorQ != null) { var signalQ = monitorQ.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.瞬时流量); vm.Q = new BigScreenSingleStationKpiItemDto() { Name = "瞬时流量", Value = null, UnitName = signalQ.GetDisplayUnitName() }; var recordQ = service_monitor_record.Value.GetLastRecord(signalQ.ID); if (recordQ != null) { vm.Q.Value = signalQ.GetDisplayValue(recordQ.DataValue); } } var monitorPr = allMonitorList.Find(x => x.Flags.Contains(Yw.Monitor.Flags.出口) && x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.压力)); if (monitorPr != null) { var signalPr = monitorPr.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.压力); vm.Pr = new BigScreenSingleStationKpiItemDto() { Name = "出口压力", Value = null, UnitName = signalPr.GetDisplayUnitName() }; var recordPr = service_monitor_record.Value.GetLastRecord(signalPr.ID); if (recordPr != null) { vm.Pr.Value = signalPr.GetDisplayValue(recordPr.DataValue); } } var monitorZD = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.浊度)); if (monitorZD != null) { var signalZD = monitorZD.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.浊度); vm.ZD = new BigScreenSingleStationKpiItemDto() { Name = "浊度", Value = null, UnitName = signalZD.GetDisplayUnitName() }; var recordZD = service_monitor_record.Value.GetLastRecord(signalZD.ID); if (recordZD != null) { vm.ZD.Value = signalZD.GetDisplayValue(recordZD.DataValue); } } var monitorYL = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.余氯)); if (monitorYL != null) { var signalYL = monitorYL.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.余氯); vm.YL = new BigScreenSingleStationKpiItemDto() { Name = "余氯", Value = null, UnitName = signalYL.GetDisplayUnitName() }; var recordYL = service_monitor_record.Value.GetLastRecord(signalYL.ID); if (recordYL != null) { vm.YL.Value = signalYL.GetDisplayValue(recordYL.DataValue); } } } var allEquipmentList = service_equipment.Value.GetByBelongTypeAndBelongID(IStation.DataType.LogicSite, input.StationID); allEquipmentList = allEquipmentList?.Where(x => x.Flags.Contains(IStation.Flags.机组)).ToList(); if (allEquipmentList != null && allEquipmentList.Count > 0) { vm.RunList = new List(); foreach (var equipment in allEquipmentList) { var vm_run = new BigScreenSingleStationKpiRunItemDto() { Name = equipment.Name, RunStatus = 0 }; var run_record = service_run_record.Value.GetLastRecord(Yw.Assets.DataType.Equipment, equipment.ID); if (run_record != null) { vm_run.RunStatus = run_record.RSa; } vm.RunList.Add(vm_run); } } return vm; } /// /// 获取单泵站指标信息 /// [Route("GetSingleStationQuotaInfo@V1.0")] [HttpGet] public BigScreenSingleStationQuotaKpiDto GetSingleStationQuotaInfo([FromQuery][Required] StationIDInput input) { var vm = new BigScreenSingleStationQuotaKpiDto(); vm.Ws = new List(); vm.Ps = new List(); var dtEnd = DateTime.Now.Date; var dtStart = dtEnd.AddMonths(-1); List allWsRecordList = null;//所有供水量 List allPsRecordList = null;//所有用电量 Yw.Model.Signal_SignalType signalWs = null;//用水量信号 Yw.Model.Signal_SignalType signalPs = null;//用电量信号 var service_day_record = new Lazy(() => new Yw.Service.MonitorDayRecord()); var allMonitorList = new Yw.Service.MonitorPoint().GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.DataType.LogicSite, input.StationID, Yw.Monitor.eCronType.EachDay); if (allMonitorList != null && allMonitorList.Count > 0) { var monitorWs = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.累积流量)); if (monitorWs != null) { signalWs = monitorWs.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.累积流量); allWsRecordList = service_day_record.Value.GetBySignalIDOfDayRange(signalWs.ID, dtStart, dtEnd); } var monitorPs = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.有功电度)); if (monitorPs != null) { signalPs = monitorPs.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.有功电度); allPsRecordList = service_day_record.Value.GetBySignalIDOfDayRange(signalPs.ID, dtStart, dtEnd); } } for (DateTime dt = dtStart; dt <= dtEnd; dt = dt.AddDays(1)) { var ws = allWsRecordList?.Find(x => x.DataDay.Date == dt.Date); vm.Ws.Add(new BigScreenSingleStationQuotaItemDto() { Day = dt, Value = ws == null ? "0" : signalWs.GetDisplayValue(ws.DataValue), UnitName = signalWs?.GetDisplayUnitNames() }); var ps = allPsRecordList.Find(x => x.DataDay.Date == dt.Date); vm.Ps.Add(new BigScreenSingleStationQuotaItemDto() { Day = dt, Value = ps == null ? "0" : signalPs.GetDisplayValue(ps.DataValue), UnitName = signalPs?.GetDisplayUnitNames() }); } return vm; } /// /// 获取单泵站机组项列表 /// [Route("GetSingleStationEnginePumpItemList@V1.0")] [HttpGet] public List GetSingleStationEnginePumpItemList([FromQuery][Required] StationIDInput input) { var service_equipment = new Yw.Service.Equipment(); var allEnginePumpList = service_equipment.GetByBelongTypeAndBelongID(IStation.DataType.LogicSite, input.StationID); allEnginePumpList = allEnginePumpList?.Where(x => x.Flags.Contains(IStation.Flags.机组)).ToList(); if (allEnginePumpList == null || allEnginePumpList.Count < 1) { return default; } var service_monitor_mapping = new Lazy(() => new Yw.Service.EquipmentMonitorMapping()); var service_monitor = new Lazy(() => new Yw.Service.MonitorPoint()); var service_monitor_record = new Lazy(() => new Yw.Service.MonitorRealRecord()); var vmList = new List(); foreach (var enginePump in allEnginePumpList) { var vm = new BigScreenSingleStationEnginePumpListItemDto(); vm.ID = enginePump.ID; vm.Name = enginePump.Name; vmList.Add(vm); var allChildEquipmentList = service_equipment.GetChildAndSelfByID(enginePump.ID); if (allChildEquipmentList != null && allChildEquipmentList.Count > 0) { var allChildEquipmentIds = allChildEquipmentList.Select(x => x.ID).Distinct().ToList(); var allMappingList = service_monitor_mapping.Value.GetByEquipmentIds(allChildEquipmentIds); if (allMappingList != null && allMappingList.Count > 0) { var allMonitorIds = allMappingList.Select(x => x.MonitorPointID).Distinct().ToList(); var allMonitorList = service_monitor.Value.GetExSignalWithSignalTypeByIds(allMonitorIds); if (allMonitorList != null && allMonitorList.Count > 0) { var monitorRs = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.运行状态)); if (monitorRs != null) { var signalRs = monitorRs.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.运行状态); vm.Rs = new BigScreenSingleStationEnginePumpListKpiItemDto() { Name = "状态", Value = null, UnitName = null }; var recordRs = service_monitor_record.Value.GetLastRecord(signalRs.ID); if (recordRs != null) { vm.Rs.Value = recordRs.DataValue; } } var monitorHz = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.频率)); if (monitorHz != null) { var signalHz = monitorHz.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.频率); vm.Hz = new BigScreenSingleStationEnginePumpListKpiItemDto() { Name = "频率", Value = null, UnitName = signalHz.GetDisplayUnitName() }; var recordHz = service_monitor_record.Value.GetLastRecord(signalHz.ID); if (recordHz != null) { vm.Hz.Value = signalHz.GetDisplayValue(recordHz.DataValue); } } var monitorP = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.有功功率)); if (monitorP != null) { var signalP = monitorP.SignalList.Find(x => x.SignalType.Code == Yw.Monitor.SignalType.有功功率); vm.P = new BigScreenSingleStationEnginePumpListKpiItemDto() { Name = "功率", Value = null, UnitName = signalP.GetDisplayUnitName() }; var recordP = service_monitor_record.Value.GetLastRecord(signalP.ID); if (recordP != null) { vm.P.Value = signalP.GetDisplayValue(recordP.DataValue); } } } } } } return vmList; } /// /// 获取单泵站工单Kpi信息(待完善) /// [Route("GetSingleStationRepairKpiInfo@V1.0")] [HttpGet] public BigScreenSingleStationRepairKpiDto GetSingleStationRepairKpiInfo([FromQuery][Required] StationIDInput input) { var vm = new BigScreenSingleStationRepairKpiDto(); vm.Cd = 10; vm.Cm = 235; vm.Cy = 1230; vm.Pending = 5; vm.Accepted = 5; vm.Progress = 35; vm.Checked = 680; return vm; } /// /// 获取单泵站工单统计信息 /// [Route("GetSingleStationRepairStatisticsInfo@V1.0")] [HttpGet] public BigScreenSingleStationRepairStatisticsInfoDto GetSingleStationRepairStatisticsInfo([FromQuery][Required] StationIDInput input) { var vm = new BigScreenSingleStationRepairStatisticsInfoDto(); vm.LastMonth = new List(); var dtEnd = DateTime.Now.Date; var dtStart = dtEnd.AddMonths(-1); for (DateTime dt = dtStart; dt <= dtEnd; dt = dt.AddDays(1)) { var vm_day = new BigScreenSingleStationRepairDayCountDto(); vm_day.Day = dt; vm_day.Count = Yw.Untity.RandomHelper.Random(10, 100); vm.LastMonth.Add(vm_day); } vm.LastYear = new List(); var dtNow = DateTime.Now; dtEnd = new DateTime(dtNow.Year, dtNow.Month, 1); dtStart = dtEnd.AddMonths(-11); for (DateTime dt = dtStart; dt <= dtEnd; dt = dt.AddMonths(1)) { var vm_month = new BigScreenSingleStationRepairMonthCountDto(); vm_month.Year = dt.Year; vm_month.Month = dt.Month; vm_month.Count = Yw.Untity.RandomHelper.Random(100, 1000); vm.LastYear.Add(vm_month); } return vm; } /// /// 获取单泵站机组工单统计信息 /// [Route("GetSingleStationRepairEnginePumpStatisticsInfo@V1.0")] [HttpGet] public BigScreenSingleStationRepairEnginePumpStatisticsInfoDto GetSingleStationRepairEnginePumpStatisticsInfo([FromQuery][Required] StationIDInput input) { var vm = new BigScreenSingleStationRepairEnginePumpStatisticsInfoDto(); vm.Cd = new List() { new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="1#机组",Count=1}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="2#机组",Count=3}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="3#机组",Count=0}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="4#机组",Count=1} }; vm.Cm = new List() { new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="1#机组",Count=10}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="2#机组",Count=32}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="3#机组",Count=4}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="4#机组",Count=18} }; vm.Cm = new List() { new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="1#机组",Count=123}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="2#机组",Count=45}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="3#机组",Count=8}, new BigScreenSingleStationRepairEnginePumpCountDto(){ Name="4#机组",Count=23} }; return vm; } /// /// 获取单泵站报警信息 /// [Route("GetSingleStationAlarmInfo@V1.0")] [HttpGet] public List GetSingleStationAlarmInfo([FromQuery][Required] StationIDInput input) { var vmList = new List(); var allEquipmentList = new Yw.Service.Equipment().GetByBelongTypeAndBelongID(IStation.DataType.LogicSite, input.StationID); if (allEquipmentList == null || allEquipmentList.Count < 1) { return vmList; } var allEnginePumpList = allEquipmentList.Where(x => x.Flags.Contains(IStation.Flags.机组)).ToList(); if (allEnginePumpList.Count < 1) { return vmList; } var service_monitor_maping = new Yw.Service.EquipmentMonitorMapping(); var service_monitor = new Lazy(() => new Yw.Service.MonitorPoint()); var servie_alarm_record = new Lazy(() => new Yw.Service.MonitorValueAlarmRecord()); foreach (var enginePump in allEnginePumpList) { var allMonitorMappingList = service_monitor_maping.GetByEquipmentIDContainsChildren(enginePump.ID); if (allMonitorMappingList != null && allMonitorMappingList.Count > 0) { var allMonitorIds = allMonitorMappingList.Select(x => x.MonitorPointID).Distinct().ToList(); var allMonitorList = service_monitor.Value.GetExSignalWithSignalTypeByIds(allMonitorIds); var allSignalList = allMonitorList.SelectMany(x => x.SignalList).ToList(); var allSignalIds = allSignalList.Select(x => x.ID).Distinct().ToList(); var allAlarmList = servie_alarm_record.Value.GetLastListBySignalIds(allSignalIds, 3); if (allAlarmList != null && allAlarmList.Count > 0) { foreach (var alarm in allAlarmList) { var vm = new BigScreenSingleStationAlarmItemDto() { ID = alarm.ID, Name = enginePump.Name, Content = alarm.AlarmName }; vmList.Add(vm); } } } } return vmList; } #endregion } }