diff --git a/FrontendWebApi/ApiControllers/TenantBillController.cs b/FrontendWebApi/ApiControllers/TenantBillController.cs index 0ced42d..ea83a74 100644 --- a/FrontendWebApi/ApiControllers/TenantBillController.cs +++ b/FrontendWebApi/ApiControllers/TenantBillController.cs @@ -20,6 +20,7 @@ using Serilog.Core; using static FrontendWebApi.ApiControllers.TenantBillController; using System.Reflection; using Microsoft.CodeAnalysis.CSharp.Syntax; +using System.Data.SqlTypes; @@ -102,7 +103,7 @@ namespace FrontendWebApi.ApiControllers await backendRepository.ExecuteSql(sqlString); apiResult.Code = "0000"; - apiResult.Data = "新增成功"; + apiResult.Msg = "新增成功"; } catch (Exception exception) { @@ -137,7 +138,7 @@ namespace FrontendWebApi.ApiControllers await backendRepository.ExecuteSql(sqlString); apiResult.Code = "0000"; - apiResult.Data = "修改用戶成功"; + apiResult.Msg = "修改用戶成功"; } catch (Exception exception) { @@ -165,7 +166,7 @@ namespace FrontendWebApi.ApiControllers await backendRepository.ExecuteSql(sqlString); apiResult.Code = "0000"; - apiResult.Data = "刪除成功"; + apiResult.Msg = "刪除成功"; } catch (Exception exception) { @@ -209,7 +210,7 @@ namespace FrontendWebApi.ApiControllers $"where device_building_tag = '{building_tag}' and a.device_name_tag = '{ElecOrWater}' "; } - + tenantBill = await backendRepository.GetAllAsync(sqlString); @@ -238,151 +239,195 @@ namespace FrontendWebApi.ApiControllers var start_timestamp = tb.start_timestamp; var end_timestamp = tb.end_timestamp; string sqlString = null; - string startMonth = ""; - string endMonth = ""; - if (start_timestamp != "" && end_timestamp != "") + string result = "0"; + + if (tb.start_timestamp == "" || tb.end_timestamp == "" || tb.tenant_guid == "" || tb.tenant_guid == null) { - startMonth = tb.start_timestamp.Split("-")[0] + tb.start_timestamp.Split("-")[1]; - endMonth = tb.end_timestamp.Split("-")[0] + tb.end_timestamp.Split("-")[1]; - } - else - { - sqlString = - $@"UPDATE {TenantBilltable} - set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), - result = 0, - bill= 0, - start_timestamp = '{start_timestamp}', - end_timestamp = '{end_timestamp}', - updated_at = '{updated_at}', - tenant_guid = '{tb.tenant_guid}' - WHERE device_number = '{tb.device_number}'"; + sqlString = $@"UPDATE {TenantBilltable} + set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list + WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , + result= 0, + bill = 0, + updated_at = '{updated_at}', + tenant_guid = '{tb.tenant_guid}' + WHERE device_number = '{tb.device_number}'"; await backendRepository.ExecuteSql(sqlString); - apiResult.Code = "0000"; - apiResult.Data = "修改成功"; + apiResult.Msg = "資料填寫不完整"; return apiResult; } - if (tb.tenant_guid != "" && tb.tenant_guid != null) - { - if (startMonth == endMonth) - { - sqlString = - $"UPDATE {TenantBilltable} " + - $"set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , " + - $"result= " + - $"(select sum(sub_result) " + - $"from archive_electric_water_meter_day_{startMonth} " + - $"WHERE device_number = '{tb.device_number}' and start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' " + - $"GROUP BY device_number) , " + - $"bill = " + - $"ROUND(result *(SELECT {bill_per} from {TenantListtable} WHERE tenant_guid = '{tb.tenant_guid}') ), " + - $"updated_at = '{updated_at}', " + - $"tenant_guid = '{tb.tenant_guid}' " + - $"WHERE device_number = '{tb.device_number}'"; - } - else - { - string month = ""; - DateTime date1 = DateTime.Parse(start_timestamp); - DateTime date2 = DateTime.Parse(end_timestamp); - int monthsApart = ((date2.Year - date1.Year) * 12) + date2.Month - date1.Month; - for (var i = 1; i <= monthsApart; i++) - { - month += $@"UNION ALL - SELECT start_timestamp,device_number, sub_result - FROM archive_electric_water_meter_day_{date1.AddMonths(i).ToString("yyyyMM")} - WHERE device_number = '{tb.device_number}' "; - } - sqlString = - $@"UPDATE {TenantBilltable} - set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , - result= - (SELECT sum(sub_result) - FROM ( - SELECT start_timestamp,device_number, sub_result - FROM archive_electric_water_meter_day_{startMonth} - WHERE device_number = '{tb.device_number}' "+ - $@"{month}" + - $@" ) combined_result - WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' - GROUP BY device_number) , - bill = - ROUND(result *(SELECT {bill_per} from {TenantListtable} WHERE tenant_guid = '{tb.tenant_guid}') ), - updated_at = '{updated_at}', - tenant_guid = '{tb.tenant_guid}' - WHERE device_number = '{tb.device_number}'"; - } - } else { - if (startMonth == endMonth) + List howManyMonth = new List(); + List existMonth = new List(); + DateTime date1 = DateTime.Parse(start_timestamp); + DateTime date2 = DateTime.Parse(end_timestamp); + int monthsApart = ((date2.Year - date1.Year) * 12) + date2.Month - date1.Month; + + // 找出資料庫存在的水電月份表 + string checkTabelSql = $@"SELECT TABLE_NAME + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = 'ibms_dome_dome' and TABLE_NAME like 'archive_electric_water_meter_day_%'"; + var existTable = await backendRepository.GetAllAsync(checkTabelSql); + + for (var i = 0; i <= monthsApart; i++) { - sqlString = - $"UPDATE {TenantBilltable} " + - $"set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , " + - $"result= " + - $"(select sum(sub_result) " + - $"from archive_electric_water_meter_day_{startMonth} " + - $"WHERE device_number = '{tb.device_number}' and start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' " + - $"GROUP BY device_number) , " + - $"bill = 0 ," + - $"updated_at = '{updated_at}', " + - $"tenant_guid = '{tb.tenant_guid}' " + - $"WHERE device_number = '{tb.device_number}'"; + howManyMonth.Add($@"archive_electric_water_meter_day_{date1.AddMonths(i).ToString("yyyyMM")}"); + } + foreach (var item in existTable) + { + foreach (var data in howManyMonth) + { + if (item == data) + { + existMonth.Add(data); + } + } + } + if (existMonth.Count == 0) + { + sqlString = $@"UPDATE {TenantBilltable} + set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list + WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , + result= 0, + bill = 0, + updated_at = '{updated_at}', + tenant_guid = '{tb.tenant_guid}' + WHERE device_number = '{tb.device_number}'"; } else { - string month = ""; - DateTime date1 = DateTime.Parse(start_timestamp); - DateTime date2 = DateTime.Parse(end_timestamp); - int monthsApart = ((date2.Year - date1.Year) * 12) + date2.Month - date1.Month; - for (var i = 1; i <= monthsApart; i++) + string month = $@" + SELECT start_timestamp,device_number, sub_result + FROM {existMonth[0]} + WHERE device_number = '{tb.device_number}'"; + for (var i = 1; i < existMonth.Count; i++) { month += $@"UNION ALL SELECT start_timestamp,device_number, sub_result - FROM archive_electric_water_meter_day_{date1.AddMonths(i).ToString("yyyyMM")} + FROM {existMonth[i]} WHERE device_number = '{tb.device_number}' "; } + + string checkDataSql = $@"(SELECT sum(sub_result) + FROM ( {month} + ) combined_result + WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' + GROUP BY device_number) "; + var existData = await backendRepository.GetAllAsync(checkDataSql); + if (existData.Count != 0) + { + result = $@"(SELECT sum(sub_result) + FROM ( {month} + ) combined_result + WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' + GROUP BY device_number) "; + } sqlString = $@"UPDATE {TenantBilltable} set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , - result= - (SELECT sum(sub_result) - FROM ( - SELECT start_timestamp,device_number, sub_result - FROM archive_electric_water_meter_day_{startMonth} - WHERE device_number = '{tb.device_number}' " + - $@"{month}" + - $@" ) combined_result - WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' - GROUP BY device_number) , - bill = 0, + result= {result}, + bill = ROUND(result *(SELECT {bill_per} from {TenantListtable} WHERE tenant_guid = '{tb.tenant_guid}') ), updated_at = '{updated_at}', tenant_guid = '{tb.tenant_guid}' WHERE device_number = '{tb.device_number}'"; } + + await backendRepository.ExecuteSql(sqlString); + } - - - - await backendRepository.ExecuteSql(sqlString); - - - apiResult.Code = "0000"; - apiResult.Data = "修改成功"; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = "修改水電參考報表失敗。"; - if (exception.Message.Contains($"doesn't exist")) + Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); + return apiResult; + + } + apiResult = await CheckDay(tb); + return apiResult; + } + [HttpPost] + public async Task> CheckDay([FromBody] TenantBill tb) + { + ApiResult apiResult = new ApiResult(); + if (tb.start_timestamp != "" && tb.end_timestamp != "" && tb.tenant_guid != "") + { + List tenantBill = new List(); + try { - apiResult.Code = "0001"; - apiResult.Msg = "選取的區間有部分無資料。"; + string sqlString = $@"select * from {TenantBilltable} WHERE tenant_guid= '{tb.tenant_guid}'"; + + tenantBill = await backendRepository.GetAllAsync(sqlString); + if (tenantBill.Count > 1) + { + foreach (TenantBill t in tenantBill) + { + if (t.start_timestamp == tb.start_timestamp && t.end_timestamp == tb.end_timestamp) + { + continue; + } + else + { + apiResult.Code = "0001"; + apiResult.Msg = "該用戶設備的起訖日期不一致,是否將所有設備起訖日期調為一致?"; + return apiResult; + + } + } + + apiResult.Code = "0000"; + apiResult.Msg = "修改成功且該用戶的所有設備日期一致"; + } } + catch (Exception exception) + { + apiResult.Code = "9999"; + apiResult.Msg = "確認日期失敗。"; + Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); + } + + } + apiResult.Code = "0000"; + apiResult.Msg = "修改成功且不執行CheckDay"; + return apiResult; + } + [HttpPost] + public async Task> ChangeDay([FromBody] TenantBill tb) + { + ApiResult apiResult = new ApiResult(); + List tenantBill = new List(); + + try + { + string sqlString = $@"select * from {TenantBilltable} WHERE tenant_guid= '{tb.tenant_guid}'"; + + tenantBill = await backendRepository.GetAllAsync(sqlString); + foreach (TenantBill t in tenantBill) + { + if (t.start_timestamp == tb.start_timestamp && t.end_timestamp == tb.end_timestamp) + { + continue; + } + else + { + t.start_timestamp = tb.start_timestamp; + t.end_timestamp = tb.end_timestamp; + await UpdateTenantBill(t); + } + } + + + apiResult.Code = "0000"; + apiResult.Msg = "修改成功"; + } + catch (Exception exception) + { + apiResult.Code = "9999"; + apiResult.Msg = "更換日期失敗。"; Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } @@ -399,14 +444,18 @@ namespace FrontendWebApi.ApiControllers { string sqlString = $@"SELECT - a.tenant_name,min(a.start_timestamp)as start_timestamp,max(a.end_timestamp) as end_timestamp,bill_perKWH,bill_perRCV, + a.tenant_name, + MIN(NULLIF(a.start_timestamp, '')) AS start_timestamp, + MAX(NULLIF(a.end_timestamp, '')) AS end_timestamp, + bill_perKWH, + bill_perRCV, SUM(CASE WHEN device_name_tag = 'E4' THEN result ELSE 0 END) AS elec_result, SUM(CASE WHEN device_name_tag = 'W1' THEN result ELSE 0 END) AS water_result, SUM(CASE WHEN device_name_tag = 'E4' THEN bill ELSE 0 END) AS elec_bill, SUM(CASE WHEN device_name_tag = 'W1' THEN bill ELSE 0 END) AS water_bill, SUM(bill) AS total_bill FROM archive_electric_meter_tenant_bill a - JOIN archive_electric_meter_tenant_list b on a.tenant_guid = b.tenant_guid + JOIN archive_electric_meter_tenant_list b ON a.tenant_guid = b.tenant_guid GROUP BY a.tenant_name;"; outputBill = await backendRepository.GetAllAsync(sqlString); @@ -550,12 +599,12 @@ namespace FrontendWebApi.ApiControllers $" " + $" " + $" "; - + } htmlStr = htmlStr.Replace("{{bill}}", bill); - + return htmlStr; }