diff --git a/SolarPower/Controllers/PowerStationController.cs b/SolarPower/Controllers/PowerStationController.cs
index 8d7b8ae..5091616 100644
--- a/SolarPower/Controllers/PowerStationController.cs
+++ b/SolarPower/Controllers/PowerStationController.cs
@@ -67,6 +67,26 @@ namespace SolarPower.Controllers
apiResult.Msg = errorCode.GetString(apiResult.Code);
return apiResult;
}
+ ///
+ /// 取裝置類型下拉選單
+ ///
+ ///
+ public async Task>> GetDeviceTypeSelectOptionList()
+ {
+ ApiResult> apiResult = new ApiResult>();
+ try
+ {
+ var userSelectItemLists = await powerStationRepository.DeviceType();
+ apiResult.Code = "0000";
+ apiResult.Data = userSelectItemLists;
+ }
+ catch (Exception exception)
+ {
+ apiResult.Code = "9999";
+ Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
+ }
+ return apiResult;
+ }
///
/// 取得單一電站基本資料
@@ -297,7 +317,7 @@ namespace SolarPower.Controllers
/// 運維資料DataTable
///
///
- ///
+ ///
public async Task OperationTable(int stationId)
{
@@ -399,6 +419,108 @@ namespace SolarPower.Controllers
return apiResult;
}
+ ///
+ /// 新增 / 修改 裝置資料
+ ///
+ ///
+ ///
+ public async Task> SaveDevice(DeviceInfo Device)
+ {
+ ApiResult apiResult = new ApiResult();
+ try
+ {
+ if (Device.Id == 0)
+ {
+ Device DeviceInfo = new Device()
+ {
+ Brand = Device.Brand,
+ ColName = Device.ColName,
+ PowerStationId = Device.PowerStationId,
+ DBName = Device.DBName,
+ Id = Device.Id,
+ Name = Device.Name,
+ ProductModel = Device.ProductModel,
+ Remark = Device.Remark,
+ TableName = Device.TableName,
+ Type = Device.Type,
+ UID = Device.PowerStationId + "-" + Device.Type,
+ CreatedBy = myUser.Id
+ };
+ List properties = new List()
+ {
+ "Brand",
+ "ColName",
+ "PowerStationId",
+ "DBName",
+ "Id",
+ "Name",
+ "ProductModel",
+ "Remark",
+ "TableName",
+ "Type",
+ "UID",
+ "CreatedBy"
+ };
+ await powerStationRepository.AddDevice(DeviceInfo,properties);
+ apiResult.Code = "0000";
+ apiResult.Msg = "新增成功";
+ }
+ else
+ {
+ Device DeviceInfo = new Device()
+ {
+ Brand = Device.Brand,
+ ColName = Device.ColName,
+ PowerStationId = Device.PowerStationId,
+ DBName = Device.DBName,
+ Id = Device.Id,
+ Name = Device.Name,
+ ProductModel = Device.ProductModel,
+ Remark = Device.Remark,
+ TableName = Device.TableName,
+ Type = Device.Type,
+ UID = Device.PowerStationId + "-" + Device.Type,
+ CreatedBy = myUser.Id
+ };
+ List properties = new List()
+ {
+ "Brand",
+ "ColName",
+ "PowerStationId",
+ "DBName",
+ "Id",
+ "Name",
+ "ProductModel",
+ "Remark",
+ "TableName",
+ "Type",
+ "UID",
+ "CreatedBy"
+ };
+ await powerStationRepository.AddDevice(DeviceInfo, properties);
+ apiResult.Code = "0000";
+ apiResult.Msg = "儲存成功";
+ }
+
+ }
+ catch (Exception exception)
+ {
+ apiResult.Code = "9999";
+ apiResult.Msg = exception.ToString();
+ }
+ return apiResult;
+ }
+
+ public async Task DeviceTable(int stationId)
+ {
+ List deviceTables = new List();
+ ApiResult> apiResult = new ApiResult>();
+ var result = Json(new
+ {
+ data = apiResult
+ });
+ return result;
+ }
}
}
diff --git a/SolarPower/Models/PowerStation.cs b/SolarPower/Models/PowerStation.cs
index 97f8c1c..e2caf70 100644
--- a/SolarPower/Models/PowerStation.cs
+++ b/SolarPower/Models/PowerStation.cs
@@ -82,12 +82,12 @@ namespace SolarPower.Models.PowerStation
public class OperationInfo : Created
{
public int Id { get; set; }
- public int PowerStationId { get; set; }
- public int Type { get; set; }
- public string Name { get; set; }
- public string ContactPerson { get; set; }
- public string Phone { get; set; }
- public string Email { get; set; }
+ public int PowerStationId { get; set; }//電廠id
+ public int Type { get; set; }//廠商類別
+ public string Name { get; set; }//名稱
+ public string ContactPerson { get; set; }//聯絡人
+ public string Phone { get; set; }//電話
+ public string Email { get; set; }//Email
}
public class OperationStationId
{
@@ -95,9 +95,50 @@ namespace SolarPower.Models.PowerStation
}
public class OperationTable : OperationInfo
{
- public string CreatedName { get; set; }
- public string Function { get; set; }
+ public string CreatedName { get; set; }//建立者名稱
+ public string Function { get; set; }//功能
public string TypeName { get; set; }
}
-
+ ///
+ /// 設備裝置下拉選單
+ ///
+ public class Type
+ {
+ public string Name { get; set; }
+ public string EName { get; set; }
+ }
+ public class Root
+ {
+ public List Type { get; set; }
+ }
+ public class Variable
+ {
+ public string name { get; set; }
+ public string value { get; set; }
+ }
+ ///
+ /// 設備
+ ///
+ public class DeviceInfo
+ {
+ public int Id { get; set; }
+ public int PowerStationId { get; set; }//所屬電站編號
+ public string Name { get; set; }//名稱
+ public string Type { get; set; }//類型
+ public string Brand { get; set; }//廠牌
+ public string ProductModel { get; set; }//型號
+ public string DBName { get; set; }
+ public string TableName { get; set; }
+ public string ColName { get; set; }
+ public string Remark { get; set; }
+ }
+ public class Device : DeviceInfo
+ {
+ public string UID { get; set; }//設備編號
+ public int CreatedBy { get; set; }//建立者
+ }
+ public class DeviceTable : DeviceInfo
+ {
+ public string Function { get; set; }//功能
+ }
}
diff --git a/SolarPower/Repository/Implement/PowerStationRepository.cs b/SolarPower/Repository/Implement/PowerStationRepository.cs
index 30fe3e0..1c25742 100644
--- a/SolarPower/Repository/Implement/PowerStationRepository.cs
+++ b/SolarPower/Repository/Implement/PowerStationRepository.cs
@@ -1,6 +1,7 @@
using Dapper;
using SolarPower.Helper;
using SolarPower.Models.PowerStation;
+using SolarPower.Models.User;
using SolarPower.Repository.Interface;
using System;
using System.Collections.Generic;
@@ -8,6 +9,7 @@ using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Text.Json;
namespace SolarPower.Repository.Implement
{
@@ -75,7 +77,11 @@ namespace SolarPower.Repository.Implement
return count;
}
}
-
+ ///
+ /// 運維DataTable
+ ///
+ ///
+ ///
public async Task> OperationTable (int stationId)
{
@@ -103,7 +109,11 @@ namespace SolarPower.Repository.Implement
return operation;
}
}
-
+ ///
+ /// 選取單一運維
+ ///
+ ///
+ ///
public async Task OneOperationInfo (int id)
{
using (IDbConnection conn = _databaseHelper.GetConnection())
@@ -158,5 +168,98 @@ namespace SolarPower.Repository.Implement
conn.Close();
}
}
+ ///
+ /// 裝置類型下拉選單
+ ///
+ ///
+ public async Task> DeviceType()
+ {
+ List result = new List();
+ using IDbConnection conn = _databaseHelper.GetConnection();
+ conn.Open();
+ var trans = conn.BeginTransaction();
+ try
+ {
+ string sql = @$"SELECT * FROM variable WHERE name = @name";
+ var json = await conn.QueryFirstOrDefaultAsync(sql, new { name = "Type" });
+ Root jsonfor = JsonSerializer.Deserialize(json.value);
+ foreach(Models.PowerStation.Type a in jsonfor.Type)
+ {
+ UserSelectItemList KeyValue = new UserSelectItemList
+ {
+ Value = a.EName,
+ Text = a.Name
+ };
+ result.Add(KeyValue);
+ }
+ trans.Commit();
+ }
+ catch (Exception exception)
+ {
+ trans.Rollback();
+ throw exception;
+ }
+ finally
+ {
+ conn.Close();
+ }
+ return result;
+ }
+ ///
+ /// 新增裝置資料
+ ///
+ ///
+ ///
+ ///
+ public async Task AddDevice(Device DeviceInfo, List properties)
+ {
+ using IDbConnection conn = _databaseHelper.GetConnection();
+ conn.Open();
+ try
+ {
+ string sql = GenerateInsertQueryWithCustomTable(properties, "device");
+
+ await conn.ExecuteAsync(sql, DeviceInfo);
+
+ }
+ catch (Exception exception)
+ {
+ throw exception;
+ }
+ finally
+ {
+ conn.Close();
+ }
+
+ }
+ ///
+ /// 修改裝置資料
+ ///
+ ///
+ ///
+ ///
+ public async Task UpdateDevice(Device DeviceInfo, List properties)
+ {
+ using IDbConnection conn = _databaseHelper.GetConnection();
+ conn.Open();
+ var trans = conn.BeginTransaction();
+ try
+ {
+ var updateQuery = GenerateUpdateQueryOtherTable(properties, "device");
+ await conn.ExecuteAsync(updateQuery.ToString(), DeviceInfo, trans);
+ trans.Commit();
+ }
+ catch (Exception exception)
+ {
+ trans.Rollback();
+ throw exception;
+ }
+ finally
+ {
+ conn.Close();
+ }
+ }
+
+
}
}
diff --git a/SolarPower/Repository/Implement/RepositoryBase.cs b/SolarPower/Repository/Implement/RepositoryBase.cs
index 3eabe96..8271081 100644
--- a/SolarPower/Repository/Implement/RepositoryBase.cs
+++ b/SolarPower/Repository/Implement/RepositoryBase.cs
@@ -344,5 +344,28 @@ namespace SolarPower.Repository.Implement
return updateQuery.ToString();
}
+
+ ///
+ /// 產生Update語句(不同資料表)
+ ///
+ ///
+ ///
+ protected string GenerateUpdateQueryOtherTable(List properties, string table_name)
+ {
+ var updateQuery = new StringBuilder($"UPDATE {table_name} SET ");
+
+ properties.ForEach(property =>
+ {
+ if (!property.Equals("Id"))
+ {
+ updateQuery.Append($"{property}=@{property},");
+ }
+ });
+
+ updateQuery.Remove(updateQuery.Length - 1, 1); //remove last comma
+ updateQuery.Append(" WHERE id = @Id");
+
+ return updateQuery.ToString();
+ }
}
}
diff --git a/SolarPower/Repository/Interface/IPowerStationRepository.cs b/SolarPower/Repository/Interface/IPowerStationRepository.cs
index 559dd5a..7e5553a 100644
--- a/SolarPower/Repository/Interface/IPowerStationRepository.cs
+++ b/SolarPower/Repository/Interface/IPowerStationRepository.cs
@@ -1,4 +1,5 @@
using SolarPower.Models.PowerStation;
+using SolarPower.Models.User;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -12,6 +13,23 @@ namespace SolarPower.Repository.Interface
Task> OperationTable (int stationId);
Task OneOperationInfo (int stationId);
Task UpdateOperation(OperationInfo operation, List properties);
-
+ ///
+ /// 裝置類型下拉式選單
+ ///
+ ///
+ Task> DeviceType();
+ ///
+ /// 新增 裝置
+ ///
+ ///
+ ///
+ Task AddDevice(Device DeviceInfo, List properties);
+ ///
+ /// 修改 裝置
+ ///
+ ///
+ ///
+ ///
+ Task UpdateDevice(Device DeviceInfo, List properties);
}
}
diff --git a/SolarPower/Repository/Interface/IRepositoryBase.cs b/SolarPower/Repository/Interface/IRepositoryBase.cs
index 3c4f7af..42f719d 100644
--- a/SolarPower/Repository/Interface/IRepositoryBase.cs
+++ b/SolarPower/Repository/Interface/IRepositoryBase.cs
@@ -65,5 +65,6 @@ namespace SolarPower.Repository.Interface
///
///
Task DeleteOneOtherTable(int id, string tablename);
+
}
}
diff --git a/SolarPower/Views/PowerStation/PowerStationEdit.cshtml b/SolarPower/Views/PowerStation/PowerStationEdit.cshtml
index 3397f01..e87c877 100644
--- a/SolarPower/Views/PowerStation/PowerStationEdit.cshtml
+++ b/SolarPower/Views/PowerStation/PowerStationEdit.cshtml
@@ -171,6 +171,91 @@
}
}
});
+ //#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": "type"
+ }, {
+ "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 電站資料 view 控制
if (stationId == 'new') {
@@ -206,7 +291,7 @@
$("#BoEPart").hide();
$("#land_buildingPart").hide();
- /*$("#tablist").hide();*/
+ $("#tablist").hide();
} else {
var url = "/PowerStation/GetOnePowerStation"
@@ -255,7 +340,25 @@
$("#power_station_operation_personnel").val($("#power_station_operation_personnel option:first").val());
});
//#endregion
+
+
+
$('.js-example-basic-multiple').select2();
+
+
+ var url_DeviceType = "/PowerStation/GetDeviceTypeSelectOptionList";
+ $.get(url_DeviceType, function (rel) {
+ if (rel.code != "0000") {
+ toast_error(rel.msg);
+ return;
+ }
+ $("Device_Type_modal").empty();
+
+ $.each(rel.data, function (index, val) {
+ $("#Device_Type_modal").append($("").val(val.value).text(val.text));
+ });
+ })
+
});
//#region 代管切換
@@ -655,7 +758,46 @@
});
//#endregion
+ //#region 新增裝置資料
+ function AddDevice() {
+ $("#Device-modal .modal-title").html("裝置資料 - 新增");
+ $("#Device-form").trigger("reset");
+ $("#Device-modal").modal();
+ }
+ //#endregion
-
+ //#region 儲存裝置資料
+ function SaveDevice() {
+
+ if ($("#Device-form").valid()) {
+ var url = "/PowerStation/SaveDevice";
+ var send_data = {
+ Id: selected_id,
+ PowerStationId: stationId,
+ Name: $("#Device_Name_modal").val(),
+ Type: $("#Device_Type_modal").val(),
+ Brand: $("#Device_Brand_modal").val(),
+ ProductModel: $("#Device_ProductModel_modal").val(),
+ DBName: $("#Device_DBName_modal").val(),
+ TableName: $("#Device_TableName_modal").val(),
+ ColName: $("#Device_ColName_modal").val(),
+ Remark: $("#Device_Remark_modal").val(),
+ }
+ $.post(url, send_data, function (rel) {
+ if (rel.code != "0000") {
+ toast_error(rel.msg);
+ return;
+ }
+ else {
+ toast_ok(rel.msg);
+ $('#Device-modal').modal('hide');
+ return;
+ }
+
+
+ }, 'json');
+ }
+ }
+ //#endregion
}
\ No newline at end of file
diff --git a/SolarPower/Views/PowerStation/_DeviceSetting.cshtml b/SolarPower/Views/PowerStation/_DeviceSetting.cshtml
index acbf6ed..466c389 100644
--- a/SolarPower/Views/PowerStation/_DeviceSetting.cshtml
+++ b/SolarPower/Views/PowerStation/_DeviceSetting.cshtml
@@ -1,13 +1,12 @@
裝置設定
-
+
+
+
+
\ No newline at end of file