diff --git a/Backend/Controllers/DeviceManageController.cs b/Backend/Controllers/DeviceManageController.cs index c2ddf85..f660ee5 100644 --- a/Backend/Controllers/DeviceManageController.cs +++ b/Backend/Controllers/DeviceManageController.cs @@ -213,7 +213,7 @@ namespace Backend.Controllers JOIN variable mv ON d.device_system_tag = mv.system_value AND mv.system_type = @main_system_type and mv.deleted = 0 JOIN variable sv ON d.device_name_tag = sv.system_value AND sv.system_type = @sub_system_type and sv.deleted = 0 JOIN floor f ON d.device_floor_tag = f.full_name AND d.device_building_tag = f.building_tag and f.deleted = 0 - LEFT JOIN device_kind dk ON dk.device_building_tag = d.device_building_tag AND dk.device_system_tag = d.device_system_tag AND dk.device_name_tag = d.device_name_tag + LEFT JOIN device_kind dk ON dk.device_building_tag = d.device_building_tag AND dk.device_system_tag = d.device_system_tag AND dk.device_name_tag = d.device_name_tag and dk.is_link = 1 ORDER BY d.priority ASC, d.device_number ASC"; var devices = await backendRepository.GetAllAsync(sql, new @@ -981,7 +981,8 @@ namespace Backend.Controllers dk.device_error_point_value, dk.device_error_color, dk.device_error_flashing, - dk.device_error_independent + dk.device_error_independent, + dk.device_model_tag FROM ( SELECT d.device_building_tag, d.device_system_tag, @@ -1004,7 +1005,8 @@ namespace Backend.Controllers LEFT JOIN device_kind dk ON dd.device_building_tag = dk.device_building_tag AND dd.device_system_tag = dk.device_system_tag -- AND dd.device_floor_tag = dk.device_floor_tag - AND dd.device_name_tag = dk.device_name_tag"; + AND dd.device_name_tag = dk.device_name_tag + and dk.is_link = 1"; var deviceKinds = await backendRepository.GetAllAsync(sql, post); @@ -1035,7 +1037,7 @@ namespace Backend.Controllers try { - string sWhere = "device_kind_guid = @Device_kind_guid"; + string sWhere = "device_kind_guid = @Device_kind_guid and is_link = 1"; object param = new { Deleted = 0, Device_kind_guid = guid }; @@ -1112,6 +1114,7 @@ namespace Backend.Controllers { "@device_error_color", post.Device_error_color}, { "@device_error_flashing", post.Device_error_flashing}, { "@device_error_independent", post.Device_error_independent}, + { "@is_link", 1}, { "@created_by", myUserInfo.Userinfo_guid} }; await backendRepository.AddOneByCustomTable(deviceKindDic, "device_kind"); @@ -1194,6 +1197,7 @@ namespace Backend.Controllers { "@device_error_color", post.Device_error_color}, { "@device_error_flashing", post.Device_error_flashing}, { "@device_error_independent", post.Device_error_independent}, + { "@is_link", 1}, { "@created_by", myUserInfo.Userinfo_guid} }; await backendRepository.AddOneByCustomTable(deviceKindDic, "device_kind"); diff --git a/Backend/Controllers/SystemCategoryController.cs b/Backend/Controllers/SystemCategoryController.cs index 2964e7c..271e3f1 100644 --- a/Backend/Controllers/SystemCategoryController.cs +++ b/Backend/Controllers/SystemCategoryController.cs @@ -753,7 +753,7 @@ namespace Backend.Controllers try { var tags = await backendRepository.GetAllAsync( - @$"select * from (select dk.device_building_tag ,dk.device_name_tag,dk.device_system_tag from device_kind dk where dk.device_normal_point_id = @id) dkn + @$"select * from (select dk.device_building_tag ,dk.device_name_tag,dk.device_system_tag from device_kind dk where dk.device_normal_point_id = @id and is_link = 1) dkn union(select dk.device_building_tag, dk.device_name_tag, dk.device_system_tag from device_kind dk where dk.device_close_point_id = @id) union(select dk.device_building_tag, dk.device_name_tag, dk.device_system_tag from device_kind dk where dk.device_error_point_id = @id)", new { id = post.guid}); @@ -779,7 +779,8 @@ namespace Backend.Controllers foreach (var tag in tags) { unionsql += $@"select d.building_tag,d.device_system_tag,d.device_name_tag,d.device_last_name from device d where d.device_name_tag = '{sub_system.system_value}' - and d.device_building_tag = '{tag.device_building_tag}' and d.device_system_tag = '{tag.device_system_tag}' and d.device_name_tag = '{tag.device_name_tag}' group by d.building_guid,d.main_system_guid,d.sub_system_guid,d.device_name_tag"; + and d.device_building_tag = '{tag.device_building_tag}' and d.device_system_tag = '{tag.device_system_tag}' and d.device_name_tag = '{tag.device_name_tag}' + group by d.building_guid,d.main_system_guid,d.sub_system_guid,d.device_name_tag"; if (!last.Equals(tag)) { unionsql += " union "; diff --git a/Backend/Models/Device.cs b/Backend/Models/Device.cs index 898d9ca..23cf472 100644 --- a/Backend/Models/Device.cs +++ b/Backend/Models/Device.cs @@ -78,6 +78,7 @@ namespace Backend.Models public string Device_port { get; set; } public string device_name_tag { get; set; } public string device_system_tag { get; set; } + public string device_model_tag { get; set; } public List Device_disasters { get; set; } //防災類型 public List Device_nodes { get; set; } //設備子節點 } @@ -167,6 +168,7 @@ namespace Backend.Models public string Device_error_color { get; set; } public byte Device_error_flashing { get; set; } public byte Device_error_independent { get; set; } + public string device_model_tag { get; set; } } public class PointName diff --git a/Backend/Models/SystemCategory.cs b/Backend/Models/SystemCategory.cs index ba54301..2aa7a83 100644 --- a/Backend/Models/SystemCategory.cs +++ b/Backend/Models/SystemCategory.cs @@ -59,6 +59,7 @@ namespace Backend.Models public string device_building_tag { get; set; } public string device_system_tag { get; set; } public string device_name_tag { get; set; } + public string device_model_tag { get; set; } } public class Deletebool { diff --git a/Backend/Views/DeviceManage/Index.cshtml b/Backend/Views/DeviceManage/Index.cshtml index f066639..dc4f689 100644 --- a/Backend/Views/DeviceManage/Index.cshtml +++ b/Backend/Views/DeviceManage/Index.cshtml @@ -1338,7 +1338,10 @@ } }, { - "data": "device_name_tag" + "data": null, + "render": function (data, type, row, meta) { + return data.device_system_tag == "S" && data.device_name_tag == "C" ? data.device_model_tag : data.device_name_tag; + } }, { "data": "device_image", diff --git a/FrontendWebApi/ApiControllers/BuildController.cs b/FrontendWebApi/ApiControllers/BuildController.cs index 27818f7..7c18521 100644 --- a/FrontendWebApi/ApiControllers/BuildController.cs +++ b/FrontendWebApi/ApiControllers/BuildController.cs @@ -478,6 +478,7 @@ namespace FrontendWebApi.ApiControllers var layer3sql = ""; var sWhere = ""; var singleSubSql = ""; + var cctvSql = ""; if (!String.IsNullOrEmpty(post.main_system_tag)) { main_system_guidsql = $" and d.device_system_tag = '{post.main_system_tag}'"; @@ -493,6 +494,9 @@ namespace FrontendWebApi.ApiControllers { sub_system_guidsql = $" and d.device_name_tag = '{post.sub_system_tag}'"; singleSubSql = $"and di.device_name_tag = '{post.sub_system_tag}'"; + + if (post.main_system_tag.Equals("S") && post.sub_system_tag.Equals("C")) + cctvSql = $" and d.device_model_tag = dk.device_model_tag"; } } if (!String.IsNullOrEmpty(post.device_system_category_layer3)) @@ -590,6 +594,8 @@ namespace FrontendWebApi.ApiControllers and d.device_system_tag = dk.device_system_tag -- and d.device_floor_tag = dk.device_floor_tag and d.device_name_tag = dk.device_name_tag + and dk.is_link = 1 + {cctvSql} left join device_master dm ON d.device_building_tag = dm.device_building_tag AND d.device_name_tag = dm.device_name_tag left join ( diff --git a/FrontendWebApi/ApiControllers/DeviceManageController.cs b/FrontendWebApi/ApiControllers/DeviceManageController.cs index a9ec4b8..b84e760 100644 --- a/FrontendWebApi/ApiControllers/DeviceManageController.cs +++ b/FrontendWebApi/ApiControllers/DeviceManageController.cs @@ -74,6 +74,7 @@ namespace FrontendWebApi.ApiControllers join variable v1 on v1.id = v2.system_parent_id and v1.system_type = @main_system_type join device d on v1.system_value = d.device_system_tag and v2.system_value = d.device_name_tag and d.deleted = 0 left join device_kind dk on v1.system_value = dk.device_system_tag and v2.system_value = dk.device_name_tag and dk.device_building_tag = @building_tag + and dk.is_link = 1 and (dk.device_model_tag is null or dk.device_model_tag = d.device_model_tag) -- left join device_item di on v2.system_value = di.device_name_tag and v1.system_value = di.device_system_tag and di.deleted = 0 join ( select distinct main_system_tag, sub_system_tag, priority from building_menu where building_tag = @building_tag and is_link = 1 @@ -298,7 +299,7 @@ namespace FrontendWebApi.ApiControllers d.room_dbid, d.device_coordinate_3d, d.forge_dbid from device d left join device_kind dk on d.device_building_tag = dk.device_building_tag and d.device_system_tag = dk.device_system_tag - and d.device_name_tag = dk.device_name_tag + and d.device_name_tag = dk.device_name_tag and dk.is_link = 1 and (dk.device_model_tag is null or dk.device_model_tag = d.device_model_tag) where d.deleted = 0 and d.device_name_tag = @sub_system_tag and d.device_building_tag = @building_tag and d.device_floor_tag = @floor_tag order by d.device_number"; var dlParam = new { @sub_system_tag = fd.sub_system_tag, @building_tag = fd.building_tag, @floor_tag = f.full_name }; diff --git a/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs b/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs index 674df09..a7d4594 100644 --- a/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs +++ b/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs @@ -126,7 +126,7 @@ namespace Repository.BackendRepository.Implement { isDome= true; sb.Append($@" insert into import_niagara_tag(niagara_tags, device_area_tag, device_building_tag, device_system_tag, - device_name_tag, device_floor_tag, device_master_tag, device_last_name_tag, device_serial_tag, device_full_name, atDateTime) values('" + + device_name_tag, device_floor_tag, device_master_tag, device_last_name_tag, device_serial_tag, device_model_tag, device_full_name, atDateTime) values('" + row.tag_name + "', '" + //niagara_tags "', '" + //device_area_tag arrTag[0] + "', '" + //device_building_tag @@ -136,6 +136,7 @@ namespace Repository.BackendRepository.Implement "', '" + //device_master_tag "', '" + //device_last_name_tag arrTag[4] + "', '" + //device_serial_tag + arrTag[3] + "', '" + //device_model_tag row.displayName + "', " + //device_full_name "now());"); //atDateTime //await conn.ExecuteAsync(sb.ToString()); @@ -455,6 +456,7 @@ namespace Repository.BackendRepository.Implement #region device, device_kind 新增 stopwatchSection = new Stopwatch(); stopwatchSection.Start(); + int count = 0; //新增至device, is_link = 1 if (result.Count > 0) { @@ -470,7 +472,6 @@ namespace Repository.BackendRepository.Implement device_name_tag = x.Key.device_name_tag2 }); - int count = 0; foreach (var data in result) { //開關控制在個別燈具(device_node層) and 小類為二線式照明系統 and tag第八段開頭不是 G @@ -482,7 +483,7 @@ namespace Repository.BackendRepository.Implement else { sb.Append($@" insert device(device_guid, deleted, status, priority, is_link, device_area_tag, device_building_tag, device_system_tag, device_name_tag, full_name, device_floor_tag, device_master, - device_last_name, device_serial_tag, device_number, device_system_category_layer3, visible, created_at, updated_at) + device_last_name, device_serial_tag, device_model_tag, device_number, device_system_category_layer3, visible, created_at, updated_at) values(uuid(), 0, 1, 0, 1, '" + data.device_area_tag + "', '" + data.device_building_tag + "', '" + @@ -493,6 +494,7 @@ namespace Repository.BackendRepository.Implement data.device_master_tag + "', '" + data.device_last_name_tag + "', '" + data.device_serial_tag + "', '" + + data.device_model_tag + "', '" + data.niagara_tags + "', '" + data.device_system_tag + "', 1, now(), now() );"); count += 1; @@ -522,29 +524,56 @@ namespace Repository.BackendRepository.Implement stopwatchSection = new Stopwatch(); stopwatchSection.Start(); - count = 0; foreach (var data in result2) { - var sqlString = new StringBuilder(); - sqlString.Append("select * from device_kind where device_building_tag = '" + data.device_building_tag + "' and device_system_tag = '" + data.device_system_tag + "' and device_name_tag = '" + data.device_name_tag + "'"); - var dk = (await conn.QueryAsync(sqlString.ToString())).ToList(); - - if (dk.Count == 0) + if (data.device_system_tag.Equals("S") && data.device_name_tag.Equals("C")) { - sb2.Append($@"INSERT device_kind (device_kind_guid, device_building_tag, device_system_tag, device_name_tag, - device_normal_flashing, device_close_flashing, device_error_flashing, device_error_independent, - created_by, created_at) - VALUES (uuid(), '" + data.device_building_tag + "', '" + data.device_system_tag + "', '" + data.device_name_tag + - "', 0, 0, 1, 0, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now());"); - count += 1; - if (count >= 100) + var sqlString = new StringBuilder(); + sqlString.Append("select * from device_kind where device_building_tag = '" + data.device_building_tag + "' and device_system_tag = '" + data.device_system_tag + "' and device_name_tag = '" + data.device_name_tag + "' and device_model_tag = '" + data.device_model_tag + "'"); + var dk = (await conn.QueryAsync(sqlString.ToString())).ToList(); + + if (dk.Count == 0) { - using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + sb2.Append($@"INSERT device_kind (device_kind_guid, device_building_tag, device_system_tag, device_name_tag, + device_normal_flashing, device_close_flashing, device_error_flashing, device_error_independent, + created_by, created_at, device_model_tag, is_link) + VALUES (uuid(), '" + data.device_building_tag + "', '" + data.device_system_tag + "', '" + data.device_name_tag + + "', 0, 0, 1, 0, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now(), '" + data.device_model_tag + "', 1);"); + count += 1; + if (count >= 100) { - await conn.ExecuteAsync(sb2.ToString()); + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync(sb2.ToString()); + } + sb2.Clear(); + count = 0; + } + } + } + else + { + var sqlString = new StringBuilder(); + sqlString.Append("select * from device_kind where device_building_tag = '" + data.device_building_tag + "' and device_system_tag = '" + data.device_system_tag + "' and device_name_tag = '" + data.device_name_tag + "'"); + var dk = (await conn.QueryAsync(sqlString.ToString())).ToList(); + + if (dk.Count == 0) + { + sb2.Append($@"INSERT device_kind (device_kind_guid, device_building_tag, device_system_tag, device_name_tag, + device_normal_flashing, device_close_flashing, device_error_flashing, device_error_independent, + created_by, created_at, is_link) + VALUES (uuid(), '" + data.device_building_tag + "', '" + data.device_system_tag + "', '" + data.device_name_tag + + "', 0, 0, 1, 0, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now(), 1);"); + count += 1; + if (count >= 100) + { + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync(sb2.ToString()); + } + sb2.Clear(); + count = 0; } - sb2.Clear(); - count = 0; } } } @@ -560,10 +589,107 @@ namespace Repository.BackendRepository.Implement } stopwatchSection.Stop(); await KeepTimeLog("insert into device_kind", stopwatchSection.ElapsedMilliseconds); - } #endregion + #region device_kind process for cctv + stopwatchSection = new Stopwatch(); + stopwatchSection.Start(); + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync(@"SET SQL_SAFE_UPDATES = 0; + update device d join import_niagara_tag n on d.device_number = n.niagara_tags set d.device_model_tag = n.device_model_tag + where d.device_system_tag = 'S' and d.device_name_tag = 'C' and (d.device_model_tag is null or d.device_model_tag = '');"); + } + stopwatchSection.Stop(); + await KeepTimeLog("update cctv model is null or empty", stopwatchSection.ElapsedMilliseconds); + + stopwatchSection = new Stopwatch(); + stopwatchSection.Start(); + var resultDeviceItem = await conn.QueryAsync($@"select * from import_niagara_tag where device_system_tag = 'S' and device_name_tag = 'C';"); + var result3 = resultDeviceItem.GroupBy(x => new + { + device_building_tag2 = x.device_building_tag, + device_system_tag2 = x.device_system_tag, + device_name_tag2 = x.device_name_tag, + device_model_tag2 = x.device_model_tag + }).Select(x => new Device_item8 + { + device_building_tag = x.Key.device_building_tag2, + device_system_tag = x.Key.device_system_tag2, + device_name_tag = x.Key.device_name_tag2, + device_model_tag = x.Key.device_model_tag2 + }); + + foreach (var data in result3) + { + var sqlString = new StringBuilder(); + sqlString.Append("select * from device_kind where device_building_tag = '" + data.device_building_tag + "' and device_system_tag = '" + data.device_system_tag + "' and device_name_tag = '" + data.device_name_tag + "' and device_model_tag = '" + data.device_model_tag + "'"); + var dk = (await conn.QueryAsync(sqlString.ToString())).ToList(); + + if (dk.Count == 0) + { + sb2.Append($@"INSERT device_kind (device_kind_guid, device_building_tag, device_system_tag, device_name_tag, + device_normal_flashing, device_close_flashing, device_error_flashing, device_error_independent, + created_by, created_at, device_model_tag, is_link) + VALUES (uuid(), '" + data.device_building_tag + "', '" + data.device_system_tag + "', '" + data.device_name_tag + + "', 0, 0, 1, 0, 'B43E3CA7-96DD-4FC7-B6E6-974ACC3B0878', now(), '" + data.device_model_tag + "', 1);"); + count += 1; + if (count >= 100) + { + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync(sb2.ToString()); + } + sb2.Clear(); + count = 0; + } + } + } + + if (sb2.Length > 0) + { + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync(sb2.ToString()); + } + + sb2.Clear(); + } + + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync($@"SET SQL_SAFE_UPDATES = 0; + UPDATE device_kind dk + left JOIN ( + SELECT device_system_tag, device_name_tag, device_model_tag + FROM import_niagara_tag + LIMIT 100000 + ) i ON dk.device_system_tag = i.device_system_tag + and dk.device_name_tag = i.device_name_tag + and dk.device_model_tag = i.device_model_tag + SET dk.is_link = 0 + WHERE dk.is_link = 1 and dk.device_system_tag = 'S' and dk.device_name_tag = 'C' and i.device_system_tag is null;"); + } + + using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled)) + { + await conn.ExecuteAsync($@"SET SQL_SAFE_UPDATES = 0; + UPDATE device_kind dk + left JOIN ( + SELECT device_system_tag, device_name_tag, device_model_tag + FROM import_niagara_tag + LIMIT 100000 + ) i ON dk.device_system_tag = i.device_system_tag + and dk.device_name_tag = i.device_name_tag + and dk.device_model_tag = i.device_model_tag + SET dk.is_link = 1 + WHERE dk.is_link = 0 and dk.device_system_tag = 'S' and dk.device_name_tag = 'C' and i.device_system_tag is not null;"); + } + stopwatchSection.Stop(); + await KeepTimeLog("insert/update cctv model is_link", stopwatchSection.ElapsedMilliseconds); + #endregion + #region device_node 新增 stopwatchSection = new Stopwatch(); stopwatchSection.Start(); @@ -591,7 +717,7 @@ namespace Repository.BackendRepository.Implement device_name_tag = x.Key.device_name_tag2 }); - int count = 0; + count = 0; foreach (var data in result) { //開關控制在個別燈具(device_node層) and 小類為二線式照明系統 and tag第八段開頭不是 G diff --git a/Repository/Models/BackgroundServiceTask.cs b/Repository/Models/BackgroundServiceTask.cs index fbfc179..c8e0920 100644 --- a/Repository/Models/BackgroundServiceTask.cs +++ b/Repository/Models/BackgroundServiceTask.cs @@ -64,8 +64,8 @@ namespace Repository.Models public string device_last_name_tag { get; set; } public string device_serial_tag { get; set; } public string point_name { get; set; } - //public string result_value { get; set; } + public string device_model_tag { get; set; } } public class NiagaraTags @@ -84,6 +84,7 @@ namespace Repository.Models public string device_full_name { get; set; } public string atDateTime { get; set; } public int is_used { get; set; } + public string device_model_tag { get; set; } } public class NiagaraTagsForItem