This commit is contained in:
b110212000 2021-06-23 09:41:19 +08:00
commit 7dcca6b66d
18 changed files with 1205 additions and 711 deletions

View File

@ -280,9 +280,9 @@ namespace SolarPower.Controllers
var id = await companyRepository.AddOneAsync(company, properties); var id = await companyRepository.AddOneAsync(company, properties);
UpdateCompany updateCompany; UpdateCompany updateCompany;
//處裡公司Logo圖片
#region Logo圖片
if (post.LogoFile != null) if (post.LogoFile != null)
{ {
var split = post.LogoFile.FileName.Split("."); var split = post.LogoFile.FileName.Split(".");
@ -309,6 +309,7 @@ namespace SolarPower.Controllers
await companyRepository.UpdateCompany(updateCompany, properties); await companyRepository.UpdateCompany(updateCompany, properties);
} }
#endregion
#region "公司管理員" #region "公司管理員"
Role role = new Role() Role role = new Role()
@ -332,23 +333,24 @@ namespace SolarPower.Controllers
#region DB及TableDB編號規則 solar_com_()exsolar_com_0001 #region DB及TableDB編號規則 solar_com_()exsolar_com_0001
var relationalDB = "solar_com_" + id.ToString().Trim().PadLeft(4, '0'); //var siteDB = "solar_com" + id.ToString().Trim().PadLeft(4, '0');
var siteDB = "solar_com" + id.ToString().Trim().PadLeft(4, '0') + "_test";
//修改 //修改
updateCompany = new UpdateCompany() updateCompany = new UpdateCompany()
{ {
Id = id, Id = id,
RelationalDB = relationalDB SiteDB = siteDB
}; };
properties = new List<string>() properties = new List<string>()
{ {
"Id", "Id",
"RelationalDB" "SiteDB"
}; };
await companyRepository.UpdateCompany(updateCompany, properties); await companyRepository.UpdateCompany(updateCompany, properties);
await companyRepository.CreatCompanyDB(relationalDB); await companyRepository.CreatCompanyDB(siteDB);
#endregion #endregion
apiResult.Code = "0000"; apiResult.Code = "0000";
@ -357,7 +359,7 @@ namespace SolarPower.Controllers
} }
else else
{ {
#region 使 #region
//先檢查統編是否已被使用 //先檢查統編是否已被使用
var exist = await companyRepository.GetOneNormalSimpleCompanyByTaxIDNumber(post.TaxIDNumber); var exist = await companyRepository.GetOneNormalSimpleCompanyByTaxIDNumber(post.TaxIDNumber);

View File

@ -30,7 +30,6 @@ namespace SolarPower.Controllers
protected ILogger<T> Logger => _logger ?? (_logger = HttpContext?.RequestServices.GetService<ILogger<T>>()); protected ILogger<T> Logger => _logger ?? (_logger = HttpContext?.RequestServices.GetService<ILogger<T>>());
private IUserRepository userRepository => HttpContext?.RequestServices.GetService<IUserRepository>(); private IUserRepository userRepository => HttpContext?.RequestServices.GetService<IUserRepository>();
private IOperationRepository operationRepository => HttpContext?.RequestServices.GetService<IOperationRepository>();
private ICompanyRepository companyRepository => HttpContext?.RequestServices.GetService<ICompanyRepository>(); private ICompanyRepository companyRepository => HttpContext?.RequestServices.GetService<ICompanyRepository>();
private IRoleRepository roleRepository => HttpContext?.RequestServices.GetService<IRoleRepository>(); private IRoleRepository roleRepository => HttpContext?.RequestServices.GetService<IRoleRepository>();
private IOperatorLogRepository operatorLogRepository => HttpContext?.RequestServices.GetService<IOperatorLogRepository>(); private IOperatorLogRepository operatorLogRepository => HttpContext?.RequestServices.GetService<IOperatorLogRepository>();
@ -131,7 +130,7 @@ namespace SolarPower.Controllers
/// </summary> /// </summary>
/// <param name="current">當前的</param> /// <param name="current">當前的</param>
/// <param name="pad"></param> /// <param name="pad"></param>
/// <param name="direction">0: PadLeft0: PadRight</param> /// <param name="direction">0: PadLeft1: PadRight</param>
/// <returns></returns> /// <returns></returns>
public string GetLastSerialNumber(string current = "", int pad = 4, byte direction = 0) public string GetLastSerialNumber(string current = "", int pad = 4, byte direction = 0)
{ {
@ -145,7 +144,7 @@ namespace SolarPower.Controllers
tempSerialNumber = 1; tempSerialNumber = 1;
} }
if (direction == 0) if(direction == 0)
{ {
return tempSerialNumber.ToString().Trim().PadLeft(pad, '0'); return tempSerialNumber.ToString().Trim().PadLeft(pad, '0');
} }

View File

@ -18,6 +18,7 @@ namespace SolarPower.Controllers
public class PowerStationController : MyBaseController<PowerStationController> public class PowerStationController : MyBaseController<PowerStationController>
{ {
private readonly IUserRepository userRepository; private readonly IUserRepository userRepository;
private readonly ICompanyRepository companyRepository;
private readonly IPowerStationRepository powerStationRepository; private readonly IPowerStationRepository powerStationRepository;
private string boeFilePath = "/upload/power_station/boe_file/"; private string boeFilePath = "/upload/power_station/boe_file/";
private string stationImageFilePath = "/upload/power_station/"; private string stationImageFilePath = "/upload/power_station/";
@ -25,9 +26,11 @@ namespace SolarPower.Controllers
public PowerStationController( public PowerStationController(
IUserRepository userRepository, IUserRepository userRepository,
ICompanyRepository companyRepository,
IPowerStationRepository powerStationRepository) : base() IPowerStationRepository powerStationRepository) : base()
{ {
this.userRepository = userRepository; this.userRepository = userRepository;
this.companyRepository = companyRepository;
this.powerStationRepository = powerStationRepository; this.powerStationRepository = powerStationRepository;
powerSationSaveAsPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "power_station"); powerSationSaveAsPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "power_station");
@ -37,11 +40,6 @@ namespace SolarPower.Controllers
return View(); return View();
} }
public IActionResult Add()
{
return View("~/Views/PowerStation/PowerStationAdd.cshtml");
}
public IActionResult Edit() public IActionResult Edit()
{ {
return View("~/Views/PowerStation/PowerStationEdit.cshtml"); return View("~/Views/PowerStation/PowerStationEdit.cshtml");
@ -73,6 +71,7 @@ namespace SolarPower.Controllers
apiResult.Msg = errorCode.GetString(apiResult.Code); apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 取裝置類型下拉選單 /// 取裝置類型下拉選單
/// </summary> /// </summary>
@ -209,6 +208,9 @@ namespace SolarPower.Controllers
{ {
powerStation = await powerStationRepository.GetOneAsync(post.Id); powerStation = await powerStationRepository.GetOneAsync(post.Id);
//取得該公司DB Name
var company = await companyRepository.GetOneAsync(myUser.CompanyId);
if (powerStation == null) if (powerStation == null)
{ {
if (post.Id != 0) if (post.Id != 0)
@ -219,20 +221,13 @@ namespace SolarPower.Controllers
} }
#region #region
//取得電站該縣市的Zipcode //取得電站該縣市的Zipcode
var zipcode = await powerStationRepository.GetCityAreaZipcodeAsync(post.AreaId); var zipcode = await powerStationRepository.GetCityAreaZipcodeAsync(post.AreaId);
//取得電站該縣市地區最後流水號 //取得電站該縣市地區最後流水號
var lastSerialNumber = await powerStationRepository.GetLastSerialNumberByCityAreaIdAsync(post.CityId, post.AreaId); var currentSerialNumber = await powerStationRepository.GetLastSerialNumberByCityAreaIdAsync(post.CityId, post.AreaId);
var tempSerialNumber = 0;
if (!string.IsNullOrEmpty(lastSerialNumber)) var tempSerialNumber = GetLastSerialNumber(currentSerialNumber);
{
tempSerialNumber = Convert.ToInt32(lastSerialNumber) + 1;
}
else
{
tempSerialNumber = 1;
}
var codeFormat = "{0}-{1}-{2}"; var codeFormat = "{0}-{1}-{2}";
@ -243,8 +238,8 @@ namespace SolarPower.Controllers
AreaId = post.AreaId, AreaId = post.AreaId,
Address = post.Address, Address = post.Address,
Name = post.Name, Name = post.Name,
Code = String.Format(codeFormat, zipcode.City, zipcode.Area, tempSerialNumber.ToString().PadLeft(4, '0')), Code = String.Format(codeFormat, zipcode.City, zipcode.Area, tempSerialNumber),
SerialNumber = tempSerialNumber.ToString().PadLeft(4, '0'), SerialNumber = tempSerialNumber,
IsEscrow = post.IsEscrow, IsEscrow = post.IsEscrow,
EscrowName = post.EscrowName, EscrowName = post.EscrowName,
ElectricityMeterAt = post.ElectricityMeterAt, ElectricityMeterAt = post.ElectricityMeterAt,
@ -259,6 +254,7 @@ namespace SolarPower.Controllers
PhotovoltaicPanelProductModel = post.PhotovoltaicPanelProductModel, PhotovoltaicPanelProductModel = post.PhotovoltaicPanelProductModel,
PhotovoltaicPanelSpecification = post.PhotovoltaicPanelSpecification, PhotovoltaicPanelSpecification = post.PhotovoltaicPanelSpecification,
PhotovoltaicPanelAmount = post.PhotovoltaicPanelAmount, PhotovoltaicPanelAmount = post.PhotovoltaicPanelAmount,
SiteDB = company.SiteDB,
CreatedBy = myUser.Id CreatedBy = myUser.Id
}; };
@ -285,10 +281,11 @@ namespace SolarPower.Controllers
"PhotovoltaicPanelProductModel", "PhotovoltaicPanelProductModel",
"PhotovoltaicPanelSpecification", "PhotovoltaicPanelSpecification",
"PhotovoltaicPanelAmount", "PhotovoltaicPanelAmount",
"SiteDB",
"CreatedBy" "CreatedBy"
}; };
var id = await powerStationRepository.AddOneAsync(powerStation, properties); var id = await powerStationRepository.AddOnePowerStationAsync(powerStation, properties, company.SiteDB);
#region #region
var city = await powerStationRepository.GetOneCityByIdAsync(post.CityId); var city = await powerStationRepository.GetOneCityByIdAsync(post.CityId);
@ -307,7 +304,7 @@ namespace SolarPower.Controllers
"PowerStationId", "PowerStationId",
"CreatedBy" "CreatedBy"
}; };
await powerStationRepository.AddOneLandBuildingInfo(landBuilding, landBuildingProperties); await powerStationRepository.AddOneLandBuildingInfo(landBuilding, landBuildingProperties, company.SiteDB);
#endregion #endregion
#region #region
@ -333,7 +330,7 @@ namespace SolarPower.Controllers
"CreatedBy", "CreatedBy",
}; };
await powerStationRepository.AddOperationPersonnelAsync(insertOperationPersonnels, properties); await powerStationRepository.AddOperationPersonnelAsync(insertOperationPersonnels, operationPersonnelProperties, company.SiteDB);
} }
#endregion #endregion
@ -401,11 +398,11 @@ namespace SolarPower.Controllers
"UpdatedBy", "UpdatedBy",
}; };
await powerStationRepository.UpdatePowerStationInfo(update, properties); await powerStationRepository.UpdatePowerStationInfo(update, properties, powerStation.SiteDB);
List<int> origOperationPersonnels = null; //原先的運維人員 List<int> origOperationPersonnels = null; //原先的運維人員
origOperationPersonnels = await powerStationRepository.GetOperationPersonnelIdsByPowerStatioinId(powerStation.Id); origOperationPersonnels = await powerStationRepository.GetOperationPersonnelIdsByPowerStatioinId(powerStation.Id, powerStation.SiteDB);
//判斷新進來的資料是否要歸類到新增 or 刪除 //判斷新進來的資料是否要歸類到新增 or 刪除
#region #region
@ -424,7 +421,7 @@ namespace SolarPower.Controllers
} }
//刪除運維人員 //刪除運維人員
await powerStationRepository.DeleteOperationPersonnel(deleteOperationPersonnels); await powerStationRepository.DeleteOperationPersonnel(deleteOperationPersonnels, powerStation.SiteDB);
#endregion #endregion
#region #region
@ -452,7 +449,7 @@ namespace SolarPower.Controllers
"CreatedBy", "CreatedBy",
}; };
await powerStationRepository.AddOperationPersonnelAsync(insertOperationPersonnels, operationPersonnelProperties); await powerStationRepository.AddOperationPersonnelAsync(insertOperationPersonnels, operationPersonnelProperties, powerStation.SiteDB);
} }
#endregion #endregion
@ -559,11 +556,13 @@ namespace SolarPower.Controllers
"UpdatedBy", "UpdatedBy",
}; };
await powerStationRepository.UpdateBoETPCInfo(update, properties); await powerStationRepository.UpdateBoETPCInfo(update, properties, powerStation.SiteDB);
#endregion #endregion
} }
//重新取得資料
powerStation = await powerStationRepository.GetOneAsync(powerStation.Id); powerStation = await powerStationRepository.GetOneAsync(powerStation.Id);
//替能源局換檔案路徑 //替能源局換檔案路徑
if (!string.IsNullOrEmpty(powerStation.BoEFile)) if (!string.IsNullOrEmpty(powerStation.BoEFile))
{ {
@ -619,7 +618,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
landBuilding = await powerStationRepository.GetOneLandBuildingInfo(post.Id); landBuilding = await powerStationRepository.GetOneLandBuildingInfo(post.Id, powerStation.SiteDB);
if (landBuilding == null) if (landBuilding == null)
{ {
@ -659,7 +658,7 @@ namespace SolarPower.Controllers
"CreatedBy" "CreatedBy"
}; };
var id = await powerStationRepository.AddOneLandBuildingInfo(landBuilding, properties); var id = await powerStationRepository.AddOneLandBuildingInfo(landBuilding, properties, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "儲存成功"; apiResult.Msg = "儲存成功";
@ -695,7 +694,7 @@ namespace SolarPower.Controllers
"UpdatedBy", "UpdatedBy",
}; };
await powerStationRepository.UpdateLandBuildingInfo(update, properties); await powerStationRepository.UpdateLandBuildingInfo(update, properties, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "修改成功"; apiResult.Msg = "修改成功";
@ -715,6 +714,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 新增/修改 運維資料 /// 新增/修改 運維資料
/// </summary> /// </summary>
@ -723,8 +723,13 @@ namespace SolarPower.Controllers
public async Task<ApiResult<string>> SaveOperation(OperationInfo post) public async Task<ApiResult<string>> SaveOperation(OperationInfo post)
{ {
ApiResult<string> apiResult = new ApiResult<string>(); ApiResult<string> apiResult = new ApiResult<string>();
PowerStation powerStation = null;
try try
{ {
powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
if (post.Id == 0) if (post.Id == 0)
{ {
OperationInfo operation = new OperationInfo() OperationInfo operation = new OperationInfo()
@ -749,7 +754,7 @@ namespace SolarPower.Controllers
"PowerStationId", "PowerStationId",
"Type" "Type"
}; };
await powerStationRepository.AddOperation(operation, properties); await powerStationRepository.AddOperation(operation, properties, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "新增成功"; apiResult.Msg = "新增成功";
@ -778,7 +783,7 @@ namespace SolarPower.Controllers
"PowerStationId", "PowerStationId",
"Type" "Type"
}; };
await powerStationRepository.UpdateOperation(operation, properties); await powerStationRepository.UpdateOperation(operation, properties, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "儲存成功"; apiResult.Msg = "儲存成功";
} }
@ -787,25 +792,34 @@ namespace SolarPower.Controllers
catch (Exception exception) catch (Exception exception)
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = exception.ToString(); 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; return apiResult;
} }
/// <summary> /// <summary>
/// 運維資料DataTable /// 運維資料DataTable
/// </summary> /// </summary>
/// <param name="stationId"></param> /// <param name="stationId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ActionResult> OperationTable(int stationId) public async Task<ActionResult> OperationTable(int stationId)
{ {
List<OperationTable> operationTable = new List<OperationTable>(); List<OperationTable> operationTable = new List<OperationTable>();
ApiResult<List<OperationTable>> apiResult = new ApiResult<List<OperationTable>>(); ApiResult<List<OperationTable>> apiResult = new ApiResult<List<OperationTable>>();
PowerStation powerStation = null;
try try
{ {
apiResult.Code = "0000";
operationTable = await powerStationRepository.OperationTable(stationId); powerStation = await powerStationRepository.GetOneAsync(stationId);
operationTable = await powerStationRepository.OperationTable(stationId, powerStation.SiteDB);
foreach (OperationTable a in operationTable) foreach (OperationTable a in operationTable)
{ {
a.Function = @" a.Function = @"
@ -825,13 +839,15 @@ namespace SolarPower.Controllers
} }
} }
apiResult.Code = "0000";
apiResult.Data = operationTable; apiResult.Data = operationTable;
} }
catch (Exception exception) catch (Exception exception)
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = exception.ToString(); apiResult.Msg = errorCode.GetString(apiResult.Code);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + "stationId = " + stationId);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
} }
var result = Json(new var result = Json(new
{ {
@ -840,41 +856,52 @@ namespace SolarPower.Controllers
return result; return result;
} }
/// <summary> /// <summary>
/// 取得一筆 運維 資料 /// 取得一筆 運維 資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="post"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ApiResult<OperationInfo>> GetOneOperation(int id) public async Task<ApiResult<OperationInfo>> GetOneOperation(PostPowerStationIdAndSelectedId post)
{ {
OperationInfo operation = new OperationInfo();
ApiResult<OperationInfo> apiResult = new ApiResult<OperationInfo>(); ApiResult<OperationInfo> apiResult = new ApiResult<OperationInfo>();
PowerStation powerStation = null;
try try
{ {
powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
apiResult.Code = "0000"; apiResult.Code = "0000";
operation = await powerStationRepository.OneOperationInfo(id); var operation = await powerStationRepository.OneOperationInfo(post.SelectedId, powerStation.SiteDB);
apiResult.Data = operation; apiResult.Data = operation;
} }
catch (Exception exception) catch (Exception exception)
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = exception.ToString(); 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; return apiResult;
} }
/// <summary> /// <summary>
/// 刪除 運維 資料 /// 刪除 運維 資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ApiResult<string>> DeleteOneOperation(int id) public async Task<ApiResult<string>> DeleteOneOperation(PostPowerStationIdAndSelectedId post)
{ {
ApiResult<string> apiResult = new ApiResult<string>(); ApiResult<string> apiResult = new ApiResult<string>();
OperationInfo operation = new OperationInfo();
PowerStation powerStation = null;
try try
{ {
operation = await powerStationRepository.OneOperationInfo(id); powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
var operation = await powerStationRepository.OneOperationInfo(post.SelectedId, powerStation.SiteDB);
if (operation == null) if (operation == null)
{ {
@ -883,7 +910,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
await powerStationRepository.DeleteOneOtherTable(operation.Id, "operation_firm"); await powerStationRepository.DeleteOneByIdWithCustomDBNameAndTable(operation.Id, powerStation.SiteDB, "operation_firm");
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "刪除成功"; apiResult.Msg = "刪除成功";
@ -892,12 +919,14 @@ namespace SolarPower.Controllers
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = errorCode.GetString(apiResult.Code); apiResult.Msg = errorCode.GetString(apiResult.Code);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + "Id=" + id); string json = System.Text.Json.JsonSerializer.Serialize(post);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + json);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
} }
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 新增 / 修改 裝置資料 /// 新增 / 修改 裝置資料
/// </summary> /// </summary>
@ -1034,21 +1063,24 @@ namespace SolarPower.Controllers
}); });
return result; return result;
} }
/// <summary> /// <summary>
/// 軟刪除單一土地房屋資訊 /// 軟刪除單一土地房屋資訊
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<ApiResult<PowerStation>> DeleteLandBuildingInfo(int id) public async Task<ApiResult<PowerStation>> DeleteLandBuildingInfo(PostPowerStationIdAndSelectedId post)
{ {
ApiResult<PowerStation> apiResult = new ApiResult<PowerStation>(); ApiResult<PowerStation> apiResult = new ApiResult<PowerStation>();
PowerStation powerStation = null;
LandBuilding landBuilding; LandBuilding landBuilding;
try try
{ {
landBuilding = await powerStationRepository.GetOneLandBuildingInfo(id); powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
landBuilding = await powerStationRepository.GetOneLandBuildingInfo(post.SelectedId, powerStation.SiteDB);
if (landBuilding == null) if (landBuilding == null)
{ {
@ -1057,7 +1089,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
await powerStationRepository.DeleteOneLandBuildingInfo(landBuilding.Id); await powerStationRepository.DeleteOneLandBuildingInfo(landBuilding.Id, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "刪除成功"; apiResult.Msg = "刪除成功";
@ -1067,12 +1099,14 @@ namespace SolarPower.Controllers
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = errorCode.GetString(apiResult.Code); apiResult.Msg = errorCode.GetString(apiResult.Code);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + "Id=" + id); string json = System.Text.Json.JsonSerializer.Serialize(post);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + json);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
} }
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 取單一設備資料 /// 取單一設備資料
/// </summary> /// </summary>
@ -1096,6 +1130,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 刪除設備 /// 刪除設備
/// </summary> /// </summary>
@ -1116,7 +1151,8 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
await powerStationRepository.DeleteOneOtherTable(Device.Id, "device"); //TODO
//await powerStationRepository.DeleteOneByIdWithCustomDBNameAndTable(Device.Id, "device");
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "刪除成功"; apiResult.Msg = "刪除成功";
@ -1131,6 +1167,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 新增/修改異常 /// 新增/修改異常
/// </summary> /// </summary>
@ -1287,7 +1324,8 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
await powerStationRepository.DeleteOneOtherTable(Exception.Id, "power_station_exception"); //TODO
//await powerStationRepository.DeleteOneOtherTable(Exception.Id, "power_station_exception");
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "刪除成功"; apiResult.Msg = "刪除成功";
@ -1303,7 +1341,6 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
/// <summary> /// <summary>
/// 取得所有電站圖片 /// 取得所有電站圖片
/// </summary> /// </summary>
@ -1328,7 +1365,15 @@ namespace SolarPower.Controllers
} }
else else
{ {
powerStationImages = await powerStationRepository.GetAllPowerStationImageAsync(powerStationId);
if(powerStation.CompanyId != myUser.CompanyId)
{
apiResult.Code = "9993";
apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult;
}
powerStationImages = await powerStationRepository.GetAllPowerStationImageAsync(powerStationId, powerStation.SiteDB);
foreach (var stationImage in powerStationImages) foreach (var stationImage in powerStationImages)
{ {
@ -1424,13 +1469,13 @@ namespace SolarPower.Controllers
"CreatedBy" "CreatedBy"
}; };
await powerStationRepository.AddPowerStationImageAsync(powerStationImages, properties); await powerStationRepository.AddPowerStationImageAsync(powerStationImages, properties, powerStation.SiteDB);
} }
#endregion #endregion
#region #region
powerStationImages = null; powerStationImages = null;
powerStationImages = await powerStationRepository.GetAllPowerStationImageAsync(powerStation.Id); powerStationImages = await powerStationRepository.GetAllPowerStationImageAsync(powerStation.Id, powerStation.SiteDB);
foreach (var stationImage in powerStationImages) foreach (var stationImage in powerStationImages)
{ {
@ -1460,15 +1505,17 @@ namespace SolarPower.Controllers
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ApiResult<string>> DeletePowerStationImage(int id) public async Task<ApiResult<string>> DeletePowerStationImage(PostPowerStationIdAndSelectedId post)
{ {
ApiResult<string> apiResult = new ApiResult<string>(); ApiResult<string> apiResult = new ApiResult<string>();
PowerStation powerStation;
PowerStationImage powerStationImage; PowerStationImage powerStationImage;
try try
{ {
powerStationImage = await powerStationRepository.GetOnePowerStationImageAsync(id); powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
powerStationImage = await powerStationRepository.GetOnePowerStationImageAsync(post.SelectedId, powerStation.SiteDB);
if (powerStationImage == null) if (powerStationImage == null)
{ {
@ -1477,7 +1524,14 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
await powerStationRepository.DeleteOnePowerStationImage(id); if (powerStation.CompanyId != myUser.CompanyId)
{
apiResult.Code = "9993";
apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult;
}
await powerStationRepository.DeleteOnePowerStationImage(powerStationImage.Id, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "刪除成功"; apiResult.Msg = "刪除成功";
@ -1486,7 +1540,8 @@ namespace SolarPower.Controllers
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = errorCode.GetString(apiResult.Code); apiResult.Msg = errorCode.GetString(apiResult.Code);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + "Id=" + id); string json = System.Text.Json.JsonSerializer.Serialize(post);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + json);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
} }
@ -1502,11 +1557,13 @@ namespace SolarPower.Controllers
{ {
ApiResult<string> apiResult = new ApiResult<string>(); ApiResult<string> apiResult = new ApiResult<string>();
PowerStation powerStation;
PowerStationImage powerStationImage; PowerStationImage powerStationImage;
try try
{ {
powerStationImage = await powerStationRepository.GetOnePowerStationImageAsync(post.TargetImageId); powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
powerStationImage = await powerStationRepository.GetOnePowerStationImageAsync(post.TargetImageId, powerStation.SiteDB);
if (powerStationImage == null) if (powerStationImage == null)
{ {
@ -1515,11 +1572,18 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
if (powerStation.CompanyId != myUser.CompanyId)
{
apiResult.Code = "9993";
apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult;
}
UpdataPowerStationImage updata = new UpdataPowerStationImage(); UpdataPowerStationImage updata = new UpdataPowerStationImage();
List<string> properties = new List<string>(); List<string> properties = new List<string>();
//找出原本的圖片 //找出原本的圖片
var origMainDisplay = await powerStationRepository.GetMainDisplayAsync(post.PowerStationId); var origMainDisplay = await powerStationRepository.GetMainDisplayAsync(post.PowerStationId, powerStation.SiteDB);
if (origMainDisplay != null) if (origMainDisplay != null)
{ {
updata = new UpdataPowerStationImage() updata = new UpdataPowerStationImage()
@ -1536,7 +1600,7 @@ namespace SolarPower.Controllers
"UpdatedBy" "UpdatedBy"
}; };
await powerStationRepository.UpdatePowerStationImage(updata, properties); await powerStationRepository.UpdatePowerStationImage(updata, properties, powerStation.SiteDB);
} }
// 更新被選擇的圖維卡片顯示圖 // 更新被選擇的圖維卡片顯示圖
@ -1554,7 +1618,7 @@ namespace SolarPower.Controllers
"UpdatedBy" "UpdatedBy"
}; };
await powerStationRepository.UpdatePowerStationImage(updata, properties); await powerStationRepository.UpdatePowerStationImage(updata, properties, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "修改卡片顯示圖成功"; apiResult.Msg = "修改卡片顯示圖成功";
@ -1596,7 +1660,14 @@ namespace SolarPower.Controllers
} }
else else
{ {
powerStationSingleLines = await powerStationRepository.GetAllPowerStationSingleLineAsync(powerStationId); if (powerStation.CompanyId != myUser.CompanyId)
{
apiResult.Code = "9993";
apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult;
}
powerStationSingleLines = await powerStationRepository.GetAllPowerStationSingleLineAsync(powerStationId, powerStation.SiteDB);
foreach (var singleLine in powerStationSingleLines) foreach (var singleLine in powerStationSingleLines)
{ {
@ -1692,13 +1763,13 @@ namespace SolarPower.Controllers
"CreatedBy" "CreatedBy"
}; };
await powerStationRepository.AddPowerStationSingleLineAsync(powerStationSingleLines, properties); await powerStationRepository.AddPowerStationSingleLineAsync(powerStationSingleLines, properties, powerStation.SiteDB);
} }
#endregion #endregion
#region #region
powerStationSingleLines = null; powerStationSingleLines = null;
powerStationSingleLines = await powerStationRepository.GetAllPowerStationSingleLineAsync(powerStation.Id); powerStationSingleLines = await powerStationRepository.GetAllPowerStationSingleLineAsync(powerStation.Id, powerStation.SiteDB);
foreach (var singleLine in powerStationSingleLines) foreach (var singleLine in powerStationSingleLines)
{ {
@ -1728,15 +1799,25 @@ namespace SolarPower.Controllers
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ApiResult<string>> DeletePowerStationSingleLine(int id) public async Task<ApiResult<string>> DeletePowerStationSingleLine(PostPowerStationIdAndSelectedId post)
{ {
ApiResult<string> apiResult = new ApiResult<string>(); ApiResult<string> apiResult = new ApiResult<string>();
PowerStation powerStation;
PowerStationSingleLine powerStationSingleLine; PowerStationSingleLine powerStationSingleLine;
try try
{ {
powerStationSingleLine = await powerStationRepository.GetOnePowerStationSingleLineAsync(id); powerStation = await powerStationRepository.GetOneAsync(post.PowerStationId);
if (powerStation.CompanyId != myUser.CompanyId)
{
apiResult.Code = "9993";
apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult;
}
powerStationSingleLine = await powerStationRepository.GetOnePowerStationSingleLineAsync(post.SelectedId, powerStation.SiteDB);
if (powerStationSingleLine == null) if (powerStationSingleLine == null)
{ {
@ -1745,7 +1826,7 @@ namespace SolarPower.Controllers
return apiResult; return apiResult;
} }
await powerStationRepository.DeleteOnePowerStationSingleLine(id); await powerStationRepository.DeleteOnePowerStationSingleLine(powerStationSingleLine.Id, powerStation.SiteDB);
apiResult.Code = "0000"; apiResult.Code = "0000";
apiResult.Msg = "刪除成功"; apiResult.Msg = "刪除成功";
@ -1754,10 +1835,33 @@ namespace SolarPower.Controllers
{ {
apiResult.Code = "9999"; apiResult.Code = "9999";
apiResult.Msg = errorCode.GetString(apiResult.Code); apiResult.Msg = errorCode.GetString(apiResult.Code);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + "Id=" + id); string json = System.Text.Json.JsonSerializer.Serialize(post);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + json);
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
} }
return apiResult;
}
/// <summary>
/// 取得該使用者可看的所有電站分佈縣市以及各縣市電站數量
/// </summary>
/// <returns></returns>
public async Task<ApiResult<List<SolarCityAmount>>> GetSolarCitySummary()
{
ApiResult<List<SolarCityAmount>> apiResult = new ApiResult<List<SolarCityAmount>>();
List<SolarCityAmount> solaramount = new List<SolarCityAmount>();
try
{
apiResult.Code = "0000";
solaramount = await powerStationRepository.GetSolarCitySummary(myUser);
apiResult.Data = solaramount;
}
catch (Exception exception)
{
apiResult.Code = "9999";
apiResult.Msg = exception.ToString();
}
return apiResult; return apiResult;
} }
} }

View File

@ -32,12 +32,12 @@ namespace SolarPower.Helper
EDFunction ed = new EDFunction(); EDFunction ed = new EDFunction();
var serverStr = ed.AESDecrypt(dbConfig.Server); var serverStr = ed.AESDecrypt(dbConfig.Server);
var databaseStr = ed.DESDecrypt(dbConfig.Database); var databaseStr = ed.AESDecrypt(dbConfig.Database);
var rootStr = ed.DESDecrypt(dbConfig.Root); var rootStr = ed.AESDecrypt(dbConfig.Root);
var passwordStr = ed.DESDecrypt(dbConfig.Password); var passwordStr = ed.AESDecrypt(dbConfig.Password);
//var connStr = $"server={serverStr};database={databaseStr};user={rootStr};password={passwordStr};charset=utf8;"; //var connStr = $"server={serverStr};database={databaseStr};user={rootStr};password={passwordStr};charset=utf8;";
var connStr = @"server=127.0.0.1;port=3308;database=solar_power;user=root;password=00000000;charset=utf8;"; var connStr = @"server=127.0.0.1;port=3306;database=solar_power;user=root;password=000000;charset=utf8;";
this._connectionString = connStr; this._connectionString = connStr;
} }

View File

@ -22,6 +22,7 @@ namespace SolarPower.Models.Company
public string Phone { get; set; } public string Phone { get; set; }
public string Address { get; set; } public string Address { get; set; }
public int RegisterUpperLimit { get; set; } //註冊上限 public int RegisterUpperLimit { get; set; } //註冊上限
public string SiteDB { get; set; } //公司各自DB
} }
/// <summary> /// <summary>
@ -51,7 +52,7 @@ namespace SolarPower.Models.Company
public string TaxIDNumber { get; set; } //統一編號 public string TaxIDNumber { get; set; } //統一編號
public string Phone { get; set; } //電話 public string Phone { get; set; } //電話
public string Address { get; set; } public string Address { get; set; }
public string RelationalDB { get; set; } //關聯的公司自己資料庫 public string SiteDB { get; set; } //關聯的公司自己資料庫
public int RegisterUpperLimit { get; set; } //註冊上限 public int RegisterUpperLimit { get; set; } //註冊上限
} }

View File

@ -63,4 +63,10 @@ namespace SolarPower.Models
public byte Layer { get; set; } //角色層級 public byte Layer { get; set; } //角色層級
public List<string> Auths { get; set; } //可操作頁面 public List<string> Auths { get; set; } //可操作頁面
} }
public class Variable
{
public string Name { get; set; }
public string Value { get; set; }
}
} }

