From ace768d6ad0dee6bf05df50616fa426c572aa3a3 Mon Sep 17 00:00:00 2001 From: b110212000 Date: Mon, 2 Aug 2021 13:54:05 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=8B=E8=BC=89EXCEL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/StationReportController.cs | 527 +++++++++++++++++- SolarPower/Models/StationReport.cs | 2 + .../Implement/PowerStationRepository.cs | 149 +++++ .../Interface/IPowerStationRepository.cs | 1 + 4 files changed, 676 insertions(+), 3 deletions(-) diff --git a/SolarPower/Controllers/StationReportController.cs b/SolarPower/Controllers/StationReportController.cs index e49d663..f9b4035 100644 --- a/SolarPower/Controllers/StationReportController.cs +++ b/SolarPower/Controllers/StationReportController.cs @@ -79,6 +79,17 @@ namespace SolarPower.Controllers { ApiResult apiResult = new ApiResult(); InvAndMoney inverter = new InvAndMoney(); + bool Showmoney; + if(post.Userid == 0) + { + Showmoney = myUser.Role.Auths.Contains("ShowMoney"); + } + else + { + Showmoney = await powerStationRepository.CheckShowMoney(post.Userid); + } + + try { var powerStation = await powerStationRepository.GetOneAsync(post.PowerStation); @@ -93,7 +104,7 @@ namespace SolarPower.Controllers { inverter.Inv[i] = "inv_" + inverter.Inv[i].Substring(inverter.Inv[i].Length - 4, 4); } - if (myUser.Role.Auths.Contains("ShowMoney")) + if (Showmoney) { inverter.ShowMoney = 1; }else @@ -183,7 +194,8 @@ namespace SolarPower.Controllers FormType = postObject.FormType, SearchType = postObject.SearchType, Time = postObject.Time, - PowerStation = Convert.ToInt32(powerstationid.Value) + PowerStation = Convert.ToInt32(powerstationid.Value), + Userid = postObject.Userid }; var Formbody = GetForm(select_Table);//取body var Formhead = GetTableHead(select_Table);//取head @@ -633,7 +645,7 @@ namespace SolarPower.Controllers workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); - return File(ms, "application/vnd.ms-excel", name+"報表.xlsx"); + return File(ms, "application/vnd.ms-excel", name + "報表.xlsx"); } public string Checknull(string a) @@ -666,5 +678,514 @@ namespace SolarPower.Controllers return apiResult; } + public string ExportExcelBackDownload(string post) + { + var postObject = JsonConvert.DeserializeObject(post); + var workbook = new XSSFWorkbook(); + #region excel設定 + IFont font12 = workbook.CreateFont(); + font12.FontName = "新細明體"; + font12.FontHeightInPoints = 12; + ICellStyle style12 = workbook.CreateCellStyle(); + style12.SetFont(font12); + style12.Alignment = HorizontalAlignment.Center; + style12.VerticalAlignment = VerticalAlignment.Center; + IFont font12Times = workbook.CreateFont(); + font12Times.FontName = "Times New Roman"; + font12Times.FontHeightInPoints = 12; + IFont font18 = workbook.CreateFont(); + font18.FontName = "新細明體"; + font18.FontHeightInPoints = 18; + font18.IsBold = true; + ICellStyle styleTitle18 = workbook.CreateCellStyle(); + styleTitle18.SetFont(font18); + styleTitle18.Alignment = HorizontalAlignment.Center; + styleTitle18.VerticalAlignment = VerticalAlignment.Center; + ICellStyle styleLeft12 = workbook.CreateCellStyle(); + styleLeft12.SetFont(font12); + styleLeft12.Alignment = HorizontalAlignment.Left; + styleLeft12.VerticalAlignment = VerticalAlignment.Center; + ICellStyle styleLine12 = workbook.CreateCellStyle(); + styleLine12.SetFont(font12); + styleLine12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; + styleLine12.VerticalAlignment = VerticalAlignment.Center; + styleLine12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; + styleLine12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; + styleLine12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; + styleLine12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; + ICellStyle stylein12 = workbook.CreateCellStyle(); + stylein12.SetFont(font12Times); + stylein12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left; + stylein12.VerticalAlignment = VerticalAlignment.Center; + stylein12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.WrapText = true; + #endregion + foreach (var powerstationid in postObject.PowerStation) + { + var sheet = workbook.CreateSheet(powerstationid.Name); + Select_table select_Table = new Select_table + { + FormType = postObject.FormType, + SearchType = postObject.SearchType, + Time = postObject.Time, + PowerStation = Convert.ToInt32(powerstationid.Value), + Userid = postObject.Userid + }; + var Formbody = GetForm(select_Table);//取body + var Formhead = GetTableHead(select_Table);//取head + int RowPosition = 0; + + switch (postObject.FormType) + { + case 0: //日報表 + #region 顯示head //RowPosition = 0 + IRow row = sheet.CreateRow(RowPosition); + ICell cell = row.CreateCell(0); + int index = 0; + cell.SetCellValue("Date"); + cell.CellStyle = styleLine12; + sheet.SetColumnWidth(index, 4 * 160 * 8); + index++; + + foreach (var head in Formhead.Result.Data.Inv) + { + cell = row.CreateCell(index); + cell.SetCellValue(head); + cell.CellStyle = styleLine12; + sheet.SetColumnWidth(index, 4 * 160 * 6); + index++; + } + + List lasthead = new List() + { + "小時發電量(kWh)", + "小時發電量百分比(%)", + "小時平均日照度(W/㎡)", + "小時平均模組溫度(°C)" + }; + if (Formhead.Result.Data.ShowMoney == 1) + { + lasthead.Add("小時售電金額(NTD)"); + } + + + + foreach (var head in lasthead) + { + cell = row.CreateCell(index); + cell.SetCellValue(head); + cell.CellStyle = styleLine12; + sheet.SetColumnWidth(index, 4 * 160 * 12); + index++; + } + #endregion + + #region 顯示body //RowPosition = 1 + RowPosition++; + var thour = ""; var tpr = ""; var tkwh = ""; var kWhkwp = ""; var ntd = ""; var ntdone = ""; + foreach (dynamic body in Formbody.Result.Data) + { + index = 0; + var dbody = body as IDictionary; + thour = Checknull(Math.Round(Convert.ToDouble(dbody["tothour"]), 2).ToString()); + tpr = Checknull(Math.Round(Convert.ToDouble(dbody["pr"]), 2).ToString()); + tkwh = Checknull(Math.Round(Convert.ToDouble(dbody["totKWH"]), 2).ToString()); + kWhkwp = Checknull(Math.Round(Convert.ToDouble(dbody["totKWHKWP"]), 2).ToString()); + ntd = Checknull(Math.Round(Convert.ToDouble(dbody["totmoney"]), 2).ToString()); + + double onemoney = Convert.ToDouble(ntd) / Convert.ToDouble(tkwh); + if (double.IsNaN(onemoney)) + { + onemoney = 0; + } + ntdone = Checknull(Math.Round(onemoney, 2).ToString()); + + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + var b = dbody["report_date"].ToString(); + cell.SetCellValue(b); + cell.CellStyle = styleLine12; + index++; + foreach (var head in Formhead.Result.Data.Inv) + { + cell = row.CreateCell(index); + cell.SetCellValue(dbody[head] == null ? "0" : dbody[head].ToString()); + cell.CellStyle = styleLine12; + index++; + } + List bodynames = new List(){ + "hourKWH", + "hourKWHp", + "irradiance", + "temperature" + }; + if (Formhead.Result.Data.ShowMoney == 1) + { + bodynames.Add("hourmoney"); + } + foreach (var bodyname in bodynames) + { + cell = row.CreateCell(index); + if (dbody[bodyname] == null) + { + cell.SetCellValue("0"); + } + else + { + var c = dbody[bodyname].ToString(); + cell.SetCellValue(c); + } + cell.CellStyle = styleLine12; + index++; + } + RowPosition++; + } + #endregion + + #region 顯示總量//RowPosition = body + 2 + RowPosition += 2;//空兩行 + index = 0; + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + cell.SetCellValue("日照小時:"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue(thour); + cell.CellStyle = styleLine12; + RowPosition++; + + index = 0; + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + cell.SetCellValue("kWH/kWP:"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue(kWhkwp); + cell.CellStyle = styleLine12; + RowPosition++; + + index = 0; + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + cell.SetCellValue("PR%:"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue(tpr); + cell.CellStyle = styleLine12; + RowPosition++; + + + index = 0; + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + cell.SetCellValue("日發電量(kWh):"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue(tkwh); + cell.CellStyle = styleLine12; + RowPosition++; + + + if (Formhead.Result.Data.ShowMoney == 1) + { + index = 0; + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + cell.SetCellValue("日售電金額(NTD):"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue(ntd); + cell.CellStyle = styleLine12; + RowPosition++; + + index = 0; + row = sheet.CreateRow(RowPosition); + cell = row.CreateCell(index); + cell.SetCellValue("日售電單價(NTD):"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue(ntdone); + cell.CellStyle = styleLine12; + } + + + + #endregion + break; + case 1: // 月報表 + #region 顯示head //RowPosition = 0 + IRow row2 = sheet.CreateRow(RowPosition); + ICell cell2 = row2.CreateCell(0); + int index2 = 0; + cell2.SetCellValue("Date"); + cell2.CellStyle = styleLine12; + sheet.SetColumnWidth(index2, 4 * 160 * 8); + index2++; + + foreach (var head in Formhead.Result.Data.Inv) + { + cell2 = row2.CreateCell(index2); + cell2.SetCellValue(head); + cell2.CellStyle = styleLine12; + sheet.SetColumnWidth(index2, 4 * 160 * 8); + index2++; + } + + List lasthead2 = new List() + { + "日發電量(kWh)", + "日發電量百分比(%)", + "日照小時(hr)", + "kWH/kWP", + "PR%", + "日平均日照度(W/㎡)", + "日平均模組溫度(°C)" + + }; + if (Formhead.Result.Data.ShowMoney == 1) + { + lasthead2.Add("日售電金額(NTD)"); + } + foreach (var head in lasthead2) + { + cell2 = row2.CreateCell(index2); + cell2.SetCellValue(head); + cell2.CellStyle = styleLine12; + sheet.SetColumnWidth(index2, 4 * 160 * 12); + index2++; + } + #endregion + + #region 顯示body //RowPosition = 1 + RowPosition++; + var avghour = "0"; var avgKWHKWP = "0"; var avgdayKWH = "0"; var monthKWH = "0"; var monthmoney = "0"; var monthmoneyone = "0"; + var check_hire = false; + var sitedb = ""; + foreach (dynamic body in Formbody.Result.Data) + { + index2 = 0; + var dbody = body as IDictionary; + + avghour = (Convert.ToDouble(dbody["tothour"].ToString()) + Convert.ToDouble(avghour)).ToString(); + avgKWHKWP = (Convert.ToDouble(dbody["KWHKWP"].ToString()) + Convert.ToDouble(avgKWHKWP)).ToString(); + avgdayKWH = (Convert.ToDouble(dbody["dayKWH"].ToString()) + Convert.ToDouble(avgdayKWH)).ToString(); + monthKWH = dbody["monthKWH"] == null ? "0" : dbody["monthKWH"].ToString(); + monthmoney = dbody["monthmoney"] == null ? "0" : dbody["monthmoney"].ToString(); + monthmoneyone = (Convert.ToDouble(dbody["monthmoneyone"].ToString()) + Convert.ToDouble(monthmoneyone)).ToString(); + if (dbody["SolarType"].ToString() == "1" && Formhead.Result.Data.ShowMoney == 1)//檢驗是否為租用 + { + check_hire = true; + sitedb = dbody["SiteDB"].ToString(); + } + + row2 = sheet.CreateRow(RowPosition); + cell2 = row2.CreateCell(index2); + var b = dbody["report_date"].ToString(); + cell2.SetCellValue(b); + cell2.CellStyle = styleLine12; + index2++; + foreach (var head in Formhead.Result.Data.Inv) + { + cell2 = row2.CreateCell(index2); + cell2.SetCellValue(dbody[head] == null ? "0" : dbody[head].ToString()); + cell2.CellStyle = styleLine12; + index2++; + } + List bodynames = new List(){ + "dayKWH", + "dayKWHp", + "tothour", + "KWHKWP", + "PR", + "irradiance", + "temperature" + }; + if (Formhead.Result.Data.ShowMoney == 1) + { + bodynames.Add("soldmoney"); + } + foreach (var bodyname in bodynames) + { + cell2 = row2.CreateCell(index2); + if (dbody[bodyname] == null) + { + cell2.SetCellValue("0"); + } + else + { + var c = dbody[bodyname].ToString(); + cell2.SetCellValue(c); + } + cell2.CellStyle = styleLine12; + index2++; + } + RowPosition++; + } + #endregion + + #region 顯示總量//RowPosition = body + 2 + RowPosition += 2;//空兩行 + index = 0; + var Useday = Formbody.Result.Data.Count; + row = sheet.CreateRow(RowPosition); + + cell = row.CreateCell(index); + cell.SetCellValue("日日照小時平均"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("日kWH/kWP平均"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("日發電量平均(kWh)"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("月發電量(kWh)"); + cell.CellStyle = styleLine12; + index++; + if (Formhead.Result.Data.ShowMoney == 1) + { + cell = row.CreateCell(index); + cell.SetCellValue("月售電金額(NTD)"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("月售電單價(NTD)"); + cell.CellStyle = styleLine12; + index++; + } + cell = row.CreateCell(index); + cell.SetCellValue("月售電天數"); + cell.CellStyle = styleLine12; + + + + index = 0; + RowPosition++; + row = sheet.CreateRow(RowPosition); + + cell = row.CreateCell(index); + cell.SetCellValue(Math.Round(Convert.ToDouble(avghour) / Useday, 2)); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(Math.Round(Convert.ToDouble(avgKWHKWP) / Useday, 2)); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(Math.Round(Convert.ToDouble(avgdayKWH) / Useday, 2)); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(monthKWH); + cell.CellStyle = styleLine12; + index++; + if (Formhead.Result.Data.ShowMoney == 1) + { + cell = row.CreateCell(index); + cell.SetCellValue(monthmoney); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(Math.Round(Convert.ToDouble(monthmoneyone) / Useday, 2)); + cell.CellStyle = styleLine12; + index++; + } + cell = row.CreateCell(index); + cell.SetCellValue(Useday); + cell.CellStyle = styleLine12; + #endregion + + #region 顯示租用//RowPosition = 總量 + 2 + if (check_hire == true) + { + RowPosition += 2;//空兩行 + PsIdAndSiteDB set = new PsIdAndSiteDB() + { + PowerstationId = Convert.ToInt32(powerstationid.Value), + SiteDB = sitedb + }; + var info = GetHireInfo(set); + index = 0; + row = sheet.CreateRow(RowPosition); + + cell = row.CreateCell(index); + cell.SetCellValue("出租人"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("租金比例"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("租金金額(未稅)"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue("租金金額(含稅)"); + cell.CellStyle = styleLine12; + + foreach (var a in info.Result.Data) + { + RowPosition++; + index = 0; + row = sheet.CreateRow(RowPosition); + + cell = row.CreateCell(index); + cell.SetCellValue(a.Landowner); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(a.LeaseRate + "%"); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(Math.Round(Convert.ToDouble(monthmoney) * Convert.ToDouble(a.LeaseRate) / 100, 2).ToString()); + cell.CellStyle = styleLine12; + index++; + cell = row.CreateCell(index); + cell.SetCellValue(Math.Round(Convert.ToDouble(monthmoney) * Convert.ToDouble(a.LeaseRate) / 100 * 1.05, 2).ToString()); + cell.CellStyle = styleLine12; + index++; + } + } + #endregion + break; + } + + } + var name = ""; + if (postObject.FormType == 0) + { + name = "日"; + } + else + { + name = "月"; + } + var Datename = postObject.Time.Replace("-", ""); + + if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report"))) + { + Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report")); + } + + + if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report", Datename))) + { + Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report", Datename)); + } + var n = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); + FileStream FS = new FileStream(n, FileMode.Create, FileAccess.Write); + workbook.Write(FS); + FS.Close(); + return Path.Combine("report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); + } + } } diff --git a/SolarPower/Models/StationReport.cs b/SolarPower/Models/StationReport.cs index dbe5a15..4a9ca3b 100644 --- a/SolarPower/Models/StationReport.cs +++ b/SolarPower/Models/StationReport.cs @@ -30,6 +30,7 @@ namespace SolarPower.Models public string Time { get; set; } public int PowerStation { get; set; } public int FormType { get; set; } + public int Userid { get; set; } } public class Excel { @@ -37,6 +38,7 @@ namespace SolarPower.Models public string Time { get; set; } public int FormType { get; set; } public List PowerStation { get; set; } + public int Userid { get; set; } } public class Excelpowerstation { diff --git a/SolarPower/Repository/Implement/PowerStationRepository.cs b/SolarPower/Repository/Implement/PowerStationRepository.cs index 95b7fe6..ee4e6d0 100644 --- a/SolarPower/Repository/Implement/PowerStationRepository.cs +++ b/SolarPower/Repository/Implement/PowerStationRepository.cs @@ -2340,6 +2340,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2429,6 +2433,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2458,6 +2466,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2518,6 +2530,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2649,6 +2665,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2775,6 +2795,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2799,6 +2823,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2823,6 +2851,7 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally { conn.Close(); } return result; } } @@ -2895,6 +2924,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -2944,6 +2977,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3015,6 +3052,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3034,6 +3075,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3165,6 +3210,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3246,6 +3295,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3274,6 +3327,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3322,6 +3379,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3341,6 +3402,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3381,6 +3446,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3454,6 +3523,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3503,6 +3576,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3544,6 +3621,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3644,6 +3725,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3688,6 +3773,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3732,6 +3821,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3810,6 +3903,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3854,6 +3951,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -3897,6 +3998,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -4049,6 +4154,10 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } @@ -4125,8 +4234,48 @@ namespace SolarPower.Repository.Implement { throw exception; } + finally + { + conn.Close(); + } return result; } } + + public async Task CheckShowMoney(int userid) + { + bool result = true; + string J; + using (IDbConnection conn = this._databaseHelper.GetConnection()) + { + try + { + var sql = @$"SELECT ap.AuthCode FROM user u + LEFT JOIN role_auth ra ON ra.Id = u.RoleId + LEFT JOIN auth_page ap ON ap.AuthCode = ra.AuthCode + WHERE u.Id = {userid} AND ap.AuthCode = 'J' "; + + + J = await conn.QueryFirstOrDefaultAsync(sql); + if(J == null) + { + result = false; + } + else + { + result = true; + } + } + catch (Exception exception) + { + throw exception; + } + finally + { + conn.Close(); + } + } + return result; + } } } diff --git a/SolarPower/Repository/Interface/IPowerStationRepository.cs b/SolarPower/Repository/Interface/IPowerStationRepository.cs index 4622774..884366f 100644 --- a/SolarPower/Repository/Interface/IPowerStationRepository.cs +++ b/SolarPower/Repository/Interface/IPowerStationRepository.cs @@ -557,5 +557,6 @@ namespace SolarPower.Repository.Interface Task> GetDeviceByPowerStationIdAndDeviceIds(string db_name, int powerStationId, List deviceIds); Task GetSensorAvgByDevices(string date, byte searchType, List devices); Task> GetPowerStationHistory(string date, byte searchType, List entities); + Task CheckShowMoney(int userid); } } From bfc4b2ca306ed5ed2a710e907f1cae1676088084 Mon Sep 17 00:00:00 2001 From: b110212000 Date: Mon, 2 Aug 2021 16:25:25 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=83=8C=E6=99=AF=E9=80=81Email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/StationReportController.cs | 12 +-- SolarPower/Models/NoticeSchedule.cs | 10 ++ SolarPower/Models/StationReport.cs | 2 + .../Quartz/Jobs/CalcAvgPowerStationJob.cs | 98 ++++++++++++++++++- .../Implement/NoticeScheduleRepository.cs | 30 ++++++ .../Interface/INoticeScheduleRepository.cs | 1 + SolarPower/appsettings.Development.json | 2 +- 7 files changed, 147 insertions(+), 8 deletions(-) diff --git a/SolarPower/Controllers/StationReportController.cs b/SolarPower/Controllers/StationReportController.cs index f9b4035..b660d17 100644 --- a/SolarPower/Controllers/StationReportController.cs +++ b/SolarPower/Controllers/StationReportController.cs @@ -1170,21 +1170,21 @@ namespace SolarPower.Controllers } var Datename = postObject.Time.Replace("-", ""); - if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report"))) + if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report"))) { - Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report")); + Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report")); } - if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report", Datename))) + if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", Datename))) { - Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report", Datename)); + Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", Datename)); } - var n = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); + var n = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); FileStream FS = new FileStream(n, FileMode.Create, FileAccess.Write); workbook.Write(FS); FS.Close(); - return Path.Combine("report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); + return Path.Combine("\\" + "upload" ,"report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); } } diff --git a/SolarPower/Models/NoticeSchedule.cs b/SolarPower/Models/NoticeSchedule.cs index b226704..f80d5a7 100644 --- a/SolarPower/Models/NoticeSchedule.cs +++ b/SolarPower/Models/NoticeSchedule.cs @@ -17,4 +17,14 @@ namespace SolarPower.Models public byte IsDelivery { get; set; } public string DeliveryAt { get; set; } } + + public class OperationPersonnel + { + public int PowerStationId { get; set; } + public int EmailDayReport { get; set; } + public int EmailMonthReport { get; set; } + public int EmailComplexReport { get; set; } + public int EmailException { get; set; } + public string Name { get; set; } + } } diff --git a/SolarPower/Models/StationReport.cs b/SolarPower/Models/StationReport.cs index 4a9ca3b..1796f27 100644 --- a/SolarPower/Models/StationReport.cs +++ b/SolarPower/Models/StationReport.cs @@ -70,4 +70,6 @@ namespace SolarPower.Models public string LeaseRate { get; set; } public string Landowner { get; set; } } + + } diff --git a/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs b/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs index 55b9dcb..0411a62 100644 --- a/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs +++ b/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Quartz; +using SolarPower.Models; using SolarPower.Models.PowerStation; using SolarPower.Repository.Interface; using System; @@ -16,17 +17,108 @@ namespace SolarPower.Quartz.Jobs { private readonly ILogger logger; private readonly IPowerStationRepository powerStationRepository; + private readonly IUserRepository userRepository; + private readonly INoticeScheduleRepository noticeScheduleRepository; + private readonly IStationReportRepository stationReportRepository; - public CalcAvgPowerStationJob(ILogger logger, IPowerStationRepository powerStationRepository) + public CalcAvgPowerStationJob(ILogger logger, IPowerStationRepository powerStationRepository,IUserRepository userRepository, INoticeScheduleRepository noticeScheduleRepository,IStationReportRepository stationReportRepository) { this.logger = logger; this.powerStationRepository = powerStationRepository; + this.userRepository = userRepository; + this.noticeScheduleRepository = noticeScheduleRepository; + this.stationReportRepository = stationReportRepository; } public async Task Execute(IJobExecutionContext context) { try { + #region 寄送日月報 + var users = userRepository.GetAllAsync(); + + foreach (var user in users.Result) + { + List powerstations = new List(); + powerstations = await noticeScheduleRepository.GetPowerStationOperationPersonnel(user.Id); + if(powerstations.Count == 0) + { + continue; + } + List sentdaypowerstations = powerstations.Where(x => x.EmailDayReport == 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)); + NoticeSchedule DaySchedule = new NoticeSchedule() + { + RecipientEmail = user.Email, + Subject = "日報表", + Attachment = stationReportName, + RecipientName = user.Name, + Type = 1 + }; + List properties = new List() + { + "RecipientEmail", + "Subject", + "Attachment", + "RecipientName", + "Type" + }; + await noticeScheduleRepository.AddOneAsync(DaySchedule, properties); + } + if(DateTime.Now.ToString("dd")=="02") + { + List 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(-2).ToString("yyyy-MM"), + Userid = user.Id + }; + var stationReportmonthName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(monthexcel, Formatting.Indented)); + NoticeSchedule MonthSchedule = new NoticeSchedule() + { + RecipientEmail = user.Email, + Subject = "月報表", + Attachment = stationReportmonthName, + RecipientName = user.Name, + Type = 1 + }; + List properties2 = new List() + { + "RecipientEmail", + "Subject", + "Attachment", + "RecipientName", + "Type" + }; + await noticeScheduleRepository.AddOneAsync(MonthSchedule, properties2); + } + + + + } + + #endregion + + #region step1. 找出所有電站 logger.LogInformation("【CalcAvgPowerStationJob】【開始取得電站資料】"); var powerStations = await powerStationRepository.GetAllAsync(); @@ -628,6 +720,10 @@ namespace SolarPower.Quartz.Jobs } #endregion + + + + } catch (Exception exception) { diff --git a/SolarPower/Repository/Implement/NoticeScheduleRepository.cs b/SolarPower/Repository/Implement/NoticeScheduleRepository.cs index baafd9b..8ad9451 100644 --- a/SolarPower/Repository/Implement/NoticeScheduleRepository.cs +++ b/SolarPower/Repository/Implement/NoticeScheduleRepository.cs @@ -64,5 +64,35 @@ namespace SolarPower.Repository.Implement } } + public async Task> GetPowerStationOperationPersonnel(int Userid) + { + using (IDbConnection conn = this._databaseHelper.GetConnection()) + { + conn.Open(); + var result = new List(); + using (var trans = conn.BeginTransaction()) + { + try + { + var sql = $@"SELECT p.*,ps.Name FROM power_station_operation_personnel p + LEFT JOIN power_station ps ON p.PowerStationId = ps.Id + WHERE p.UserId = {Userid} AND p.Deleted = 0 "; + + result = (await conn.QueryAsync(sql)).ToList(); + + } + catch (Exception exception) + { + trans.Rollback(); + throw exception; + } + finally + { + conn.Close(); + } + return result; + } + } + } } } diff --git a/SolarPower/Repository/Interface/INoticeScheduleRepository.cs b/SolarPower/Repository/Interface/INoticeScheduleRepository.cs index d40ee95..5e60cee 100644 --- a/SolarPower/Repository/Interface/INoticeScheduleRepository.cs +++ b/SolarPower/Repository/Interface/INoticeScheduleRepository.cs @@ -10,5 +10,6 @@ namespace SolarPower.Repository.Interface { Task> GetNotYetDelivery(); Task UpdateList(List noticeSchedules, List properties); + Task> GetPowerStationOperationPersonnel(int Userid); } } diff --git a/SolarPower/appsettings.Development.json b/SolarPower/appsettings.Development.json index f76111b..fc2f78e 100644 --- a/SolarPower/appsettings.Development.json +++ b/SolarPower/appsettings.Development.json @@ -26,7 +26,7 @@ "CalcAvgPowerStationJob": "0 0 2 * * ?", "OperationScheduleJob": "0 0 2 * * ?", "CalcInverter15minJob": "0 2/15 * * * ?", - "SendEmailJob": "0/10 * * * * ?" + "SendEmailJob": "0 0 3 * * ?" }, "SMTPConfig": { "Host": "smtp.gmail.com", From 5a363cb54e4d6405858ab464a4b49fedbf2606c1 Mon Sep 17 00:00:00 2001 From: b110212000 Date: Mon, 2 Aug 2021 16:26:03 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs b/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs index 0411a62..bc0ab28 100644 --- a/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs +++ b/SolarPower/Quartz/Jobs/CalcAvgPowerStationJob.cs @@ -77,7 +77,7 @@ namespace SolarPower.Quartz.Jobs }; await noticeScheduleRepository.AddOneAsync(DaySchedule, properties); } - if(DateTime.Now.ToString("dd")=="02") + if(DateTime.Now.ToString("dd")=="01") { List sentmonthpowerstations = powerstations.Where(x => x.EmailMonthReport == 1).Select(a => new Excelpowerstation { Name = a.Name, Value = a.PowerStationId.ToString() }).ToList(); if(sentmonthpowerstations.Count == 0) @@ -89,7 +89,7 @@ namespace SolarPower.Quartz.Jobs FormType = 1, PowerStation = sentmonthpowerstations, SearchType = 2, - Time = DateTime.Now.AddDays(-2).ToString("yyyy-MM"), + Time = DateTime.Now.AddDays(-1).ToString("yyyy-MM"), Userid = user.Id }; var stationReportmonthName = stationReportController.ExportExcelBackDownload(JsonConvert.SerializeObject(monthexcel, Formatting.Indented)); From d2b386cc184423e5ba1778c232fe4504a47f1d24 Mon Sep 17 00:00:00 2001 From: b110212000 Date: Tue, 3 Aug 2021 12:01:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=8F=B0=E9=9B=BB=E5=94=AE=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ElectricitySoldRecordController.cs | 133 ++++ .../Controllers/StationReportController.cs | 7 +- SolarPower/DBSchema/solar_power_schema.sql | 19 +- SolarPower/Models/ElectricitySoldRecord.cs | 39 ++ .../ElectricitySoldRecordRepository.cs | 41 ++ .../IElectricitySoldRecordRepository.cs | 13 + SolarPower/Startup.cs | 1 + .../Views/ElectricitySoldRecord/Index.cshtml | 602 ++++++++++++++++++ SolarPower/Views/Shared/_Layout.cshtml | 6 +- 9 files changed, 854 insertions(+), 7 deletions(-) create mode 100644 SolarPower/Controllers/ElectricitySoldRecordController.cs create mode 100644 SolarPower/Models/ElectricitySoldRecord.cs create mode 100644 SolarPower/Repository/Implement/ElectricitySoldRecordRepository.cs create mode 100644 SolarPower/Repository/Interface/IElectricitySoldRecordRepository.cs create mode 100644 SolarPower/Views/ElectricitySoldRecord/Index.cshtml diff --git a/SolarPower/Controllers/ElectricitySoldRecordController.cs b/SolarPower/Controllers/ElectricitySoldRecordController.cs new file mode 100644 index 0000000..e209466 --- /dev/null +++ b/SolarPower/Controllers/ElectricitySoldRecordController.cs @@ -0,0 +1,133 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using SolarPower.Models; +using SolarPower.Models.PowerStation; +using SolarPower.Repository.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace SolarPower.Controllers +{ + public class ElectricitySoldRecordController : MyBaseController + { + private readonly IElectricitySoldRecordRepository electricitySoldRecordRepository; + private readonly IPowerStationRepository powerStationRepository; + + public ElectricitySoldRecordController(IElectricitySoldRecordRepository electricitySoldRecordRepository, IPowerStationRepository powerStationRepository) : base() + { + this.electricitySoldRecordRepository = electricitySoldRecordRepository; + this.powerStationRepository = powerStationRepository; + } + public IActionResult Index() + { + return View(); + } + public async Task> SaveSoldMoney(ElectricitySoldRecord post) + { + ApiResult apiResult = new ApiResult(); + + PowerStation powerStation = null; + + try + { + powerStation = await powerStationRepository.GetOneAsync(post.PowerstationId); + + if (post.Id == 0) + { + ElectricitySoldRecord record = new ElectricitySoldRecord() + { + EndAt = post.EndAt, + CreatedBy = myUser.Id, + Kwh = post.Kwh, + Money = post.Money, + PowerstationId = post.PowerstationId, + StartAt = post.StartAt + }; + List properties = new List() + { + "EndAt", + "CreatedBy", + "Kwh", + "Money", + "PowerstationId", + "StartAt" + }; + await electricitySoldRecordRepository.AddAsync(record, properties); + + apiResult.Code = "0000"; + apiResult.Msg = "新增成功"; + } + else + { + ElectricitySoldRecord record = new ElectricitySoldRecord() + { + Id = post.Id, + EndAt = post.EndAt, + UpdatedBy = myUser.Id, + Kwh = post.Kwh, + Money = post.Money, + PowerstationId = post.PowerstationId, + StartAt = post.StartAt + }; + List properties = new List() + { + "Id", + "EndAt", + "UpdatedBy", + "Kwh", + "Money", + "PowerstationId", + "StartAt" + }; + await electricitySoldRecordRepository.Update(record, properties); + apiResult.Code = "0000"; + apiResult.Msg = "儲存成功"; + } + + } + catch (Exception exception) + { + apiResult.Code = "9999"; + apiResult.Msg = errorCode.GetString(apiResult.Code); + string json = System.Text.Json.JsonSerializer.Serialize(post); + Logger.LogError("【" + controllerName + "/" + actionName + "】" + json); + Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); + } + + return apiResult; + } + + public async Task RecordTable(ElectricitySoldRecordTablePost info) + { + List electricitySoldRecordTable = new List(); + ApiResult> apiResult = new ApiResult>(); + try + { + electricitySoldRecordTable = await electricitySoldRecordRepository.RecordTable(info); + foreach (ElectricitySoldRecordTable a in electricitySoldRecordTable) + { + a.Function = @" + + "; + } + apiResult.Code = "0000"; + apiResult.Data = electricitySoldRecordTable; + } + catch (Exception exception) + { + apiResult.Code = "9999"; + apiResult.Msg = exception.ToString(); + + Logger.LogError("【" + controllerName + "/" + actionName + "】" + "info=" + System.Text.Json.JsonSerializer.Serialize(info)); + Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); + } + var result = Json(new + { + data = apiResult + }); + return result; + } + } +} diff --git a/SolarPower/Controllers/StationReportController.cs b/SolarPower/Controllers/StationReportController.cs index b660d17..2fb27a3 100644 --- a/SolarPower/Controllers/StationReportController.cs +++ b/SolarPower/Controllers/StationReportController.cs @@ -645,7 +645,8 @@ namespace SolarPower.Controllers workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); - return File(ms, "application/vnd.ms-excel", name + "報表.xlsx"); + var Datename = postObject.Time.Replace("-", ""); + return File(ms, "application/vnd.ms-excel", "FIC太陽能監控平台" + "_" + name + "報表" + "_" + postObject.Userid + Datename + ".xlsx"); } public string Checknull(string a) @@ -1180,11 +1181,11 @@ namespace SolarPower.Controllers { Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", Datename)); } - var n = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); + var n = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", "FIC太陽能監控平台" + "_" + name + "報表" + "_" + postObject.Userid + Datename + ".xlsx"); FileStream FS = new FileStream(n, FileMode.Create, FileAccess.Write); workbook.Write(FS); FS.Close(); - return Path.Combine("\\" + "upload" ,"report", Datename, Datename + "_" + postObject.Userid + "_" + name + "報表.xlsx"); + return Path.Combine("\\" + "upload" ,"report", Datename, "FIC太陽能監控平台" + "_" + name + "報表" + "_" + postObject.Userid+ Datename + ".xlsx"); } } diff --git a/SolarPower/DBSchema/solar_power_schema.sql b/SolarPower/DBSchema/solar_power_schema.sql index 48636c4..5f67d1d 100644 --- a/SolarPower/DBSchema/solar_power_schema.sql +++ b/SolarPower/DBSchema/solar_power_schema.sql @@ -2089,7 +2089,24 @@ ALTER TABLE `power_station_operation_personnel` ADD COLUMN `EmailComplexReport` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '接收Email綜合報告 0:不接收 1:接收' AFTER `EmailMonthReport`, ADD COLUMN `EmailException` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '接收Email異常通知 0:不接收 1:接收' AFTER `EmailComplexReport`; - +-- 新增售電紀錄資料表 20210802 +CREATE TABLE `electricity_sold_record` ( + `Id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '流水號', + `PowerstationId` INT(4) NULL COMMENT '電站編號', + `StartAt` TIMESTAMP NULL COMMENT '開始時間', + `EndAt` TIMESTAMP NULL COMMENT '結束時間', + `Kwh` INT(50) UNSIGNED NULL DEFAULT '0' COMMENT '售電度數', + `Money` DOUBLE UNSIGNED NULL DEFAULT '0' COMMENT '售電金額', + `CreatedBy` INT(10) NULL COMMENT '建立者', + `CreatedAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP() COMMENT '建立時間', + `UpdatedBy` INT(10) NULL COMMENT '修改者', + `UpdatedAt` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP() COMMENT '修改時間', + PRIMARY KEY (`Id`), + INDEX `IDX_01` (`PowerstationId`, `StartAt`, `EndAt`) +) +COMMENT='台電售電紀錄' +COLLATE='utf8mb4_unicode_ci' +; /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; /*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; diff --git a/SolarPower/Models/ElectricitySoldRecord.cs b/SolarPower/Models/ElectricitySoldRecord.cs new file mode 100644 index 0000000..1dd8650 --- /dev/null +++ b/SolarPower/Models/ElectricitySoldRecord.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace SolarPower.Models +{ + public class ElectricitySoldRecord:UserInfo + { + public int PowerstationId { get; set; }//電站編號 + private string startAt; + public string StartAt { get { return Convert.ToDateTime(startAt).ToString("yyyy-MM-dd"); } set { startAt = value; } } //開始時間 + private string endAt; + public string EndAt { get { return Convert.ToDateTime(endAt).ToString("yyyy-MM-dd"); } set { endAt = value; } } //結束時間 + public int Kwh { get; set; }//購電度數 + public float Money { get; set; }//售出金額 + } + + public class ElectricitySoldRecordTable : ElectricitySoldRecord + { + public string PowerStationName { get; set; } + public string Function { get; set; } + public string CreatedDay { get; set; } + } + + public class Powerstationid + { + public string Name { get; set; } + public string Value { get; set; } + } + public class ElectricitySoldRecordTablePost + { + public List StationId { get; set; } + public string Time { get; set; } + public int SearchType { get; set; } + } + + +} diff --git a/SolarPower/Repository/Implement/ElectricitySoldRecordRepository.cs b/SolarPower/Repository/Implement/ElectricitySoldRecordRepository.cs new file mode 100644 index 0000000..cf69909 --- /dev/null +++ b/SolarPower/Repository/Implement/ElectricitySoldRecordRepository.cs @@ -0,0 +1,41 @@ +using SolarPower.Helper; +using SolarPower.Models; +using SolarPower.Repository.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace SolarPower.Repository.Implement +{ + public class ElectricitySoldRecordRepository: RepositoryBase, IElectricitySoldRecordRepository + { + public ElectricitySoldRecordRepository(IDatabaseHelper databaseHelper) : base(databaseHelper) + { + tableName = "electricity_sold_record"; + } + public async Task> RecordTable (ElectricitySoldRecordTablePost post) + { + List a = new List(); + string sql = ""; + switch (post.SearchType) + { + //case 0: + // post.Time.Replace("-","~").Replace("") + // sql = ""; + // break; + //case 1: + // sql = ""; + // break; + //case 2: + // sql = ""; + // break; + //case 3: + // sql = ""; + // break; + } + + return a; + } + } +} diff --git a/SolarPower/Repository/Interface/IElectricitySoldRecordRepository.cs b/SolarPower/Repository/Interface/IElectricitySoldRecordRepository.cs new file mode 100644 index 0000000..03f5ad6 --- /dev/null +++ b/SolarPower/Repository/Interface/IElectricitySoldRecordRepository.cs @@ -0,0 +1,13 @@ +using SolarPower.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace SolarPower.Repository.Interface +{ + public interface IElectricitySoldRecordRepository: IRepositoryBase + { + Task> RecordTable(ElectricitySoldRecordTablePost post); + } +} diff --git a/SolarPower/Startup.cs b/SolarPower/Startup.cs index b4871a2..1869650 100644 --- a/SolarPower/Startup.cs +++ b/SolarPower/Startup.cs @@ -79,6 +79,7 @@ namespace SolarPower services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); #endregion double loginExpireMinute = this.Configuration.GetValue("LoginExpireMinute"); diff --git a/SolarPower/Views/ElectricitySoldRecord/Index.cshtml b/SolarPower/Views/ElectricitySoldRecord/Index.cshtml new file mode 100644 index 0000000..a854a67 --- /dev/null +++ b/SolarPower/Views/ElectricitySoldRecord/Index.cshtml @@ -0,0 +1,602 @@ +@{ + ViewData["MainNum"] = "4"; + ViewData["SubNum"] = "2"; + ViewData["Title"] = "台電售電記錄"; +} +@using SolarPower.Models.Role +@model RoleLayerEnum + +
+
+ +
+ +
+ +
+
+

+ @ViewData["Title"] +

+
+ + +
+
+
+
+
+
+
+
+ + + + +
+
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + +
編號電站名稱開始日期結束日期購電度數售出電費建立日期功能
+
+
+
+
+
+
+ + + +@section Scripts{ + +} \ No newline at end of file diff --git a/SolarPower/Views/Shared/_Layout.cshtml b/SolarPower/Views/Shared/_Layout.cshtml index 4613f1c..d0601ff 100644 --- a/SolarPower/Views/Shared/_Layout.cshtml +++ b/SolarPower/Views/Shared/_Layout.cshtml @@ -266,9 +266,9 @@ 電站報表 -
  • - - 電站發電收入 +
  • + + 台電售電記錄