ibms-dome/Backend/Views/NiagaraDataSynchronize/Index.cshtml
2024-01-15 15:29:23 +08:00

335 lines
15 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@{
ViewData["MainNum"] = "2";
ViewData["SubNum"] = "3";
ViewData["Title"] = "Niagara資料同步";
}
<ol class="breadcrumb page-breadcrumb">
<li class="breadcrumb-item"><a href="javascript:void(0);">首頁</a></li>
<li class="breadcrumb-item">設備管理</li>
<li class="breadcrumb-item active">Niagara資料同步</li>
<li class="position-absolute pos-top pos-right d-none d-sm-block"><span class="js-get-date"></span></li>
</ol>
<div class="row">
<div class="col-xl-12">
<div id="panel-5" class="panel">
<div class="panel-container show">
<div class="panel-content">
<div class="form-row align-items-center">
<div class="col-12 mb-3">
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="Building_B" name="Building" value="B" class="custom-control-input">
<label class="custom-control-label" for="Building_B"></label>
</div>
@*<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="Building_O" name="Building" value="O" class="custom-control-input">
<label class="custom-control-label" for="Building_O">辦公棟</label>
</div>*@
</div>
</div>
<div class="form-row align-items-center">
<button id="loadDataBtn" type="button" class="btn btn-primary" onclick="LoadData()">載入資料</button>
<button id="synchornizeDataBtn" type="button" class="btn btn-dark" onclick="SynchronizeData()">同步資料</button>
</div>
<br />
<br />
<div class="form-row align-items-center">
<p id="loadDataText"></p>
</div>
<div class="mb-5">
<div class="card p-3 w-100">
<div class="card-header d-flex align-items-center flex-wrap">
<div class="card-title">
Niagara資料
</div>
</div>
<div class="card-body row">
<div class="col-12">
<!-- datatable start -->
<table id="niagara_data_table" class="table table-bordered table-hover m-0 text-center">
<thead class="thead-themed">
<tr>
<th>value</th>
<th>tag_name</th>
<th>point_name</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@section Scripts {
<script>
var buildingId, building;
var rawDataImportTable;
var ds;
var today = new Date();
var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
$(function () {
ds = null;
document.getElementById("Building_B").checked = true;
projectName();
rawDataImportTable = $("#niagara_data_table").DataTable({
"columns": [
{
"data": "value"
},
{
"data": "tag_name"
},
{
"data": "point_name"
},
],
"ajax": {
"url": "/NiagaraDataSynchronize/RawDataList",
"type": "POST",
"dataSrc": function (rel) {
if (rel.code == "9999") {
toast_error(rel.msg);
document.getElementById('loadDataText').innerText = "載入資料出錯了!";
return;
}
var data = rel.data;
ds = data;
console.log(ds)
if (data == null || data.length == 0) {
this.data = [];
document.getElementById('loadDataText').innerText = "";
}
else if(data.length > 0) {
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var dateTime = date + ' ' + time;
document.getElementById('loadDataText').innerText = "共 " + rel.data.length + " 筆資料 \n" + dateTime;
}
return data;
}
}
});
});
//#region 載入Niagara資料
function LoadData() {
document.getElementById('loadDataText').innerText = "Loading...";
buildingId = document.querySelector('input[name="Building"]:checked').value;
if (buildingId == "B") {
//building = "B1";
rawDataImportTable.ajax.reload();
}
}
//#endregion
function SynchronizeData() {
if (ds.length > 0) {
document.getElementById('loadDataText').innerText = "同步中...";
showSpinner();
//比對資料有差異的話再同步到device等資料表
var url_synchronize_data = "/NiagaraDataSynchronize/CompareData/";
$.each(ds, function (i, v) {
v.building = building;
})
$.ajax({
method: "POST",
url: url_synchronize_data,
data: JSON.stringify(ds),
cache: false,
async: true,
contentType: "application/json; charset=UTF-8",
dataType: 'json',
success: function (rel) {
if (rel.code != "0000") {
hideSpinner();
toast_error(rel.msg);
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
SyncDevItem();
//var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
//var dateTime = date + ' ' + time;
//document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
},
error: function () {
hideSpinner();
}
});
}
else {
document.getElementById('loadDataText').innerText = "查無資料 無法比對!";
}
}
function SyncDevItem()
{
//比對資料有差異的話再同步到device等資料表
var url_synchronize_data = "/NiagaraDataSynchronize/RawDataDevItemList/";
var url_synchronize_data_device_item = "/NiagaraDataSynchronize/DevItemInsert/";
let object = {};
let dataLength = 0;
let curData = {};
let asyncSendData = [];
let contentLength = 5000;
object.building = building;
//device async
$.ajax({
method: "POST",
url: url_synchronize_data,
cache: false,
async: false,
contentType: "application/json; charset=UTF-8",
data: JSON.stringify(object),
dataType: 'json',
success: function (rel) {
if (rel.code != "0000") {
hideSpinner();
toast_error(rel.msg);
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
//history async
$.ajax({
method: "POST",
url: '/NiagaraDataSynchronize/GetHistoryData/',
cache: false,
async: false,
contentType: "application/json; charset=UTF-8",
success: function (res) {
if (res.code != "0000") {
hideSpinner();
toast_error(res.msg);
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
curData = rel.data;
let relDataLength = curData.length;
$.each(rel.data, function (index, val) {
if (relDataLength > 0) {
//push data, counting
asyncSendData.push(val);
dataLength++;
relDataLength--;
if (dataLength >= contentLength || relDataLength <= 0) {
//device_item async-insert
$.ajax({
method: "POST",
url: url_synchronize_data_device_item,
data: JSON.stringify(asyncSendData),
cache: false,
async: false,
contentType: "application/json; charset=UTF-8",
dataType: 'json',
success: function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
hideSpinner();
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
//reset variable
dataLength = 0;
asyncSendData = [];
//device_item async-compare
if (relDataLength <= 0) {
$.ajax({
method: "POST",
url: '/NiagaraDataSynchronize/DevIteComData/',
cache: false,
async: false,
contentType: "application/json; charset=UTF-8",
success: function (rel) {
if (rel.code != "0000") {
toast_error(rel.msg);
hideSpinner();
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
hideSpinner();
console.log(rel);
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var dateTime = date + ' ' + time;
document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
},
error: function () {
hideSpinner();
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
})
}
},
error: function () {
hideSpinner();
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
})
}
}
});
},
error: function () {
hideSpinner();
document.getElementById('loadDataText').innerText = "比對資料出錯了!";
return;
}
})
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var dateTime = date + ' ' + time;
document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
},
});
}
function projectName()
{
$.post("/Variable/ProjectName", null, function (rel) {
building = "B1";
if (rel.code != "0000") {
toast_error(rel.msg);
return;
}
if (rel.data != null) {
building = rel.data.system_value.split('/')[1];
$(`label[for='Building_B']`).html(rel.data.system_key + building);
}
else
{
$(`label[for='Building_B']`).html('三菱B1');
}
}, 'json');
}
</script>
}