using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using NPOI.SS.UserModel; using NPOI.SS.Util; using NPOI.XSSF.UserModel; using SolarPower.Models; using SolarPower.Models.PowerStation; using SolarPower.Repository.Interface; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Dynamic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SolarPower.Controllers { public class StationReportController : MyBaseController { private readonly IPowerStationRepository powerStationRepository; private readonly IStationReportRepository stationReportRepository; public StationReportController(IPowerStationRepository powerStationRepository, IStationReportRepository stationReportRepository) : base() { this.powerStationRepository = powerStationRepository; this.stationReportRepository = stationReportRepository; } public IActionResult Index() { return View(); } [HttpPost] public async Task>>> GetPowerStationNameList(string filter) { ApiResult>> apiResult = new ApiResult>>(); try { var powerStations = new List(); if (IsPlatformLayer(myUser.Role.Layer)) { powerStations = await powerStationRepository.GetPowerStationsAllWithfilter(filter); } else { powerStations = await powerStationRepository.GetPowerStationsByCompanyIdWithfilter(myUser.CompanyId,filter); } var siteDBNamePowerStationId = new Dictionary>(); var powerStation_Group = powerStations.GroupBy(x => x.CityName).ToList(); foreach (var stations in powerStation_Group) { siteDBNamePowerStationId.Add(stations.Key, stations.ToList()); } apiResult.Code = "0000"; apiResult.Data = siteDBNamePowerStationId; } catch (Exception exception) { apiResult.Code = "9999"; Logger.LogError("【" + controllerName + "/" + actionName + "】"); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } apiResult.Msg = errorCode.GetString(apiResult.Code); return apiResult; } public async Task> GetTableHead(Select_table post) { 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); if(powerStation == null) { apiResult.Code = "0001"; apiResult.Msg = "需加入查詢電站"; return apiResult; } inverter.Inv = await stationReportRepository.GetInverterId(powerStation.SiteDB,post); for (int i = 0;i> GetForm(Select_table post) { ApiResult apiResult = new ApiResult(); try { var a = await stationReportRepository.Gettablebody(post); apiResult.Code = "0000"; apiResult.Data = a; } catch (Exception exception) { apiResult.Code = "9999"; Logger.LogError("【" + controllerName + "/" + actionName + "】"); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } public FileResult ExportExcel(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 ms = new NpoiMemoryStream { AllowClose = false }; workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); return File(ms, "application/vnd.ms-excel", name + "報表.xlsx"); } public string Checknull(string a) { if(a == null) { return "0"; }else { return a; } } public async Task>> GetHireInfo(PsIdAndSiteDB post) { ApiResult> apiResult = new ApiResult>(); try { var a = await stationReportRepository.GetHire(post); apiResult.Code = "0000"; apiResult.Data = a; } catch (Exception exception) { apiResult.Code = "9999"; Logger.LogError("【" + controllerName + "/" + actionName + "】"); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } 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", "upload", "report"))) { Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report")); } if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "report", Datename))) { 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"); 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"); } } }