Merge branch 'master' of https://github.com/shanghohui-Company/SolarPower
This commit is contained in:
commit
9c5c9ca84c
@ -110,7 +110,13 @@ namespace SolarPower.Controllers
|
||||
StationCodeWithInverterIdsList.Add(stationCodeWithInverterIds);
|
||||
}
|
||||
|
||||
inverterHistories = await powerStationRepository.GetInverterHistoryRowData(post.SelectedDate, StationCodeWithInverterIdsList);
|
||||
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();
|
||||
|
||||
|
||||
@ -74,7 +74,7 @@ namespace SolarPower.Controllers
|
||||
temp.Add(powerStation);
|
||||
foreach (var device in psName_Group)
|
||||
{
|
||||
if(!string.IsNullOrEmpty(device.DeviceId))
|
||||
if (!string.IsNullOrEmpty(device.DeviceId))
|
||||
{
|
||||
temp.Add(device);
|
||||
}
|
||||
@ -114,13 +114,17 @@ namespace SolarPower.Controllers
|
||||
Dictionary<int, List<Device>> deviceDic = new Dictionary<int, List<Device>>();
|
||||
List<StationIdWithMeterIds> meterDic = new List<StationIdWithMeterIds>();
|
||||
List<int> selected_powerStationIds = new List<int>();
|
||||
|
||||
List<PowerStationHistory> powerStationHistories = new List<PowerStationHistory>();
|
||||
List<MeterHistory> meterHistories = new List<MeterHistory>();
|
||||
|
||||
foreach (var psId_Group in device_powerStationId_Group)
|
||||
{
|
||||
var powerStation = await powerStationRepository.GetOneAsync(psId_Group.Key);
|
||||
|
||||
//區分電站總覽or設備
|
||||
var temp_psIds = psId_Group.Where(x => x.DeviceType == "PWS").Select(x => Convert.ToInt32(x.DeviceId)).ToList();
|
||||
if(temp_psIds.Count() > 0)
|
||||
if (temp_psIds.Count() > 0)
|
||||
{
|
||||
selected_powerStationIds.AddRange(temp_psIds);
|
||||
}
|
||||
@ -170,13 +174,41 @@ namespace SolarPower.Controllers
|
||||
|
||||
var XAxis = new List<string>();
|
||||
|
||||
#region 電站資料
|
||||
//針對x軸先進行處理,並同時抓取資料
|
||||
if (selected_powerStationIds.Count() > 0)
|
||||
{
|
||||
var powerStationHistories = await powerStationRepository.GetPowerStationHistory(post.SelectedDate, post.SearchType, selected_powerStationIds);
|
||||
powerStationHistories = await powerStationRepository.GetPowerStationHistory(post.SelectedDate, post.SearchType, selected_powerStationIds);
|
||||
|
||||
XAxis.AddRange(powerStationHistories.Select(x => x.Timestamp).Distinct().ToList());
|
||||
}
|
||||
if (meterDic.Count() > 0)
|
||||
{
|
||||
meterHistories = await powerStationRepository.GetMeterHistory(post.SelectedDate, post.SearchType, meterDic);
|
||||
|
||||
XAxis.AddRange(meterHistories.Select(x => x.TIMESTAMP).Distinct().ToList());
|
||||
}
|
||||
if (deviceDic.Count > 0)
|
||||
{
|
||||
foreach (var devices in deviceDic)
|
||||
{
|
||||
var result = await powerStationRepository.GetSensorAvgByDevices(post.SelectedDate, post.SearchType, devices.Value);
|
||||
|
||||
foreach (var rows in result)
|
||||
{
|
||||
var fields = rows as IDictionary<string, object>;
|
||||
XAxis.Add(fields["TIMESTAMP"].ToString());
|
||||
}
|
||||
|
||||
}
|
||||
XAxis = XAxis.Distinct().ToList();
|
||||
}
|
||||
XAxis.Sort();
|
||||
|
||||
analysisDevice.XAxis = XAxis;
|
||||
|
||||
#region 電站資料
|
||||
if (powerStationHistories.Count() > 0)
|
||||
{
|
||||
var powerStationHistories_Id_Group = powerStationHistories.GroupBy(x => x.PowerStationId).ToList();
|
||||
|
||||
foreach (var item in powerStationHistories_Id_Group)
|
||||
@ -185,32 +217,36 @@ namespace SolarPower.Controllers
|
||||
|
||||
var temp_item = item.OrderBy(x => x.Timestamp).ToList();
|
||||
|
||||
DeviceHistoryInfo Irradiance = new DeviceHistoryInfo();
|
||||
Irradiance.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["Irradiance"]);
|
||||
Irradiance.YaxesKey = "Irradiance";
|
||||
Irradiance.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
{
|
||||
if (XAxis.IndexOf(history.Timestamp) > -1)
|
||||
{
|
||||
Irradiance.Values.Add(history.Irradiance);
|
||||
}
|
||||
else
|
||||
{
|
||||
Irradiance.Values.Add(0);
|
||||
}
|
||||
}
|
||||
analysisDevice.Series.Add(Irradiance);
|
||||
//DeviceHistoryInfo Irradiance = new DeviceHistoryInfo();
|
||||
//Irradiance.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["Irradiance"]);
|
||||
//Irradiance.YaxesKey = "Irradiance";
|
||||
//Irradiance.Values = new List<double>();
|
||||
//foreach (var xa in XAxis)
|
||||
//{
|
||||
// var history = temp_item.Where(x => xa == x.Timestamp).FirstOrDefault();
|
||||
|
||||
// if (history != null)
|
||||
// {
|
||||
// Irradiance.Values.Add(history.Irradiance);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Irradiance.Values.Add(0);
|
||||
// }
|
||||
//}
|
||||
//analysisDevice.Series.Add(Irradiance);
|
||||
|
||||
DeviceHistoryInfo KWH = new DeviceHistoryInfo();
|
||||
KWH.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["KWH"]);
|
||||
KWH.YaxesKey = "KWH";
|
||||
KWH.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.Timestamp) > -1)
|
||||
var history = temp_item.Where(x => xa == x.Timestamp).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
KWH.Values.Add(Math.Round(history.KWH, 2));
|
||||
KWH.Values.Add(history.KWH);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -223,9 +259,11 @@ namespace SolarPower.Controllers
|
||||
solarHour.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["SolarHour"]);
|
||||
solarHour.YaxesKey = "SolarHour";
|
||||
solarHour.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.Timestamp) > -1)
|
||||
var history = temp_item.Where(x => xa == x.Timestamp).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
solarHour.Values.Add(Math.Round(history.SolarHour, 2));
|
||||
}
|
||||
@ -240,9 +278,11 @@ namespace SolarPower.Controllers
|
||||
KWHKWP.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["KWHKWP"]);
|
||||
KWHKWP.YaxesKey = "KWHKWP";
|
||||
KWHKWP.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.Timestamp) > -1)
|
||||
var history = temp_item.Where(x => xa == x.Timestamp).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
KWHKWP.Values.Add(Math.Round(history.KWHKWP, 2));
|
||||
}
|
||||
@ -257,9 +297,11 @@ namespace SolarPower.Controllers
|
||||
PR.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["PR"]);
|
||||
PR.YaxesKey = "PR";
|
||||
PR.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.Timestamp) > -1)
|
||||
var history = temp_item.Where(x => xa == x.Timestamp).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
PR.Values.Add(Math.Round(history.PR, 2));
|
||||
}
|
||||
@ -270,33 +312,31 @@ namespace SolarPower.Controllers
|
||||
}
|
||||
analysisDevice.Series.Add(PR);
|
||||
|
||||
DeviceHistoryInfo modelTemperature = new DeviceHistoryInfo();
|
||||
modelTemperature.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["Temperature"]);
|
||||
modelTemperature.YaxesKey = "Temperature";
|
||||
modelTemperature.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
{
|
||||
if (XAxis.IndexOf(history.Timestamp) > -1)
|
||||
{
|
||||
modelTemperature.Values.Add(Math.Round(history.Temperature, 2));
|
||||
}
|
||||
else
|
||||
{
|
||||
modelTemperature.Values.Add(0);
|
||||
}
|
||||
}
|
||||
analysisDevice.Series.Add(modelTemperature);
|
||||
//DeviceHistoryInfo modelTemperature = new DeviceHistoryInfo();
|
||||
//modelTemperature.Name = string.Format("{0}:{1}", powerStation.Name, analysisDevice.MultipleYaxes["Temperature"]);
|
||||
//modelTemperature.YaxesKey = "Temperature";
|
||||
//modelTemperature.Values = new List<double>();
|
||||
//foreach (var xa in XAxis)
|
||||
//{
|
||||
// var history = temp_item.Where(x => xa == x.Timestamp).FirstOrDefault();
|
||||
|
||||
// if (history != null)
|
||||
// {
|
||||
// modelTemperature.Values.Add(Math.Round(history.Temperature, 2));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// modelTemperature.Values.Add(0);
|
||||
// }
|
||||
//}
|
||||
//analysisDevice.Series.Add(modelTemperature);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 電錶資料
|
||||
if (meterDic.Count() > 0)
|
||||
if (meterHistories.Count() > 0)
|
||||
{
|
||||
var meterHistories = await powerStationRepository.GetMeterHistory(post.SelectedDate, post.SearchType, meterDic);
|
||||
|
||||
XAxis.AddRange(meterHistories.Select(x => x.TIMESTAMP).Distinct().ToList());
|
||||
|
||||
var meterHistories_Id_Group = meterHistories.GroupBy(x => x.METERID).ToList();
|
||||
|
||||
foreach (var item in meterHistories_Id_Group)
|
||||
@ -307,9 +347,11 @@ namespace SolarPower.Controllers
|
||||
OUTPUT_KWH.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["OUTPUT_KWH"]);
|
||||
OUTPUT_KWH.YaxesKey = "OUTPUT_KWH";
|
||||
OUTPUT_KWH.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
OUTPUT_KWH.Values.Add(Math.Round(history.OUTPUT_KWH, 2));
|
||||
}
|
||||
@ -324,9 +366,11 @@ namespace SolarPower.Controllers
|
||||
INPUT_KWH.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["INPUT_KWH"]);
|
||||
INPUT_KWH.YaxesKey = "INPUT_KWH";
|
||||
INPUT_KWH.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
INPUT_KWH.Values.Add(Math.Round(history.INPUT_KWH, 2));
|
||||
}
|
||||
@ -341,9 +385,11 @@ namespace SolarPower.Controllers
|
||||
V_AB.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["V_AB"]);
|
||||
V_AB.YaxesKey = "V_AB";
|
||||
V_AB.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
V_AB.Values.Add(Math.Round(history.V_AB, 2));
|
||||
}
|
||||
@ -358,9 +404,11 @@ namespace SolarPower.Controllers
|
||||
V_BC.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["V_BC"]);
|
||||
V_BC.YaxesKey = "V_BC";
|
||||
V_BC.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
V_BC.Values.Add(Math.Round(history.V_BC, 2));
|
||||
}
|
||||
@ -375,9 +423,11 @@ namespace SolarPower.Controllers
|
||||
V_CA.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["V_BC"]);
|
||||
V_CA.YaxesKey = "V_CA";
|
||||
V_CA.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
V_CA.Values.Add(Math.Round(history.V_CA, 2));
|
||||
}
|
||||
@ -392,9 +442,11 @@ namespace SolarPower.Controllers
|
||||
I_A.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["I_A"]);
|
||||
I_A.YaxesKey = "I_A";
|
||||
I_A.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
I_A.Values.Add(Math.Round(history.I_A, 2));
|
||||
}
|
||||
@ -409,9 +461,11 @@ namespace SolarPower.Controllers
|
||||
I_B.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["I_B"]);
|
||||
I_B.YaxesKey = "I_B";
|
||||
I_B.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
I_B.Values.Add(Math.Round(history.I_B, 2));
|
||||
}
|
||||
@ -426,9 +480,11 @@ namespace SolarPower.Controllers
|
||||
I_C.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["I_C"]);
|
||||
I_C.YaxesKey = "I_C";
|
||||
I_C.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
I_C.Values.Add(Math.Round(history.I_C, 2));
|
||||
}
|
||||
@ -443,9 +499,11 @@ namespace SolarPower.Controllers
|
||||
P.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["P"]);
|
||||
P.YaxesKey = "P";
|
||||
P.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
P.Values.Add(Math.Round(history.P, 2));
|
||||
}
|
||||
@ -460,9 +518,11 @@ namespace SolarPower.Controllers
|
||||
F.Name = string.Format("{0}:{1}", item.Key, analysisDevice.MultipleYaxes["F"]);
|
||||
F.YaxesKey = "F";
|
||||
F.Values = new List<double>();
|
||||
foreach (var history in temp_item)
|
||||
foreach (var xa in XAxis)
|
||||
{
|
||||
if (XAxis.IndexOf(history.TIMESTAMP) > -1)
|
||||
var history = temp_item.Where(x => xa == x.TIMESTAMP).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
F.Values.Add(Math.Round(history.F, 2));
|
||||
}
|
||||
@ -483,13 +543,7 @@ namespace SolarPower.Controllers
|
||||
{
|
||||
var result = await powerStationRepository.GetSensorAvgByDevices(post.SelectedDate, post.SearchType, devices.Value);
|
||||
|
||||
foreach (var rows in result)
|
||||
{
|
||||
var fields = rows as IDictionary<string, object>;
|
||||
XAxis.Add(fields["TIMESTAMP"].ToString());
|
||||
}
|
||||
|
||||
|
||||
var powerStation = await powerStationRepository.GetOneAsync(devices.Key);
|
||||
foreach (var device in devices.Value)
|
||||
{
|
||||
DeviceHistoryInfo deviceHistoryInfo = new DeviceHistoryInfo();
|
||||
@ -525,7 +579,7 @@ namespace SolarPower.Controllers
|
||||
suffix = string.Empty;
|
||||
break;
|
||||
}
|
||||
deviceHistoryInfo.Name = string.Format("{0}:{1}", device.Name, suffix);
|
||||
deviceHistoryInfo.Name = string.Format("{0}:{1}({2})", powerStation.Name, device.Name, suffix);
|
||||
deviceHistoryInfo.YaxesKey = YaxesKey;
|
||||
deviceHistoryInfo.Values = new List<double>();
|
||||
foreach (var rows in result)
|
||||
@ -546,10 +600,7 @@ namespace SolarPower.Controllers
|
||||
}
|
||||
#endregion
|
||||
|
||||
analysisDevice.XAxis = XAxis.Distinct().ToList();
|
||||
|
||||
apiResult.Code = "0000";
|
||||
|
||||
apiResult.Data = analysisDevice;
|
||||
}
|
||||
catch (Exception exception)
|
||||
|
||||
@ -3289,6 +3289,20 @@ namespace SolarPower.Controllers
|
||||
}
|
||||
else
|
||||
{
|
||||
//檢查資料表是否有該欄位
|
||||
var check_inv_col = await powerStationRepository.CheckInvTableColumn(powerStation.SiteDB, powerStation.Code);
|
||||
var check_sensor_avg_col = await powerStationRepository.CheckSensorAvgTableColumn(powerStation.SiteDB, powerStation.Code);
|
||||
|
||||
if (check_inv_col != 1)
|
||||
{
|
||||
await powerStationRepository.AlertColInvTableColumn(powerStation.SiteDB, powerStation.Code);
|
||||
}
|
||||
|
||||
if (check_sensor_avg_col != 1)
|
||||
{
|
||||
await powerStationRepository.AlertColSensoravgTableColumn(powerStation.SiteDB, powerStation.Code);
|
||||
}
|
||||
|
||||
await powerStationRepository.StationStatus(Id, 1);
|
||||
await powerStationRepository.StationStatus(Id, 1, powerStation.SiteDB + ".");
|
||||
apiResult.Msg = "電站啟用成功";
|
||||
|
||||
@ -793,7 +793,7 @@ namespace SolarPower.Quartz.Jobs
|
||||
var end_date = DateTimeNow.AddDays(-1);
|
||||
logger.LogInformation("【CalcAvgPowerStationJob】【開始執行補償機制】");
|
||||
procSensorSvc sensorSvc = new procSensorSvc(Connection_string);
|
||||
procInvSvc invSvc = new procInvSvc(Connection_string);
|
||||
procInvSvc invSvc = new procInvSvc(Connection_string, logger);
|
||||
procStationSvc siteSvc = new procStationSvc(Connection_string);
|
||||
foreach (var powerStation in powerStations)
|
||||
{
|
||||
@ -869,196 +869,7 @@ namespace SolarPower.Quartz.Jobs
|
||||
logger.LogInformation("【CalcAvgPowerStationJob】【執行完成補償機制】");
|
||||
#endregion
|
||||
|
||||
#region 寄送日月報
|
||||
var users = userRepository.GetAllAsync();
|
||||
var ttt = new List<string>() {
|
||||
"s506488@gmail.com",
|
||||
"cesarliuc@gmail.com"
|
||||
};
|
||||
|
||||
foreach (var user in users.Result)
|
||||
{
|
||||
try
|
||||
{
|
||||
logger.LogInformation("【CalcAvgPowerStationJob】【開始產生使用者[{0}({1})]的日月報】", user.Account, user.Name);
|
||||
|
||||
List<OperationPersonnel> powerstations = new List<OperationPersonnel>();
|
||||
powerstations = await noticeScheduleRepository.GetPowerStationOperationPersonnel(user.Id);
|
||||
if (powerstations.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
List<Excelpowerstation> sentdaypowerstations = powerstations.Where(x => x.EmailDayReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList();
|
||||
List<Excelpowerstation> sentMaxpowerstations = powerstations.Where(x => x.EmailComplexReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList();
|
||||
|
||||
Controllers.StationReportController stationReportController = new Controllers.StationReportController(powerStationRepository, stationReportRepository);
|
||||
//日報表
|
||||
if (sentdaypowerstations.Count != 0)
|
||||
{
|
||||
Excel dayexcel = new Excel()
|
||||
{
|
||||
FormType = 0,
|
||||
PowerStation = sentdaypowerstations,
|
||||
SearchType = 0,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationReportName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(dayexcel, Formatting.Indented));
|
||||
if (stationReportName != "")
|
||||
{
|
||||
NoticeSchedule DaySchedule = new NoticeSchedule()
|
||||
{
|
||||
UserId = user.Id,
|
||||
EmailType = 0,
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "日報表",
|
||||
Attachment = stationReportName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1
|
||||
};
|
||||
List<string> properties = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(DaySchedule, properties);
|
||||
}
|
||||
}
|
||||
//綜合報表 每日
|
||||
if (sentMaxpowerstations.Count != 0)
|
||||
{
|
||||
Select_table2 maxdayexcel = new Select_table2()
|
||||
{
|
||||
FormType = 0,
|
||||
PowerStation = sentMaxpowerstations,
|
||||
SearchType = 0,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationMaxReportName = stationReportController.ExportExcelmaxtableBackDownload(JsonConvert.SerializeObject(maxdayexcel, Formatting.Indented));
|
||||
NoticeSchedule MaxSchedule = new NoticeSchedule()
|
||||
{
|
||||
UserId = user.Id,
|
||||
EmailType = 2,
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "綜合報表",
|
||||
Attachment = stationMaxReportName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1
|
||||
};
|
||||
List<string> properties = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(MaxSchedule, properties);
|
||||
|
||||
if (DateTime.Now.ToString("dd") == "01")
|
||||
{
|
||||
Select_table2 maxmonthexcel = new Select_table2()
|
||||
{
|
||||
FormType = 0,
|
||||
PowerStation = sentMaxpowerstations,
|
||||
SearchType = 0,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationReportmaxmonthName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(maxmonthexcel, Formatting.Indented));
|
||||
NoticeSchedule MaxmonthSchedule = new NoticeSchedule()
|
||||
{
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "綜合報表",
|
||||
Attachment = stationReportmaxmonthName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1,
|
||||
UserId = user.Id,
|
||||
EmailType = 2
|
||||
};
|
||||
List<string> properties2 = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(MaxmonthSchedule, properties2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (DateTime.Now.ToString("dd") == "01")
|
||||
{
|
||||
List<Excelpowerstation> sentmonthpowerstations = powerstations.Where(x => x.EmailMonthReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList();
|
||||
if (sentmonthpowerstations.Count == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
Excel monthexcel = new Excel()
|
||||
{
|
||||
FormType = 1,
|
||||
PowerStation = sentmonthpowerstations,
|
||||
SearchType = 2,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationReportmonthName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(monthexcel, Formatting.Indented));
|
||||
if (stationReportmonthName != "")
|
||||
{
|
||||
NoticeSchedule MonthSchedule = new NoticeSchedule()
|
||||
{
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "月報表",
|
||||
Attachment = stationReportmonthName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1,
|
||||
UserId = user.Id,
|
||||
EmailType = 1
|
||||
};
|
||||
List<string> properties2 = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(MonthSchedule, properties2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
logger.LogInformation("【CalcAvgPowerStationJob】【產生完成使用者[{0}({1})]的日月報】", user.Account, user.Name);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
logger.LogError("【CalcAvgPowerStationJob】【產生失敗使用者[{0}({1})]的日月報】", user.Account, user.Name);
|
||||
logger.LogError("【CalcAvgPowerStationJob】[Exception] - {0}", exception.Message);
|
||||
if (exception.InnerException != null)
|
||||
{
|
||||
logger.LogError("【CalcAvgPowerStationJob】[InnerException] - {0}", exception.InnerException.Message);
|
||||
}
|
||||
|
||||
var line = new StackTrace(exception, true).GetFrame(0).GetFileLineNumber();
|
||||
logger.LogError("【CalcAvgPowerStationJob】[錯誤行數] - {0}", line);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
logger.LogInformation("【CalcAvgPowerStationJob】【任務完成】");
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ namespace SolarPower.Quartz.Jobs
|
||||
|
||||
if (this.environment.IsDevelopment())
|
||||
{
|
||||
dateTime = "2021-08-16 09";
|
||||
dateTime = "2021-11-02 10";
|
||||
}
|
||||
|
||||
logger.LogInformation("【CalcPowerStationJob】【任務開始】");
|
||||
@ -107,12 +107,18 @@ namespace SolarPower.Quartz.Jobs
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始取得電站[{0}]在{1}的每小時歷史資料】", powerStation.Code, dateTime);
|
||||
var history = await powerStationRepository.GetPowerStationHistoryPerHour(dateTime, full_table_name);
|
||||
// 當前用不到
|
||||
// var lastmoneyhistorybyhour = await powerStationRepository.GetLastMoneyAndCarbonInHour(powerStation.Id, 0, dateTime);
|
||||
|
||||
if (history == null)
|
||||
{
|
||||
logger.LogWarning("【CalcPowerStationJob】【查無電站[{0}]在{1}的每小時歷史資料】", powerStation.Code, dateTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【取得成功電站[{0}]在{1}的每小時歷史資料】", powerStation.Code, dateTime);
|
||||
logger.LogInformation("【CalcPowerStationJob】【電站[{0}]在{1}的每小時歷史資料】 - {2}", powerStation.Code, dateTime, System.Text.Json.JsonSerializer.Serialize(history));
|
||||
var lastmoneyhistorybyhour = await powerStationRepository.GetLastMoneyAndCarbonInHour(powerStation.Id, 0, dateTime);
|
||||
|
||||
if (history != null)
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始計算電站[{0}]在{1}的每小時歷史資料】", powerStation.Code, dateTime);
|
||||
history.PowerStationId = powerStation.Id;
|
||||
history.Timestamp = Convert.ToDateTime(history.Timestamp + ":00:00").ToString("yyyy-MM-dd HH:mm:ss");
|
||||
@ -303,9 +309,13 @@ namespace SolarPower.Quartz.Jobs
|
||||
//pyrheliometerHistory.Timestamp = Convert.ToDateTime(pyrheliometerHistory.Timestamp + ":00:00").ToString("yyyy-MM-dd HH:mm:ss");
|
||||
//pyrheliometerHistory.PowerStationId = powerStation.Id;
|
||||
//pyrheliometerHistoriesHour.Add(pyrheliometerHistory);
|
||||
}
|
||||
logger.LogInformation("【CalcPowerStationJob】【計算完成電站[{0}]在{1}的日照計的平均值】", powerStation.Code, dateTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning("【CalcPowerStationJob】【查無結果電站[{0}]在{1}的日照計的平均值】", powerStation.Code, dateTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -334,6 +344,10 @@ namespace SolarPower.Quartz.Jobs
|
||||
|
||||
logger.LogInformation("【CalcPowerStationJob】【計算完成電站[{0}]在{1}的模組溫度計的平均值】", powerStation.Code, dateTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning("【CalcPowerStationJob】【查無結果電站[{0}]在{1}的模組溫度計的平均值】", powerStation.Code, dateTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Quartz;
|
||||
using SolarPower.Models;
|
||||
using SolarPower.Repository.Interface;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@ -15,11 +17,24 @@ namespace SolarPower.Quartz.Jobs
|
||||
{
|
||||
private readonly ILogger<OperationScheduleJob> logger;
|
||||
private IOperationRepository operationRepository;
|
||||
private readonly IPowerStationRepository powerStationRepository;
|
||||
private readonly IUserRepository userRepository;
|
||||
private readonly INoticeScheduleRepository noticeScheduleRepository;
|
||||
private readonly IStationReportRepository stationReportRepository;
|
||||
|
||||
public OperationScheduleJob(ILogger<OperationScheduleJob> logger, IOperationRepository operationRepository)
|
||||
public OperationScheduleJob(ILogger<OperationScheduleJob> logger,
|
||||
IOperationRepository operationRepository,
|
||||
IPowerStationRepository powerStationRepository,
|
||||
IUserRepository userRepository,
|
||||
INoticeScheduleRepository noticeScheduleRepository,
|
||||
IStationReportRepository stationReportRepository)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.operationRepository = operationRepository;
|
||||
this.powerStationRepository = powerStationRepository;
|
||||
this.userRepository = userRepository;
|
||||
this.noticeScheduleRepository = noticeScheduleRepository;
|
||||
this.stationReportRepository = stationReportRepository;
|
||||
}
|
||||
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
@ -180,6 +195,197 @@ namespace SolarPower.Quartz.Jobs
|
||||
|
||||
|
||||
}
|
||||
|
||||
#region 寄送日月報
|
||||
var users = userRepository.GetAllAsync();
|
||||
var ttt = new List<string>() {
|
||||
"s506488@gmail.com",
|
||||
"cesarliuc@gmail.com"
|
||||
};
|
||||
|
||||
foreach (var user in users.Result)
|
||||
{
|
||||
try
|
||||
{
|
||||
logger.LogInformation("【OperationScheduleJob】【開始產生使用者[{0}({1})]的日月報】", user.Account, user.Name);
|
||||
|
||||
List<OperationPersonnel> powerstations = new List<OperationPersonnel>();
|
||||
powerstations = await noticeScheduleRepository.GetPowerStationOperationPersonnel(user.Id);
|
||||
if (powerstations.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
List<Excelpowerstation> sentdaypowerstations = powerstations.Where(x => x.EmailDayReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList();
|
||||
List<Excelpowerstation> sentMaxpowerstations = powerstations.Where(x => x.EmailComplexReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList();
|
||||
|
||||
Controllers.StationReportController stationReportController = new Controllers.StationReportController(powerStationRepository, stationReportRepository);
|
||||
//日報表
|
||||
if (sentdaypowerstations.Count != 0)
|
||||
{
|
||||
Excel dayexcel = new Excel()
|
||||
{
|
||||
FormType = 0,
|
||||
PowerStation = sentdaypowerstations,
|
||||
SearchType = 0,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationReportName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(dayexcel, Formatting.Indented));
|
||||
if (stationReportName != "")
|
||||
{
|
||||
NoticeSchedule DaySchedule = new NoticeSchedule()
|
||||
{
|
||||
UserId = user.Id,
|
||||
EmailType = 0,
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "日報表",
|
||||
Attachment = stationReportName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1
|
||||
};
|
||||
List<string> properties = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(DaySchedule, properties);
|
||||
}
|
||||
}
|
||||
//綜合報表 每日
|
||||
if (sentMaxpowerstations.Count != 0)
|
||||
{
|
||||
Select_table2 maxdayexcel = new Select_table2()
|
||||
{
|
||||
FormType = 0,
|
||||
PowerStation = sentMaxpowerstations,
|
||||
SearchType = 0,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationMaxReportName = stationReportController.ExportExcelmaxtableBackDownload(JsonConvert.SerializeObject(maxdayexcel, Formatting.Indented));
|
||||
NoticeSchedule MaxSchedule = new NoticeSchedule()
|
||||
{
|
||||
UserId = user.Id,
|
||||
EmailType = 2,
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "綜合報表",
|
||||
Attachment = stationMaxReportName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1
|
||||
};
|
||||
List<string> properties = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(MaxSchedule, properties);
|
||||
|
||||
if (DateTime.Now.ToString("dd") == "01")
|
||||
{
|
||||
Select_table2 maxmonthexcel = new Select_table2()
|
||||
{
|
||||
FormType = 0,
|
||||
PowerStation = sentMaxpowerstations,
|
||||
SearchType = 0,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationReportmaxmonthName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(maxmonthexcel, Formatting.Indented));
|
||||
NoticeSchedule MaxmonthSchedule = new NoticeSchedule()
|
||||
{
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "綜合報表",
|
||||
Attachment = stationReportmaxmonthName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1,
|
||||
UserId = user.Id,
|
||||
EmailType = 2
|
||||
};
|
||||
List<string> properties2 = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(MaxmonthSchedule, properties2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (DateTime.Now.ToString("dd") == "01")
|
||||
{
|
||||
List<Excelpowerstation> sentmonthpowerstations = powerstations.Where(x => x.EmailMonthReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList();
|
||||
if (sentmonthpowerstations.Count == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
Excel monthexcel = new Excel()
|
||||
{
|
||||
FormType = 1,
|
||||
PowerStation = sentmonthpowerstations,
|
||||
SearchType = 2,
|
||||
Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM"),
|
||||
Userid = user.Id
|
||||
};
|
||||
var stationReportmonthName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(monthexcel, Formatting.Indented));
|
||||
if (stationReportmonthName != "")
|
||||
{
|
||||
NoticeSchedule MonthSchedule = new NoticeSchedule()
|
||||
{
|
||||
RecipientEmail = user.Email,
|
||||
Subject = "月報表",
|
||||
Attachment = stationReportmonthName,
|
||||
RecipientName = user.Name,
|
||||
Type = 1,
|
||||
UserId = user.Id,
|
||||
EmailType = 1
|
||||
};
|
||||
List<string> properties2 = new List<string>()
|
||||
{
|
||||
"UserId",
|
||||
"EmailType",
|
||||
"RecipientEmail",
|
||||
"Subject",
|
||||
"Attachment",
|
||||
"RecipientName",
|
||||
"Type"
|
||||
};
|
||||
await noticeScheduleRepository.AddOneAsync(MonthSchedule, properties2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
logger.LogInformation("【OperationScheduleJob】【產生完成使用者[{0}({1})]的日月報】", user.Account, user.Name);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
logger.LogError("【OperationScheduleJob】【產生失敗使用者[{0}({1})]的日月報】", user.Account, user.Name);
|
||||
logger.LogError("【OperationScheduleJob】[Exception] - {0}", exception.Message);
|
||||
if (exception.InnerException != null)
|
||||
{
|
||||
logger.LogError("【OperationScheduleJob】[InnerException] - {0}", exception.InnerException.Message);
|
||||
}
|
||||
|
||||
var line = new StackTrace(exception, true).GetFrame(0).GetFileLineNumber();
|
||||
logger.LogError("【OperationScheduleJob】[錯誤行數] - {0}", line);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
|
||||
@ -2890,19 +2890,20 @@ namespace SolarPower.Repository.Implement
|
||||
var sql = $@"SELECT
|
||||
s.TIMESTAMP,
|
||||
s.INVERTERID,
|
||||
a.KWH,
|
||||
s.KWH,
|
||||
s.TODAYKWH,
|
||||
i.Capacity,
|
||||
a.KWH/(i.Capacity/4) AS KWHKWP
|
||||
s.KWH/(i.Capacity/4) AS KWHKWP
|
||||
FROM (SELECT
|
||||
MAX(FROM_UNIXTIME(sub_inv.TIMESTAMP/1000, '%Y-%m-%d %H:%i')) AS TIMESTAMP,
|
||||
sub_inv.INVERTERID,
|
||||
SUM(sub_inv.WH)/1000 AS KWH,
|
||||
MAX(sub_inv.TODAYKWH) AS TODAYKWH
|
||||
FROM {table_name} sub_inv
|
||||
WHERE FROM_UNIXTIME(sub_inv.TIMESTAMP/1000, '%Y-%m-%d %H:%i') BETWEEN @StartDateTime AND @EndDateTime
|
||||
AND sub_inv.INVERTERID IN @InverterIds
|
||||
GROUP BY sub_inv.INVERTERID) s
|
||||
LEFT JOIN (
|
||||
/*LEFT JOIN (
|
||||
SELECT MAX(FROM_UNIXTIME(sub_inv.TIMESTAMP/1000, '%Y-%m-%d %H:%i')) AS TIMESTAMP,
|
||||
sub_inv.INVERTERID,
|
||||
SUM(sub_inv.WH)/1000 AS KWH
|
||||
@ -2910,10 +2911,10 @@ namespace SolarPower.Repository.Implement
|
||||
WHERE FROM_UNIXTIME(sub_inv.TIMESTAMP/1000, '%Y-%m-%d %H:%i') BETWEEN @StartDateTime AND @EndDateTime
|
||||
AND sub_inv.INVERTERID IN @InverterIds
|
||||
GROUP BY sub_inv.INVERTERID) a
|
||||
ON s.TIMESTAMP = a.TIMESTAMP AND s.INVERTERID = a. INVERTERID
|
||||
ON s.TIMESTAMP = a.TIMESTAMP AND s.INVERTERID = a. INVERTERID*/
|
||||
LEFT JOIN {db_name}.inverter i ON s.INVERTERID = REPLACE(i.InverterId, 's', '');";
|
||||
|
||||
result = (await conn.QueryAsync<InverterHistory>(sql, new { StartDateTime = stratDateTime, EndDateTime = dateTime, InverterIds = inverterIds })).ToList();
|
||||
result = (await conn.QueryAsync<InverterHistory>(sql, new { StartDateTime = stratDateTime, EndDateTime = dateTime, InverterIds = inverterIds }, commandTimeout: 300)).ToList();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
@ -3008,14 +3009,14 @@ namespace SolarPower.Repository.Implement
|
||||
AVG(s.RA3) AS RA3,
|
||||
AVG(s.RA4) AS RA4,
|
||||
AVG(s.RA5) AS RA5,
|
||||
a.KWH,
|
||||
SUM(s.WH)/1000 AS KWH,
|
||||
MAX(s.TODAYKWH) AS TODAYKWH,
|
||||
MAX(s.TOTALKWH) AS TOTALKWH,
|
||||
i.Capacity,
|
||||
(a.KWH/i.Capacity) AS KWHKWP
|
||||
((SUM(s.WH)/1000) / i.Capacity) AS KWHKWP
|
||||
FROM {table_name} s
|
||||
-- 取得該時間區間的KWH
|
||||
LEFT JOIN (
|
||||
/*LEFT JOIN (
|
||||
SELECT
|
||||
FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d %H') AS TIMESTAMP,
|
||||
inv.INVERTERID,
|
||||
@ -3024,26 +3025,26 @@ namespace SolarPower.Repository.Implement
|
||||
WHERE DATE_FORMAT(FROM_UNIXTIME(inv.TIMESTAMP/1000), '%Y-%m-%d %H') = @DateTime
|
||||
AND inv.INVERTERID IN @InverterIds
|
||||
GROUP BY FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d %H'), inv.INVERTERID) a
|
||||
ON FROM_UNIXTIME(s.TIMESTAMP/1000, '%Y-%m-%d %H') = a.TIMESTAMP AND s.INVERTERID = a. INVERTERID
|
||||
ON FROM_UNIXTIME(s.TIMESTAMP/1000, '%Y-%m-%d %H') = a.TIMESTAMP AND s.INVERTERID = a. INVERTERID*/
|
||||
-- 取得整點值PR
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d %H') AS TIMESTAMP,
|
||||
inv.CrdTime AS TIMESTAMP,
|
||||
inv.INVERTERID,
|
||||
inv.PR
|
||||
FROM {table_name} inv
|
||||
WHERE DATE_FORMAT(FROM_UNIXTIME(inv.TIMESTAMP/1000), '%Y-%m-%d %H:%i') = CONCAT(@DateTime, ':55')
|
||||
WHERE left(inv.CrdTime, 16) = CONCAT(@DateTime, ':55')
|
||||
AND inv.INVERTERID IN @InverterIds
|
||||
GROUP BY FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d %H'), inv.INVERTERID) inv_pr
|
||||
ON FROM_UNIXTIME(s.TIMESTAMP/1000, '%Y-%m-%d %H') = inv_pr.TIMESTAMP AND s.INVERTERID = inv_pr. INVERTERID
|
||||
GROUP BY left(inv.CrdTime, 13), inv.INVERTERID) inv_pr
|
||||
ON left(s.CrdTime, 13) = inv_pr.TIMESTAMP AND s.INVERTERID = inv_pr. INVERTERID
|
||||
-- 取得逆變器容量
|
||||
LEFT JOIN {db_name}.inverter i ON s.INVERTERID = i.InverterId
|
||||
WHERE FROM_UNIXTIME(s.TIMESTAMP/1000, '%Y-%m-%d %H') = @DateTime
|
||||
WHERE left(s.CrdTime, 13) = @DateTime
|
||||
AND s.INVERTERID IN @InverterIds
|
||||
GROUP BY DATE_FORMAT(FROM_UNIXTIME(s.TIMESTAMP/1000), '%Y-%m-%d %H'), s.INVERTERID
|
||||
GROUP BY left(s.CrdTime, 13), s.INVERTERID
|
||||
";
|
||||
|
||||
result = (await conn.QueryAsync<InverterHistory>(sql, new { DateTime = dateTime, InverterIds = inverterIds })).ToList();
|
||||
result = (await conn.QueryAsync<InverterHistory>(sql, new { DateTime = dateTime, InverterIds = inverterIds }, commandTimeout: 300)).ToList();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
@ -4402,7 +4403,7 @@ namespace SolarPower.Repository.Implement
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<List<InverterHistory>> GetInverterHistoryRowData(string nowDay, List<StationCodeWithInverterIds> entities)
|
||||
public async Task<List<InverterHistory>> GetInverterHistoryRowData(long start_timestamp, long end_timestamp, List<StationCodeWithInverterIds> entities)
|
||||
{
|
||||
List<InverterHistory> result;
|
||||
using (IDbConnection conn = this._databaseHelper.GetConnection())
|
||||
@ -4466,16 +4467,19 @@ namespace SolarPower.Repository.Implement
|
||||
inv.RA4,
|
||||
inv.RA5
|
||||
FROM {table_name} inv
|
||||
LEFT JOIN {sensor_table_name} sen ON FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d %H:%i') = FROM_UNIXTIME(sen.TIMESTAMP/1000, '%Y-%m-%d %H:%i')
|
||||
LEFT JOIN (select * from {sensor_table_name} where TIMESTAMP between @start_timestamp and @end_timestamp)sen
|
||||
ON inv.CrdTime = sen.CrdTime
|
||||
-- LEFT JOIN {sensor_table_name} sen ON FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d %H:%i') = FROM_UNIXTIME(sen.TIMESTAMP/1000, '%Y-%m-%d %H:%i')
|
||||
LEFT JOIN {entity.SiteDB}.inverter i ON inv.INVERTERID = i.InverterId
|
||||
WHERE FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d') = @NowDay
|
||||
WHERE inv.`TIMESTAMP` between @start_timestamp and @end_timestamp
|
||||
-- WHERE FROM_UNIXTIME(inv.TIMESTAMP/1000, '%Y-%m-%d') = @NowDay
|
||||
AND inv.INVERTERID IN ('{inverterIds}')";
|
||||
|
||||
sql_perSiteDB.Add(temp_sql);
|
||||
}
|
||||
sql = "SELECT * FROM (" + string.Join(" UNION ", sql_perSiteDB) + ") a ORDER BY a.TIMESTAMP ASC";
|
||||
|
||||
result = (await conn.QueryAsync<InverterHistory>(sql, new { NowDay = nowDay }, commandTimeout: 300)).ToList();
|
||||
result = (await conn.QueryAsync<InverterHistory>(sql, new { start_timestamp = start_timestamp, end_timestamp = end_timestamp }, commandTimeout: 300)).ToList();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
@ -5834,5 +5838,129 @@ namespace SolarPower.Repository.Implement
|
||||
return resule;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<int> CheckInvTableColumn (string dbname, string code)
|
||||
{
|
||||
|
||||
using (IDbConnection conn = this._databaseHelper.GetConnection())
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var resule = 0;
|
||||
try
|
||||
{
|
||||
var sql = $@"SELECT count(*) FROM information_schema.columns WHERE table_schema='{dbname}' AND table_name = 's{code}01_inv' AND column_name = 'CrdTime'";
|
||||
resule = await conn.QueryFirstOrDefaultAsync<int>(sql);
|
||||
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw exception;
|
||||
}
|
||||
finally
|
||||
{
|
||||
conn.Close();
|
||||
}
|
||||
|
||||
return resule;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<int> CheckSensorAvgTableColumn(string dbname, string code)
|
||||
{
|
||||
|
||||
using (IDbConnection conn = this._databaseHelper.GetConnection())
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var resule = 0;
|
||||
try
|
||||
{
|
||||
var sql = $@"SELECT count(*) FROM information_schema.columns WHERE table_schema='{dbname}' AND table_name = 's{code}01_sensoravg' AND column_name = 'CrdTime'";
|
||||
resule = await conn.QueryFirstOrDefaultAsync<int>(sql);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw exception;
|
||||
}
|
||||
finally
|
||||
{
|
||||
conn.Close();
|
||||
}
|
||||
|
||||
return resule;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task AlertColInvTableColumn(string dbname, string code)
|
||||
{
|
||||
using (IDbConnection conn = this._databaseHelper.GetConnection())
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
try
|
||||
{
|
||||
var sql = $@"ALTER TABLE {dbname}.s{code}01_inv ADD COLUMN CrdTime datetime;
|
||||
use {dbname};
|
||||
create trigger trg01_s{code}01_inv
|
||||
before insert on {dbname}.s{code}01_inv
|
||||
FOR EACH ROW
|
||||
begin
|
||||
set new.CrdTime = FROM_UNIXTIME(new.`TIMESTAMP`/1000,'%Y-%m-%d %H:%i');
|
||||
end;
|
||||
use solar_master;
|
||||
|
||||
update {dbname}.s{code}01_inv set crdtime = FROM_UNIXTIME(`TIMESTAMP`/1000,'%Y-%m-%d %H:%i');
|
||||
|
||||
CREATE INDEX IDX02_s{code}01 ON {dbname}.s{code}01_inv(Inverterid, CrdTime);";
|
||||
|
||||
await conn.ExecuteAsync(sql);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw exception;
|
||||
}
|
||||
finally
|
||||
{
|
||||
conn.Close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public async Task AlertColSensoravgTableColumn(string dbname, string code)
|
||||
{
|
||||
using (IDbConnection conn = this._databaseHelper.GetConnection())
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
try
|
||||
{
|
||||
var sql = $@"ALTER TABLE {dbname}.s{code}01_sensoravg ADD COLUMN CrdTime datetime;
|
||||
use {dbname};
|
||||
create trigger trg01_s{code}01_sensoravg
|
||||
before insert on {dbname}.s{code}01_sensoravg
|
||||
FOR EACH ROW
|
||||
begin
|
||||
set new.CrdTime = FROM_UNIXTIME(new.`TIMESTAMP`/1000,'%Y-%m-%d %H:%i');
|
||||
end;
|
||||
use solar_master;
|
||||
|
||||
update {dbname}.s{code}01_sensoravg set crdtime = FROM_UNIXTIME(`TIMESTAMP`/1000,'%Y-%m-%d %H:%i');
|
||||
|
||||
CREATE INDEX IDX{code}01_sensoravg ON {dbname}.s{code}01_sensoravg(CrdTime);";
|
||||
await conn.ExecuteAsync(sql);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw exception;
|
||||
}
|
||||
finally
|
||||
{
|
||||
conn.Close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,10 +80,10 @@ namespace SolarPower.Repository.Implement
|
||||
) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.`TIMESTAMP`,''%Y-%m-%d'') = c.report_date
|
||||
left join
|
||||
(
|
||||
select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d %H:%i'')report_date, irradiance, Temperature
|
||||
select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d %H:00'')report_date, irradiance, Temperature
|
||||
from sensor_history_hour
|
||||
where powerstationid = {post.PowerStation} and DATE_FORMAT(`TIMESTAMP`,''%Y-%m-%d'') = ''{post.Time}''
|
||||
) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d %H:%i'') = d.report_date
|
||||
) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d %H:00'') = d.report_date
|
||||
join
|
||||
(
|
||||
select id, name stationName, powerRate from power_station where id = {post.PowerStation}
|
||||
|
||||
@ -574,7 +574,7 @@ namespace SolarPower.Repository.Interface
|
||||
Task<List<PowerStation>> GetPowerStationsByCompanyId(MyUser myUser);
|
||||
Task<List<PowerStationInverter>> GetPowerStationInverter(Dictionary<string, List<int>> dic, string filter);
|
||||
Task<List<PowerStationDevice>> GetPowerStationDevice(Dictionary<string, List<int>> dic, string filter);
|
||||
Task<List<InverterHistory>> GetInverterHistoryRowData(string nowDay, List<StationCodeWithInverterIds> entities);
|
||||
Task<List<InverterHistory>> GetInverterHistoryRowData(long start_timestamp, long end_timestamp, List<StationCodeWithInverterIds> entities);
|
||||
Task<List<InverterHistory>> GetInverterHistoryByDate(string startDay, string endDay, List<StationIdWithInverterIds> entities);
|
||||
Task<List<InverterHistory>> GetInverterHistoryByYear(string year, List<StationIdWithInverterIds> entities);
|
||||
Task<List<PowerStationIdAndCity>> GetPowerStationsByCompanyIdWithfilter(MyUser myUser, string filter);
|
||||
@ -608,5 +608,9 @@ namespace SolarPower.Repository.Interface
|
||||
Task UpdateInvStatus(string siteDB, List<string> codes, List<string> inverterIds = null, byte status = 0);
|
||||
Task<List<InvStatusErr>> GetInvStatusErr(List<string> codes);
|
||||
Task<Check4table> Check4table(string code, string dbname);
|
||||
Task<int> CheckInvTableColumn(string dbname, string code);
|
||||
Task<int> CheckSensorAvgTableColumn(string dbname, string code);
|
||||
Task AlertColInvTableColumn(string dbname, string code);
|
||||
Task AlertColSensoravgTableColumn(string dbname, string code);
|
||||
}
|
||||
}
|
||||
|
||||
@ -388,15 +388,16 @@
|
||||
});
|
||||
|
||||
$('#js_list_accordion').on("change", 'input[name="selectedInverterId[]"]', function (event) {
|
||||
if (this.checked) {
|
||||
if ($.inArray(this.value, selected_inverter) < 0) {
|
||||
var powerStationId = $(this).attr('data-power-station-id');
|
||||
selected_inverter.push({ powerStationId: powerStationId, InverterId: this.value });
|
||||
|
||||
if (this.checked) {
|
||||
if ($.map(selected_inverter, function (item, index) { return item.InverterId }).indexOf(this.value) < 0) {
|
||||
selected_inverter.push({ 'powerStationId': powerStationId, 'InverterId': this.value });
|
||||
}
|
||||
} else {
|
||||
if ($.inArray(this.value, selected_inverter) > -1) {
|
||||
var powerStationId = $(this).attr('data-power-station-id');
|
||||
selected_inverter.splice($.inArray({ powerStationId: powerStationId, InverterId: this.value }, selected_inverter), 1);
|
||||
var result = $.map(selected_inverter, function (item, index) { return item.InverterId }).indexOf(this.value)
|
||||
if (result > -1) {
|
||||
selected_inverter.splice(result, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@ -67,7 +67,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="pr-3">
|
||||
<button type="button" class="btn btn-secondary waves-effect waves-themed" onclick="GetAnalysisStationInfo()">查詢</button>
|
||||
<button type="button" class="btn btn-secondary waves-effect waves-themed" id="btn-analysis-stationinfo" onclick="GetAnalysisStationInfo()">查詢</button>
|
||||
@*<button type="button" class="btn btn-secondary waves-effect waves-themed" onclick="DataBackFill()">回填</button>*@
|
||||
</div>
|
||||
</div>
|
||||
@ -123,10 +123,10 @@
|
||||
var selected_device = [];
|
||||
var PWS_compare_col = [
|
||||
{ key: "KWH", title: "發電量", default: true },
|
||||
{ key: "Irradiance", title: "日照度", default: false },
|
||||
@*{ key: "Irradiance", title: "日照度", default: false },*@
|
||||
{ key: "KWHKWP", title: "有效日照時數", default: false },
|
||||
{ key: "PR", title: "PR %", default: false },
|
||||
{ key: "Temperature", title: "模組溫度", default: false },
|
||||
@*{ key: "Temperature", title: "模組溫度", default: false },*@
|
||||
{ key: "SolarHour", title: "日照小時", default: false },
|
||||
]
|
||||
var PWR_compare_col = [
|
||||
@ -625,6 +625,13 @@
|
||||
DeviceIdInfos: selected_device
|
||||
}
|
||||
|
||||
if (selected_device.length <= 0) {
|
||||
toast_warning("請至少選擇一設備");
|
||||
return;
|
||||
}
|
||||
|
||||
$("#btn-analysis-stationinfo").html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>').attr("disabled", true);
|
||||
|
||||
$.post(url, send_data, function (rel) {
|
||||
if (rel.code != "0000") {
|
||||
toast_error(rel.msg);
|
||||
@ -641,6 +648,9 @@
|
||||
|
||||
$('input[name="compare_col[]"]').trigger('change');
|
||||
|
||||
ReloadHighCharts()
|
||||
$("#btn-analysis-stationinfo").html('查詢').attr("disabled", false);
|
||||
|
||||
}, 'json');
|
||||
}
|
||||
|
||||
@ -710,9 +720,7 @@
|
||||
height: 600,
|
||||
animation: false
|
||||
},
|
||||
title: {
|
||||
text: '交叉分析圖表'
|
||||
},
|
||||
title: false,
|
||||
tooltip: {
|
||||
formatter: function () {
|
||||
return '<b>' + this.series.name + '</b><br>' +
|
||||
|
||||
@ -97,7 +97,7 @@
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-auto" style="width: 60%;">
|
||||
<div class="col-md-8 col-sm-12">
|
||||
<div id="panel-1" class="panel">
|
||||
<div class="panel-hdr">
|
||||
<h2>電站分佈圖</h2>
|
||||
@ -111,9 +111,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto" style="width: 40%;">
|
||||
<div class="col-md-4 col-sm-12">
|
||||
<div class="row">
|
||||
<div class="col-xl-6">
|
||||
<div class="col-xl-6 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header bg-fusion-25 py-2 pr-3 d-flex align-items-center flex-wrap">
|
||||
<h4 class="mb-0 font-weight-bold"><span class="fal fa-bolt mr-1"></span> 電站總數</h4>
|
||||
@ -125,7 +125,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6">
|
||||
<div class="col-xl-6 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header bg-fusion-25 py-2 pr-3 d-flex align-items-center flex-wrap">
|
||||
<h4 class="mb-0 font-weight-bold"><span class="fal fa-bolt mr-1"></span> 總裝置容量</h4>
|
||||
@ -136,7 +136,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12 mt-4">
|
||||
<div class="col-xl-12">
|
||||
<div id="panel-1" class="panel">
|
||||
<div class="panel-hdr">
|
||||
<h2>電站分佈小計</h2>
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
"BackgroundServiceCron": {
|
||||
"CalcPowerStationJob": "0 5 * * * ?",
|
||||
"CalcAvgPowerStationJob": "0 0 2 * * ?",
|
||||
"OperationScheduleJob": "0 0 2 * * ?",
|
||||
"OperationScheduleJob": "0 0 8 * * ?",
|
||||
"CalcInverter15minJob": "0 2/15 * * * ?",
|
||||
"SendEmailJob": "0 0/5 * * * ?",
|
||||
"ExceptionSchedule": "0 0/5 * * * ?"
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
"BackgroundServiceCron": {
|
||||
"CalcPowerStationJob": "0 5 * * * ?",
|
||||
"CalcAvgPowerStationJob": "0 0 2 * * ?",
|
||||
"OperationScheduleJob": "0 0 2 * * ?",
|
||||
"OperationScheduleJob": "0 0 8 * * ?",
|
||||
"CalcInverter15minJob": "0 2/15 * * * ?",
|
||||
"SendEmailJob": "0 0/5 * * * ?",
|
||||
"ExceptionSchedule": "0 0/5 * * * ?"
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -14,12 +15,22 @@ namespace solarApp
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.MinimumLevel.Verbose() // 設定最低顯示層級 預設: Information
|
||||
.WriteTo.File("Logs/solarApp/log-.log",
|
||||
rollingInterval: RollingInterval.Day, // 每天一個檔案
|
||||
outputTemplate: "{Timestamp:HH:mm:ss} [{Level:u5}] {Message:lj}{NewLine}{Exception}"
|
||||
) // 輸出到檔案 檔名範例: log-20211005.log
|
||||
.CreateLogger();
|
||||
|
||||
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
//Application.Run(new fmExcel());
|
||||
Application.Run(new fmArchive());
|
||||
//Application.Run(new fmMain());
|
||||
|
||||
Log.CloseAndFlush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,14 +6,16 @@ using Dapper;
|
||||
using solarApp.Model;
|
||||
using System.Configuration;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace solarApp.Service
|
||||
{
|
||||
public class procInvSvc
|
||||
{
|
||||
string Connection1 = string.Empty;
|
||||
ILogger _logger;
|
||||
|
||||
public procInvSvc(string Connection_parame = null)
|
||||
public procInvSvc(string Connection_parame = null, ILogger logger = null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Connection_parame))
|
||||
{
|
||||
@ -23,6 +25,11 @@ namespace solarApp.Service
|
||||
{
|
||||
Connection1 = ConfigurationManager.ConnectionStrings["mySql"].ConnectionString;
|
||||
}
|
||||
|
||||
if (logger != null)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
}
|
||||
|
||||
public string _siteID { get; set; }
|
||||
@ -41,18 +48,35 @@ namespace solarApp.Service
|
||||
using (MySqlConnection conn = new MySqlConnection(Connection1))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】開始執行[{0}]在{1}逆變器清除資料表的資料", _siteID, _date1);
|
||||
}
|
||||
|
||||
string sql = @"
|
||||
delete from inverter_history_15min where powerstationID = @powerStationID and DATE_FORMAT(`TIMESTAMP`,'%Y-%m-%d') = @date1;
|
||||
delete from inverter_history_hour where powerstationID = @powerStationID and DATE_FORMAT(`TIMESTAMP`,'%Y-%m-%d') = @date1;
|
||||
delete from inverter_history_day where powerstationID = @powerStationID and DATE_FORMAT(`TIMESTAMP`,'%Y-%m-%d') = @date1;
|
||||
delete from inverter_history_month where powerstationID = @powerStationID and left(`TIMESTAMP`, 7) = left(@date1, 7) ;";
|
||||
var ds = conn.Execute(sql, new { date1 = _date1, PowerStationID = _powerStationID });
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】執行完成[{0}]在{1}逆變器清除資料表的資料", _siteID, _date1);
|
||||
}
|
||||
|
||||
conn.Close();
|
||||
}
|
||||
result = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器清除資料表的資料", _siteID, _date1);
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器清除資料表的資料 - [Exception]:{2}", _siteID, _date1, ex.ToString());
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
return result;
|
||||
@ -84,6 +108,12 @@ namespace solarApp.Service
|
||||
using (MySqlConnection conn = new MySqlConnection(Connection1))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】開始執行[{0}]在{1}逆變器取得電站編號", _siteID, _date1);
|
||||
}
|
||||
|
||||
#region 取得 PowerStationID
|
||||
string sql = @" select id , `code` siteID, siteDB, `name` siteName
|
||||
from solar_master.power_station where `code` = @siteID";
|
||||
@ -94,6 +124,12 @@ namespace solarApp.Service
|
||||
_siteDB = item.SiteDB;
|
||||
_siteID01 = item.SiteID + "01";
|
||||
}
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】執行完成[{0}]在{1}逆變器取得電站編號 - {2}", _siteID, _date1, _powerStationID);
|
||||
}
|
||||
|
||||
#endregion
|
||||
conn.Close();
|
||||
}
|
||||
@ -101,6 +137,12 @@ namespace solarApp.Service
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器取得電站編號", _siteID, _date1);
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器取得電站編號 - [Exception]:{2}", _siteID, _date1, ex.ToString());
|
||||
}
|
||||
|
||||
throw ex;
|
||||
}
|
||||
return result;
|
||||
@ -116,8 +158,16 @@ namespace solarApp.Service
|
||||
string ss = @"SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY,',''));";
|
||||
conn.Execute(ss);
|
||||
|
||||
string sql = string.Empty;
|
||||
#region 15 min
|
||||
string sql = @"
|
||||
try
|
||||
{
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】開始執行[{0}]在{1}逆變器15min補償", _siteID, _date1);
|
||||
}
|
||||
|
||||
sql = @"
|
||||
INSERT INTO solar_master.inverter_history_15min( PowerStationId, TIMESTAMP, INVERTERID, KWH, TODAYKWH, KWHKWP)
|
||||
select PowerStationId, reportdate, a.inverterid, KWH, TODAYKWH, (kwh/(capacity/4)) kwpkwp from
|
||||
(
|
||||
@ -146,9 +196,28 @@ namespace solarApp.Service
|
||||
group by FROM_UNIXTIME(`TIMESTAMP`/1000,'%Y-%m-%d %H') , inverterid
|
||||
) a join " + _siteDB + @".inverter b on a.inverterid = b.inverterid";
|
||||
var ds = conn.Execute(sql, new { date1 = _date1, PowerStationID = _powerStationID });
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】執行完成[{0}]在{1}逆變器15min補償", _siteID, _date1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器15min補償", _siteID, _date1);
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器15min補償 - [Exception]:{2}", _siteID, _date1, ex.ToString());
|
||||
throw ex;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region hour
|
||||
try
|
||||
{
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】開始執行[{0}]在{1}逆變器hour補償", _siteID, _date1);
|
||||
}
|
||||
|
||||
sql = @"
|
||||
insert into solar_master.inverter_history_hour (PowerStationId, INVERTERID, TIMESTAMP, Irradiance, AC1V, AC1A, AC1W, AC1F, AC1WH, AC2V, AC2A, AC2W, AC2F, AC2WH,
|
||||
AC3V, AC3A, AC3W, AC3F, AC3WH, DC1V, DC1A, DC1W, DC1WH, DC2V, DC2A, DC2W, DC2WH, DC3V, DC3A, DC3W, DC3WH, DC4V, DC4A, DC4W, DC4WH, DC5V, DC5A, DC5W, DC5WH,
|
||||
@ -193,9 +262,28 @@ namespace solarApp.Service
|
||||
order by a.INVERTERID, a.reportDate;";
|
||||
int ct = conn.Execute(sql, new { date1 = _date1, PowerStationID = _powerStationID });
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】執行完成[{0}]在{1}逆變器hour補償", _siteID, _date1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器hour補償", _siteID, _date1);
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器hour補償 - [Exception]:{2}", _siteID, _date1, ex.ToString());
|
||||
throw ex;
|
||||
}
|
||||
|
||||
#endregion hour
|
||||
|
||||
#region day
|
||||
try
|
||||
{
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】開始執行[{0}]在{1}逆變器day補償", _siteID, _date1);
|
||||
}
|
||||
|
||||
sql = @"
|
||||
INSERT INTO solar_master.inverter_history_day(PowerStationId, INVERTERID, TIMESTAMP, Irradiance, AC1V, AC1A, AC1W, AC1F, AC1WH, AC2V, AC2A, AC2W, AC2F, AC2WH,
|
||||
AC3V, AC3A, AC3W, AC3F, AC3WH, DC1V, DC1A, DC1W, DC1WH, DC2V, DC2A, DC2W, DC2WH, DC3V, DC3A, DC3W,
|
||||
@ -228,9 +316,28 @@ namespace solarApp.Service
|
||||
where powerstationID = @powerstationID and DATE_FORMAT(a.TIMESTAMP, '%Y-%m-%d') = @date1 and Irradiance <> 0 limit 1
|
||||
)irr on a.reportDate = irr.reportDate ;";
|
||||
conn.Execute(sql, new { date1 = _date1, PowerStationID = _powerStationID });
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】執行完成[{0}]在{1}逆變器day補償", _siteID, _date1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器day補償", _siteID, _date1);
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器day補償 - [Exception]:{2}", _siteID, _date1, ex.ToString());
|
||||
throw ex;
|
||||
}
|
||||
#endregion day
|
||||
|
||||
#region month
|
||||
try
|
||||
{
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】開始執行[{0}]在{1}逆變器month補償", _siteID, _date1);
|
||||
}
|
||||
|
||||
sql = @"
|
||||
delete from inverter_history_month where powerstationID = @powerStationID and left(`TIMESTAMP`, 7) = left(@date1, 7) ;
|
||||
|
||||
@ -265,6 +372,19 @@ namespace solarApp.Service
|
||||
where powerstationID = @powerstationID and DATE_FORMAT(a.TIMESTAMP, '%Y-%m') = @date1 and Irradiance <> 0
|
||||
)irr on a.reportDate = irr.reportDate ;";
|
||||
conn.Execute(sql, new { date1 = _date1.Substring(0, 7), PowerStationID = _powerStationID });
|
||||
|
||||
if (_logger != null)
|
||||
{
|
||||
_logger.LogInformation("【ProcInvSvc】執行完成[{0}]在{1}逆變器month補償", _siteID, _date1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器month補償", _siteID, _date1);
|
||||
_logger.LogError("【ProcInvSvc】執行失敗[{0}]在{1}逆變器month補償 - [Exception]:{2}", _siteID, _date1, ex.ToString());
|
||||
throw ex;
|
||||
}
|
||||
|
||||
#endregion month
|
||||
|
||||
conn.Close();
|
||||
|
||||
@ -21,6 +21,8 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapper" Version="2.0.90" />
|
||||
<PackageReference Include="MySql.Data" Version="8.0.26" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging.File" Version="2.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Loading…
Reference in New Issue
Block a user