1. bug fix

2. 畫面調整
3.選單調整
This commit is contained in:
Kai 2021-07-20 10:02:59 +08:00
parent aa3cd8a99f
commit 8664bda0d5
21 changed files with 362 additions and 95 deletions

View File

@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SolarPower.Models;
using SolarPower.Repository.Interface;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -6,11 +8,21 @@ using System.Threading.Tasks;
namespace SolarPower.Controllers namespace SolarPower.Controllers
{ {
public class AnalysisInverterController : MyBaseController<AnalysisInverterController> public class AnalysisInverterController : MyBaseController<AnalysisInverterController>
{ {
private readonly IPowerStationRepository powerStationRepository;
public AnalysisInverterController(IPowerStationRepository powerStationRepository) : base()
{
this.powerStationRepository = powerStationRepository;
}
public IActionResult Index() public IActionResult Index()
{ {
return View(); return View();
} }
} }
} }

View File

@ -88,7 +88,7 @@ namespace SolarPower.Controllers
HttpContext.Session.SetString("MyAccount", edFunction.AESEncrypt(user.Account)); //將帳號透過AES加密 HttpContext.Session.SetString("MyAccount", edFunction.AESEncrypt(user.Account)); //將帳號透過AES加密
HttpContext.Session.SetString("CompanyId", edFunction.AESEncrypt(user.CompanyId.ToString())); //將公司id透過AES加密 HttpContext.Session.SetString("CompanyId", edFunction.AESEncrypt(user.CompanyId.ToString())); //將公司id透過AES加密
return RedirectToAction("Index", "User"); return RedirectToAction("Index", "MapOverview");
} }

View File

@ -155,8 +155,8 @@ namespace SolarPower.Controllers
stationOverview.Avg_PR = overview.Avg_PR; stationOverview.Avg_PR = overview.Avg_PR;
stationOverview.Today_kwhkwp = overview.Today_kwhkwp; stationOverview.Today_kwhkwp = overview.Today_kwhkwp;
stationOverview.Avg_kwhkwp = overview.Avg_kwhkwp; stationOverview.Avg_kwhkwp = overview.Avg_kwhkwp;
stationOverview.Today_monery = overview.Today_monery; stationOverview.Today_money = overview.Today_money;
stationOverview.Total_monery = overview.Total_monery; stationOverview.Total_money = overview.Total_money;
stationOverview.Today_carbon = overview.Today_carbon; stationOverview.Today_carbon = overview.Today_carbon;
stationOverview.Total_carbon = overview.Total_carbon; stationOverview.Total_carbon = overview.Total_carbon;
@ -169,8 +169,8 @@ namespace SolarPower.Controllers
else else
{ {
stationOverview.IsShowMoney = 0; stationOverview.IsShowMoney = 0;
stationOverview.Today_monery = 0; stationOverview.Today_money = 0;
stationOverview.Total_monery = 0; stationOverview.Total_money = 0;
} }
var powerStation = await powerStationRepository.GetOneAsync(post.Ids.First()); var powerStation = await powerStationRepository.GetOneAsync(post.Ids.First());

View File