View File

@ -101,6 +101,17 @@ namespace SolarPower.Models.PowerStation
set { tpcPurchaseElectricityAt = value; } set { tpcPurchaseElectricityAt = value; }
} }
public List<LandBuilding> LandBuildings { get; set; } //土地房屋資料 public List<LandBuilding> LandBuildings { get; set; } //土地房屋資料
public byte SolarType { get; set; } //電站類型
public double kwh { get; set; } //
public double Today_kwh { get; set; } //今日發電量
public double Total_kwh { get; set; } //總發電量
public double kwhkwp { get; set; }
public double PR { get; set; }
public double MP { get; set; }
public double SolarHour { get; set; } //總運轉小時
public string SiteDB { get; set; } //電站 DB name: solar_com
public string TodayWeather { get; set; } //今日天氣
public double TodayWeatherTemp { get; set; } //今日溫度
public string CreatorName { get; set; } //創建者名稱 public string CreatorName { get; set; } //創建者名稱
} }
@ -288,9 +299,13 @@ namespace SolarPower.Models.PowerStation
public string Email { get; set; }//Email public string Email { get; set; }//Email
} }
public class OperationStationId /// <summary>
/// 針對電站管理的運維、設備及異常設定
/// </summary>
public class PostPowerStationIdAndSelectedId
{ {
public int stationId { get; set; } public int PowerStationId { get; set; }
public int SelectedId { get; set; }
} }
public class OperationTable : OperationInfo public class OperationTable : OperationInfo
@ -442,4 +457,14 @@ namespace SolarPower.Models.PowerStation
public string Image { get; set; } public string Image { get; set; }
} }
/// <summary>
/// 電站縣市分佈
/// </summary>
public class SolarCityAmount
{
public int CityId { get; set; }
public string City { get; set; }
public int Amount { get; set; }
}
} }

