[後端] 優化存取程序, 修改getmenu增加判斷

[前端] 修改spinner問題
This commit is contained in:
dev02 2023-07-19 11:42:55 +08:00
parent 2206f5a3fe
commit b4e4321453
5 changed files with 88 additions and 64 deletions

View File

@ -114,8 +114,8 @@ namespace Backend.Controllers
} }
string LightSwitchLevel = await niagaraDataSynchronizeRepository.getLightSwitchLevel(); //獲取照明開關 是否在 device or device_node string LightSwitchLevel = await niagaraDataSynchronizeRepository.getLightSwitchLevel(); //獲取照明開關 是否在 device or device_node
//await niagaraDataSynchronizeRepository.InsertNiagaraTagList(ds, building, tag_quantity); // 匯入 MySQL table: import_niagara_tag await niagaraDataSynchronizeRepository.InsertNiagaraTagList(ds, building, tag_quantity); // 匯入 MySQL table: import_niagara_tag
//await niagaraDataSynchronizeRepository.DeviceComparison(LightSwitchLevel); await niagaraDataSynchronizeRepository.DeviceComparison(LightSwitchLevel);
await niagaraDataSynchronizeRepository.CheckDiffFullNameAndCover(); await niagaraDataSynchronizeRepository.CheckDiffFullNameAndCover();
await niagaraDataSynchronizeRepository.CheckFullNameEmptyReplaceByDeviceName(); await niagaraDataSynchronizeRepository.CheckFullNameEmptyReplaceByDeviceName();
await niagaraDataSynchronizeRepository.InsertBuildingMenu(); await niagaraDataSynchronizeRepository.InsertBuildingMenu();

View File

