940 lines
44 KiB
C#
940 lines
44 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Logging;
|
|
using SolarPower.Models;
|
|
using SolarPower.Models.PowerStation;
|
|
using SolarPower.Repository.Interface;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SolarPower.Controllers
|
|
{
|
|
public class AnalysisInverterController : MyBaseController<AnalysisInverterController>
|
|
{
|
|
|
|
private readonly IPowerStationRepository powerStationRepository;
|
|
|
|
public AnalysisInverterController(IPowerStationRepository powerStationRepository) : base()
|
|
{
|
|
this.powerStationRepository = powerStationRepository;
|
|
}
|
|
|
|
public IActionResult Index()
|
|
{
|
|
return View();
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult<Dictionary<string, Dictionary<string, List<PowerStationInverter>>>>> GetInverterCollapse(string filter)
|
|
{
|
|
ApiResult<Dictionary<string, Dictionary<string, List<PowerStationInverter>>>> apiResult = new ApiResult<Dictionary<string, Dictionary<string, List<PowerStationInverter>>>>();
|
|
try
|
|
{
|
|
var powerStations = new List<PowerStation>();
|
|
|
|
powerStations = myPowerStationService.GetMyPowerStations(myUser);
|
|
|
|
var siteDBNamePowerStationId = new Dictionary<string, List<int>>();
|
|
|
|
var powerStation_Group = powerStations.GroupBy(x => x.SiteDB).ToList();
|
|
foreach (var stations in powerStation_Group)
|
|
{
|
|
var powerStationIds = stations.Select(x => x.Id).ToList();
|
|
siteDBNamePowerStationId.Add(stations.Key, powerStationIds);
|
|
}
|
|
|
|
var powerStationInverters = await powerStationRepository.GetPowerStationInverter(siteDBNamePowerStationId, filter);
|
|
|
|
powerStationInverters = powerStationInverters.Where(x => x.InverterId != null).ToList();
|
|
|
|
var powerStationInverter_Group = powerStationInverters.GroupBy(x => x.CityName).ToList();
|
|
|
|
var inverterCollapse = new Dictionary<string, Dictionary<string, List<PowerStationInverter>>>();
|
|
foreach (var powerStationInverter in powerStationInverter_Group)
|
|
{
|
|
var inverter_Group = powerStationInverter.GroupBy(x => x.PowerStationName).ToList();
|
|
|
|
var inverterDic = new Dictionary<string, List<PowerStationInverter>>();
|
|
foreach (var inverter in inverter_Group)
|
|
{
|
|
inverterDic.Add(inverter.Key, inverter.ToList());
|
|
}
|
|
|
|
inverterCollapse.Add(powerStationInverter.Key, inverterDic);
|
|
}
|
|
|
|
apiResult.Code = "0000";
|
|
|
|
apiResult.Data = inverterCollapse;
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
apiResult.Code = "9999";
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】");
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
|
}
|
|
|
|
apiResult.Msg = errorCode.GetString(apiResult.Code);
|
|
return apiResult;
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult<AnalysisInverter>> GetAnalysisByInverterIds(PostAnalysisInverter post)
|
|
{
|
|
ApiResult<AnalysisInverter> apiResult = new ApiResult<AnalysisInverter>();
|
|
try
|
|
{
|
|
AnalysisInverter analysisInverter = new AnalysisInverter();
|
|
var inverterHistories = new List<InverterHistory>();
|
|
var stationIdWithInverterIdsList = new List<StationIdWithInverterIds>();
|
|
List<InverterHistoryInfo> series = new List<InverterHistoryInfo>();
|
|
var powerStation_Group = post.InverterIdInfos.GroupBy(x => x.PowerStationId).ToList();
|
|
|
|
if (post.SearchType == 0)
|
|
{ //單日
|
|
var StationCodeWithInverterIdsList = new List<StationCodeWithInverterIds>();
|
|
foreach (var ps in powerStation_Group)
|
|
{
|
|
var powerStation = await powerStationRepository.GetOneAsync(ps.Key);
|
|
//找出該電站所有日照計設備(包含共享
|
|
var deviceInfos = await powerStationRepository.GetListPyrheliometerByPowerStationId(powerStation.Id, powerStation.SiteDB);
|
|
|
|
|
|
StationCodeWithInverterIds stationCodeWithInverterIds = new StationCodeWithInverterIds();
|
|
stationCodeWithInverterIds.Sensor = deviceInfos.First().ColName;
|
|
stationCodeWithInverterIds.SiteDB = powerStation.SiteDB;
|
|
stationCodeWithInverterIds.Code = powerStation.Code;
|
|
stationCodeWithInverterIds.InverterIds = ps.Select(x => x.InverterId).ToList();
|
|
|
|
StationCodeWithInverterIdsList.Add(stationCodeWithInverterIds);
|
|
}
|
|
|
|
var date_start = Convert.ToDateTime(post.SelectedDate.Trim() + " 00:00:00");
|
|
var date_end = Convert.ToDateTime(post.SelectedDate.Trim() + " 23:59:59");
|
|
|
|
var start_timestamp = (long)date_start.Subtract(new DateTime(1970, 1, 1).AddHours(8)).TotalMilliseconds;
|
|
var end_timestamp = (long)date_end.Subtract(new DateTime(1970, 1, 1).AddHours(8)).TotalMilliseconds;
|
|
|
|
inverterHistories = await powerStationRepository.GetInverterHistoryRowData(start_timestamp, end_timestamp, StationCodeWithInverterIdsList);
|
|
|
|
analysisInverter.XAxis = inverterHistories.Select(x => x.TIMESTAMP).Distinct().ToList();
|
|
|
|
analysisInverter.MultipleYaxes = new Dictionary<string, string>(){
|
|
{ "IrrDay", "累積日照量"},
|
|
{ "DCKW", "直流功率 (kW)"},
|
|
{ "ACKW", "輸出功率 (kW)"},
|
|
{ "DC1V", "直流電壓1 (V)"},
|
|
{ "DC1A", "直流電流1 (A)"},
|
|
{ "DC1KW", "直流功率1 (kW)"},
|
|
{ "DC2V", "直流電壓2 (V)"},
|
|
{ "DC2A", "直流電流2 (A)"},
|
|
{ "DC2KW", "直流功率2 (kW)"},
|
|
{ "DC3V", "直流電壓3 (V)"},
|
|
{ "DC3A", "直流電流3 (A)"},
|
|
{ "DC3KW", "直流功率3 (kW)"},
|
|
{ "DC4V", "直流電壓4 (V)"},
|
|
{ "DC4A", "直流電流4 (A)"},
|
|
{ "DC4KW", "直流功率4 (kW)"},
|
|
{ "DC5V", "直流電壓5 (V)"},
|
|
{ "DC5A", "直流電流5 (A)"},
|
|
{ "DC5KW", "直流功率5 (kW)"},
|
|
{ "AC1V", "交流電壓A (V)"},
|
|
{ "AC2V", "交流電壓B (V)"},
|
|
{ "AC3V", "交流電壓C (V)"},
|
|
{ "AC1A", "交流電流A (A)"},
|
|
{ "AC2A", "交流電流B (A)"},
|
|
{ "AC3A", "交流電流C (A)"},
|
|
{ "PR", "PR"},
|
|
{ "RA1", "RA1 (%)"},
|
|
{ "RA2", "RA2 (%)"},
|
|
{ "RA3", "RA3 (%)"},
|
|
{ "RA4", "RA4 (%)"},
|
|
{ "RA5", "RA5 (%)"},
|
|
};
|
|
|
|
var inverterHistories_Group = inverterHistories.GroupBy(x => x.INVERTERID).ToList();
|
|
|
|
series = new List<InverterHistoryInfo>();
|
|
|
|
|
|
|
|
#region 比較欄位
|
|
foreach (var item in inverterHistories_Group)
|
|
{
|
|
var temp_item = item.OrderBy(x => x.TIMESTAMP).ToList();
|
|
|
|
InverterHistoryInfo IrrDay = new InverterHistoryInfo();
|
|
IrrDay.Name = string.Format("{0}:{1}", item.First().INVERTERName, "累積日照量");
|
|
IrrDay.YaxesKey = "IrrDay";
|
|
IrrDay.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
IrrDay.Values.Add(Math.Round(history.IrrDay, 2));
|
|
}
|
|
else
|
|
{
|
|
IrrDay.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(IrrDay);
|
|
|
|
|
|
InverterHistoryInfo DCKW = new InverterHistoryInfo();
|
|
DCKW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流功率 (kW)");
|
|
DCKW.YaxesKey = "DCKW";
|
|
DCKW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DCKW.Values.Add(Math.Round(history.DCKW, 2));
|
|
}
|
|
else
|
|
{
|
|
DCKW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DCKW);
|
|
|
|
InverterHistoryInfo ACKW = new InverterHistoryInfo();
|
|
ACKW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "輸出功率 (kW)");
|
|
ACKW.YaxesKey = "ACKW";
|
|
ACKW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
ACKW.Values.Add(Math.Round(history.ACKW, 2));
|
|
}
|
|
else
|
|
{
|
|
ACKW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(ACKW);
|
|
|
|
InverterHistoryInfo DC1V = new InverterHistoryInfo();
|
|
DC1V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電壓1 (V)");
|
|
DC1V.YaxesKey = "DC1V";
|
|
DC1V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC1V.Values.Add(Math.Round(history.DC1V, 2));
|
|
}
|
|
else
|
|
{
|
|
DC1V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC1V);
|
|
|
|
InverterHistoryInfo DC1A = new InverterHistoryInfo();
|
|
DC1A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電流1 (A)");
|
|
DC1A.YaxesKey = "DC1A";
|
|
DC1A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC1A.Values.Add(Math.Round(history.DC1A, 2));
|
|
}
|
|
else
|
|
{
|
|
DC1A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC1A);
|
|
|
|
InverterHistoryInfo DC1KW = new InverterHistoryInfo();
|
|
DC1KW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流功率1 (kW)");
|
|
DC1KW.YaxesKey = "DC1KW";
|
|
DC1KW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC1KW.Values.Add(Math.Round(history.DC1W / 1000, 2));
|
|
}
|
|
else
|
|
{
|
|
DC1KW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC1KW);
|
|
|
|
InverterHistoryInfo DC2V = new InverterHistoryInfo();
|
|
DC2V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電壓2 (V)");
|
|
DC2V.YaxesKey = "DC2V";
|
|
DC2V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC2V.Values.Add(Math.Round(history.DC2V, 2));
|
|
}
|
|
else
|
|
{
|
|
DC2V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC2V);
|
|
|
|
InverterHistoryInfo DC2A = new InverterHistoryInfo();
|
|
DC2A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電流2 (A)");
|
|
DC2A.YaxesKey = "DC2A";
|
|
DC2A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC2A.Values.Add(Math.Round(history.DC2A, 2));
|
|
}
|
|
else
|
|
{
|
|
DC2A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC2A);
|
|
|
|
InverterHistoryInfo DC2KW = new InverterHistoryInfo();
|
|
DC2KW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流功率2 (kW)");
|
|
DC2KW.YaxesKey = "DC2KW";
|
|
DC2KW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC2KW.Values.Add(Math.Round(history.DC2W / 1000, 2));
|
|
}
|
|
else
|
|
{
|
|
DC2KW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC2KW);
|
|
|
|
InverterHistoryInfo DC3V = new InverterHistoryInfo();
|
|
DC3V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電壓3 (V)");
|
|
DC3V.YaxesKey = "DC3V";
|
|
DC3V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC3V.Values.Add(Math.Round(history.DC3V, 2));
|
|
}
|
|
else
|
|
{
|
|
DC3V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC3V);
|
|
|
|
InverterHistoryInfo DC3A = new InverterHistoryInfo();
|
|
DC3A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電流3 (A)");
|
|
DC3A.YaxesKey = "DC3A";
|
|
DC3A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC3A.Values.Add(Math.Round(history.DC3A, 2));
|
|
}
|
|
else
|
|
{
|
|
DC3A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC3A);
|
|
|
|
InverterHistoryInfo DC3KW = new InverterHistoryInfo();
|
|
DC3KW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流功率3 (kW)");
|
|
DC3KW.YaxesKey = "DC3KW";
|
|
DC3KW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC3KW.Values.Add(Math.Round(history.DC3W / 1000, 2));
|
|
}
|
|
else
|
|
{
|
|
DC3KW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC3KW);
|
|
|
|
InverterHistoryInfo DC4V = new InverterHistoryInfo();
|
|
DC4V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電壓4 (V)");
|
|
DC4V.YaxesKey = "DC4V";
|
|
DC4V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC4V.Values.Add(Math.Round(history.DC4V, 2));
|
|
}
|
|
else
|
|
{
|
|
DC4V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC4V);
|
|
|
|
InverterHistoryInfo DC4A = new InverterHistoryInfo();
|
|
DC4A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電流4 (A)");
|
|
DC4A.YaxesKey = "DC4A";
|
|
DC4A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC4A.Values.Add(Math.Round(history.DC4A, 2));
|
|
}
|
|
else
|
|
{
|
|
DC4A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC4A);
|
|
|
|
InverterHistoryInfo DC4KW = new InverterHistoryInfo();
|
|
DC4KW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流功率4 (kW)");
|
|
DC4KW.YaxesKey = "DC4KW";
|
|
DC4KW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC4KW.Values.Add(Math.Round(history.DC4W / 1000, 2));
|
|
}
|
|
else
|
|
{
|
|
DC4KW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC4KW);
|
|
|
|
InverterHistoryInfo DC5V = new InverterHistoryInfo();
|
|
DC5V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電壓5 (V)");
|
|
DC5V.YaxesKey = "DC5V";
|
|
DC5V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC5V.Values.Add(Math.Round(history.DC5V, 2));
|
|
}
|
|
else
|
|
{
|
|
DC5V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC5V);
|
|
|
|
InverterHistoryInfo DC5A = new InverterHistoryInfo();
|
|
DC5A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流電流5 (A)");
|
|
DC5A.YaxesKey = "DC5A";
|
|
DC5A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC5A.Values.Add(Math.Round(history.DC5A, 2));
|
|
}
|
|
else
|
|
{
|
|
DC5A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC5A);
|
|
|
|
InverterHistoryInfo DC5KW = new InverterHistoryInfo();
|
|
DC5KW.Name = string.Format("{0}:{1}", item.First().INVERTERName, "直流功率5 (kW)");
|
|
DC5KW.YaxesKey = "DC5KW";
|
|
DC5KW.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
DC5KW.Values.Add(Math.Round(history.DC5W / 1000, 2));
|
|
}
|
|
else
|
|
{
|
|
DC5KW.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(DC5KW);
|
|
|
|
InverterHistoryInfo AC1V = new InverterHistoryInfo();
|
|
AC1V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "交流電壓A (V)");
|
|
AC1V.YaxesKey = "AC1V";
|
|
AC1V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
AC1V.Values.Add(Math.Round(history.AC1V, 2));
|
|
}
|
|
else
|
|
{
|
|
AC1V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(AC1V);
|
|
|
|
InverterHistoryInfo AC2V = new InverterHistoryInfo();
|
|
AC2V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "交流電壓B (V)");
|
|
AC2V.YaxesKey = "AC2V";
|
|
AC2V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
AC2V.Values.Add(Math.Round(history.AC2V, 2));
|
|
}
|
|
else
|
|
{
|
|
AC2V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(AC2V);
|
|
|
|
InverterHistoryInfo AC3V = new InverterHistoryInfo();
|
|
AC3V.Name = string.Format("{0}:{1}", item.First().INVERTERName, "交流電壓C (V)");
|
|
AC3V.YaxesKey = "AC3V";
|
|
AC3V.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
AC3V.Values.Add(Math.Round(history.AC3V, 2));
|
|
}
|
|
else
|
|
{
|
|
AC3V.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(AC3V);
|
|
|
|
InverterHistoryInfo AC1A = new InverterHistoryInfo();
|
|
AC1A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "交流電流A (A)");
|
|
AC1A.YaxesKey = "AC1A";
|
|
AC1A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
AC1A.Values.Add(Math.Round(history.AC1A, 2));
|
|
}
|
|
else
|
|
{
|
|
AC1A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(AC1A);
|
|
|
|
InverterHistoryInfo AC2A = new InverterHistoryInfo();
|
|
AC2A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "交流電流B (A)");
|
|
AC2A.YaxesKey = "AC2A";
|
|
AC2A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
AC2A.Values.Add(Math.Round(history.AC2A, 2));
|
|
}
|
|
else
|
|
{
|
|
AC2A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(AC2A);
|
|
|
|
InverterHistoryInfo AC3A = new InverterHistoryInfo();
|
|
AC3A.Name = string.Format("{0}:{1}", item.First().INVERTERName, "交流電流C (A)");
|
|
AC3A.YaxesKey = "AC3A";
|
|
AC3A.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
AC3A.Values.Add(Math.Round(history.AC3A, 2));
|
|
}
|
|
else
|
|
{
|
|
AC3A.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(AC3A);
|
|
|
|
InverterHistoryInfo PR = new InverterHistoryInfo();
|
|
PR.Name = string.Format("{0}:{1}", item.First().INVERTERName, "PR");
|
|
PR.YaxesKey = "PR";
|
|
PR.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
PR.Values.Add(Math.Round(history.PR, 2));
|
|
}
|
|
else
|
|
{
|
|
PR.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(PR);
|
|
|
|
InverterHistoryInfo RA1 = new InverterHistoryInfo();
|
|
RA1.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA1 (%)");
|
|
RA1.YaxesKey = "RA1";
|
|
RA1.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA1.Values.Add(Math.Round(history.RA1, 2));
|
|
}
|
|
else
|
|
{
|
|
RA1.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA1);
|
|
|
|
InverterHistoryInfo RA2 = new InverterHistoryInfo();
|
|
RA2.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA2 (%)");
|
|
RA2.YaxesKey = "RA2";
|
|
RA2.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA2.Values.Add(Math.Round(history.RA2, 2));
|
|
}
|
|
else
|
|
{
|
|
RA2.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA2);
|
|
|
|
InverterHistoryInfo RA3 = new InverterHistoryInfo();
|
|
RA3.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA3 (%)");
|
|
RA3.YaxesKey = "RA3";
|
|
RA3.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA3.Values.Add(Math.Round(history.RA3, 2));
|
|
}
|
|
else
|
|
{
|
|
RA3.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA3);
|
|
|
|
InverterHistoryInfo RA4 = new InverterHistoryInfo();
|
|
RA4.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA4 (%)");
|
|
RA4.YaxesKey = "RA4";
|
|
RA4.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA4.Values.Add(Math.Round(history.RA4, 2));
|
|
}
|
|
else
|
|
{
|
|
RA4.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA4);
|
|
|
|
InverterHistoryInfo RA5 = new InverterHistoryInfo();
|
|
RA5.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA5 (%)");
|
|
RA5.YaxesKey = "RA5";
|
|
RA5.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA5.Values.Add(Math.Round(history.RA5, 2));
|
|
}
|
|
else
|
|
{
|
|
RA5.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA5);
|
|
|
|
}
|
|
#endregion
|
|
analysisInverter.Series = series;
|
|
}
|
|
else
|
|
{ //日區間、月、年
|
|
stationIdWithInverterIdsList = new List<StationIdWithInverterIds>();
|
|
foreach (var ps in powerStation_Group)
|
|
{
|
|
var powerStation = await powerStationRepository.GetOneAsync(ps.Key);
|
|
|
|
StationIdWithInverterIds stationIdWithInverterIds = new StationIdWithInverterIds();
|
|
stationIdWithInverterIds.PowerStationId = ps.Key;
|
|
stationIdWithInverterIds.SiteDBName = powerStation.SiteDB;
|
|
stationIdWithInverterIds.InverterIds = ps.Select(x => x.InverterId).ToList();
|
|
|
|
stationIdWithInverterIdsList.Add(stationIdWithInverterIds);
|
|
}
|
|
|
|
switch (post.SearchType)
|
|
{
|
|
case 1:
|
|
|
|
var date_split = post.SelectedDate.Split('-');
|
|
inverterHistories = await powerStationRepository.GetInverterHistoryByDate(date_split[0].Trim(), date_split[1].Trim(), stationIdWithInverterIdsList);
|
|
break;
|
|
case 2:
|
|
|
|
var startDate = Convert.ToDateTime(post.SelectedDate).ToString("yyyy-MM-dd");
|
|
var endDate = Convert.ToDateTime(post.SelectedDate).AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd");
|
|
|
|
inverterHistories = await powerStationRepository.GetInverterHistoryByDate(startDate, endDate, stationIdWithInverterIdsList);
|
|
break;
|
|
case 3:
|
|
|
|
var year = post.SelectedDate;
|
|
|
|
inverterHistories = await powerStationRepository.GetInverterHistoryByYear(year, stationIdWithInverterIdsList);
|
|
|
|
break;
|
|
}
|
|
|
|
analysisInverter.XAxis = inverterHistories.Select(x => x.TIMESTAMP).Distinct().ToList();
|
|
analysisInverter.MultipleYaxes = new Dictionary<string, string>(){
|
|
{ "IrrDay", "累積日照量"},
|
|
{ "KWH", "KWH"},
|
|
{ "TodayKWH", "TodayKWH"},
|
|
{ "TotalKWH", "TotalKWH"},
|
|
{ "PR", "PR"},
|
|
{ "RA1", "RA1 (%)"},
|
|
{ "RA2", "RA2 (%)"},
|
|
{ "RA3", "RA3 (%)"},
|
|
{ "RA4", "RA4 (%)"},
|
|
{ "RA5", "RA5 (%)"},
|
|
};
|
|
|
|
var inverterHistoriesDay_Group = inverterHistories.GroupBy(x => x.INVERTERID).ToList();
|
|
|
|
#region 比較欄位
|
|
foreach (var item in inverterHistoriesDay_Group)
|
|
{
|
|
var temp_item = item.OrderBy(x => x.TIMESTAMP).ToList();
|
|
|
|
InverterHistoryInfo IrrDay = new InverterHistoryInfo();
|
|
IrrDay.Name = string.Format("{0}:{1}", item.First().INVERTERName, "累積日照量");
|
|
IrrDay.YaxesKey = "IrrDay";
|
|
IrrDay.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
IrrDay.Values.Add(Math.Round(history.IrrDay, 2));
|
|
}
|
|
else
|
|
{
|
|
IrrDay.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(IrrDay);
|
|
|
|
InverterHistoryInfo KWH = new InverterHistoryInfo();
|
|
KWH.Name = string.Format("{0}:{1}", item.First().INVERTERName, "KWH");
|
|
KWH.YaxesKey = "KWH";
|
|
KWH.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
KWH.Values.Add(Math.Round(history.KWH, 2));
|
|
}
|
|
else
|
|
{
|
|
KWH.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(KWH);
|
|
|
|
InverterHistoryInfo TodayKWH = new InverterHistoryInfo();
|
|
TodayKWH.Name = string.Format("{0}:{1}", item.First().INVERTERName, "TodayKWH");
|
|
TodayKWH.YaxesKey = "TodayKWH";
|
|
TodayKWH.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
TodayKWH.Values.Add(Math.Round(history.TODAYKWH, 2));
|
|
}
|
|
else
|
|
{
|
|
TodayKWH.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(TodayKWH);
|
|
|
|
InverterHistoryInfo TotalKWH = new InverterHistoryInfo();
|
|
TotalKWH.Name = string.Format("{0}:{1}", item.First().INVERTERName, "TotalKWH");
|
|
TotalKWH.YaxesKey = "TotalKWH";
|
|
TotalKWH.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
TotalKWH.Values.Add(Math.Round(history.TOTALKWH, 2));
|
|
}
|
|
else
|
|
{
|
|
TotalKWH.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(TotalKWH);
|
|
|
|
|
|
InverterHistoryInfo PR = new InverterHistoryInfo();
|
|
PR.Name = string.Format("{0}:{1}", item.First().INVERTERName, "PR");
|
|
PR.YaxesKey = "PR";
|
|
PR.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
PR.Values.Add(Math.Round(history.PR, 2));
|
|
}
|
|
else
|
|
{
|
|
PR.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(PR);
|
|
|
|
InverterHistoryInfo RA1 = new InverterHistoryInfo();
|
|
RA1.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA1 (%)");
|
|
RA1.YaxesKey = "RA1";
|
|
RA1.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA1.Values.Add(Math.Round(history.RA1, 2));
|
|
}
|
|
else
|
|
{
|
|
RA1.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA1);
|
|
|
|
InverterHistoryInfo RA2 = new InverterHistoryInfo();
|
|
RA2.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA2 (%)");
|
|
RA2.YaxesKey = "RA2";
|
|
RA2.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA2.Values.Add(Math.Round(history.RA2, 2));
|
|
}
|
|
else
|
|
{
|
|
RA2.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA2);
|
|
|
|
InverterHistoryInfo RA3 = new InverterHistoryInfo();
|
|
RA3.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA3 (%)");
|
|
RA3.YaxesKey = "RA3";
|
|
RA3.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA3.Values.Add(Math.Round(history.RA3, 2));
|
|
}
|
|
else
|
|
{
|
|
RA3.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA3);
|
|
|
|
InverterHistoryInfo RA4 = new InverterHistoryInfo();
|
|
RA4.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA4 (%)");
|
|
RA4.YaxesKey = "RA4";
|
|
RA4.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA4.Values.Add(Math.Round(history.RA4, 2));
|
|
}
|
|
else
|
|
{
|
|
RA4.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA4);
|
|
|
|
InverterHistoryInfo RA5 = new InverterHistoryInfo();
|
|
RA5.Name = string.Format("{0}:{1}", item.First().INVERTERName, "RA5 (%)");
|
|
RA5.YaxesKey = "RA5";
|
|
RA5.Values = new List<double>();
|
|
foreach (var history in temp_item)
|
|
{
|
|
if (analysisInverter.XAxis.IndexOf(history.TIMESTAMP) > -1)
|
|
{
|
|
RA5.Values.Add(Math.Round(history.RA5, 2));
|
|
}
|
|
else
|
|
{
|
|
RA5.Values.Add(0);
|
|
}
|
|
}
|
|
series.Add(RA5);
|
|
|
|
}
|
|
#endregion
|
|
analysisInverter.Series = series;
|
|
}
|
|
|
|
apiResult.Code = "0000";
|
|
|
|
apiResult.Data = analysisInverter;
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
if(exception.Message == "Fatal error encountered during command execution.")
|
|
{
|
|
apiResult.Code = "9984";
|
|
}
|
|
else
|
|
{
|
|
apiResult.Code = "9999";
|
|
}
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】");
|
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
|
}
|
|
|
|
apiResult.Msg = errorCode.GetString(apiResult.Code);
|
|
return apiResult;
|
|
}
|
|
}
|
|
}
|