View File

@ -20,7 +20,6 @@ namespace SolarPower.Repository.Implement
tableName = "company"; tableName = "company";
} }
/// <summary> /// <summary>
/// 取得下拉式公司選單須為Deleted: 0 /// 取得下拉式公司選單須為Deleted: 0
/// </summary> /// </summary>
@ -413,9 +412,9 @@ namespace SolarPower.Repository.Implement
/// <summary> /// <summary>
/// 創建公司自己的DB /// 創建公司自己的DB
/// </summary> /// </summary>
/// <param name="dbName"></param> /// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task CreatCompanyDB(string dbName) public async Task CreatCompanyDB(string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -425,148 +424,184 @@ namespace SolarPower.Repository.Implement
try try
{ {
var sql = @$" var sql = @$"
-- --
CREATE DATABASE IF NOT EXISTS `{dbName}`; CREATE DATABASE IF NOT EXISTS `{db_name}`;
USE `{dbName}`; USE `{db_name}`;
-- device -- device
CREATE TABLE IF NOT EXISTS `device` ( CREATE TABLE IF NOT EXISTS `device` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`UID` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ' ++(0001~9999)+(3) + SN(3)', `UID` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ' ++(0001~9999)+(3) + SN(3)',
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`Name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Brand` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `TypeName` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`ProductModel` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Brand` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`DBName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `ProductModel` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`TableName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `DBName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ColName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `TableName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Remark` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, `ColName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `Remark` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `CreatedBy` int(10) unsigned NOT NULL COMMENT '',
`UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '', `CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
`UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '', `UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '',
PRIMARY KEY (`Id`) USING BTREE, `UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '',
KEY `IDX_01` (`Deleted`) USING BTREE, PRIMARY KEY (`Id`) USING BTREE,
KEY `IDX_02` (`UID`,`PowerStationId`) KEY `IDX_01` (`Deleted`) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; KEY `IDX_02` (`UID`,`PowerStationId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- land_building -- land_building
CREATE TABLE IF NOT EXISTS `land_building` ( CREATE TABLE IF NOT EXISTS `land_building` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`Address` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Address` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`LeaseNotarizationAt` timestamp NULL DEFAULT NULL COMMENT '', `LeaseNotarizationAt` timestamp NULL DEFAULT NULL COMMENT '',
`Landowner` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Landowner` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Purpose` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Purpose` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`LeaseRate` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '(%)', `LeaseRate` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '(%)',
`Coordinate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Coordinate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `CreatedBy` int(10) unsigned NOT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
`UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '', `UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '',
`UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '', `UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '',
PRIMARY KEY (`Id`), PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`,`PowerStationId`) KEY `IDX_01` (`Deleted`,`PowerStationId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- operation_firm -- operation_firm
CREATE TABLE IF NOT EXISTS `operation_firm` ( CREATE TABLE IF NOT EXISTS `operation_firm` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`Name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0: 1: 2:', `Type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0: 1: 2:',
`ContactPerson` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `ContactPerson` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Email', `Email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Email',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `CreatedBy` int(10) unsigned NOT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
`UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '', `UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '',
`UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '', `UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '',
PRIMARY KEY (`Id`), PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`,`PowerStationId`) KEY `IDX_01` (`Deleted`,`PowerStationId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- power_station -- power_station
CREATE TABLE IF NOT EXISTS `power_station` ( CREATE TABLE IF NOT EXISTS `power_station` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL DEFAULT 0,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`CompanyId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `CompanyId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`Name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `CityId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`Code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '++ ', `AreaId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`IsEscrow` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0: 1:', `Address` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`EscrowName` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`ElectricityMeterAt` timestamp NULL DEFAULT NULL COMMENT '', `Code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '++',
`EstimatedRecoveryTime` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `SerialNumber` varchar(4) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`GeneratingCapacity` decimal(10,1) NOT NULL DEFAULT 0.0 COMMENT '()', `IsEscrow` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0: 1:',
`PowerRate` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `EscrowName` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`Coordinate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `ElectricityMeterAt` timestamp NULL DEFAULT NULL COMMENT '',
`InverterBrand` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `EstimatedRecoveryTime` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`InverterProductModel` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `GeneratingCapacity` decimal(10,1) NOT NULL DEFAULT 0.0 COMMENT '()',
`InverterAmount` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerRate` decimal(10,3) NOT NULL DEFAULT 0.000 COMMENT '',
`PhotovoltaicPanelBrand` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `Coordinate` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`PhotovoltaicPanelProductModel` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `InverterBrand` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`PhotovoltaicPanelSpecification` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '', `InverterProductModel` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`PhotovoltaicPanelAmount` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `InverterAmount` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`BoEFile` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `PhotovoltaicPanelBrand` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`BoEDiscountRate` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PhotovoltaicPanelProductModel` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`BoEDeviceRegisterNumber` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `PhotovoltaicPanelSpecification` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`BoERentRatio` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '(%)', `PhotovoltaicPanelAmount` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`TPCContractNumber` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `BoEFileName` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`TPCContractAt` timestamp NULL DEFAULT NULL COMMENT '', `BoEFile` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`TPCSellDeadline` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '()', `BoEDiscountRate` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`TPCMeterReading` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `BoEDeviceRegisterNumber` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`TPCPurchaseElectricityAt` timestamp NULL DEFAULT NULL COMMENT '', `BoERentRatio` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '(%)',
`TPCSellElectricityAt` timestamp NULL DEFAULT NULL COMMENT '', `TPCContractNumber` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `TPCContractAt` timestamp NULL DEFAULT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `TPCSellDeadline` int(10) unsigned DEFAULT 0 COMMENT '()',
`UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '', `TPCMeterReading` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '', `TPCPurchaseElectricityAt` timestamp NULL DEFAULT NULL COMMENT '',
PRIMARY KEY (`Id`), `TPCSellElectricityAt` timestamp NULL DEFAULT NULL COMMENT '',
KEY `IDX_01` (`Deleted`), `kwh` decimal(10,3) unsigned NOT NULL DEFAULT 0.000,
KEY `IDX_02` (`CompanyId`) `Today_kwh` decimal(10,3) unsigned NOT NULL DEFAULT 0.000 COMMENT '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; `Total_kwh` decimal(10,3) unsigned NOT NULL DEFAULT 0.000 COMMENT '',
`kwhkwp` decimal(10,3) unsigned NOT NULL DEFAULT 0.000,
`PR` decimal(5,2) unsigned NOT NULL DEFAULT 0.00 COMMENT 'Pr值',
`MP` decimal(5,2) unsigned NOT NULL DEFAULT 0.00,
`SolarHour` decimal(5,2) unsigned NOT NULL DEFAULT 0.00 COMMENT '',
`SiteDB` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0.000' COMMENT ' DB name: solar_com',
`TodayWeather` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0.000' COMMENT '',
`TodayWeatherTemp` decimal(5,2) unsigned NOT NULL DEFAULT 0.00 COMMENT '',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
`UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '',
`UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '',
PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`),
KEY `IDX_02` (`CompanyId`),
KEY `IDX_03` (`CityId`,`AreaId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- power_station_image -- power_station_exception
CREATE TABLE IF NOT EXISTS `power_station_image` ( CREATE TABLE IF NOT EXISTS `power_station_exception` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`IsMainDisplay` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0:PR值',
` image` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `UpperLimit` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `LowerLimit` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `Alarm` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0:email通知',
PRIMARY KEY (`Id`), `CreatedBy` int(10) unsigned NOT NULL COMMENT '',
KEY `IDX_01` (`Deleted`,`IsMainDisplay`,`PowerStationId`) USING BTREE `CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; `UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '',
`UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '',
PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`,`PowerStationId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- power_station_operation_personnel -- power_station_image
CREATE TABLE IF NOT EXISTS `power_station_operation_personnel` ( CREATE TABLE IF NOT EXISTS `power_station_image` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0, `Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`UserId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `IsMainDisplay` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `Image` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `CreatedBy` int(10) unsigned NOT NULL COMMENT '',
PRIMARY KEY (`Id`), `CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
KEY `IDX_01` (`Deleted`), `UpdatedBy` int(10) unsigned DEFAULT NULL COMMENT '',
KEY `IDX_02` (`PowerStationId`,`UserId`) `UpdatedAt` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() COMMENT '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`,`IsMainDisplay`,`PowerStationId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- power_station_single_line_diagram -- power_station_operation_personnel
CREATE TABLE IF NOT EXISTS `power_station_single_line_diagram` ( CREATE TABLE IF NOT EXISTS `power_station_operation_personnel` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:', `Deleted` tinyint(4) NOT NULL DEFAULT 0,
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '', `PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
` image` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '', `UserId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '', `CreatedBy` int(10) unsigned NOT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '', `CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
PRIMARY KEY (`Id`), PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`,`PowerStationId`) USING BTREE KEY `IDX_01` (`Deleted`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''; KEY `IDX_02` (`PowerStationId`,`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
-- power_station_single_line_diagram
CREATE TABLE IF NOT EXISTS `power_station_single_line_diagram` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT ' 0: 1:',
`PowerStationId` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '',
`Image` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '',
`CreatedBy` int(10) unsigned NOT NULL COMMENT '',
`CreatedAt` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '',
PRIMARY KEY (`Id`),
KEY `IDX_01` (`Deleted`,`PowerStationId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';
"; ";
await conn.ExecuteAsync(sql, trans); await conn.ExecuteAsync(sql, trans);

View File

@ -10,6 +10,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Text.Json; using System.Text.Json;
using SolarPower.Models;
namespace SolarPower.Repository.Implement namespace SolarPower.Repository.Implement
{ {
@ -32,7 +33,7 @@ namespace SolarPower.Repository.Implement
try try
{ {
var sql = $"SELECT Id AS Value, Name AS Text FROM city"; var sql = $"SELECT Id AS Value, Name AS Text FROM city";
result = (await conn.QueryAsync<CitySelectItemList>(sql)).ToList(); result = (await conn.QueryAsync<CitySelectItemList>(sql)).ToList();
} }
catch (Exception exception) catch (Exception exception)
@ -116,7 +117,7 @@ namespace SolarPower.Repository.Implement
} }
/// <summary> /// <summary>
/// 取得縣市地區代碼 /// 透過地區編號,取得縣市地區代碼
/// </summary> /// </summary>
/// <param name="areaId"></param> /// <param name="areaId"></param>
/// <returns></returns> /// <returns></returns>
@ -186,14 +187,17 @@ namespace SolarPower.Repository.Implement
LEFT JOIN user u ON ps.CreatedBy = u.Id LEFT JOIN user u ON ps.CreatedBy = u.Id
WHERE ps.Deleted = 0 AND ps.Id = @Id"; WHERE ps.Deleted = 0 AND ps.Id = @Id";
result = await conn.QueryFirstOrDefaultAsync<PowerStation>(sql, new { Id = id}); result = await conn.QueryFirstOrDefaultAsync<PowerStation>(sql, new { Id = id });
if(result!= null) if (result != null)
{ {
var sql_operation_personnel = @"SELECT UserId FROM power_station_operation_personnel op WHERE Deleted = 0 AND op.PowerStationId = @PowerStationId";
var db_name = result.SiteDB;
var sql_operation_personnel = @$"SELECT UserId FROM {db_name}.power_station_operation_personnel op WHERE Deleted = 0 AND op.PowerStationId = @PowerStationId";
result.OperationPersonnelIds = (await conn.QueryAsync<int>(sql_operation_personnel, new { PowerStationId = result.Id })).ToList(); result.OperationPersonnelIds = (await conn.QueryAsync<int>(sql_operation_personnel, new { PowerStationId = result.Id })).ToList();
var sql_land_building = @$"SELECT lb.*, u.Name AS CreatorName FROM land_building lb var sql_land_building = @$"SELECT lb.*, u.Name AS CreatorName FROM {db_name}.land_building lb
LEFT JOIN user u ON lb.CreatedBy = u.Id LEFT JOIN user u ON lb.CreatedBy = u.Id
WHERE lb.Deleted = 0 AND PowerStationId = @PowerStationId"; WHERE lb.Deleted = 0 AND PowerStationId = @PowerStationId";
result.LandBuildings = (await conn.QueryAsync<LandBuilding>(sql_land_building, new { PowerStationId = result.Id })).ToList(); result.LandBuildings = (await conn.QueryAsync<LandBuilding>(sql_land_building, new { PowerStationId = result.Id })).ToList();
@ -212,11 +216,61 @@ namespace SolarPower.Repository.Implement
} }
/// <summary> /// <summary>
/// 修改電站基本資訊 /// 新增電站資料至 主、子資料庫
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task UpdatePowerStationInfo(UpdatePowerStationInfo entity, List<string> properties) public async Task<int> AddOnePowerStationAsync(PowerStation entity, List<string> properties, string db_name)
{
int id; int sub_count;
using (IDbConnection conn = _databaseHelper.GetConnection())
{
conn.Open();
using (var trans = conn.BeginTransaction())
{
try
{
//新增資料 至主資料庫
string sql = GenerateInsertQuery(properties);
sql += "SELECT LAST_INSERT_ID();";
id = (await conn.QueryAsync<int>(sql, entity, trans)).Single();
//新增資料 至子資料庫
properties.Add("Id");
entity.Id = id;
string sub_sql = GenerateInsertQueryWithCustomDBNameAndTable(properties, db_name, tableName);
sub_count = await conn.ExecuteAsync(sub_sql, entity, trans);
trans.Commit();
}
catch (Exception exception)
{
trans.Rollback();
throw exception;
}
finally
{
conn.Close();
}
}
return id;
}
}
/// <summary>
/// 修改主、子資料庫電站基本資訊
/// </summary>
/// <param name="entity"></param>
/// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns>
public async Task UpdatePowerStationInfo(UpdatePowerStationInfo entity, List<string> properties, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
@ -226,10 +280,14 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
//修改主資料庫
var sql = GenerateUpdateQuery(properties); var sql = GenerateUpdateQuery(properties);
await conn.ExecuteAsync(sql, entity, trans); await conn.ExecuteAsync(sql, entity, trans);
//修改子資料庫
var sub_sql = GenerateUpdateQueryWithCustomDBNameAndTable(properties, db_name, tableName);
await conn.ExecuteAsync(sub_sql, entity, trans);
trans.Commit(); trans.Commit();
} }
catch (Exception exception) catch (Exception exception)
@ -246,13 +304,14 @@ namespace SolarPower.Repository.Implement
} }
/// <summary> /// <summary>
/// 修改能源局與台電資訊 /// 修改主、子資料庫能源局與台電資訊
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task UpdateBoETPCInfo(UpdateBoETPCInfo entity, List<string> properties) public async Task UpdateBoETPCInfo(UpdateBoETPCInfo entity, List<string> properties, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
conn.Open(); conn.Open();
@ -260,10 +319,14 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
//修改主資料庫
var sql = GenerateUpdateQuery(properties); var sql = GenerateUpdateQuery(properties);
await conn.ExecuteAsync(sql, entity, trans); await conn.ExecuteAsync(sql, entity, trans);
//修改子資料庫
var sub_sql = GenerateUpdateQueryWithCustomDBNameAndTable(properties, db_name, tableName);
await conn.ExecuteAsync(sub_sql, entity, trans);
trans.Commit(); trans.Commit();
} }
catch (Exception exception) catch (Exception exception)
@ -283,8 +346,9 @@ namespace SolarPower.Repository.Implement
/// 新增 土地房屋資訊 /// 新增 土地房屋資訊
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<LandBuilding> GetOneLandBuildingInfo(int id) public async Task<LandBuilding> GetOneLandBuildingInfo(int id, string db_name)
{ {
LandBuilding result; LandBuilding result;
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
@ -292,7 +356,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
var sql = @"SELECT * FROM land_building WHERE Deleted =0 AND Id = @Id"; var sql = @$"SELECT * FROM {db_name}.land_building WHERE Deleted = 0 AND Id = @Id";
result = await conn.QueryFirstOrDefaultAsync<LandBuilding>(sql, new { Id = id }); result = await conn.QueryFirstOrDefaultAsync<LandBuilding>(sql, new { Id = id });
} }
@ -314,8 +378,9 @@ namespace SolarPower.Repository.Implement
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int> AddOneLandBuildingInfo(LandBuilding entity, List<string> properties) public async Task<int> AddOneLandBuildingInfo(LandBuilding entity, List<string> properties, string db_name)
{ {
int id; int id;
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
@ -323,7 +388,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
string sql = GenerateInsertQueryWithCustomTable(properties, "land_building"); string sql = GenerateInsertQueryWithCustomDBNameAndTable(properties, db_name, "land_building");
sql += "SELECT LAST_INSERT_ID();"; sql += "SELECT LAST_INSERT_ID();";
@ -347,8 +412,9 @@ namespace SolarPower.Repository.Implement
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task UpdateLandBuildingInfo(UpdateLandBuilding entity, List<string> properties) public async Task UpdateLandBuildingInfo(UpdateLandBuilding entity, List<string> properties, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -357,7 +423,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = GenerateUpdateQueryWithCustomTable(properties, "land_building"); var sql = GenerateUpdateQueryWithCustomDBNameAndTable(properties, db_name, "land_building");
await conn.ExecuteAsync(sql, entity, trans); await conn.ExecuteAsync(sql, entity, trans);
@ -380,8 +446,9 @@ namespace SolarPower.Repository.Implement
/// 軟刪除土地房屋資訊 /// 軟刪除土地房屋資訊
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task DeleteOneLandBuildingInfo(int id) public async Task DeleteOneLandBuildingInfo(int id, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -390,7 +457,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = $"UPDATE land_building SET deleted = 1 WHERE id = @Id"; var sql = $"UPDATE {db_name}.land_building SET Deleted = 1 WHERE Id = @Id";
await conn.ExecuteAsync(sql, new { Id = id }, trans); await conn.ExecuteAsync(sql, new { Id = id }, trans);
@ -414,8 +481,9 @@ namespace SolarPower.Repository.Implement
/// </summary> /// </summary>
/// <param name="operation"></param> /// <param name="operation"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int> AddOperation(OperationInfo operation, List<string> properties) public async Task<int> AddOperation(OperationInfo operation, List<string> properties, string db_name)
{ {
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
{ {
@ -423,7 +491,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
string sql = GenerateInsertQueryWithCustomTable(properties, "operation_firm"); string sql = GenerateInsertQueryWithCustomDBNameAndTable(properties, db_name, "operation_firm");
count = await conn.ExecuteAsync(sql, operation); count = await conn.ExecuteAsync(sql, operation);
@ -440,24 +508,34 @@ namespace SolarPower.Repository.Implement
return count; return count;
} }
} }
/// <summary> /// <summary>
/// 運維DataTable /// 運維DataTable
/// </summary> /// </summary>
/// <param name="stationId"></param> /// <param name="stationId"></param>
/// <param name="stationId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<List<OperationTable>> OperationTable (int stationId) public async Task<List<OperationTable>> OperationTable(int stationId, string db_name)
{ {
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
{ {
List<OperationTable> operation = new List<OperationTable>(); List<OperationTable> operation = new List<OperationTable>();
conn.Open(); conn.Open();
try try
{ {
string sql = @$"SELECT operation_firm.Name, string sql = @$"SELECT
operation_firm.Name,
operation_firm.PowerStationId, operation_firm.PowerStationId,
operation_firm.Id,operation_firm.ContactPerson,operation_firm.Phone,operation_firm.Email,user.Name AS CreatedName,operation_firm.CreatedAt,operation_firm.Type operation_firm.Id,
FROM operation_firm LEFT JOIN user ON operation_firm.CreatedBy = user.id WHERE operation_firm.Deleted = 0 AND operation_firm.PowerStationId = @StationId"; operation_firm.ContactPerson,
operation_firm.Phone,
operation_firm.Email,
user.Name AS CreatedName,
operation_firm.CreatedAt,operation_firm.Type
FROM {db_name}.operation_firm
LEFT JOIN user ON operation_firm.CreatedBy = user.id
WHERE operation_firm.Deleted = 0 AND operation_firm.PowerStationId = @StationId";
operation = (await conn.QueryAsync<OperationTable>(sql, new { StationId = stationId })).ToList(); operation = (await conn.QueryAsync<OperationTable>(sql, new { StationId = stationId })).ToList();
} }
@ -476,8 +554,9 @@ namespace SolarPower.Repository.Implement
/// 選取單一運維 /// 選取單一運維
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<OperationInfo> OneOperationInfo (int id) public async Task<OperationInfo> OneOperationInfo(int id, string db_name)
{ {
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
{ {
@ -485,7 +564,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
string sql = @$"SELECT * FROM operation_firm WHERE Id = @Id"; string sql = @$"SELECT * FROM {db_name}.operation_firm WHERE Id = @Id";
operation = await conn.QueryFirstOrDefaultAsync<OperationInfo>(sql, new { Id = id }); operation = await conn.QueryFirstOrDefaultAsync<OperationInfo>(sql, new { Id = id });
} }
@ -500,30 +579,23 @@ namespace SolarPower.Repository.Implement
return operation; return operation;
} }
} }
/// <summary> /// <summary>
/// 更新運維 /// 更新運維
/// </summary> /// </summary>
/// <param name="operation"></param> /// <param name="operation"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task UpdateOperation(OperationInfo operation , List<string> properties) public async Task UpdateOperation(OperationInfo operation, List<string> properties, string db_name)
{ {
using IDbConnection conn = _databaseHelper.GetConnection(); using IDbConnection conn = _databaseHelper.GetConnection();
conn.Open(); conn.Open();
var trans = conn.BeginTransaction(); var trans = conn.BeginTransaction();
try try
{ {
var updateQuery = new StringBuilder($"UPDATE operation_firm SET "); var sql = GenerateUpdateQueryWithCustomDBNameAndTable(properties, db_name, "operation_firm");
properties.ForEach(property => await conn.ExecuteAsync(sql, operation, trans);
{
if (!property.Equals("Id"))
{
updateQuery.Append($"{property}=@{property},");
}
});
updateQuery.Remove(updateQuery.Length - 1, 1); //remove last comma
updateQuery.Append(" WHERE id = @Id");
await conn.ExecuteAsync(updateQuery.ToString(), operation, trans);
trans.Commit(); trans.Commit();
} }
catch (Exception exception) catch (Exception exception)
@ -549,9 +621,9 @@ namespace SolarPower.Repository.Implement
try try
{ {
string sql = @$"SELECT * FROM variable WHERE name = @name"; string sql = @$"SELECT * FROM variable WHERE name = @name";
var json = await conn.QueryFirstOrDefaultAsync<Variable>(sql, new { name = "Type" }); var json = await conn.QueryFirstOrDefaultAsync<Variable>(sql, new { name = "Type" });
Root jsonfor = JsonSerializer.Deserialize<Root>(json.value); Root jsonfor = JsonSerializer.Deserialize<Root>(json.value);
foreach(Models.PowerStation.Type a in jsonfor.Type) foreach (Models.PowerStation.Type a in jsonfor.Type)
{ {
UserSelectItemList KeyValue = new UserSelectItemList UserSelectItemList KeyValue = new UserSelectItemList
{ {
@ -598,7 +670,7 @@ namespace SolarPower.Repository.Implement
{ {
conn.Close(); conn.Close();
} }
} }
/// <summary> /// <summary>
/// 修改裝置資料 /// 修改裝置資料
@ -816,8 +888,9 @@ namespace SolarPower.Repository.Implement
/// 透過電站編號,取得該電站的運維人員編號 /// 透過電站編號,取得該電站的運維人員編號
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<List<int>> GetOperationPersonnelIdsByPowerStatioinId(int powerStationId) public async Task<List<int>> GetOperationPersonnelIdsByPowerStatioinId(int powerStationId, string db_name)
{ {
List<int> result; List<int> result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
@ -825,7 +898,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
var sql = @$"SELECT UserId FROM power_station_operation_personnel WHERE Deleted = 0 AND PowerStationId = @PowerStationId"; var sql = @$"SELECT UserId FROM {db_name}.power_station_operation_personnel WHERE Deleted = 0 AND PowerStationId = @PowerStationId";
result = (await conn.QueryAsync<int>(sql, new { PowerStationId = powerStationId })).ToList(); result = (await conn.QueryAsync<int>(sql, new { PowerStationId = powerStationId })).ToList();
} }
@ -846,8 +919,9 @@ namespace SolarPower.Repository.Implement
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int> AddOperationPersonnelAsync(List<PowerStationOperationPersonnel> entity, List<string> properties) public async Task<int> AddOperationPersonnelAsync(List<PowerStationOperationPersonnel> entity, List<string> properties, string db_name)
{ {
int count; int count;
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
@ -855,7 +929,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
string sql = GenerateInsertQueryWithCustomTable(properties, "power_station_operation_personnel"); string sql = GenerateInsertQueryWithCustomDBNameAndTable(properties, db_name, "power_station_operation_personnel");
count = await conn.ExecuteAsync(sql, entity); count = await conn.ExecuteAsync(sql, entity);
} }
@ -876,8 +950,9 @@ namespace SolarPower.Repository.Implement
/// 軟刪除電站運維人員 /// 軟刪除電站運維人員
/// </summary> /// </summary>
/// <param name="operationPersonnels"></param> /// <param name="operationPersonnels"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task DeleteOperationPersonnel(List<PowerStationOperationPersonnel> operationPersonnels) public async Task DeleteOperationPersonnel(List<PowerStationOperationPersonnel> operationPersonnels, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -886,7 +961,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = $"UPDATE power_station_operation_personnel SET deleted = 1 WHERE PowerStationId = @PowerStationId AND UserId = @UserId"; var sql = $"UPDATE {db_name}.power_station_operation_personnel SET Deleted = 1 WHERE PowerStationId = @PowerStationId AND UserId = @UserId";
await conn.ExecuteAsync(sql, operationPersonnels, trans); await conn.ExecuteAsync(sql, operationPersonnels, trans);
@ -909,27 +984,33 @@ namespace SolarPower.Repository.Implement
/// 電站管理 新增電站圖片 /// 電站管理 新增電站圖片
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int> AddPowerStationImageAsync(List<PowerStationImage> entity, List<string> properties) public async Task<int> AddPowerStationImageAsync(List<PowerStationImage> entity, List<string> properties, string db_name)
{ {
int count; int count;
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
{ {
conn.Open(); conn.Open();
try using (var trans = conn.BeginTransaction())
{ {
string sql = GenerateInsertQueryWithCustomTable(properties, "power_station_image"); try
{
string sql = GenerateInsertQueryWithCustomDBNameAndTable(properties, db_name, "power_station_image");
count = await conn.ExecuteAsync(sql, entity); count = await conn.ExecuteAsync(sql, entity, trans);
}
catch (Exception exception) trans.Commit();
{ }
throw exception; catch (Exception exception)
} {
finally trans.Rollback();
{ throw exception;
conn.Close(); }
finally
{
conn.Close();
}
} }
return count; return count;
@ -940,15 +1021,16 @@ namespace SolarPower.Repository.Implement
/// 電站管理 取得所有電站圖片的資料 /// 電站管理 取得所有電站圖片的資料
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<List<PowerStationImage>> GetAllPowerStationImageAsync(int powerStationId) public async Task<List<PowerStationImage>> GetAllPowerStationImageAsync(int powerStationId, string db_name)
{ {
List<PowerStationImage> result; List<PowerStationImage> result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
try try
{ {
var sql = $"SELECT * FROM power_station_image WHERE Deleted = 0 AND PowerStationId = @PowerStationId"; var sql = $"SELECT * FROM {db_name}.power_station_image WHERE Deleted = 0 AND PowerStationId = @PowerStationId";
result = (await conn.QueryAsync<PowerStationImage>(sql, new { PowerStationId = powerStationId })).ToList(); result = (await conn.QueryAsync<PowerStationImage>(sql, new { PowerStationId = powerStationId })).ToList();
} }
@ -964,15 +1046,16 @@ namespace SolarPower.Repository.Implement
/// 電站管理 取得單一電站圖片的資料 /// 電站管理 取得單一電站圖片的資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PowerStationImage> GetOnePowerStationImageAsync(int id) public async Task<PowerStationImage> GetOnePowerStationImageAsync(int id, string db_name)
{ {
PowerStationImage result; PowerStationImage result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
try try
{ {
var sql = $"SELECT * FROM power_station_image WHERE Deleted = 0 AND Id = @Id"; var sql = $"SELECT * FROM {db_name}.power_station_image WHERE Deleted = 0 AND Id = @Id";
result = await conn.QueryFirstOrDefaultAsync<PowerStationImage>(sql, new { Id = id }); result = await conn.QueryFirstOrDefaultAsync<PowerStationImage>(sql, new { Id = id });
} }
@ -988,8 +1071,9 @@ namespace SolarPower.Repository.Implement
/// 軟刪除 單一電站圖片 /// 軟刪除 單一電站圖片
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task DeleteOnePowerStationImage(int id) public async Task DeleteOnePowerStationImage(int id, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -998,7 +1082,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = $"UPDATE power_station_image SET deleted = 1 WHERE id = @Id"; var sql = $"UPDATE {db_name}.power_station_image SET Deleted = 1 WHERE id = @Id";
await conn.ExecuteAsync(sql, new { Id = id }, trans); await conn.ExecuteAsync(sql, new { Id = id }, trans);
@ -1021,15 +1105,16 @@ namespace SolarPower.Repository.Implement
/// 電站管理 取得主要卡片顯示圖 /// 電站管理 取得主要卡片顯示圖
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PowerStationImage> GetMainDisplayAsync(int powerStationId) public async Task<PowerStationImage> GetMainDisplayAsync(int powerStationId, string db_name)
{ {
PowerStationImage result; PowerStationImage result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
try try
{ {
var sql = $"SELECT * FROM power_station_image WHERE Deleted = 0 AND IsMainDisplay = 1 AND PowerStationId = @PowerStationId"; var sql = $"SELECT * FROM {db_name}.power_station_image WHERE Deleted = 0 AND IsMainDisplay = 1 AND PowerStationId = @PowerStationId";
result = await conn.QueryFirstOrDefaultAsync<PowerStationImage>(sql, new { PowerStationId = powerStationId }); result = await conn.QueryFirstOrDefaultAsync<PowerStationImage>(sql, new { PowerStationId = powerStationId });
} }
@ -1046,8 +1131,9 @@ namespace SolarPower.Repository.Implement
/// </summary> /// </summary>
/// <param name="image"></param> /// <param name="image"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task UpdatePowerStationImage(UpdataPowerStationImage image, List<string> properties) public async Task UpdatePowerStationImage(UpdataPowerStationImage image, List<string> properties, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -1056,7 +1142,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = GenerateUpdateQueryWithCustomTable(properties, "power_station_image"); var sql = GenerateUpdateQueryWithCustomDBNameAndTable(properties, db_name, "power_station_image");
await conn.ExecuteAsync(sql, image, trans); await conn.ExecuteAsync(sql, image, trans);
@ -1080,8 +1166,9 @@ namespace SolarPower.Repository.Implement
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int> AddPowerStationSingleLineAsync(List<PowerStationSingleLine> entity, List<string> properties) public async Task<int> AddPowerStationSingleLineAsync(List<PowerStationSingleLine> entity, List<string> properties, string db_name)
{ {
int count; int count;
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
@ -1089,7 +1176,7 @@ namespace SolarPower.Repository.Implement
conn.Open(); conn.Open();
try try
{ {
string sql = GenerateInsertQueryWithCustomTable(properties, "power_station_single_line_diagram"); string sql = GenerateInsertQueryWithCustomDBNameAndTable(properties, db_name, "power_station_single_line_diagram");
count = await conn.ExecuteAsync(sql, entity); count = await conn.ExecuteAsync(sql, entity);
} }
@ -1110,15 +1197,16 @@ namespace SolarPower.Repository.Implement
/// 電站管理 取得所有單線圖的資料 /// 電站管理 取得所有單線圖的資料
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<List<PowerStationSingleLine>> GetAllPowerStationSingleLineAsync(int powerStationId) public async Task<List<PowerStationSingleLine>> GetAllPowerStationSingleLineAsync(int powerStationId, string db_name)
{ {
List<PowerStationSingleLine> result; List<PowerStationSingleLine> result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
try try
{ {
var sql = $"SELECT * FROM power_station_single_line_diagram WHERE Deleted = 0 AND PowerStationId = @PowerStationId"; var sql = $"SELECT * FROM {db_name}.power_station_single_line_diagram WHERE Deleted = 0 AND PowerStationId = @PowerStationId";
result = (await conn.QueryAsync<PowerStationSingleLine>(sql, new { PowerStationId = powerStationId })).ToList(); result = (await conn.QueryAsync<PowerStationSingleLine>(sql, new { PowerStationId = powerStationId })).ToList();
} }
@ -1134,15 +1222,16 @@ namespace SolarPower.Repository.Implement
/// 電站管理 取得單一單線圖的資料 /// 電站管理 取得單一單線圖的資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PowerStationSingleLine> GetOnePowerStationSingleLineAsync(int id) public async Task<PowerStationSingleLine> GetOnePowerStationSingleLineAsync(int id, string db_name)
{ {
PowerStationSingleLine result; PowerStationSingleLine result;
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
try try
{ {
var sql = $"SELECT * FROM power_station_single_line_diagram WHERE Deleted = 0 AND Id = @Id"; var sql = $"SELECT * FROM {db_name}.power_station_single_line_diagram WHERE Deleted = 0 AND Id = @Id";
result = await conn.QueryFirstOrDefaultAsync<PowerStationSingleLine>(sql, new { Id = id }); result = await conn.QueryFirstOrDefaultAsync<PowerStationSingleLine>(sql, new { Id = id });
} }
@ -1158,8 +1247,9 @@ namespace SolarPower.Repository.Implement
/// 軟刪除 單一單線圖 /// 軟刪除 單一單線圖
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
public async Task DeleteOnePowerStationSingleLine(int id) public async Task DeleteOnePowerStationSingleLine(int id, string db_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -1168,7 +1258,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = $"UPDATE power_station_single_line_diagram SET deleted = 1 WHERE id = @Id"; var sql = $"UPDATE {db_name}.power_station_single_line_diagram SET deleted = 1 WHERE id = @Id";
await conn.ExecuteAsync(sql, new { Id = id }, trans); await conn.ExecuteAsync(sql, new { Id = id }, trans);
@ -1186,6 +1276,43 @@ namespace SolarPower.Repository.Implement
} }
} }
} }
public async Task<List<SolarCityAmount>> GetSolarCitySummary(MyUser User)
{
using IDbConnection conn = _databaseHelper.GetConnection();
List<SolarCityAmount> solaramount = new List<SolarCityAmount>();
conn.Open();
var trans = conn.BeginTransaction();
try
{
if (User.Role.Layer == 0 || User.Role.Layer == 1)
{
var sql = "SELECT city.Id AS CityId city.Name AS City,COUNT(*) AS Amount FROM power_station LEFT JOIN city ON power_station.CityId = city.Id GROUP BY power_station.CityId";
solaramount = (await conn.QueryAsync<SolarCityAmount>(sql)).ToList();
trans.Commit();
}
else if (User.Role.Layer == 2)
{
var sql = "SELECT city.Id AS CityId city.Name AS City,COUNT(*) AS Amount FROM power_station LEFT JOIN city ON power_station.CityId = city.Id WHERE CompanyId = @CompanyId GROUP BY power_station.CityId ORDER BY power_station.CityId ";
solaramount = (await conn.QueryAsync<SolarCityAmount>(sql, new { CompanyId = User.CompanyId })).ToList();
trans.Commit();
}
else
{
var sql = "SELECT city.Id AS CityId city.Name AS City,COUNT(*) AS Amount FROM power_station LEFT JOIN city ON power_station.CityId = city.Id LEFT JOIN power_station_operation_personnel ON power_station.Id = power_station_operation_personnel.PowerStationId WHERE UserId = @UserId GROUP BY power_station.CityId ORDER BY power_station.CityId";
solaramount = (await conn.QueryAsync<SolarCityAmount>(sql, new { UserId = User.Id })).ToList();
trans.Commit();
}
}
catch (Exception exception)
{
trans.Rollback();
throw exception;
}
finally
{
conn.Close();
}
return solaramount;
}
} }
} }

View File

@ -1,6 +1,7 @@
 
using Dapper; using Dapper;
using SolarPower.Helper; using SolarPower.Helper;
using SolarPower.Models;
using SolarPower.Repository.Interface; using SolarPower.Repository.Interface;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -36,19 +37,25 @@ namespace SolarPower.Repository.Implement
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
{ {
conn.Open(); conn.Open();
try using (var trans = conn.BeginTransaction())
{ {
string sql = GenerateInsertQuery(properties); try
{
string sql = GenerateInsertQuery(properties);
count = await conn.ExecuteAsync(sql, entity); count = await conn.ExecuteAsync(sql, entity, trans);
}
catch (Exception exception) trans.Commit();
{ }
throw exception; catch (Exception exception)
} {
finally trans.Rollback();
{ throw exception;
conn.Close(); }
finally
{
conn.Close();
}
} }
return count; return count;
@ -67,27 +74,33 @@ namespace SolarPower.Repository.Implement
using (IDbConnection conn = _databaseHelper.GetConnection()) using (IDbConnection conn = _databaseHelper.GetConnection())
{ {
conn.Open(); conn.Open();
try using (var trans = conn.BeginTransaction())
{ {
string sql = GenerateInsertQuery(properties); try
{
string sql = GenerateInsertQuery(properties);
sql += "SELECT LAST_INSERT_ID();"; sql += "SELECT LAST_INSERT_ID();";
id = (await conn.QueryAsync<int>(sql, entity)).Single(); id = (await conn.QueryAsync<int>(sql, entity, trans)).Single();
}
catch (Exception exception) trans.Commit();
{ }
throw exception; catch (Exception exception)
} {
finally trans.Rollback();
{ throw exception;
conn.Close(); }
finally
{
conn.Close();
}
} }
return id; return id;
} }
} }
/// <summary> /// <summary>
/// 透過Id軟刪除單一筆資料 /// 透過Id軟刪除單一筆資料
@ -123,12 +136,13 @@ namespace SolarPower.Repository.Implement
} }
} }
/// <summary> /// <summary>
/// 透過Id,軟刪除單一筆資料(不同資料表) /// 透過Id、db_name、table_name刪除指定的資料庫之資料表的一筆資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="tablename"></param> /// <param name="db_name"></param>
/// <param name="table_name"></param>
/// <returns></returns> /// <returns></returns>
public virtual async Task DeleteOneOtherTable(int id,string table_name) public virtual async Task DeleteOneByIdWithCustomDBNameAndTable(int id, string db_name, string table_name)
{ {
using (IDbConnection conn = this._databaseHelper.GetConnection()) using (IDbConnection conn = this._databaseHelper.GetConnection())
{ {
@ -137,7 +151,7 @@ namespace SolarPower.Repository.Implement
{ {
try try
{ {
var sql = $"UPDATE {table_name} SET deleted = 1 WHERE id = @Id"; var sql = $"UPDATE {db_name}.{table_name} SET Deleted = 1 WHERE Id = @Id";
await conn.ExecuteAsync(sql, new { Id = id }, trans); await conn.ExecuteAsync(sql, new { Id = id }, trans);
@ -152,7 +166,6 @@ namespace SolarPower.Repository.Implement
{ {
conn.Close(); conn.Close();
} }
} }
} }
} }
@ -270,6 +283,56 @@ namespace SolarPower.Repository.Implement
} }
} }
/// <summary>
/// 透過name list取得指定的多筆設定變數
/// </summary>
/// <param name="names"></param>
/// <returns>回傳為字典格式</returns>
public virtual async Task<Dictionary<string, string>> GetDictVariableByNames(List<string> names)
{
Dictionary<string, string> dict;
using (IDbConnection conn = this._databaseHelper.GetConnection())
{
try
{
var sql = $"SELECT * FROM variable WHERE Name IN @Names";
var result = (await conn.QueryAsync<Variable>(sql, new { Names = names })).ToList();
dict = result.ToDictionary(x => x.Name, x => x.Value);
}
catch (Exception exception)
{
throw exception;
}
return dict;
}
}
/// <summary>
/// 透過name取得單一設定變數
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public virtual async Task<string> GetOneVariableByName(string name)
{
string result;
using (IDbConnection conn = this._databaseHelper.GetConnection())
{
try
{
var sql = $"SELECT * FROM variable WHERE Name = @Name";
result = await conn.QueryFirstOrDefaultAsync<string>(sql, new { Name = name });
}
catch (Exception exception)
{
throw exception;
}
return result;
}
}
/// <summary> /// <summary>
/// 產生Insert語句 /// 產生Insert語句
/// </summary> /// </summary>
@ -303,7 +366,7 @@ namespace SolarPower.Repository.Implement
/// <returns></returns> /// <returns></returns>
protected string GenerateInsertQueryWithCustomTable(List<string> properties, string table_name) protected string GenerateInsertQueryWithCustomTable(List<string> properties, string table_name)
{ {
var insertQuery = new StringBuilder($"INSERT INTO {table_name} "); var insertQuery = new StringBuilder($"INSERT INTO `{table_name}` ");
insertQuery.Append("("); insertQuery.Append("(");
@ -322,6 +385,34 @@ namespace SolarPower.Repository.Implement
return insertQuery.ToString(); return insertQuery.ToString();
} }
/// <summary>
/// 產生Insert語句可選擇自己要加入資料庫及資料表
/// </summary>
/// <param name="properties"></param>
/// <param name="db_name">欲新增至目標資料庫</param>
/// <param name="table_name">欲新增至目標資料表</param>
/// <returns></returns>
protected string GenerateInsertQueryWithCustomDBNameAndTable(List<string> properties, string db_name, string table_name)
{
var insertQuery = new StringBuilder($"INSERT INTO `{db_name}`.`{table_name}` ");
insertQuery.Append("(");
properties.ForEach(prop => { insertQuery.Append($"`{table_name}`.{prop},"); });
insertQuery
.Remove(insertQuery.Length - 1, 1)
.Append(") VALUES (");
properties.ForEach(prop => { insertQuery.Append($"@{prop},"); });
insertQuery
.Remove(insertQuery.Length - 1, 1)
.Append(");");
return insertQuery.ToString();
}
/// <summary> /// <summary>
/// 產生Update語句 /// 產生Update語句
/// </summary> /// </summary>
@ -368,6 +459,24 @@ namespace SolarPower.Repository.Implement
return updateQuery.ToString(); return updateQuery.ToString();
} }
protected string GenerateUpdateQueryWithCustomDBNameAndTable(List<string> properties, string db_name, string table_name)
{
var updateQuery = new StringBuilder($"UPDATE {db_name}.{table_name} SET ");
properties.ForEach(property =>
{
if (!property.Equals("Id"))
{
updateQuery.Append($"{table_name}.{property}=@{property},");
}
});
updateQuery.Remove(updateQuery.Length - 1, 1); //remove last comma
updateQuery.Append(" WHERE id = @Id");
return updateQuery.ToString();
}
/// <summary> /// <summary>
/// 取資料庫當前流水號 /// 取資料庫當前流水號
/// </summary> /// </summary>

View File

@ -1,4 +1,5 @@
using SolarPower.Models.PowerStation; using SolarPower.Models;
using SolarPower.Models.PowerStation;
using SolarPower.Models.User; using SolarPower.Models.User;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -54,27 +55,39 @@ namespace SolarPower.Repository.Interface
Task<string> GetLastSerialNumberByCityAreaIdAsync(int cityId, int areaId); Task<string> GetLastSerialNumberByCityAreaIdAsync(int cityId, int areaId);
/// <summary> /// <summary>
/// 修改電站基本資訊 /// 新增電站資料至 主、子資料庫
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task UpdatePowerStationInfo(UpdatePowerStationInfo entity, List<string> properties); Task<int> AddOnePowerStationAsync(PowerStation entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 修改能源局與台電資訊 /// 修改主、子資料庫電站基本資訊
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task UpdateBoETPCInfo(UpdateBoETPCInfo entity, List<string> properties); Task UpdatePowerStationInfo(UpdatePowerStationInfo entity, List<string> properties, string db_name);
/// <summary>
/// 修改主、子資料庫能源局與台電資訊
/// </summary>
/// <param name="entity"></param>
/// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns>
Task UpdateBoETPCInfo(UpdateBoETPCInfo entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 取得 土地房屋資訊 /// 取得 土地房屋資訊
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<LandBuilding> GetOneLandBuildingInfo(int id); Task<LandBuilding> GetOneLandBuildingInfo(int id, string db_name);
/// <summary> /// <summary>
/// 新增 土地房屋資訊 /// 新增 土地房屋資訊
@ -82,53 +95,65 @@ namespace SolarPower.Repository.Interface
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <returns></returns> /// <returns></returns>
Task<int> AddOneLandBuildingInfo(LandBuilding entity, List<string> properties); Task<int> AddOneLandBuildingInfo(LandBuilding entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 更新 土地房屋資訊 /// 更新 土地房屋資訊
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task UpdateLandBuildingInfo(UpdateLandBuilding entity, List<string> properties); Task UpdateLandBuildingInfo(UpdateLandBuilding entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 軟刪除土地房屋資訊 /// 軟刪除土地房屋資訊
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task DeleteOneLandBuildingInfo(int id); Task DeleteOneLandBuildingInfo(int id, string db_name);
/// <summary> /// <summary>
/// 新增運維 /// 新增運維
/// </summary> /// </summary>
/// <param name="operation"></param> /// <param name="operation"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<int> AddOperation(OperationInfo operation, List<string> properties); Task<int> AddOperation(OperationInfo operation, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 運維dataTable /// 運維dataTable
/// </summary> /// </summary>
/// <param name="stationId"></param> /// <param name="stationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<List<OperationTable>> OperationTable (int stationId); Task<List<OperationTable>> OperationTable (int stationId, string db_name);
/// <summary> /// <summary>
/// 取一筆運維 /// 取一筆運維
/// </summary> /// </summary>
/// <param name="stationId"></param> /// <param name="stationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationInfo> OneOperationInfo (int stationId); Task<OperationInfo> OneOperationInfo (int stationId, string db_name);
/// <summary> /// <summary>
/// 更新運維 /// 更新運維
/// </summary> /// </summary>
/// <param name="operation"></param> /// <param name="operation"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task UpdateOperation(OperationInfo operation, List<string> properties); Task UpdateOperation(OperationInfo operation, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 裝置類型下拉式選單 /// 裝置類型下拉式選單
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task<List<UserSelectItemList>> DeviceType(); Task<List<UserSelectItemList>> DeviceType();
/// <summary> /// <summary>
/// 新增 裝置 /// 新增 裝置
/// </summary> /// </summary>
@ -155,12 +180,14 @@ namespace SolarPower.Repository.Interface
/// <param name="stationId"></param> /// <param name="stationId"></param>
/// <returns></returns> /// <returns></returns>
Task<List<ExceptionTable>> ExceptionTable(int stationId); Task<List<ExceptionTable>> ExceptionTable(int stationId);
/// <summary> /// <summary>
/// 取單一筆DeviceInfo /// 取單一筆DeviceInfo
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
Task<DeviceInfo> OneDeviceInfo(int id); Task<DeviceInfo> OneDeviceInfo(int id);
/// <summary> /// <summary>
/// 新增 異常設定 /// 新增 異常設定
/// </summary> /// </summary>
@ -168,12 +195,14 @@ namespace SolarPower.Repository.Interface
/// <param name="properties"></param> /// <param name="properties"></param>
/// <returns></returns> /// <returns></returns>
Task AddException(ExceptionModal Exception, List<string> properties); Task AddException(ExceptionModal Exception, List<string> properties);
/// <summary> /// <summary>
/// 取一筆異常設定 /// 取一筆異常設定
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
Task<ExceptionModal> OneException(int id); Task<ExceptionModal> OneException(int id);
/// <summary> /// <summary>
/// 更新異常設定 /// 更新異常設定
/// </summary> /// </summary>
@ -181,6 +210,7 @@ namespace SolarPower.Repository.Interface
/// <param name="properties"></param> /// <param name="properties"></param>
/// <returns></returns> /// <returns></returns>
Task UpdateException(ExceptionModal Exception, List<string> properties); Task UpdateException(ExceptionModal Exception, List<string> properties);
/// <summary> /// <summary>
/// 取最後一個設備流水號 /// 取最後一個設備流水號
/// </summary> /// </summary>
@ -193,95 +223,108 @@ namespace SolarPower.Repository.Interface
/// 透過電站編號,取得該電站的運維人員編號 /// 透過電站編號,取得該電站的運維人員編號
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<List<int>> GetOperationPersonnelIdsByPowerStatioinId(int powerStationId); Task<List<int>> GetOperationPersonnelIdsByPowerStatioinId(int powerStationId, string db_name);
/// <summary> /// <summary>
/// 新增電站運維人員 /// 新增電站運維人員
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<int> AddOperationPersonnelAsync(List<PowerStationOperationPersonnel> entity, List<string> properties); Task<int> AddOperationPersonnelAsync(List<PowerStationOperationPersonnel> entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 軟刪除電站運維人員 /// 軟刪除電站運維人員
/// </summary> /// </summary>
/// <param name="operationPersonnels"></param> /// <param name="operationPersonnels"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task DeleteOperationPersonnel(List<PowerStationOperationPersonnel> operationPersonnels); Task DeleteOperationPersonnel(List<PowerStationOperationPersonnel> operationPersonnels, string db_name);
/// <summary> /// <summary>
/// 電站管理 新增電站圖片 /// 電站管理 新增電站圖片
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<int> AddPowerStationImageAsync(List<PowerStationImage> entity, List<string> properties); Task<int> AddPowerStationImageAsync(List<PowerStationImage> entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 電站管理 取得所有電站圖片的資料 /// 電站管理 取得所有電站圖片的資料
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<List<PowerStationImage>> GetAllPowerStationImageAsync(int powerStationId); Task<List<PowerStationImage>> GetAllPowerStationImageAsync(int powerStationId, string db_name);
/// <summary> /// <summary>
/// 電站管理 取得單一電站圖片的資料 /// 電站管理 取得單一電站圖片的資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<PowerStationImage> GetOnePowerStationImageAsync(int id); Task<PowerStationImage> GetOnePowerStationImageAsync(int id, string db_name);
/// <summary> /// <summary>
/// 軟刪除 單一電站圖片 /// 軟刪除 單一電站圖片
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task DeleteOnePowerStationImage(int id); Task DeleteOnePowerStationImage(int id, string db_name);
/// <summary> /// <summary>
/// 電站管理 取得主要卡片顯示圖 /// 電站管理 取得主要卡片顯示圖
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<PowerStationImage> GetMainDisplayAsync(int powerStationId); Task<PowerStationImage> GetMainDisplayAsync(int powerStationId, string db_name);
/// <summary> /// <summary>
/// 電站管理 更新上傳圖片 /// 電站管理 更新上傳圖片
/// </summary> /// </summary>
/// <param name="image"></param> /// <param name="image"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task UpdatePowerStationImage(UpdataPowerStationImage image, List<string> properties); Task UpdatePowerStationImage(UpdataPowerStationImage image, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 電站管理 新增單線圖 /// 電站管理 新增單線圖
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <param name="properties"></param> /// <param name="properties"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<int> AddPowerStationSingleLineAsync(List<PowerStationSingleLine> entity, List<string> properties); Task<int> AddPowerStationSingleLineAsync(List<PowerStationSingleLine> entity, List<string> properties, string db_name);
/// <summary> /// <summary>
/// 電站管理 取得所有單線圖的資料 /// 電站管理 取得所有單線圖的資料
/// </summary> /// </summary>
/// <param name="powerStationId"></param> /// <param name="powerStationId"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<List<PowerStationSingleLine>> GetAllPowerStationSingleLineAsync(int powerStationId); Task<List<PowerStationSingleLine>> GetAllPowerStationSingleLineAsync(int powerStationId, string db_name);
/// <summary> /// <summary>
/// 電站管理 取得單一單線圖的資料 /// 電站管理 取得單一單線圖的資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task<PowerStationSingleLine> GetOnePowerStationSingleLineAsync(int id); Task<PowerStationSingleLine> GetOnePowerStationSingleLineAsync(int id, string db_name);
/// <summary> /// <summary>
/// 軟刪除 單一單線圖 /// 軟刪除 單一單線圖
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="db_name"></param>
/// <returns></returns> /// <returns></returns>
Task DeleteOnePowerStationSingleLine(int id); Task DeleteOnePowerStationSingleLine(int id, string db_name);
} }
} }

View File

@ -36,7 +36,6 @@ namespace SolarPower.Repository.Interface
/// <returns></returns> /// <returns></returns>
Task<int> AddOneAsync(T entity, List<string> properties); Task<int> AddOneAsync(T entity, List<string> properties);
/// <summary> /// <summary>
/// 修改資料 /// 修改資料
/// </summary> /// </summary>
@ -58,13 +57,30 @@ namespace SolarPower.Repository.Interface
/// <param name="Id"></param> /// <param name="Id"></param>
/// <returns></returns> /// <returns></returns>
Task PurgeOneAsync(int id); Task PurgeOneAsync(int id);
/// <summary> /// <summary>
/// 透過Id,軟刪除單一筆資料(不同資料表) /// 透過Id、db_name、table_name刪除指定的資料庫之資料表的一筆資料
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="tablename"></param> /// <param name="db_name"></param>
/// <param name="table_name"></param>
/// <returns></returns> /// <returns></returns>
Task DeleteOneOtherTable(int id, string tablename); Task DeleteOneByIdWithCustomDBNameAndTable(int id, string db_name, string table_name);
/// <summary>
/// 透過name list取得指定的多筆設定變數
/// </summary>
/// <param name="names"></param>
/// <returns>回傳為字典格式</returns>
Task<Dictionary<string, string>> GetDictVariableByNames(List<string> names);
/// <summary>
/// 透過name取得單一設定變數
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
Task<string> GetOneVariableByName(string name);
/// <summary> /// <summary>
/// 取資料庫最後流水號 /// 取資料庫最後流水號
/// </summary> /// </summary>
@ -72,6 +88,5 @@ namespace SolarPower.Repository.Interface
/// <param name="where"></param> /// <param name="where"></param>
/// <returns></returns> /// <returns></returns>
Task<String> GetCurrentSerialNumber(string Table_name, string where); Task<String> GetCurrentSerialNumber(string Table_name, string where);
} }
} }

View File

@ -1,7 +1,7 @@
@{ @{
ViewData["MainNum"] = "6"; ViewData["MainNum"] = "7";
ViewData["SubNum"] = "2"; ViewData["SubNum"] = "1";
ViewData["Title"] = "客戶公司管理"; ViewData["Title"] = "公司管理";
} }
@using SolarPower.Models.Role @using SolarPower.Models.Role
@model RoleLayerEnum @model RoleLayerEnum

View File

@ -1,7 +1,7 @@
@{ @{
ViewData["MainNum"] = "6"; ViewData["MainNum"] = "2";
ViewData["SubNum"] = "1"; ViewData["SubNum"] = "1";
ViewData["Title"] = "電站資料管理"; ViewData["Title"] = "電站管理";
} }
<ol class="breadcrumb page-breadcrumb"> <ol class="breadcrumb page-breadcrumb">
@ -410,7 +410,30 @@
$(function () { $(function () {
var localurl = this.location.href; var localurl = this.location.href;
//電站區域Tab要佳LI
//#region 電站區域Tab
var url = "/PowerStation/GetSolarCitySummary";
$.post(url, function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
return;
}
else {
$.each(rel.data, function (index, val) {
//alert(val.city + val.amount);
});
return;
}
}, 'json');
//#endregion
//電站區域
$('#templateAreaTab').find('li').attr('id', 'AreaTabnewtaipei').clone().appendTo($('#areaTab')); $('#templateAreaTab').find('li').attr('id', 'AreaTabnewtaipei').clone().appendTo($('#areaTab'));
$('#AreaTabnewtaipei').find('a').attr('href', '#tab-newtaipei'); $('#AreaTabnewtaipei').find('a').attr('href', '#tab-newtaipei');
$('#AreaTabnewtaipei').find('a').attr('class', 'nav-link fs-lg px-4'); $('#AreaTabnewtaipei').find('a').attr('class', 'nav-link fs-lg px-4');

View File

@ -1,5 +1,5 @@
@{ @{
ViewData["MainNum"] = "6"; ViewData["MainNum"] = "2";
ViewData["SubNum"] = "1"; ViewData["SubNum"] = "1";
ViewData["Title"] = "電站資料管理"; ViewData["Title"] = "電站資料管理";
} }
@ -96,256 +96,6 @@
$(function () { $(function () {
var url = new URL(location.href); var url = new URL(location.href);
stationId = url.searchParams.get('stationId'); stationId = url.searchParams.get('stationId');
//#region 運維列表 DataTable
OperationTable = $("#Operation_table").DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
"order": [[7, "desc"]],
"columns": [{
"data": "typeName"
}, {
"data": "name"
}, {
"data": "contactPerson"
}, {
"data": "phone"
}, {
"data": "email"
}, {
"data": "createdAt"
}, {
"data": "createdName"
}, {
"data": "function"
}],
"columnDefs": [{
'targets': 1,
'searchable': false,
'orderable': false,
'className': 'dt-body-center'
}],
"language": {
"emptyTable": "無資料...",
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "搜尋:",
"paginate": {
"first": "第一頁",
"previous": "上一頁",
"next": "下一頁",
"last": "最後一頁"
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
'createdRow': function (row, data, dataIndex) {
$(row).attr('data-id', data.id);
},
"ajax": {
"url": "/PowerStation/OperationTable",
"type": "POST",
"data": function (d) {
d.stationId = stationId;
},
"dataSrc": function (rel) {
if (rel.data.code == "9999") {
toast_error(rel.data.msg);
return;
}
data = rel.data.data;
if (data == null || data.length == 0) {
this.data = [];
}
return data;
}
}
});
//#endregion
//#region 設備列表 DataTable
DeviceTable = $("#Device_table").DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
"order": [[9, "desc"]],
"columns": [{
"data": "uid"
}, {
"data": "name"
}, {
"data": "typeName"
}, {
"data": "brand"
}, {
"data": "productModel"
}, {
"data": "dbName"
}, {
"data": "tableName"
}, {
"data": "colName"
}, {
"data": "remark"
},{
"data": "function"
}],
"columnDefs": [{
'targets': 1,
'searchable': false,
'orderable': false,
'className': 'dt-body-center'
}],
"language": {
"emptyTable": "無資料...",
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "搜尋:",
"paginate": {
"first": "第一頁",
"previous": "上一頁",
"next": "下一頁",
"last": "最後一頁"
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
'createdRow': function (row, data, dataIndex) {
$(row).attr('data-id', data.id);
},
"ajax": {
"url": "/PowerStation/DeviceTable",
"type": "POST",
"data": function (d) {
d.stationId = stationId;
},
"dataSrc": function (rel) {
if (rel.data.code == "9999") {
toast_error(rel.data.msg);
return;
}
data = rel.data.data;
if (data == null || data.length == 0) {
this.data = [];
}
return data;
}
}
});
//#endregion
//#region 異常設定列表 DataTable
ExceptionTable = $("#Exception_table").DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
"order": [[7, "desc"]],
"columns": [{
"data": "powerStationCode"
}, {
"data": "powerStationName"
}, {
"data": "typeName"
}, {
"data": "upperLimit"
}, {
"data": "lowerLimit"
}, {
"data": "alarmName"
}, {
"data": "createdAt"
}, {
"data": "function"
}],
"columnDefs": [{
'targets': 1,
'searchable': false,
'orderable': false,
'className': 'dt-body-center'
}],
"language": {
"emptyTable": "無資料...",
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "搜尋:",
"paginate": {
"first": "第一頁",
"previous": "上一頁",
"next": "下一頁",
"last": "最後一頁"
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
'createdRow': function (row, data, dataIndex) {
$(row).attr('data-id', data.id);
},
"ajax": {
"url": "/PowerStation/ExceptionTable",
"type": "POST",
"data": function (d) {
d.stationId = stationId;
},
"dataSrc": function (rel) {
if (rel.data.code == "9999") {
toast_error(rel.data.msg);
return;
}
data = rel.data.data;
if (data == null || data.length == 0) {
this.data = [];
}
return data;
}
}
});
//#endregion
//#region 電站資料 view 控制 //#region 電站資料 view 控制
if (stationId == 'new') { if (stationId == 'new') {
@ -415,6 +165,309 @@
//#endregion //#endregion
}, 'json'); }, 'json');
//#region 運維列表 DataTable
OperationTable = $("#Operation_table").DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
"order": [[7, "desc"]],
"columns": [{
"data": "typeName"
}, {
"data": "name"
}, {
"data": "contactPerson"
}, {
"data": "phone"
}, {
"data": "email"
}, {
"data": "createdAt"
}, {
"data": "createdName"
}, {
"data": "function"
}],
"columnDefs": [{
'targets': 1,
'searchable': false,
'orderable': false,
'className': 'dt-body-center'
}],
"language": {
"emptyTable": "無資料...",
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "搜尋:",
"paginate": {
"first": "第一頁",
"previous": "上一頁",
"next": "下一頁",
"last": "最後一頁"
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
'createdRow': function (row, data, dataIndex) {
$(row).attr('data-id', data.id);
},
"ajax": {
"url": "/PowerStation/OperationTable",
"type": "POST",
"data": function (d) {
d.stationId = stationId;
},
"dataSrc": function (rel) {
if (rel.data.code == "9999") {
toast_error(rel.data.msg);
return;
}
data = rel.data.data;
if (data == null || data.length == 0) {
this.data = [];
}
return data;
}
}
});
//#endregion
//#region 設備列表 DataTable
DeviceTable = $("#Device_table").DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
"order": [[9, "desc"]],
"columns": [{
"data": "uid"
}, {
"data": "name"
}, {
"data": "typeName"
}, {
"data": "brand"
}, {
"data": "productModel"
}, {
"data": "dbName"
}, {
"data": "tableName"
}, {
"data": "colName"
}, {
"data": "remark"
}, {
"data": "function"
}],
"columnDefs": [{
'targets': 1,
'searchable': false,
'orderable': false,
'className': 'dt-body-center'
}],
"language": {
"emptyTable": "無資料...",
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "搜尋:",
"paginate": {
"first": "第一頁",
"previous": "上一頁",
"next": "下一頁",
"last": "最後一頁"
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
'createdRow': function (row, data, dataIndex) {
$(row).attr('data-id', data.id);
},
"ajax": {
"url": "/PowerStation/DeviceTable",
"type": "POST",
"data": function (d) {
d.stationId = stationId;
},
"dataSrc": function (rel) {
if (rel.data.code == "9999") {
toast_error(rel.data.msg);
return;
}
data = rel.data.data;
if (data == null || data.length == 0) {
this.data = [];
}
return data;
}
}
});
//#endregion
//#region 異常設定列表 DataTable
ExceptionTable = $("#Exception_table").DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
"responsive": true,
"order": [[7, "desc"]],
"columns": [{
"data": "powerStationCode"
}, {
"data": "powerStationName"
}, {
"data": "typeName"
}, {
"data": "lowerLimit"
}, {
"data": "upperLimit"
}, {
"data": "alarmName"
}, {
"data": "createdAt"
}, {
"data": "function"
}],
"columnDefs": [{
'targets': 1,
'searchable': false,
'orderable': false,
'className': 'dt-body-center'
}],
"language": {
"emptyTable": "無資料...",
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "搜尋:",
"paginate": {
"first": "第一頁",
"previous": "上一頁",
"next": "下一頁",
"last": "最後一頁"
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
'createdRow': function (row, data, dataIndex) {
$(row).attr('data-id', data.id);
},
"ajax": {
"url": "/PowerStation/ExceptionTable",
"type": "POST",
"data": function (d) {
d.stationId = stationId;
},
"dataSrc": function (rel) {
if (rel.data.code == "9999") {
toast_error(rel.data.msg);
return;
}
data = rel.data.data;
if (data == null || data.length == 0) {
this.data = [];
}
return data;
}
}
});
//#endregion
//#region 載入上傳資料 - 電站圖片
var url_image = "/PowerStation/GetAllPowerStationImage";
var send_data = {
powerStationId: stationId
};
$.post(url_image, send_data, function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
return;
}
var powerStationImages = rel.data;
countPowerStationImage = powerStationImages.length;
powerStationSingleLineCard = $("#power-station-image-card > .row");
powerStationSingleLineCard.empty();
rel.data.forEach(function (value, index) {
CreatePowerStationSingleLineBox(powerStationSingleLineCard, value);
});
}, 'json');
//#endregion
//#region 載入上傳資料 - 單線圖
var url_image = "/PowerStation/GetAllPowerStationSingleLine";
var send_data = {
powerStationId: stationId
};
$.post(url_image, send_data, function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
return;
}
var powerStationSingleLines = rel.data;
countPowerStationSingleLine = powerStationSingleLines.length;
powerStationSingleLineCard = $("#power-station-single-line-card > .row");
powerStationSingleLineCard.empty();
rel.data.forEach(function (value, index) {
CreatePowerStationSingleLineBox(powerStationSingleLineCard, value);
});
}, 'json');
//#endregion
} }
//#endregion //#endregion
@ -509,59 +562,6 @@
}); });
}); });
//#endregion //#endregion
//#region 載入上傳資料 - 電站圖片
var url_image = "/PowerStation/GetAllPowerStationImage";
var send_data = {
powerStationId: stationId
};
$.post(url_image, send_data, function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
return;
}
var powerStationImages = rel.data;
countPowerStationImage = powerStationImages.length;
powerStationSingleLineCard = $("#power-station-image-card > .row");
powerStationSingleLineCard.empty();
rel.data.forEach(function (value, index) {
CreatePowerStationSingleLineBox(powerStationSingleLineCard, value);
});
}, 'json');
//#endregion
//#region 載入上傳資料 - 單線圖
var url_image = "/PowerStation/GetAllPowerStationSingleLine";
var send_data = {
powerStationId: stationId
};
$.post(url_image, send_data, function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
return;
}
var powerStationSingleLines = rel.data;
countPowerStationSingleLine = powerStationSingleLines.length;
powerStationSingleLineCard = $("#power-station-single-line-card > .row");
powerStationSingleLineCard.empty();
rel.data.forEach(function (value, index) {
CreatePowerStationSingleLineBox(powerStationSingleLineCard, value);
});
}, 'json');
//#endregion
}); });
//#region 代管切換 //#region 代管切換
@ -1340,7 +1340,8 @@
if (result.value) { if (result.value) {
var url = "/PowerStation/DeleteLandBuildingInfo"; var url = "/PowerStation/DeleteLandBuildingInfo";
var send_data = { var send_data = {
Id: selectedLandBuildingId SelectedId: selectedLandBuildingId,
PowerStationId: stationId
} }
$.post(url, send_data, function (rel) { $.post(url, send_data, function (rel) {
if (rel.code != "0000") { if (rel.code != "0000") {
@ -1428,10 +1429,10 @@
var url = "/PowerStation/GetOneOperation/"; var url = "/PowerStation/GetOneOperation/";
var send_data = { var send_data = {
id: selected_id SelectedId: selected_id,
PowerStationId: stationId
} }
$.post(url, send_data, function (rel) { $.post(url, send_data, function (rel) {
if (rel.code != "0000") { if (rel.code != "0000") {
toast_error(rel.msg); toast_error(rel.msg);
@ -1465,9 +1466,12 @@
}).then(function (result) { }).then(function (result) {
if (result.value) { if (result.value) {
var url = "/PowerStation/DeleteOneOperation/"; var url = "/PowerStation/DeleteOneOperation/";
var send_data = { var send_data = {
Id: selected_id SelectedId: selected_id,
PowerStationId: stationId
} }
$.post(url, send_data, function (rel) { $.post(url, send_data, function (rel) {
if (rel.code != "0000") { if (rel.code != "0000") {
toast_error(rel.msg); toast_error(rel.msg);
@ -1796,7 +1800,8 @@
var url = "/PowerStation/DeletePowerStationImage"; var url = "/PowerStation/DeletePowerStationImage";
var send_data = { var send_data = {
Id: selectedImageId SelectedId: selectedImageId,
PowerStationId: stationId
} }
$.post(url, send_data, function (rel) { $.post(url, send_data, function (rel) {

View File

@ -12,8 +12,8 @@
<th>電站編號</th> <th>電站編號</th>
<th>電站名稱</th> <th>電站名稱</th>
<th>項目</th> <th>項目</th>
<th>限 ( <= )</th> <th>限 ( <= )</th>
<th>限 ( >= )</th> <th>限 ( >= )</th>
<th>警示方式</th> <th>警示方式</th>
<th>建立時間</th> <th>建立時間</th>
<th>功能</th> <th>功能</th>
@ -52,14 +52,14 @@
<option value="1">email通知</option> <option value="1">email通知</option>
</select> </select>
</div> </div>
<div class="form-group col-lg-6">
<label class="form-label" for="Exception_UpperLimit_modal"><span class="text-danger">*</span>上限</label>
<input type="number" id="Exception_UpperLimit_modal" name="Exception_UpperLimit_modal" class="form-control">
</div>
<div class="form-group col-lg-6"> <div class="form-group col-lg-6">
<label class="form-label" for="Exception_LowerLimit_modal"><span class="text-danger">*</span>下限</label> <label class="form-label" for="Exception_LowerLimit_modal"><span class="text-danger">*</span>下限</label>
<input type="number" id="Exception_LowerLimit_modal" name="Exception_LowerLimit_modal" class="form-control"> <input type="number" id="Exception_LowerLimit_modal" name="Exception_LowerLimit_modal" class="form-control">
</div> </div>
<div class="form-group col-lg-6">
<label class="form-label" for="Exception_UpperLimit_modal"><span class="text-danger">*</span>上限</label>
<input type="number" id="Exception_UpperLimit_modal" name="Exception_UpperLimit_modal" class="form-control">
</div>
</div> </div>
</form> </form>

View File

@ -86,18 +86,18 @@
</a> </a>
</li> </li>
<li class="nav-title">Navigation Title</li>--> <li class="nav-title">Navigation Title</li>-->
<li class=""> <li class="@(ViewData["MainNum"] == "1" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
<i class="fal fa-file"></i> <i class="fal fa-file"></i>
<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=""> <li class="@(ViewData["MainNum"] == "1" && ViewData["SubNum"] == "1" ? "active" : "")">
<a href="javascript:void(0);" title="地圖總覽" data-filter-tags="utilities disabled item"> <a href="javascript:void(0);" 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>
<li class=""> <li class="@(ViewData["MainNum"] == "1" && ViewData["SubNum"] == "2" ? "active" : "")">
<a href="0stations.html" title="電站總覽" data-filter-tags="utilities disabled item"> <a href="0stations.html" 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>
@ -105,20 +105,20 @@
</ul> </ul>
</li> </li>
<!-- Example of open and active states --> <!-- Example of open and active states -->
<li class=""> <li class="@(ViewData["MainNum"] == "2" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
<i class="fal fa-file"></i> <i class="fal fa-file"></i>
<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"] == "6" && ViewData["SubNum"] == "1" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "2" && ViewData["SubNum"] == "1" ? "active" : "")">
<a asp-controller="PowerStation" asp-action="Index" title="電站管理" data-filter-tags="utilities disabled item"> <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> <span class="nav-link-text" data-i18n="nav.utilities_disabled_item">電站管理</span>
</a> </a>
</li> </li>
</ul> </ul>
</li> </li>
<li class=""> <li class="@(ViewData["MainNum"] == "3" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
<i class="fal fa-alien"></i> <i class="fal fa-alien"></i>
<span class="nav-link-text" data-i18n="nav.category">交叉分析</span> <span class="nav-link-text" data-i18n="nav.category">交叉分析</span>
@ -141,7 +141,7 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class=""> <li class="@(ViewData["MainNum"] == "4" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
<i class="fal fa-alien"></i> <i class="fal fa-alien"></i>
<span class="nav-link-text" data-i18n="nav.category">報表查詢</span> <span class="nav-link-text" data-i18n="nav.category">報表查詢</span>
@ -164,7 +164,7 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class=""> <li class="@(ViewData["MainNum"] == "5" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
<i class="fal fa-alien"></i> <i class="fal fa-alien"></i>
<span class="nav-link-text" data-i18n="nav.category">即時告警</span> <span class="nav-link-text" data-i18n="nav.category">即時告警</span>
@ -179,13 +179,13 @@
</li> </li>
<li class="@(ViewData["MainNum"] == "5" ? "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">
<i class="fal fa-alien"></i> <i class="fal fa-alien"></i>
<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"] == "5" && ViewData["SubNum"] == "1" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"] == "1" ? "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>
@ -197,18 +197,18 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="@(ViewData["MainNum"] == "6" ? "active open" : "")"> <li class="@(ViewData["MainNum"] == "7" ? "active open" : "")">
<a href="#" title="Category" data-filter-tags="category"> <a href="#" title="Category" data-filter-tags="category">
<i class="fal fa-alien"></i> <i class="fal fa-alien"></i>
<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"] == "6" && ViewData["SubNum"] == "2" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "7" && ViewData["SubNum"] == "1" ? "active" : "")">
<a asp-controller="Company" asp-action="Index" title="公司管理" data-filter-tags="utilities disabled item"> <a asp-controller="Company" 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>
<li class="@(ViewData["MainNum"] == "6" && ViewData["SubNum"] == "3" ? "active" : "")"> <li class="@(ViewData["MainNum"] == "7" && ViewData["SubNum"] == "2" ? "active" : "")">
<a asp-controller="User" asp-action="Index" title="帳號管理" data-filter-tags="utilities disabled item"> <a asp-controller="User" 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>

View File

@ -9,9 +9,9 @@
"LoginExpireMinute": 60, //() "LoginExpireMinute": 60, //()
"DBConfig": { "DBConfig": {
"Server": "LPp7aTdHGEFQJieGkSGl0g==", "Server": "LPp7aTdHGEFQJieGkSGl0g==",
"Database": "k48iBBWXwJHPZF9zkF8UjreGN2uYWz6R", "Database": "z8TVtiXZ6MwgWbUEAOXA/fiHzd7c0iUhFqn1mHzxhKo=",
"Root": "2TdWJL+VXK8xbnhD8iA0zNJMT95nSE5W", "Root": "mWlR2HshQNhRRE34jg4kdg==",
"Password": "BxXjVEJCYCyPmlt03xAKmUNEnXzHhw1j" "Password": "y4uPqlH9ncTgR/I07qpwaA=="
}, },
"SMTPConfig": { "SMTPConfig": {
"Host": "smtp.gmail.com", "Host": "smtp.gmail.com",