using Microsoft.AspNetCore.Mvc; using System.Net; using System.Net.Http.Headers; using Microsoft.Extensions.Hosting.Internal; using Microsoft.AspNetCore.Http.Extensions; using IStation.Untity; using Furion.DynamicApiController; using System.ComponentModel.DataAnnotations; using Mapster; namespace IStation.Application { /// /// EtaAnalyLargeScreenKpi /// [Route("Eta/Analy/LargeScreenKpi")] [ApiDescriptionSettings("Eta", Name = "能效大屏KPI分析", Order = 700)] public class EtaAnalyLargeScreenKpi_Controller : IDynamicApiController { /// /// 获取业务区域能效指标 /// [Route("GetLogicAreaEtaKpi@V1.0")] [HttpGet] public EtaLargeScreenKpi GetLogicAreaEtaKpi([FromQuery][Required] LogicAreaIDUnderCorpInput input) { #region 入参 var corpId = input.CorpID; var logicAreaId = input.LogicAreaID; #endregion #region 时间 var last_year = DateTime.Now.AddYears(-1).Year;//去年 var this_year = DateTime.Now.Year;//今年 var last_month_day = DateTime.Now.AddMonths(-1);//上个月的同一天 var today = DateTime.Today;//今天 #endregion #region 数据 var eta_standard_coal = new Service.ParasConfigure().GetByType(corpId, Configure.Paras_StandardCoal);//标准煤系数 var eta_standard_list = new Service.EtaStandardConfigure().GetByCorpID(corpId);//能效标准项列表 var service_eta = new Service.EtaLogicRealRecord(); var eta_yestoday_record_list = service_eta.GetByObjectOfDay(corpId, ObjectType.LogicArea, logicAreaId, DateTime.Today.AddDays(-1)); //昨天的所有能效记录 var eta_this_record_list = service_eta.GetByObjectOfDay(corpId, ObjectType.LogicArea, logicAreaId, DateTime.Today);//当天所有能效记录 var eta_last_record = eta_this_record_list?.LastOrDefault();//最近一次能效记录 var service_eta_sum = new Service.EtaSumLogicRecord(); var eta_sum_month_last_record_list = service_eta_sum.GetMonthByObjectOfYear(corpId, ObjectType.LogicArea, logicAreaId, last_year);//去年的能效月汇总记录 var eta_sum_month_this_record_list = service_eta_sum.GetMonthByObjectOfYear(corpId, ObjectType.LogicArea, logicAreaId, this_year);//今年的能效月汇总记录 var eta_sum_day_last_record_list = service_eta_sum.GetDayByObjectOfYM(corpId, ObjectType.LogicArea, logicAreaId, last_month_day.Year, last_month_day.Month);//上月的能效日汇总记录 var eta_sum_day_this_record_list = service_eta_sum.GetDayByObjectOfYM(corpId, ObjectType.LogicArea, logicAreaId, today.Year, today.Month);//当月的能效日汇总记录 #endregion var vm = new EtaLargeScreenKpi(); #region Kpi指标项 vm.Items = new List(); #region 瞬时流量 var vm_item_q = new EtaLargeScreenKpiItem(); vm_item_q.Name = "瞬时流量"; vm_item_q.Unit = "m³/h"; vm_item_q.Value = string.Empty; if (eta_last_record != null) { if (eta_last_record.Qa != null) { vm_item_q.Value = Math.Round(eta_last_record.Qa.Value, 2).ToString(); } } vm.Items.Add(vm_item_q); #endregion #region 功率 var vm_item_p = new EtaLargeScreenKpiItem(); vm_item_p.Name = "瞬时功率"; vm_item_p.Unit = "kW"; vm_item_p.Value = string.Empty; if (eta_last_record != null) { if (eta_last_record.Pa != null) { vm_item_p.Value = Math.Round(eta_last_record.Pa.Value, 2).ToString(); } } vm.Items.Add(vm_item_p); #endregion #region 千吨能耗 var vm_item_wp = new EtaLargeScreenKpiItem(); vm_item_wp.Name = "千吨能耗"; vm_item_wp.Unit = "kW·h/km³"; vm_item_wp.Value = string.Empty; if (eta_last_record != null) { if (eta_last_record.WPa != null) { vm_item_wp.Value = Math.Round(eta_last_record.WPa.Value, 2).ToString(); } } vm.Items.Add(vm_item_wp); #endregion #region 单位能耗 var vm_item_uwp = new EtaLargeScreenKpiItem(); vm_item_uwp.Name = "单位能耗"; vm_item_uwp.Unit = "kW·h/km³/m"; vm_item_uwp.Value = string.Empty; if (eta_last_record != null) { if (eta_last_record.UWPa != null) { vm_item_uwp.Value = Math.Round(eta_last_record.UWPa.Value, 2).ToString(); } } vm.Items.Add(vm_item_uwp); #endregion #region 标准煤 var vm_item_coal = new EtaLargeScreenKpiItem(); vm_item_coal.Name = "标准煤"; vm_item_coal.Unit = "吨"; vm_item_coal.Value = string.Empty; if (eta_this_record_list != null && eta_this_record_list.Count > 0) { var eta_pa_record_list = eta_this_record_list?.Where(x => x.Pa != null).ToList(); if (eta_pa_record_list != null && eta_pa_record_list.Count > 0) { var standard_coal = 2.7978; if (eta_standard_coal != null) { standard_coal = double.Parse(eta_standard_coal.Value); } var run_coal = eta_pa_record_list.Sum(x => x.Pa.Value * x.Duration / 3600f); vm_item_coal.Value = ((run_coal / 10000f) * standard_coal).ToString("0.0000"); } } vm.Items.Add(vm_item_coal); //算出今日的总用电量 value_coal ((value_coal / 10000f) * 2.7978).ToString("0.000000"); #endregion #endregion #region 效率区间比 vm.RatioItems = new List(); if (eta_this_record_list != null && eta_this_record_list.Count > 0) { var eta_this_ea_record_list = eta_this_record_list.Where(x => x.Ea != null).ToList(); if (eta_this_ea_record_list != null && eta_this_ea_record_list.Count > 0) { if (eta_standard_list != null && eta_standard_list.Count > 0) { foreach (var item in eta_standard_list) { var vm_ratio_item = new EtaLargeScreenKpiRatioItem(); vm_ratio_item.Name = $"{item.LowerLimit}%-{item.UpperLimit}%"; vm_ratio_item.Value = 0; var eta_ea_item_record_list = eta_this_ea_record_list.Where(x => x.Ea.Value >= item.LowerLimit && x.Ea.Value < item.UpperLimit).ToList(); if (eta_ea_item_record_list.Count > 0) { vm_ratio_item.Value = eta_ea_item_record_list.Sum(x => x.Duration); } vm.RatioItems.Add(vm_ratio_item); } } } } #endregion #region 能效指标 if (eta_last_record != null) { if (eta_last_record.Ea != null) { vm.Value = Math.Round(eta_last_record.Ea.Value, 2); } } #endregion #region 年度量 vm.YearItems = new List(); #region 用电量 var year_item_ed = new EtaLargeScreenKpiYearItem(); year_item_ed.Name = "用电量"; year_item_ed.Unit = "度"; year_item_ed.LastYearRecords = new List(); for (int i = 1; i <= 12; i++) { var record = new EtaLargeScreenKpiYearItemRecord(); record.Month = i; record.Value = 0; var last_year_month_sum_record = eta_sum_month_last_record_list?.Find(x => x.DataMonth == i); if (last_year_month_sum_record != null) { record.Value = Math.Round(last_year_month_sum_record.Dt, 1); } year_item_ed.LastYearRecords.Add(record); } year_item_ed.ThisYearRecords = new List(); for (int i = 1; i < DateTime.Now.Month; i++) { var record = new EtaLargeScreenKpiYearItemRecord(); record.Month = i; record.Value = 0; var this_year_month_sum_record = eta_sum_month_this_record_list?.Find(x => x.DataMonth == i); if (this_year_month_sum_record != null) { record.Value = Math.Round(this_year_month_sum_record.Dt, 1); } year_item_ed.ThisYearRecords.Add(record); } vm.YearItems.Add(year_item_ed); #endregion #region 供水量 var year_item_ws = new EtaLargeScreenKpiYearItem(); year_item_ws.Name = "供水量"; year_item_ws.Unit = "吨"; vm.YearItems.Add(year_item_ws); year_item_ws.LastYearRecords = new List(); for (int i = 1; i <= 12; i++) { var record = new EtaLargeScreenKpiYearItemRecord(); record.Month = i; record.Value = 0; var last_year_month_sum_record = eta_sum_month_last_record_list?.Find(x => x.DataMonth == i); if (last_year_month_sum_record != null) { record.Value = Math.Round(last_year_month_sum_record.Qt, 1); } year_item_ws.LastYearRecords.Add(record); } year_item_ws.ThisYearRecords = new List(); for (int i = 1; i < DateTime.Now.Month; i++) { var record = new EtaLargeScreenKpiYearItemRecord(); record.Month = i; record.Value = 0; var this_year_month_sum_record = eta_sum_month_this_record_list?.Find(x => x.DataMonth == i); if (this_year_month_sum_record != null) { record.Value = Math.Round(this_year_month_sum_record.Qt, 1); } year_item_ws.ThisYearRecords.Add(record); } #endregion #endregion #region 月度量 vm.MonthItems = new List(); #region 用电量 var month_item_ed = new EtaLargeScreenKpiMonthItem(); month_item_ed.Name = "用电量"; month_item_ed.Unit = "度"; vm.MonthItems.Add(month_item_ed); month_item_ed.LastMonthRecords = new List(); for (int i = 0; i < DateTime.DaysInMonth(last_month_day.Year, last_month_day.Month); i++) { var record = new EtaLargeScreenKpiMonthItemRecord(); record.Day = i + 1; record.Value = 0; var last_month_day_sum_record = eta_sum_day_last_record_list?.Find(x => x.DataDay.Day == i + 1); if (last_month_day_sum_record != null) { record.Value = Math.Round(last_month_day_sum_record.Dt, 1); } month_item_ed.LastMonthRecords.Add(record); } month_item_ed.ThisMonthRecords = new List(); for (int i = 1; i < today.Day; i++) { var record = new EtaLargeScreenKpiMonthItemRecord(); record.Day = i; record.Value = 0; var this_month_day_sum_record = eta_sum_day_this_record_list?.Find(x => x.DataDay.Day == i); if (this_month_day_sum_record != null) { record.Value = Math.Round(this_month_day_sum_record.Dt, 1); } month_item_ed.ThisMonthRecords.Add(record); } #endregion #region 供水量 var month_item_ws = new EtaLargeScreenKpiMonthItem(); month_item_ws.Name = "供水量"; month_item_ws.Unit = "吨"; vm.MonthItems.Add(month_item_ws); month_item_ws.LastMonthRecords = new List(); for (int i = 0; i < DateTime.DaysInMonth(last_month_day.Year, last_month_day.Month); i++) { var record = new EtaLargeScreenKpiMonthItemRecord(); record.Day = i + 1; record.Value = 0; var last_month_day_sum_record = eta_sum_day_last_record_list?.Find(x => x.DataDay.Day == i + 1); if (last_month_day_sum_record != null) { record.Value = Math.Round(last_month_day_sum_record.Qt, 1); } month_item_ws.LastMonthRecords.Add(record); } month_item_ws.ThisMonthRecords = new List(); for (int i = 1; i < DateTime.Now.Day; i++) { var record = new EtaLargeScreenKpiMonthItemRecord(); record.Day = i; record.Value = 0; var this_month_day_sum_record = eta_sum_day_this_record_list?.Find(x => x.DataDay.Day == i); if (this_month_day_sum_record != null) { record.Value = Math.Round(this_month_day_sum_record.Qt, 1); } month_item_ws.ThisMonthRecords.Add(record); } #endregion #endregion #region 实时量 vm.RealItems = new List(); #region 瞬时流量 var vm_real_item_q = new EtaLargeScreenKpiRealItem(); vm_real_item_q.Name = "瞬时流量"; vm_real_item_q.Unit = "m³/h"; vm_real_item_q.LastRealRecords = new List(); vm_real_item_q.ThisRealRecords = new List(); vm.RealItems.Add(vm_real_item_q); #endregion #region 功率 var vm_real_item_p = new EtaLargeScreenKpiRealItem(); vm_real_item_p.Name = "瞬时功率"; vm_real_item_p.Unit = "kW"; vm_real_item_p.LastRealRecords = new List(); vm_real_item_p.ThisRealRecords = new List(); vm.RealItems.Add(vm_real_item_p); #endregion #region 效率 var vm_real_item_e = new EtaLargeScreenKpiRealItem(); vm_real_item_e.Name = "效率"; vm_real_item_e.Unit = "%"; vm_real_item_e.LastRealRecords = new List(); vm_real_item_e.ThisRealRecords = new List(); vm.RealItems.Add(vm_real_item_e); #endregion #region 千吨能耗 var vm_real_item_wp = new EtaLargeScreenKpiRealItem(); vm_real_item_wp.Name = "千吨能耗"; vm_real_item_wp.Unit = "kW·h/km³"; vm_real_item_wp.LastRealRecords = new List(); vm_real_item_wp.ThisRealRecords = new List(); vm.RealItems.Add(vm_real_item_wp); #endregion #region 单位能耗 var vm_real_item_uwp = new EtaLargeScreenKpiRealItem(); vm_real_item_uwp.Name = "单位能耗"; vm_real_item_uwp.Unit = "kW·h/km³/m"; vm_real_item_uwp.LastRealRecords = new List(); vm_real_item_uwp.ThisRealRecords = new List(); vm.RealItems.Add(vm_real_item_uwp); #endregion #region 记录 //昨日记录 if (eta_yestoday_record_list != null && eta_yestoday_record_list.Count > 0) { for (DateTime i = DateTime.Today.AddDays(-1).Date; i < DateTime.Today.Date; i = i.AddSeconds(120)) { var last_real_record = eta_yestoday_record_list.Find(t => t.DataTime >= i && t.DataTime < i.AddSeconds(120)); if (last_real_record != null) { //瞬时流量 var vm_real_item_record_q = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_q.Time = i.ToString("HH:mm:ss"); vm_real_item_record_q.Value = last_real_record.Qa; vm_real_item_q.LastRealRecords.Add(vm_real_item_record_q); //功率 var vm_real_item_record_p = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_p.Time = i.ToString("HH:mm:ss"); vm_real_item_record_p.Value = last_real_record.Pa; vm_real_item_p.LastRealRecords.Add(vm_real_item_record_p); //效率 var vm_real_item_record_e = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_e.Time = i.ToString("HH:mm:ss"); vm_real_item_record_e.Value = last_real_record.Ea; vm_real_item_e.LastRealRecords.Add(vm_real_item_record_e); //千吨能耗 var vm_real_item_record_wp = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_wp.Time = i.ToString("HH:mm:ss"); vm_real_item_record_wp.Value = last_real_record.WPa; vm_real_item_wp.LastRealRecords.Add(vm_real_item_record_wp); //单位能耗 var vm_real_item_record_uwp = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_uwp.Time = i.ToString("HH:mm:ss"); vm_real_item_record_uwp.Value = last_real_record.UWPa; vm_real_item_uwp.LastRealRecords.Add(vm_real_item_record_uwp); } } } //今日记录 if (eta_this_record_list != null && eta_this_record_list.Count > 0) { for (DateTime i = DateTime.Today.Date; i < DateTime.Now; i = i.AddSeconds(120)) { var this_real_record = eta_this_record_list.Find(t => t.DataTime >= i && t.DataTime < i.AddSeconds(120)); if (this_real_record != null) { //瞬时流量 var vm_real_item_record_q = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_q.Time = i.ToString("HH:mm:ss"); vm_real_item_record_q.Value = this_real_record.Qa; vm_real_item_q.ThisRealRecords.Add(vm_real_item_record_q); //功率 var vm_real_item_record_p = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_p.Time = i.ToString("HH:mm:ss"); vm_real_item_record_p.Value = this_real_record.Pa; vm_real_item_p.ThisRealRecords.Add(vm_real_item_record_p); //效率 var vm_real_item_record_e = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_e.Time = i.ToString("HH:mm:ss"); vm_real_item_record_e.Value = this_real_record.Ea; vm_real_item_e.ThisRealRecords.Add(vm_real_item_record_e); //千吨能耗 var vm_real_item_record_wp = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_wp.Time = i.ToString("HH:mm:ss"); vm_real_item_record_wp.Value = this_real_record.WPa; vm_real_item_wp.ThisRealRecords.Add(vm_real_item_record_wp); //单位能耗 var vm_real_item_record_uwp = new EtaLargeScreenKpiRealItemRecord(); vm_real_item_record_uwp.Time = i.ToString("HH:mm:ss"); vm_real_item_record_uwp.Value = this_real_record.UWPa; vm_real_item_uwp.ThisRealRecords.Add(vm_real_item_record_uwp); } } } #endregion #endregion return vm; } /// /// 修正日测点数据 (临时) /// [Route("RepairEtaDayRecordList")] [HttpGet] public bool RepairEtaDayRecordList([FromQuery] long CorpID, DateTime StartTime, DateTime EndTime) { var spanDays = (EndTime - StartTime).TotalDays; //获取业务区域 var logic_catalog_list = new Service.LogicCatalog().GetByCorpID(CorpID); if (logic_catalog_list == null || logic_catalog_list.Count < 1) return false; var service_EtaLogicRealRecord = new Service.EtaLogicRealRecord(); var service_EtaSumLogicRecord = new Service.EtaSumLogicRecord(); var service_EtaMultiRealRecord = new Service.EtaMultiRealRecord(); var service_EtaSumMultiRecord = new Service.EtaSumMultiRecord(); var service_EtaSingleRealRecord = new Service.EtaSingleRealRecord(); var service_EtaSumSingleRecord = new Service.EtaSumSingleRecord(); //遍历业务类别 foreach (var logicCataog in logic_catalog_list) { //获取业务清单 var logicTreeList = new Service.LogicTree().GetByCatalogID(CorpID, logicCataog.ID); if (logicTreeList == null || logicTreeList.Count < 1) continue; foreach (var logicTree in logicTreeList) { if (logicTree.LogicType == ObjectType.LogicArea) { for (int i = 0; i <= spanDays; i++) { var currentTime = StartTime.AddDays(i); var realRecordList = service_EtaLogicRealRecord.GetByObjectOfDay(CorpID, ObjectType.LogicArea, logicTree.LogicID, currentTime); if (realRecordList == null || realRecordList.Count < 1) continue; var cureentDayRecord = service_EtaSumLogicRecord.GetDayByObjectOfDay(CorpID, ObjectType.LogicArea, logicTree.LogicID, currentTime); var record = EtaSumLogicDayHelper.Sum(CorpID, ObjectType.LogicArea, logicTree.LogicID, currentTime, realRecordList); if (cureentDayRecord == null) { service_EtaSumLogicRecord.Insert(record); } else { service_EtaSumLogicRecord.Update(record); } } } else if (logicTree.LogicType == IStation.ObjectType.Station) { var station = new Service.Station().GetByID(CorpID, logicTree.LogicID); if (station == null) continue; for (int i = 0; i <= spanDays; i++) { var currentTime = StartTime.AddDays(i); var realRecordList = service_EtaMultiRealRecord.GetByObjectOfDay(CorpID, ObjectType.Station, station.ID, currentTime); if (realRecordList == null || realRecordList.Count < 1) continue; var cureentDayRecord = service_EtaSumMultiRecord.GetDayByObjectOfDay(CorpID, ObjectType.Station, station.ID, currentTime); var record = EtaSumMultiDayHelper.Sum(CorpID, ObjectType.Station, station.ID, currentTime, realRecordList); if (cureentDayRecord == null) { service_EtaSumMultiRecord.Inserts(record); } else { service_EtaSumMultiRecord.Updates(record); } } //获取管路 var pipeLineList = new Service.PipeLine().GetEnginePumpListByBelongTypeAndBelongID(CorpID, IStation.ObjectType.Station, station.ID); if (pipeLineList == null || pipeLineList.Count < 1) continue; foreach (var pipeLine in pipeLineList) { for (int i = 0; i <= spanDays; i++) { var currentTime = StartTime.AddDays(i); var realRecordList = service_EtaSingleRealRecord.GetByObjectOfDay(CorpID, ObjectType.PipeLine, pipeLine.ID, currentTime); if (realRecordList == null || realRecordList.Count < 1) continue; var cureentDayRecord = service_EtaSumSingleRecord.GetDayByObjectOfDay(CorpID, ObjectType.PipeLine, pipeLine.ID, currentTime); var record = EtaSumSingleDayHelper.Sum(CorpID, ObjectType.PipeLine, pipeLine.ID, currentTime, realRecordList); if (cureentDayRecord == null) { service_EtaSumSingleRecord.Insert(record); } else { service_EtaSumSingleRecord.Update(record); } } } } } } return true; } /// /// 修正泵站日测点数据 (临时) /// [Route("RepairEtaSumMultiRecordList")] [HttpGet] public bool RepairEtaSumMultiRecordList([FromQuery] long CorpID, long StationID, DateTime StartTime, DateTime EndTime) { var spanDays = (EndTime - StartTime).TotalDays; //获取业务区域 var logic_catalog_list = new Service.LogicCatalog().GetByCorpID(CorpID); if (logic_catalog_list == null || logic_catalog_list.Count < 1) return false; var service_eta= new Service.EtaMultiRealRecord(); var service_eta_sum = new Service.EtaSumMultiRecord(); for (int i = 0; i <= spanDays; i++) { var currentTime = StartTime.AddDays(i); var realRecordList = service_eta.GetByObjectOfDay(CorpID, ObjectType.Station, StationID, currentTime); if (realRecordList == null || realRecordList.Count < 1) continue; var cureentDayRecord = service_eta_sum.GetDayByObjectOfDay(CorpID, ObjectType.Station, StationID, currentTime); var records =EtaSumMultiDayHelper.Sum(CorpID, ObjectType.Station, StationID, currentTime, realRecordList); if (cureentDayRecord == null) { service_eta_sum.Inserts(records); } else { service_eta_sum.Updates(records); } } return true; } } }