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
|
{
|
/// <summary>
|
/// EtaAnalyLargeScreenKpi
|
/// </summary>
|
[Route("Eta/Analy/LargeScreenKpi")]
|
[ApiDescriptionSettings("Eta", Name = "能效大屏KPI分析", Order = 700)]
|
public class EtaAnalyLargeScreenKpi_Controller : IDynamicApiController
|
{
|
|
|
/// <summary>
|
/// 获取业务区域能效指标
|
/// </summary>
|
[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<EtaLargeScreenKpiItem>();
|
|
#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<EtaLargeScreenKpiRatioItem>();
|
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<EtaLargeScreenKpiYearItem>();
|
|
#region 用电量
|
|
var year_item_ed = new EtaLargeScreenKpiYearItem();
|
year_item_ed.Name = "用电量";
|
year_item_ed.Unit = "度";
|
year_item_ed.LastYearRecords = new List<EtaLargeScreenKpiYearItemRecord>();
|
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<EtaLargeScreenKpiYearItemRecord>();
|
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<EtaLargeScreenKpiYearItemRecord>();
|
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<EtaLargeScreenKpiYearItemRecord>();
|
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<EtaLargeScreenKpiMonthItem>();
|
|
#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<EtaLargeScreenKpiMonthItemRecord>();
|
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<EtaLargeScreenKpiMonthItemRecord>();
|
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<EtaLargeScreenKpiMonthItemRecord>();
|
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<EtaLargeScreenKpiMonthItemRecord>();
|
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<EtaLargeScreenKpiRealItem>();
|
|
#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<EtaLargeScreenKpiRealItemRecord>();
|
vm_real_item_q.ThisRealRecords = new List<EtaLargeScreenKpiRealItemRecord>();
|
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<EtaLargeScreenKpiRealItemRecord>();
|
vm_real_item_p.ThisRealRecords = new List<EtaLargeScreenKpiRealItemRecord>();
|
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<EtaLargeScreenKpiRealItemRecord>();
|
vm_real_item_e.ThisRealRecords = new List<EtaLargeScreenKpiRealItemRecord>();
|
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<EtaLargeScreenKpiRealItemRecord>();
|
vm_real_item_wp.ThisRealRecords = new List<EtaLargeScreenKpiRealItemRecord>();
|
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<EtaLargeScreenKpiRealItemRecord>();
|
vm_real_item_uwp.ThisRealRecords = new List<EtaLargeScreenKpiRealItemRecord>();
|
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;
|
}
|
|
|
/// <summary>
|
/// 修正业务区域日测点数据 (临时)
|
/// </summary>
|
[Route("RepairEtaDayRecordList")]
|
[HttpGet]
|
public bool RepairEtaDayRecordList([FromQuery] long CorpID, long LogicAreaID, DateTime StartTime, DateTime EndTime)
|
{
|
var corpId = CorpID;
|
var logicAreaId = LogicAreaID;
|
|
var service_eta = new Service.EtaLogicRealRecord();
|
var service_eta_sum = new Service.EtaSumLogicRecord();
|
|
var spanDays = (EndTime - StartTime).TotalDays;
|
var result = false;
|
for (int i = 0; i <= spanDays; i++)
|
{
|
var currentTime = StartTime.AddDays(i);
|
var realRecordList = service_eta.GetByObjectOfDay(corpId, ObjectType.LogicArea, logicAreaId, currentTime);
|
var cureentDayRecord = service_eta_sum.GetDayByObjectOfDay(corpId, ObjectType.LogicArea, logicAreaId, currentTime);
|
var record = EtaSumLogicDayHelper.Sum(corpId, ObjectType.LogicArea, logicAreaId, currentTime, realRecordList);
|
if (cureentDayRecord == null)
|
{
|
result = service_eta_sum.Insert(record) > 0;
|
}
|
else
|
{
|
result = service_eta_sum.Update(record);
|
}
|
}
|
|
return result;
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
}
|