@ -4,23 +4,9 @@ using System.Linq;
using System.Xml; using System.Xml;
using Newtonsoft.Json; using Newtonsoft.Json;
using Repository.Models; using Repository.Models;
using Newtonsoft.Json.Linq;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Text;
using System.Xml.Linq; using System.Xml.Linq;
using Repository.BackendRepository.Implement;
using Repository.BackendRepository;
using Ubiety.Dns.Core;
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Repository.Models.CodeBeautify;
using NPOI.SS.Formula.Functions;
using Microsoft.AspNetCore.Localization;
using MySqlX.XDevAPI.Relational;
using Backend.Models;
using NPOI.OpenXmlFormats.Dml;
namespace Backend.Services.Implement namespace Backend.Services.Implement
{ {
@ -151,6 +137,7 @@ namespace Backend.Services.Implement
#region get control point data #region get control point data
List<control_point> conPoint = new List<control_point>(); List<control_point> conPoint = new List<control_point>();
String cp_API_Url = bqlUrlString; String cp_API_Url = bqlUrlString;
String building_tag = slot.Split("/")[2].Replace("|", "_").Trim(); //Ex: D2_, M_
HttpWebRequest cp_Postrequest = (HttpWebRequest)WebRequest.Create(cp_API_Url); HttpWebRequest cp_Postrequest = (HttpWebRequest)WebRequest.Create(cp_API_Url);
cp_Postrequest.Method = "POST"; cp_Postrequest.Method = "POST";
@ -220,8 +207,14 @@ namespace Backend.Services.Implement
XmlDocument xmlDoc2 = new XmlDocument(); XmlDocument xmlDoc2 = new XmlDocument();
xmlDoc2.LoadXml(responseString2); xmlDoc2.LoadXml(responseString2);
// Create a namespace manager to handle the XML namespace
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDoc2.NameTable);
string xmlns = xmlDoc2.DocumentElement.GetAttribute("xmlns") ?? "http://obix.org/ns/schema/1.0";
namespaceManager.AddNamespace("obix", xmlns);
foreach (XmlNode node2 in xmlDoc2.DocumentElement.ChildNodes) // Select all "ref" nodes using an XPath expression
XmlNodeList refNodes = xmlDoc2.SelectNodes($"//obix:ref[starts-with(@name, '{building_tag}')]", namespaceManager);
foreach (XmlNode node2 in refNodes)
{ {
string tagName = node2.Attributes["name"].InnerText; string tagName = node2.Attributes["name"].InnerText;
if (tagName.Split('_').Length == 9) if (tagName.Split('_').Length == 9)
@ -241,8 +234,8 @@ namespace Backend.Services.Implement
row.isHistory = true; row.isHistory = true;
result.Add(row); result.Add(row);
}
} else if (tagName.Split('_').Length == 6) else if (tagName.Split('_').Length == 6)
{ //巨蛋 tag 5 段版本 { //巨蛋 tag 5 段版本
ImpNiaItem row = new ImpNiaItem(); ImpNiaItem row = new ImpNiaItem();
if (tagName.Split('_')[1] == "S") //for security system if (tagName.Split('_')[1] == "S") //for security system

View File

@ -140,9 +140,9 @@
//#endregion //#endregion
function SynchronizeData() { function SynchronizeData() {
showSpinner();
document.getElementById('loadDataText').innerText = "同步中...";
if (ds.length > 0) { if (ds.length > 0) {
document.getElementById('loadDataText').innerText = "同步中...";
showSpinner();
//比對資料有差異的話再同步到device等資料表 //比對資料有差異的話再同步到device等資料表
var url_synchronize_data = "/NiagaraDataSynchronize/CompareData/"; var url_synchronize_data = "/NiagaraDataSynchronize/CompareData/";
@ -160,16 +160,20 @@
dataType: 'json', dataType: 'json',
success: function (rel) { success: function (rel) {
if (rel.code != "0000") { if (rel.code != "0000") {
toast_error(rel.msg);
hideSpinner(); hideSpinner();
toast_error(rel.msg);
document.getElementById('loadDataText').innerText = "比對資料出錯了!"; document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return; return;
} }
SyncDevItem(); SyncDevItem();
//var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); //var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
//var dateTime = date + ' ' + time; //var dateTime = date + ' ' + time;
//document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime; //document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
}, },
error: function () {
hideSpinner();
}
}); });
} }
else { else {
@ -194,11 +198,12 @@
dataType: 'json', dataType: 'json',
success: function (rel) { success: function (rel) {
if (rel.code != "0000") { if (rel.code != "0000") {
hideSpinner();
toast_error(rel.msg); toast_error(rel.msg);
document.getElementById('loadDataText').innerText = "比對資料出錯了!"; document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return; return;
} }
$.ajax({ $.ajax({
method: "POST", method: "POST",
url: url_synchronize_data_device_item, url: url_synchronize_data_device_item,
@ -221,6 +226,9 @@
var dateTime = date + ' ' + time; var dateTime = date + ' ' + time;
document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime; document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
}, },
error: function () {
hideSpinner();
}
}) })
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var dateTime = date + ' ' + time; var dateTime = date + ' ' + time;

View File

@ -180,7 +180,7 @@ namespace FrontendWebApi.ApiControllers
v2.system_key subfull_name, v2.system_key subfull_name,
v2.system_priority subpriority v2.system_priority subpriority
from building_menu me from building_menu me
left join building b on b.building_tag = me.building_tag left join building b on b.building_tag = me.building_tag and b.deleted = 0
left join variable v1 on me.main_system_tag = v1.system_value and v1.deleted = 0 and v1.system_type = 'device_system_category_layer2' left join variable v1 on me.main_system_tag = v1.system_value and v1.deleted = 0 and v1.system_type = 'device_system_category_layer2'
left join variable v2 on me.sub_system_tag = v2.system_value and v2.deleted = 0 and v2.system_type = 'device_system_category_layer3' left join variable v2 on me.sub_system_tag = v2.system_value and v2.deleted = 0 and v2.system_type = 'device_system_category_layer3'
inner join ( inner join (

View File

@ -13,6 +13,7 @@ using System.Data.SqlTypes;
using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Primitives;
using System.Web; using System.Web;
using Org.BouncyCastle.Utilities.Collections; using Org.BouncyCastle.Utilities.Collections;
using System.Reflection;
namespace Repository.BackendRepository.Implement namespace Repository.BackendRepository.Implement
{ {
@ -409,18 +410,18 @@ namespace Repository.BackendRepository.Implement
//device有niagara沒有is_link 更新成 0 //device有niagara沒有is_link 更新成 0
sb.Append($@" SET SQL_SAFE_UPDATES = 0; sb.Append($@" SET SQL_SAFE_UPDATES = 0;
UPDATE device d UPDATE device
SET d.is_link = 0 SET is_link = 0
WHERE d.is_link = 1 and not exists (select niagara_tags from import_niagara_tag where niagara_tags = d.device_number);"); WHERE is_link = 1 AND device_number NOT IN (SELECT niagara_tags FROM import_niagara_tag);");
await conn.ExecuteAsync(sb.ToString(), commandTimeout: 100); await conn.ExecuteAsync(sb.ToString(), commandTimeout: 100);
sb.Clear(); sb.Clear();
// device_node 有, niagara沒有, is_link 更新成 0 // device_node 有, niagara沒有, is_link 更新成 0
sb.Append($@" SET SQL_SAFE_UPDATES = 0; sb.Append($@" SET SQL_SAFE_UPDATES = 0;
UPDATE device_node d UPDATE device_node
SET d.is_link = 0 SET is_link = 0
WHERE d.is_link = 1 and not exists (select niagara_tags from import_niagara_tag where niagara_tags = d.device_number);"); WHERE is_link = 1 AND device_number NOT IN (SELECT niagara_tags FROM import_niagara_tag);");
await conn.ExecuteAsync(sb.ToString(), commandTimeout: 100); await conn.ExecuteAsync(sb.ToString(), commandTimeout: 100);
} }
catch (Exception exception) catch (Exception exception)
@ -767,10 +768,16 @@ namespace Repository.BackendRepository.Implement
try try
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.Append("update device d inner JOIN import_niagara_tag m ON m.niagara_tags = d.device_number " + sb.Append(@"UPDATE device d
"set d.full_name=m.device_full_name " + INNER JOIN import_niagara_tag m ON m.niagara_tags = d.device_number
"where m.device_full_name<>d.full_name;"); SET d.full_name = m.device_full_name
await conn.ExecuteAsync(sb.ToString(), commandTimeout: 999); WHERE NOT EXISTS (
SELECT 1
FROM import_niagara_tag m2
WHERE m2.niagara_tags = d.device_number
AND m2.device_full_name = d.full_name
);");
await conn.ExecuteAsync(sb.ToString());
} }
catch (Exception exception) catch (Exception exception)
{ {
@ -863,42 +870,18 @@ namespace Repository.BackendRepository.Implement
using (IDbConnection conn = GetDbConnection()) using (IDbConnection conn = GetDbConnection())
{ {
conn.Open(); conn.Open();
using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled, new TimeSpan(0, 5, 0))) StringBuilder sb = new StringBuilder();
List<DeviceDisasterOutput> deviceDisaster = new List<DeviceDisasterOutput>();
List<DeviceDisasterOutput> device = new List<DeviceDisasterOutput>();
using (TransactionScope scope = new TransactionScope((TransactionScopeOption)TransactionScopeAsyncFlowOption.Enabled))
{ {
try try
{ {
StringBuilder sb = new StringBuilder();
sb.Append("select * from device_disaster;"); sb.Append("select * from device_disaster;");
var deviceDisaster = (await conn.QueryAsync<DeviceDisasterOutput>(sb.ToString())).ToList(); deviceDisaster = (await conn.QueryAsync<DeviceDisasterOutput>(sb.ToString())).ToList();
sb.Clear(); sb.Clear();
sb.Append("select * from device where deleted = 0;"); sb.Append("select * from device where deleted = 0;");
var device = (await conn.QueryAsync<DeviceDisasterOutput>(sb.ToString())).ToList(); device = (await conn.QueryAsync<DeviceDisasterOutput>(sb.ToString())).ToList();
dv = dv.Where(x => device.Any(d => d.device_number == x.value.Split('/')[6])).ToList();
sb.Clear();
var updateList = dv.Where(x => deviceDisaster.Any(dd => dd.device_number == x.value.Split('/')[6] && dd.device_system_value != x.disasterValue));
foreach (var d in updateList)
{
string device_number = d.value.Split('/')[6];
sb.Append($"update device_disaster set device_system_value = '{d.disasterValue}' where device_number = '{device_number}'; ");
}
var insertList = dv.Where(x => !deviceDisaster.Any(dd => dd.device_number == x.value.Split('/')[6]));
foreach (var d in insertList)
{
string device_number = d.value.Split('/')[6];
string device_guid = device.Where(x => x.device_number == device_number).Select(x => x.device_guid).FirstOrDefault();
string device_system_tag = device.Where(x => x.device_number == device_number).Select(x => x.device_system_tag).FirstOrDefault();
string device_name_tag = device.Where(x => x.device_number == device_number).Select(x => x.device_name_tag).FirstOrDefault();
sb.Append($@"
insert into device_disaster
(device_guid, device_system_value, device_building_tag, device_system_tag, device_name_tag, device_floor_tag, device_serial_tag, device_number)
values ('{device_guid}', '{d.disasterValue}', '{device_number.Split('_')[0]}', '{device_system_tag}', '{device_name_tag}', '{device_number.Split('_')[2]}',
'{device_number.Split('_')[4]}', '{device_number}'); ");
}
if (!string.IsNullOrEmpty(sb.ToString()))
await conn.ExecuteAsync(sb.ToString());
} }
catch (Exception exception) catch (Exception exception)
{ {
@ -909,6 +892,46 @@ namespace Repository.BackendRepository.Implement
conn.Close(); conn.Close();
} }
} }
dv = dv.Where(x => device.Any(d => d.device_number == x.value.Split('/')[6])).ToList();
sb.Clear();
var updateList = dv.Where(x => deviceDisaster.Any(dd => dd.device_number == x.value.Split('/')[6] && dd.device_system_value != x.disasterValue)).ToList();
foreach (var d in updateList)
{
string device_number = d.value.Split('/')[6];
sb.Append($"update device_disaster set device_system_value = '{d.disasterValue}' where device_number = '{device_number}'; ");
}
var insertList = dv.Where(x => !deviceDisaster.Any(dd => dd.device_number == x.value.Split('/')[6])).ToList();
foreach (var d in insertList)
{
string device_number = d.value.Split('/')[6];
string device_guid = device.Where(x => x.device_number == device_number).Select(x => x.device_guid).FirstOrDefault();
string device_system_tag = device.Where(x => x.device_number == device_number).Select(x => x.device_system_tag).FirstOrDefault();
string device_name_tag = device.Where(x => x.device_number == device_number).Select(x => x.device_name_tag).FirstOrDefault();
sb.Append($@"
insert into device_disaster
(device_guid, device_system_value, device_building_tag, device_system_tag, device_name_tag, device_floor_tag, device_serial_tag, device_number)
values ('{device_guid}', '{d.disasterValue}', '{device_number.Split('_')[0]}', '{device_system_tag}', '{device_name_tag}', '{device_number.Split('_')[2]}',
'{device_number.Split('_')[4]}', '{device_number}'); ");
}
using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
try
{
if (!string.IsNullOrEmpty(sb.ToString()))
await conn.ExecuteAsync(sb.ToString());
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
} }
} }