@ -424,20 +424,21 @@ INSERT INTO `auth_page` (`AuthCode`, `MainName`, `SubName`, `TagName`, `ControlN
('G', '總覽', '電站總覽', '異常記錄', 'StationOverview_Exception'), ('G', '總覽', '電站總覽', '異常記錄', 'StationOverview_Exception'),
('H', '總覽', '電站總覽', '運維記錄', 'StationOverview_OperationRecord'), ('H', '總覽', '電站總覽', '運維記錄', 'StationOverview_OperationRecord'),
('J', '總覽', '電站總覽', '顯示發電金額', 'ShowMoney'), ('J', '總覽', '電站總覽', '顯示發電金額', 'ShowMoney'),
('K', '電站資訊', '電站管理', NULL, 'PowerStation'), ('K', '電站資訊', '電站資訊', NULL, 'PowerStationInfo'),
('L', '交叉分析', '合併電站', NULL, 'Setting'), ('L', '交叉分析', '合併電站', NULL, 'AnalysisStationCombine'),
('M', '交叉分析', '電站交叉分析', NULL, 'ASDA'), ('M', '交叉分析', '電站交叉分析', NULL, 'AnalysisStationInfo'),
('N', '交叉分析', '逆變器交叉分析', NULL, 'BBB'), ('N', '交叉分析', '逆變器交叉分析', NULL, 'AnalysisInverter'),
('P', '報表查詢', '電站報表', NULL, 'CCC'), ('P', '報表查詢', '電站報表', NULL, 'CCC'),
('Q', '報表查詢', '電廠發電效能統計', NULL, 'HHH'), ('Q', '報表查詢', '電廠發電效能統計', NULL, 'HHH'),
('R', '報表查詢', '輸入台電售電紀錄', NULL, 'JJJ'), ('R', '報表查詢', '輸入台電售電紀錄', NULL, 'JJJ'),
('S', '報表查詢', '報告發送設定', NULL, 'JJJ'), ('S', '報表查詢', '報告發送設定', NULL, 'JJJ'),
('T', '即時告警', '異常事件查詢', NULL, 'KKK'), ('T', '即時告警', '異常事件查詢', NULL, 'KKK'),
('U', '運維管理', '定期計畫建立', NULL, 'Operation'), ('U', '運維管理', '電站管理', NULL, 'PowerStationManager'),
('V', '運維管理', '運維作業記錄', NULL, 'OperationRecord'), ('V', '運維管理', '定期計畫建立', NULL, 'Operation'),
('W', '系統管理', '公司管理', NULL, 'Company'), ('W', '運維管理', '運維作業記錄', NULL, 'OperationRecord'),
('X', '系統管理', '帳號管理', NULL, 'User,Role'), ('X', '系統管理', '公司管理', NULL, 'Company'),
('Y', '系統管理', '定時任務設定', NULL, 'LLL'); ('Y', '系統管理', '帳號管理', NULL, 'User,Role'),
('Z', '系統管理', '定時任務設定', NULL, 'LLL');
/*!40000 ALTER TABLE `auth_page` ENABLE KEYS */; /*!40000 ALTER TABLE `auth_page` ENABLE KEYS */;
-- 傾印 資料表 solar_power.city 結構 -- 傾印 資料表 solar_power.city 結構
@ -1044,6 +1045,7 @@ CREATE TABLE `inverter_history_hour` (
`PowerStationId` INT(10) UNSIGNED NOT NULL DEFAULT '0', `PowerStationId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`INVERTERID` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `INVERTERID` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
`TIMESTAMP` TIMESTAMP NULL DEFAULT NULL, `TIMESTAMP` TIMESTAMP NULL DEFAULT NULL,
`Irradiance` DOUBLE NULL DEFAULT NULL,
`AC1V` DOUBLE NULL DEFAULT NULL, `AC1V` DOUBLE NULL DEFAULT NULL,
`AC1A` DOUBLE NULL DEFAULT NULL, `AC1A` DOUBLE NULL DEFAULT NULL,
`AC1W` DOUBLE NULL DEFAULT NULL, `AC1W` DOUBLE NULL DEFAULT NULL,
@ -1110,6 +1112,7 @@ CREATE TABLE `inverter_history_day` (
`PowerStationId` INT(10) UNSIGNED NOT NULL DEFAULT '0', `PowerStationId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`INVERTERID` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `INVERTERID` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
`TIMESTAMP` TIMESTAMP NULL DEFAULT NULL, `TIMESTAMP` TIMESTAMP NULL DEFAULT NULL,
`Irradiance` DOUBLE NULL DEFAULT NULL,
`AC1V` DOUBLE NULL DEFAULT NULL, `AC1V` DOUBLE NULL DEFAULT NULL,
`AC1A` DOUBLE NULL DEFAULT NULL, `AC1A` DOUBLE NULL DEFAULT NULL,
`AC1W` DOUBLE NULL DEFAULT NULL, `AC1W` DOUBLE NULL DEFAULT NULL,
@ -1176,6 +1179,7 @@ CREATE TABLE `inverter_history_month` (
`PowerStationId` INT(10) UNSIGNED NOT NULL DEFAULT '0', `PowerStationId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`INVERTERID` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `INVERTERID` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
`TIMESTAMP` TIMESTAMP NULL DEFAULT NULL, `TIMESTAMP` TIMESTAMP NULL DEFAULT NULL,
`Irradiance` DOUBLE NULL DEFAULT NULL,
`AC1V` DOUBLE NULL DEFAULT NULL, `AC1V` DOUBLE NULL DEFAULT NULL,
`AC1A` DOUBLE NULL DEFAULT NULL, `AC1A` DOUBLE NULL DEFAULT NULL,
`AC1W` DOUBLE NULL DEFAULT NULL, `AC1W` DOUBLE NULL DEFAULT NULL,

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace SolarPower.Models
{
public class AnalysisInverter
{
public List<string> XAxis { get; set; } //時間
public List<string> MultipleYaxes { get; set; } //Y軸名稱
public Dictionary<string, List<InverterHistoryInfo>> Series { get; set; } //數組
}
public class InverterHistoryInfo
{
public string Time { get; set; }
public string Yaxes { get; set; }
public double Value { get; set; }
}
}

View File

@ -16,8 +16,8 @@ namespace SolarPower.Models
public double Avg_PR { get; set; } //平均 PR 值(30天) public double Avg_PR { get; set; } //平均 PR 值(30天)
public double Today_kwhkwp { get; set; } //即時平均 kWh / kWp public double Today_kwhkwp { get; set; } //即時平均 kWh / kWp
public double Avg_kwhkwp { get; set; } //平均 kWh / kWp (30天) public double Avg_kwhkwp { get; set; } //平均 kWh / kWp (30天)
public double Today_monery { get; set; } //今日金額 public double Today_money { get; set; } //今日金額
public double Total_monery { get; set; } //今日金額 public double Total_money { get; set; } //今日金額
public double Today_carbon { get; set; } //今日減碳量 public double Today_carbon { get; set; } //今日減碳量
public double Total_carbon { get; set; } //累積減碳量 public double Total_carbon { get; set; } //累積減碳量
} }

View File

@ -657,6 +657,7 @@ namespace SolarPower.Models.PowerStation
public string TIMESTAMP { get; set; } public string TIMESTAMP { get; set; }
public int PowerStationId { get; set; } public int PowerStationId { get; set; }
public string INVERTERID { get; set; } public string INVERTERID { get; set; }
public double Irradiance { get; set; }
public double AC1V { get; set; } public double AC1V { get; set; }
public double AC1A { get; set; } public double AC1A { get; set; }
public double AC1W { get; set; } public double AC1W { get; set; }

View File

@ -48,8 +48,6 @@ namespace SolarPower.Quartz.Jobs
List<InverterHistory> updateInverterHistoryMonths = new List<InverterHistory>(); List<InverterHistory> updateInverterHistoryMonths = new List<InverterHistory>();
List<WeatherForecast> weatherForecasts = new List<WeatherForecast>(); List<WeatherForecast> weatherForecasts = new List<WeatherForecast>();
var DateTimeNow = DateTime.Now; var DateTimeNow = DateTime.Now;
var count = 0; var count = 0;
@ -73,9 +71,6 @@ namespace SolarPower.Quartz.Jobs
foreach (var a in location.WeatherElement) foreach (var a in location.WeatherElement)
{ {
if (a.ElementName == "Wx") if (a.ElementName == "Wx")
{ {
foreach (var time in a.Time) foreach (var time in a.Time)
@ -139,8 +134,6 @@ namespace SolarPower.Quartz.Jobs
}; };
await powerStationRepository.AddWeatherForecast(weatherForecasts, weather_forecast_properties); await powerStationRepository.AddWeatherForecast(weatherForecasts, weather_forecast_properties);
#region step2. DB及電站編號找出該電站的控制器 #region step2. DB及電站編號找出該電站的控制器
foreach (var powerStation in powerStations) foreach (var powerStation in powerStations)
{ {
@ -153,6 +146,8 @@ namespace SolarPower.Quartz.Jobs
calcPowerStation.Id = powerStation.Id; calcPowerStation.Id = powerStation.Id;
var dateNowDay = DateTimeNow.AddDays(-1).ToString("yyyy-MM-dd"); var dateNowDay = DateTimeNow.AddDays(-1).ToString("yyyy-MM-dd");
dateNowDay = "2021-07-19";
#region step2-1. 30 #region step2-1. 30
var table_name = String.Format("`{0}`.`s{1}01_station`", powerStation.SiteDB, powerStation.Code); var table_name = String.Format("`{0}`.`s{1}01_station`", powerStation.SiteDB, powerStation.Code);
logger.LogInformation("【CalcAvgPowerStationJob】【開始計算電站[{0}]在{1}的30天平均資料】", powerStation.Code, dateNowDay); logger.LogInformation("【CalcAvgPowerStationJob】【開始計算電站[{0}]在{1}的30天平均資料】", powerStation.Code, dateNowDay);
@ -229,6 +224,15 @@ namespace SolarPower.Quartz.Jobs
{ {
foreach(var inverterHistoryDay in inverterHistoriesDay) foreach(var inverterHistoryDay in inverterHistoriesDay)
{ {
inverterHistoryDay.DC1KW = inverterHistoryDay.DC1W / 1000;
inverterHistoryDay.DC2KW = inverterHistoryDay.DC2W / 1000;
inverterHistoryDay.DC3KW = inverterHistoryDay.DC3W / 1000;
inverterHistoryDay.DC4KW = inverterHistoryDay.DC4W / 1000;
inverterHistoryDay.DC5KW = inverterHistoryDay.DC5W / 1000;
inverterHistoryDay.DCKW = (inverterHistoryDay.DC1W + inverterHistoryDay.DC2W + inverterHistoryDay.DC3W + inverterHistoryDay.DC4W + inverterHistoryDay.DC5W) / 1000;
inverterHistoryDay.ACKW = (inverterHistoryDay.AC1W + inverterHistoryDay.AC2W + inverterHistoryDay.AC3W) / 1000;
allofInverterHistorDays.Add(inverterHistoryDay); allofInverterHistorDays.Add(inverterHistoryDay);
} }
} }
@ -302,6 +306,15 @@ namespace SolarPower.Quartz.Jobs
{ {
foreach(var inverterHistoryMonth in inverterHistoriesMonth) foreach(var inverterHistoryMonth in inverterHistoriesMonth)
{ {
inverterHistoryMonth.DC1KW = inverterHistoryMonth.DC1W / 1000;
inverterHistoryMonth.DC2KW = inverterHistoryMonth.DC2W / 1000;
inverterHistoryMonth.DC3KW = inverterHistoryMonth.DC3W / 1000;
inverterHistoryMonth.DC4KW = inverterHistoryMonth.DC4W / 1000;
inverterHistoryMonth.DC5KW = inverterHistoryMonth.DC5W / 1000;
inverterHistoryMonth.DCKW = (inverterHistoryMonth.DC1W + inverterHistoryMonth.DC2W + inverterHistoryMonth.DC3W + inverterHistoryMonth.DC4W + inverterHistoryMonth.DC5W) / 1000;
inverterHistoryMonth.ACKW = (inverterHistoryMonth.AC1W + inverterHistoryMonth.AC2W + inverterHistoryMonth.AC3W) / 1000;
inverterHistoryMonth.TIMESTAMP = Convert.ToDateTime(inverterHistoryMonth.TIMESTAMP).ToString("yyyy-MM-dd"); inverterHistoryMonth.TIMESTAMP = Convert.ToDateTime(inverterHistoryMonth.TIMESTAMP).ToString("yyyy-MM-dd");
insertInverterHistoryMonths.Add(inverterHistoryMonth); insertInverterHistoryMonths.Add(inverterHistoryMonth);
} }
@ -315,6 +328,15 @@ namespace SolarPower.Quartz.Jobs
{ {
foreach (var inverterHistoryMonth in inverterHistoriesMonth) foreach (var inverterHistoryMonth in inverterHistoriesMonth)
{ {
inverterHistoryMonth.DC1KW = inverterHistoryMonth.DC1W / 1000;
inverterHistoryMonth.DC2KW = inverterHistoryMonth.DC2W / 1000;
inverterHistoryMonth.DC3KW = inverterHistoryMonth.DC3W / 1000;
inverterHistoryMonth.DC4KW = inverterHistoryMonth.DC4W / 1000;
inverterHistoryMonth.DC5KW = inverterHistoryMonth.DC5W / 1000;
inverterHistoryMonth.DCKW = (inverterHistoryMonth.DC1W + inverterHistoryMonth.DC2W + inverterHistoryMonth.DC3W + inverterHistoryMonth.DC4W + inverterHistoryMonth.DC5W) / 1000;
inverterHistoryMonth.ACKW = (inverterHistoryMonth.AC1W + inverterHistoryMonth.AC2W + inverterHistoryMonth.AC3W) / 1000;
inverterHistoryMonth.TIMESTAMP = Convert.ToDateTime(inverterHistoryMonth.TIMESTAMP).ToString("yyyy-MM-dd"); inverterHistoryMonth.TIMESTAMP = Convert.ToDateTime(inverterHistoryMonth.TIMESTAMP).ToString("yyyy-MM-dd");
updateInverterHistoryMonths.Add(inverterHistoryMonth); updateInverterHistoryMonths.Add(inverterHistoryMonth);
} }
@ -416,6 +438,55 @@ namespace SolarPower.Quartz.Jobs
"PowerStationId", "PowerStationId",
"TIMESTAMP", "TIMESTAMP",
"INVERTERID", "INVERTERID",
"Irradiance",
"AC1V",
"AC1A",
"AC1W",
"AC1F",
"AC1WH",
"AC2V",
"AC2A",
"AC2W",
"AC2F",
"AC2WH",
"AC3V",
"AC3A",
"AC3W",
"AC3F",
"AC3WH",
"DC1V",
"DC1A",
"DC1W",
"DC1KW",
"DC1WH",
"DC2V",
"DC2A",
"DC2W",
"DC2KW",
"DC2WH",
"DC3V",
"DC3A",
"DC3W",
"DC3KW",
"DC3WH",
"DC4V",
"DC4A",
"DC4W",
"DC4KW",
"DC4WH",
"DC5V",
"DC5A",
"DC5W",
"DC5KW",
"DC5WH",
"PR",
"RA1",
"RA2",
"RA3",
"RA4",
"RA5",
"DCKW",
"ACKW",
"KWH", "KWH",
"TODAYKWH", "TODAYKWH",
"KWHKWP", "KWHKWP",

View File

@ -223,8 +223,12 @@ namespace SolarPower.Quartz.Jobs
logger.LogInformation("【CalcPowerStationJob】【開始計算電站[{0}]在{1}的逆變器的資訊】", powerStation.Code, dateTime); logger.LogInformation("【CalcPowerStationJob】【開始計算電站[{0}]在{1}的逆變器的資訊】", powerStation.Code, dateTime);
inverterHistories = await powerStationRepository.CalcInverterHisyortHourData(dateTime, powerStation.SiteDB, inverter_table_name, inverterIds); inverterHistories = await powerStationRepository.CalcInverterHisyortHourData(dateTime, powerStation.SiteDB, inverter_table_name, inverterIds);
//取得日照計要找的欄位資訊
var pyrheliometer = await powerStationRepository.GetFirstPyrheliometerInfo(powerStation.Id, powerStation.SiteDB);
var pyrheliometerValue = await powerStationRepository.GetFirstPyrheliometerValue(dateTime, pyrheliometer.DBName, pyrheliometer.TableName, pyrheliometer.ColName);
foreach (var inverterHistory in inverterHistories) foreach (var inverterHistory in inverterHistories)
{ {
inverterHistory.Irradiance = pyrheliometerValue;
inverterHistory.DC1KW = inverterHistory.DC1W / 1000; inverterHistory.DC1KW = inverterHistory.DC1W / 1000;
inverterHistory.DC2KW = inverterHistory.DC2W / 1000; inverterHistory.DC2KW = inverterHistory.DC2W / 1000;
inverterHistory.DC3KW = inverterHistory.DC3W / 1000; inverterHistory.DC3KW = inverterHistory.DC3W / 1000;
@ -364,6 +368,55 @@ namespace SolarPower.Quartz.Jobs
"PowerStationId", "PowerStationId",
"INVERTERID", "INVERTERID",
"TIMESTAMP", "TIMESTAMP",
"Irradiance",
"AC1V",
"AC1A",
"AC1W",
"AC1F",
"AC1WH",
"AC2V",
"AC2A",
"AC2W",
"AC2F",
"AC2WH",
"AC3V",
"AC3A",
"AC3W",
"AC3F",
"AC3WH",
"DC1V",
"DC1A",
"DC1W",
"DC1KW",
"DC1WH",
"DC2V",
"DC2A",
"DC2W",
"DC2KW",
"DC2WH",
"DC3V",
"DC3A",
"DC3W",
"DC3KW",
"DC3WH",
"DC4V",
"DC4A",
"DC4W",
"DC4KW",
"DC4WH",
"DC5V",
"DC5A",
"DC5W",
"DC5KW",
"DC5WH",
"PR",
"RA1",
"RA2",
"RA3",
"RA4",
"RA5",
"DCKW",
"ACKW",
"KWH", "KWH",
"TODAYKWH", "TODAYKWH",
"KWHKWP", "KWHKWP",

View File

@ -198,7 +198,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql_power = @$"SELECT DATE_FORMAT(ps.timestamp, '%Y-%m-%d %H') AS Label, ps.KWH AS PowerData, pyr.Irradiance AS IrradianceData var sql_power = @$"SELECT DATE_FORMAT(ps.timestamp,'%H %p') AS Label, ps.KWH AS PowerData, pyr.Irradiance AS IrradianceData
FROM power_station_history_hour ps FROM power_station_history_hour ps
LEFT JOIN sensor_history_hour pyr ON ps.PowerStationId = pyr.PowerStationId AND DATE_FORMAT(ps.timestamp, '%Y-%m-%d %H') = DATE_FORMAT(pyr.timestamp, '%Y-%m-%d %H') LEFT JOIN sensor_history_hour pyr ON ps.PowerStationId = pyr.PowerStationId AND DATE_FORMAT(ps.timestamp, '%Y-%m-%d %H') = DATE_FORMAT(pyr.timestamp, '%Y-%m-%d %H')
WHERE ps.PowerStationId = @PowerStationId WHERE ps.PowerStationId = @PowerStationId

View File

@ -2699,7 +2699,6 @@ namespace SolarPower.Repository.Implement
AVG(s.AC3W) AS AC3W, AVG(s.AC3W) AS AC3W,
AVG(s.AC3F) AS AC3F, AVG(s.AC3F) AS AC3F,
AVG(s.AC3WH) AS AC3WH, AVG(s.AC3WH) AS AC3WH,
AVG(s.ACRUNTIME) AS ACRUNTIME,
AVG(s.DC1V) AS DC1V, AVG(s.DC1V) AS DC1V,
AVG(s.DC1A) AS DC1A, AVG(s.DC1A) AS DC1A,
AVG(s.DC1W) AS DC1W, AVG(s.DC1W) AS DC1W,
@ -2757,6 +2756,51 @@ namespace SolarPower.Repository.Implement
} }
} }
public async Task<DeviceInfo> GetFirstPyrheliometerInfo(int powerStationId, string db_name)
{
DeviceInfo result;
using (IDbConnection conn = this._databaseHelper.GetConnection())
{
try
{
var sql = $@"SELECT d.*
FROM {db_name}.device d
LEFT JOIN {db_name}.controller c ON d.ControllerId = c.Id AND c.Deleted = 0
WHERE d.Enabled = 1 AND d.`Status` != 0 AND d.`Type` = 'PYR'
AND d.PowerStationId = @PowerStationId
ORDER BY d.ColName";
result = await conn.QueryFirstAsync<DeviceInfo>(sql, new { PowerStationId = powerStationId });
}
catch (Exception exception)
{
throw exception;
}
return result;
}
}
public async Task<double> GetFirstPyrheliometerValue(string dateTime, string db_name, string table_name, string col_name)
{
double result;
using (IDbConnection conn = this._databaseHelper.GetConnection())
{
try
{
var sql = $@"SELECT AVG({col_name})
FROM {db_name}.{table_name}
WHERE FROM_UNIXTIME(TIMESTAMP/1000, '%Y-%m-%d %H') = @DateTime";
result = await conn.QueryFirstAsync<double>(sql, new { DateTime = dateTime });
}
catch (Exception exception)
{
throw exception;
}
return result;
}
}
public async Task<List<InverterHistory>> CalcInverterHistoryDayDataByPowerStationId(string nowDay, string db_name, int powerStationId) public async Task<List<InverterHistory>> CalcInverterHistoryDayDataByPowerStationId(string nowDay, string db_name, int powerStationId)
{ {
List<InverterHistory> result; List<InverterHistory> result;
@ -2768,6 +2812,7 @@ namespace SolarPower.Repository.Implement
inv.PowerStationId, inv.PowerStationId,
DATE_FORMAT(inv.TIMESTAMP, '%Y-%m-%d') AS TIMESTAMP, DATE_FORMAT(inv.TIMESTAMP, '%Y-%m-%d') AS TIMESTAMP,
inv.INVERTERID, inv.INVERTERID,
AVG(inv.Irradiance) AS Irradiance,
AVG(inv.AC1V) AS AC1V, AVG(inv.AC1V) AS AC1V,
AVG(inv.AC1A) AS AC1A, AVG(inv.AC1A) AS AC1A,
AVG(inv.AC1W) AS AC1W, AVG(inv.AC1W) AS AC1W,
@ -2783,7 +2828,6 @@ namespace SolarPower.Repository.Implement
AVG(inv.AC3W) AS AC3W, AVG(inv.AC3W) AS AC3W,
AVG(inv.AC3F) AS AC3F, AVG(inv.AC3F) AS AC3F,
AVG(inv.AC3WH) AS AC3WH, AVG(inv.AC3WH) AS AC3WH,
AVG(inv.ACRUNTIME) AS ACRUNTIME,
AVG(inv.DC1V) AS DC1V, AVG(inv.DC1V) AS DC1V,
AVG(inv.DC1A) AS DC1A, AVG(inv.DC1A) AS DC1A,
AVG(inv.DC1W) AS DC1W, AVG(inv.DC1W) AS DC1W,
@ -2889,6 +2933,48 @@ namespace SolarPower.Repository.Implement
inv.PowerStationId, inv.PowerStationId,
DATE_FORMAT(inv.TIMESTAMP, '%Y-%m') AS TIMESTAMP, DATE_FORMAT(inv.TIMESTAMP, '%Y-%m') AS TIMESTAMP,
inv.INVERTERID, inv.INVERTERID,
AVG(inv.Irradiance) AS Irradiance,
AVG(inv.AC1V) AS AC1V,
AVG(inv.AC1A) AS AC1A,
AVG(inv.AC1W) AS AC1W,
AVG(inv.AC1F) AS AC1F,
AVG(inv.AC1WH) AS AC1WH,
AVG(inv.AC2V) AS AC2V,
AVG(inv.AC2A) AS AC2A,
AVG(inv.AC2W) AS AC2W,
AVG(inv.AC2F) AS AC2F,
AVG(inv.AC2WH) AS AC2WH,
AVG(inv.AC3V) AS AC3V,
AVG(inv.AC3A) AS AC3A,
AVG(inv.AC3W) AS AC3W,
AVG(inv.AC3F) AS AC3F,
AVG(inv.AC3WH) AS AC3WH,
AVG(inv.DC1V) AS DC1V,
AVG(inv.DC1A) AS DC1A,
AVG(inv.DC1W) AS DC1W,
AVG(inv.DC1WH) AS DC1WH,
AVG(inv.DC2V) AS DC2V,
AVG(inv.DC2A) AS DC2A,
AVG(inv.DC2W) AS DC2W,
AVG(inv.DC2WH) AS DC2WH,
AVG(inv.DC3V) AS DC3V,
AVG(inv.DC3A) AS DC3A,
AVG(inv.DC3W) AS DC3W,
AVG(inv.DC3WH) AS DC3WH,
AVG(inv.DC4V) AS DC4V,
AVG(inv.DC4A) AS DC4A,
AVG(inv.DC4W) AS DC4W,
AVG(inv.DC4WH) AS DC4WH,
AVG(inv.DC5V) AS DC5V,
AVG(inv.DC5A) AS DC5A,
AVG(inv.DC5W) AS DC5W,
AVG(inv.DC5WH) AS DC5WH,
AVG(inv.PR) AS PR,
AVG(inv.RA1) AS RA1,
AVG(inv.RA2) AS RA2,
AVG(inv.RA3) AS RA3,
AVG(inv.RA4) AS RA4,
AVG(inv.RA5) AS RA5,
SUM(inv.KWH) AS KWH, SUM(inv.KWH) AS KWH,
SUM(inv.TODAYKWH) AS TODAYKWH, SUM(inv.TODAYKWH) AS TODAYKWH,
SUM(inv.TODAYKWH) / i.Capacity AS KWHKWP SUM(inv.TODAYKWH) / i.Capacity AS KWHKWP
@ -3138,7 +3224,7 @@ namespace SolarPower.Repository.Implement
} }
} }
public async Task<MoneyAndCarbon> GetMoneyAndCarbonWithHistoryHour (int powerstationId , string dateTime ,int type) public async Task<MoneyAndCarbon> GetMoneyAndCarbonWithHistoryHour(int powerstationId, string dateTime, int type)
{ {
MoneyAndCarbon result; MoneyAndCarbon result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())

View File

@ -521,6 +521,8 @@ namespace SolarPower.Repository.Interface
Task<List<InverterHistory>> CalcInverterHisyort15minData(string dateTime, string db_name, string table_name, List<string> inverterIds); Task<List<InverterHistory>> CalcInverterHisyort15minData(string dateTime, string db_name, string table_name, List<string> inverterIds);
Task<int> AddInverter15minHistory(List<InverterHistory> entity, List<string> properties); Task<int> AddInverter15minHistory(List<InverterHistory> entity, List<string> properties);
Task<List<InverterHistory>> CalcInverterHisyortHourData(string dateTime, string db_name, string table_name, List<string> inverterIds); Task<List<InverterHistory>> CalcInverterHisyortHourData(string dateTime, string db_name, string table_name, List<string> inverterIds);
Task<DeviceInfo> GetFirstPyrheliometerInfo(int powerStationId, string db_name);
Task<double> GetFirstPyrheliometerValue(string dateTime, string db_name, string table_name, string col_name);
Task<int> AddInverterHistory(List<InverterHistory> entity, List<string> properties); Task<int> AddInverterHistory(List<InverterHistory> entity, List<string> properties);
Task<List<InverterHistory>> CalcInverterHistoryDayDataByPowerStationId(string nowDay, string db_name, int powerStationId); Task<List<InverterHistory>> CalcInverterHistoryDayDataByPowerStationId(string nowDay, string db_name, int powerStationId);
Task<int> AddInverterHistoryDayList(List<InverterHistory> entity, List<string> properties); Task<int> AddInverterHistoryDayList(List<InverterHistory> entity, List<string> properties);

View File

@ -252,7 +252,7 @@
} }
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -341,7 +341,7 @@
} }
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -198,7 +198,7 @@
"data": "subTotalCapacity" "data": "subTotalCapacity"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -1,6 +1,6 @@
@{ @{
ViewData["MainNum"] = "6"; ViewData["MainNum"] = "6";
ViewData["SubNum"] = "1"; ViewData["SubNum"] = "2";
ViewData["Title"] = "運維管理"; ViewData["Title"] = "運維管理";
} }
@using SolarPower.Models.Role @using SolarPower.Models.Role
@ -330,7 +330,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -1,6 +1,6 @@
@{ @{
ViewData["MainNum"] = "6"; ViewData["MainNum"] = "6";
ViewData["SubNum"] = "2"; ViewData["SubNum"] = "3";
ViewData["Title"] = "運維作業記錄"; ViewData["Title"] = "運維作業記錄";
} }
@using SolarPower.Models.Role @using SolarPower.Models.Role
@ -413,7 +413,7 @@
'visible': @(ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.CompanyUser ? "false" : "true") 'visible': @(ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.CompanyUser ? "false" : "true")
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -1,5 +1,6 @@
@{ @{
ViewData["MainNum"] = "2"; ViewData["MainNum"] = "6";
ViewData["SubNum"] = "1";
ViewData["Title"] = "電站管理"; ViewData["Title"] = "電站管理";
} }
@ -194,7 +195,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -281,7 +282,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -350,7 +351,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -438,7 +439,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -526,7 +527,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -602,7 +603,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -177,7 +177,7 @@
</li> </li>
} }
<!-- Example of open and active states --> <!-- Example of open and active states -->
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("PowerStation")) @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("PowerStationInfo"))
{ {
<li class="@(ViewData["MainNum"] == "2" ? "active open" : "")"> <li class="@(ViewData["MainNum"] == "2" ? "active open" : "")">
<a href="javascript:void(0);" title="Category" data-filter-tags="category"> <a href="javascript:void(0);" title="Category" data-filter-tags="category">
@ -200,7 +200,7 @@
<li class="@(ViewData["MainNum"].ToString() == "2" && <li class="@(ViewData["MainNum"].ToString() == "2" &&
ViewData["SubNum"].ToString() == ViewBag.myPowerStationSummaries.IndexOf(myPowerStationSummary).ToString() && ViewData["SubNum"].ToString() == ViewBag.myPowerStationSummaries.IndexOf(myPowerStationSummary).ToString() &&
ViewData["TagNum"].ToString() == myPowerStationSummary.MyPowerStations.IndexOf(myPowerStation).ToString() ? "active" : "")"> ViewData["TagNum"].ToString() == myPowerStationSummary.MyPowerStations.IndexOf(myPowerStation).ToString() ? "active" : "")">
<a asp-controller="PowerStation" asp-action="Edit" asp-route-stationId="@myPowerStation.PowerStationId" title="Sublevel Item" data-filter-tags="utilities menu child sublevel item"> <a asp-controller="StationOverview" asp-action="Info" asp-route-stationId="@myPowerStation.PowerStationId" title="Sublevel Item" data-filter-tags="utilities menu child sublevel item">
<span class="nav-link-text" data-i18n="nav.utilities_menu_child_sublevel_item">@myPowerStation.PowerStationName</span> <span class="nav-link-text" data-i18n="nav.utilities_menu_child_sublevel_item">@myPowerStation.PowerStationName</span>
</a> </a>
</li> </li>
@ -209,15 +209,16 @@
</ul> </ul>
</li> </li>
} }
<li class="@(ViewData["MainNum"] == "2" && ViewData["SubNum"].ToString() == ViewBag.myPowerStationSummaries.Count.ToString() ? "active" : "")">
<a asp-controller="PowerStation" asp-action="Index" title="電站管理" data-filter-tags="utilities disabled item"> @*<li class="@(ViewData["MainNum"] == "2" && ViewData["SubNum"].ToString() == ViewBag.myPowerStationSummaries.Count.ToString() ? "active" : "")">
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">電站管理</span> <a asp-controller="PowerStation" asp-action="Index" title="電站管理" data-filter-tags="utilities disabled item">
</a> <span class="nav-link-text" data-i18n="nav.utilities_disabled_item">電站管理</span>
</li> </a>
</li>*@
</ul> </ul>
</li> </li>
} }
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("PowerStation"))@*TODO:修改成交叉分析的權限*@ @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("AnalysisStationCombine") || ViewBag.auths.Contains("AnalysisStationInfo") || ViewBag.auths.Contains("AnalysisInverter"))
{ {
<li class="@(ViewData["MainNum"] == "3" ? "active open" : "")"> <li class="@(ViewData["MainNum"] == "3" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
@ -225,21 +226,30 @@
<span class="nav-link-text" data-i18n="nav.category">交叉分析</span> <span class="nav-link-text" data-i18n="nav.category">交叉分析</span>
</a> </a>
<ul> <ul>
<li class="@(ViewData["MainNum"] == "3" && ViewData["SubNum"] == "1" ? "active" : "")"> @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("AnalysisStationCombine"))
<a asp-controller="AnalysisStationCombine" asp-action="Index" title="合併電站" data-filter-tags="utilities disabled item"> {
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">合併電站</span> <li class="@(ViewData["MainNum"] == "3" && ViewData["SubNum"] == "1" ? "active" : "")">
</a> <a asp-controller="AnalysisStationCombine" asp-action="Index" title="合併電站" data-filter-tags="utilities disabled item">
</li> <span class="nav-link-text" data-i18n="nav.utilities_disabled_item">合併電站</span>
<li class="@(ViewData["MainNum"] == "3" && ViewData["SubNum"] == "2" ? "active" : "")"> </a>
<a asp-controller="AnalysisStationInfo" asp-action="Index" title="電站交叉分析" data-filter-tags="utilities disabled item"> </li>
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">電站交叉分析</span> }
</a> @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("AnalysisStationInfo"))
</li> {
<li class="@(ViewData["MainNum"] == "3" && ViewData["SubNum"] == "3" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "3" && ViewData["SubNum"] == "2" ? "active" : "")">
<a asp-controller="AnalysisInverter" asp-action="Index" title="逆變器交叉分析" data-filter-tags="utilities disabled item"> <a asp-controller="AnalysisStationInfo" asp-action="Index" title="電站交叉分析" data-filter-tags="utilities disabled item">
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">逆變器交叉分析</span> <span class="nav-link-text" data-i18n="nav.utilities_disabled_item">電站交叉分析</span>
</a> </a>
</li> </li>
}
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("AnalysisInverter"))
{
<li class="@(ViewData["MainNum"] == "3" && ViewData["SubNum"] == "3" ? "active" : "")">
<a asp-controller="AnalysisInverter" asp-action="Index" title="逆變器交叉分析" data-filter-tags="utilities disabled item">
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">逆變器交叉分析</span>
</a>
</li>
}
</ul> </ul>
</li> </li>
} }
@ -287,7 +297,7 @@
</li> </li>
} }
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("Operation") || ViewBag.auths.Contains("OperationRecord")) @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("PowerStation") || ViewBag.auths.Contains("Operation") || ViewBag.auths.Contains("OperationRecord"))
{ {
<li class="@(ViewData["MainNum"] == "6" ? "active open" : "")"> <li class="@(ViewData["MainNum"] == "6" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
@ -295,9 +305,17 @@
<span class="nav-link-text" data-i18n="nav.category">運維管理</span> <span class="nav-link-text" data-i18n="nav.category">運維管理</span>
</a> </a>
<ul> <ul>
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("PowerStationManager"))
{
<li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"].ToString() == "1" ? "active" : "")">
<a asp-controller="PowerStation" asp-action="Index" title="電站管理" data-filter-tags="utilities disabled item">
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">電站管理</span>
</a>
</li>
}
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("Operation")) @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("Operation"))
{ {
<li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"] == "1" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"] == "2" ? "active" : "")">
<a asp-controller="Operation" asp-action="Index" title="定期計畫建立" data-filter-tags="utilities disabled item"> <a asp-controller="Operation" asp-action="Index" title="定期計畫建立" data-filter-tags="utilities disabled item">
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">定期計畫建立</span> <span class="nav-link-text" data-i18n="nav.utilities_disabled_item">定期計畫建立</span>
</a> </a>
@ -305,7 +323,7 @@
} }
@if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("OperationRecord")) @if (ViewBag.myUser.Role.Layer == (int)RoleLayerEnum.PlatformAdmin || ViewBag.auths.Contains("OperationRecord"))
{ {
<li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"] == "2" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"] == "3" ? "active" : "")">
<a asp-controller="Operation" asp-action="Record" title="運維作業記錄" data-filter-tags="utilities disabled item"> <a asp-controller="Operation" asp-action="Record" title="運維作業記錄" data-filter-tags="utilities disabled item">
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">運維作業記錄</span> <span class="nav-link-text" data-i18n="nav.utilities_disabled_item">運維作業記錄</span>
</a> </a>

View File

@ -276,17 +276,16 @@
type: 'bar', type: 'bar',
label: '輸出功率', label: '輸出功率',
yAxisID: 'A', yAxisID: 'A',
backgroundColor: color.primary._300, backgroundColor: 'rgb(103, 180, 172)',
borderColor: color.primary._500,
order: 2, order: 2,
data: chartToday.powerDatas data: chartToday.powerDatas
}, { }, {
type: 'line', type: 'line',
label: '日照度', label: '日照度',
yAxisID: 'B', yAxisID: 'B',
borderColor: color.danger._300, borderColor: 'rgb(190, 45, 45)',
pointBackgroundColor: color.danger._500, pointBackgroundColor: 'rgb(190, 45, 45)',
pointBorderColor: color.danger._500, pointBorderColor: 'rgb(190, 45, 45)',
pointBorderWidth: 1, pointBorderWidth: 1,
borderWidth: 2, borderWidth: 2,
pointRadius: 4, pointRadius: 4,
@ -344,16 +343,15 @@
type: 'bar', type: 'bar',
label: '輸出功率', label: '輸出功率',
yAxisID: 'A', yAxisID: 'A',
backgroundColor: color.primary._300, backgroundColor: 'rgb(103, 180, 172)',
borderColor: color.primary._500,
data: chart7day.powerDatas data: chart7day.powerDatas
}, { }, {
type: 'line', type: 'line',
label: '日照度', label: '日照度',
yAxisID: 'B', yAxisID: 'B',
borderColor: color.danger._300, borderColor: 'rgb(190, 45, 45)',
pointBackgroundColor: color.danger._500, pointBackgroundColor: 'rgb(190, 45, 45)',
pointBorderColor: color.danger._500, pointBorderColor: 'rgb(190, 45, 45)',
pointBorderWidth: 1, pointBorderWidth: 1,
borderWidth: 2, borderWidth: 2,
pointRadius: 4, pointRadius: 4,
@ -410,16 +408,15 @@
type: 'bar', type: 'bar',
label: '輸出功率', label: '輸出功率',
yAxisID: 'A', yAxisID: 'A',
backgroundColor: color.primary._300, backgroundColor: 'rgb(103, 180, 172)',
borderColor: color.primary._500,
data: chartMonth.powerDatas data: chartMonth.powerDatas
}, { }, {
type: 'line', type: 'line',
label: '日照度', label: '日照度',
yAxisID: 'B', yAxisID: 'B',
borderColor: color.danger._300, borderColor: 'rgb(190, 45, 45)',
pointBackgroundColor: color.danger._500, pointBackgroundColor: 'rgb(190, 45, 45)',
pointBorderColor: color.danger._500, pointBorderColor: 'rgb(190, 45, 45)',
pointBorderWidth: 1, pointBorderWidth: 1,
borderWidth: 2, borderWidth: 2,
pointRadius: 4, pointRadius: 4,
@ -476,16 +473,15 @@
type: 'bar', type: 'bar',
label: '輸出功率', label: '輸出功率',
yAxisID: 'A', yAxisID: 'A',
backgroundColor: color.primary._300, backgroundColor: 'rgb(103, 180, 172)',
borderColor: color.primary._500,
data: chartYear.powerDatas data: chartYear.powerDatas
}, { }, {
type: 'line', type: 'line',
label: '日照度', label: '日照度',
yAxisID: 'B', yAxisID: 'B',
borderColor: color.danger._300, borderColor: 'rgb(190, 45, 45)',
pointBackgroundColor: color.danger._500, pointBackgroundColor: 'rgb(190, 45, 45)',
pointBorderColor: color.danger._500, pointBorderColor: 'rgb(190, 45, 45)',
pointBorderWidth: 1, pointBorderWidth: 1,
borderWidth: 2, borderWidth: 2,
pointRadius: 4, pointRadius: 4,
@ -719,7 +715,7 @@
} }
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -891,7 +887,7 @@
"data": "function" "data": "function"
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -188,7 +188,7 @@
} }
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -264,7 +264,7 @@
} }
], ],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -352,7 +352,7 @@
} }
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",
@ -436,7 +436,7 @@
} }
}], }],
"language": { "language": {
"emptyTable": "無資料...", "emptyTable": "無資料",
"processing": "處理中...", "processing": "處理中...",
"loadingRecords": "載入中...", "loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果", "lengthMenu": "顯示 _MENU_ 項結果",

View File

@ -22,7 +22,7 @@
// "Password": "8WMHBEWuT0XoAB4kzduQHA==" // "Password": "8WMHBEWuT0XoAB4kzduQHA=="
//}, //},
"BackgroundServiceCron": { "BackgroundServiceCron": {
"CalcPowerStationJob": "0/10 * * * * ?", "CalcPowerStationJob": "0 5 * * * ?",
"CalcAvgPowerStationJob": "0 0 2 * * ?", "CalcAvgPowerStationJob": "0 0 2 * * ?",
"OperationScheduleJob": "0 0 2 * * ?", "OperationScheduleJob": "0 0 2 * * ?",
"CalcInverter15minJob": "0 2/15 * * * ?" "CalcInverter15minJob": "0 2/15 * * * ?"