457 lines
22 KiB
JavaScript
457 lines
22 KiB
JavaScript
let baja_subscribe_device_callback_func; //設定BQL訂閱之後要回傳的Function
|
||
let baja_subscribe_end_device_callback_func; //設定BQL訂閱結束之後要回傳的Function
|
||
//let baja_my_user_account_func; //取得帳號資料要回傳的Function
|
||
var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅館棟->H,消防偵煙器->F3
|
||
|
||
let baja_subscribe_alarm_callback_func; //設定 alarm BQL訂閱之後要回傳的Function
|
||
let baja_subscribe_end_alarm_callback_func; //設定 alarm BQL訂閱結束之後要回傳的Function
|
||
var ordPathForAlarm; //當前點選選單的tag,用來抓出alarm路徑
|
||
var startPageLoading; // 開始 loading
|
||
var endPageLoading; // 開始 loading
|
||
//window.baja = null;
|
||
//require(['baja!'], function (baja) {
|
||
// window.baja = baja;
|
||
//})
|
||
|
||
window.tolSubList = [];
|
||
|
||
var user_name = "";
|
||
function subscriptionDevices() {
|
||
// 用BQL的方式去訂閱
|
||
this.setSubscribeDevicesByBql = function (tempOrdPath) {
|
||
ordPath = tempOrdPath;
|
||
BajaSubscribeDevicesByBql();
|
||
};
|
||
// BQL去訂閱回傳的Function
|
||
this.setSubscribeDevicesCallBack = function (callBackFunc) {
|
||
if (callBackFunc != undefined && callBackFunc != null) {
|
||
baja_subscribe_device_callback_func = callBackFunc;
|
||
}
|
||
}
|
||
// BQL訂閱結束回傳的Function
|
||
this.setSubscribeDeviceEndCallBack = function (callBackFunc) {
|
||
if (callBackFunc != undefined && callBackFunc != null) {
|
||
baja_subscribe_end_device_callback_func = callBackFunc;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
function subscriptionAlarms() {
|
||
// 用BQL的方式去訂閱
|
||
this.setSubscribeAlarmsByBql = function (tempOrdPath) {
|
||
BajaSubscribeAlarmsByBql(tempOrdPath);
|
||
};
|
||
// BQL去訂閱回傳的Function
|
||
this.setSubscribeAlarmsCallBack = function (callBackFunc) {
|
||
if (callBackFunc != undefined && callBackFunc != null) {
|
||
baja_subscribe_alarm_callback_func = callBackFunc;
|
||
}
|
||
}
|
||
// BQL訂閱結束回傳的Function
|
||
this.setSubscribeAlarmEndCallBack = function (callBackFunc) {
|
||
if (callBackFunc != undefined && callBackFunc != null) {
|
||
baja_subscribe_end_alarm_callback_func = callBackFunc;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
function MyBaja() {
|
||
// 取得使用者帳號
|
||
this.setMyUserAccount = function (callBackFunc = null) {
|
||
require(['baja!'], function (baja) {
|
||
console.log("baja", baja)
|
||
user_name = baja.getUserName();
|
||
callBackFunc ? callBackFunc(user_name) : "";
|
||
});
|
||
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 使用者透過BQL指定路徑去訂閱設備點位
|
||
*/
|
||
function BajaSubscribeDevicesByBql() {
|
||
|
||
|
||
require(['baja!'], function (baja) {
|
||
console.log("進入Function 準備執行BQL訂閱");
|
||
startPageLoading ? startPageLoading() : ""
|
||
var init_start = new Date(Date.now());
|
||
var sub = new baja.Subscriber();
|
||
|
||
sub.attach('changed', function (prop) {
|
||
if (prop.getName() === 'out') {
|
||
var out_value = this.getOutDisplay();
|
||
var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||
var point_name = this.getDisplayName();
|
||
|
||
//依據Facets判斷回傳的內容值為何
|
||
var facets_split = this.getFacets1().$cEncStr.split('|');
|
||
var facets_arr = [];
|
||
facets_split.forEach(function (item, index) {
|
||
facets_arr.push(item.split('=s:'));
|
||
});
|
||
|
||
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||
|
||
var point_out_split = this.getOutDisplay().split(' ');
|
||
|
||
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||
|
||
if (key == undefined) {
|
||
key = point_out_split[0];
|
||
}
|
||
|
||
var modify_target_device = {
|
||
"device_number": target_device_number ? target_device_number : null,
|
||
"device_number_full": this.$parent.getSlotPath().$names.join("_"),
|
||
"point_name": point_name ? point_name : null,
|
||
"value": key
|
||
}
|
||
|
||
if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||
baja_subscribe_device_callback_func(modify_target_device, true); //第2參數用在平面圖,刷新畫面
|
||
}
|
||
}
|
||
}, function (err) {
|
||
console.log(err)
|
||
});
|
||
|
||
//使用bql語法
|
||
// var building_tag = "H";
|
||
// var system_tag = "M10";
|
||
// baja.Ord.make(`ip:greencloud.fic.com.tw|foxs:|station:|slot:/Arena/${building_tag}/${system_tag}|bql:select name, displayname, slotPath, out.value, out from control:ControlPoint`)
|
||
console.log(`local:|foxs:|station:|slot:/TPE/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`);
|
||
baja.Ord.make(`local:|foxs:|station:|slot:/TPE/${ordPath.building_tag}/${ordPath.system_tag}/${ordPath.name_tag}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`)
|
||
.get(
|
||
function (table) {
|
||
var tableStart, tableFinish;
|
||
var subStart, subFinish;
|
||
var component_index = 0;
|
||
var total_component_index = 0;
|
||
var totalTargetDevice = [];
|
||
var readBqlFinish = new Date(Date.now());
|
||
// $("#readPath-finish-timestamp").html(readBqlFinish.toISOString());
|
||
// $("#readPath-finish-time").html((readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||
console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||
table.cursor({
|
||
before: function () {
|
||
totalTargetDevice = [];
|
||
tableStart = new Date(Date.now());
|
||
$("#table-start-timestamp").html(tableStart.toISOString());
|
||
render_start = new Date(Date.now());
|
||
|
||
},
|
||
each: function (item, index) {
|
||
if (index < 1) {
|
||
subStart = new Date(Date.now());
|
||
$("#sub-start").html(subStart.toISOString());
|
||
}
|
||
$("#sub-number").html(index + 1);
|
||
total_component_index = index;
|
||
|
||
|
||
|
||
var target_device_number_split = this.getDisplay("slotPath").split('/');
|
||
var target_device_number = target_device_number_split[7];
|
||
//console.log(target_device_number);
|
||
var point_name = this.getDisplay("name");
|
||
var facets = this.getDisplay("facets");
|
||
|
||
//依據Facets判斷回傳的內容值為何
|
||
var facets_split = facets.split(',');
|
||
var facets_arr = [];
|
||
facets_split.forEach(function (item, index) {
|
||
facets_arr.push(item.split('='));
|
||
});
|
||
|
||
facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||
|
||
var point_out_split = this.getDisplay("out").split(' ');
|
||
|
||
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||
|
||
if (key == undefined) {
|
||
key = point_out_split[0];
|
||
}
|
||
|
||
var modify_target_device = {
|
||
"device_number": target_device_number ? target_device_number : null,
|
||
"device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1, -1).join("_"),
|
||
"point_name": point_name ? point_name : null,
|
||
"value": key
|
||
}
|
||
totalTargetDevice.push(modify_target_device);
|
||
//取得component當下就更新設備點位
|
||
if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||
baja_subscribe_device_callback_func(modify_target_device);
|
||
}
|
||
|
||
|
||
baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
|
||
.get()
|
||
.then(function (component) {
|
||
component_index++;
|
||
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||
var point_name = component.getDisplayName();
|
||
|
||
// //依據Facets判斷回傳的內容值為何
|
||
// var facets_split = component.getFacets1().$cEncStr.split('|');
|
||
// var facets_arr = [];
|
||
// facets_split.forEach(function (item, index) {
|
||
// facets_arr.push(item.split('=s:'));
|
||
// });
|
||
|
||
// var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||
|
||
// var point_out_split = component.getOutDisplay().split(' ');
|
||
|
||
// let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||
|
||
// if (key == undefined) {
|
||
// key = point_out_split[0];
|
||
// }
|
||
|
||
// var modify_target_device = {
|
||
// "device_number": target_device_number ? target_device_number : null,
|
||
// "point_name": point_name ? point_name : null,
|
||
// "value": key
|
||
// }
|
||
|
||
// //取得component當下就更新設備點位
|
||
// if (baja_subscribe_device_callback_func != undefined && baja_subscribe_device_callback_func != null) {
|
||
// if (component_index == total_component_index) {
|
||
// baja_subscribe_device_callback_func(modify_target_device, true);
|
||
// }
|
||
// else {
|
||
// baja_subscribe_device_callback_func(modify_target_device);
|
||
// }
|
||
// }
|
||
|
||
sub.subscribe({
|
||
comps: component,
|
||
});
|
||
tolSubList.push(sub);
|
||
subFinish = new Date(Date.now());
|
||
$("#sub-end").html(subFinish.toISOString());
|
||
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||
// console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||
});
|
||
},
|
||
after: function () {
|
||
tableFinish = new Date(Date.now());
|
||
// $("#table-finish-timestamp").html(tableFinish.toISOString());
|
||
// $("#table-time").html((tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||
//取得component當下就更新設備點位
|
||
if (baja_subscribe_end_device_callback_func != undefined && baja_subscribe_end_device_callback_func != null) {
|
||
baja_subscribe_end_device_callback_func(totalTargetDevice);
|
||
}
|
||
endPageLoading ? endPageLoading() : ""
|
||
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||
},
|
||
limit: -1,
|
||
offset: 0
|
||
});
|
||
});
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 使用者透過BQL指定路徑去訂閱Alarm
|
||
*/
|
||
function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
|
||
require(['baja!'], function (baja) {
|
||
console.log("進入Function 準備執行BQL訂閱");
|
||
var init_start = new Date(Date.now());
|
||
var sub = new baja.Subscriber();
|
||
startPageLoading ? startPageLoading() : ""
|
||
sub.attach('changed', function (prop) {
|
||
if (prop.getName() === 'out') {
|
||
var sourceState = (this.$map.$map.in10.$val.$map.$map.value.$display) == 'true' ? "Offnormal" : "Normal";
|
||
|
||
var modify_target_device = {
|
||
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
||
"sourceState": sourceState ? sourceState : null
|
||
}
|
||
|
||
if (baja_subscribe_alarm_callback_func != undefined && baja_subscribe_alarm_callback_func != null) {
|
||
baja_subscribe_alarm_callback_func(modify_target_device);
|
||
}
|
||
}
|
||
});
|
||
|
||
//使用bql語法
|
||
console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
|
||
baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
|
||
.get(
|
||
function (table) {
|
||
var tableStart, tableFinish;
|
||
var subStart, subFinish;
|
||
var totalTargetDevice = [];
|
||
var component_index = 0;
|
||
var total_component_index = 0;
|
||
var readBqlFinish = new Date(Date.now());
|
||
console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||
|
||
table.cursor({
|
||
before: function () {
|
||
totalTargetDevice = [];
|
||
tableStart = new Date(Date.now());
|
||
render_start = new Date(Date.now());
|
||
},
|
||
each: function (item, index) {
|
||
if (index < 1) {
|
||
subStart = new Date(Date.now());
|
||
}
|
||
total_component_index = index;
|
||
|
||
var sourceState = this.getDisplay("sourceState");
|
||
//var sourceName = (item.$map.$map.alarmData$2esourceName.$display).replace('_', '/');
|
||
var sourceNameArray = (item.$map.$map.alarmData$2esourceName.$display).split('_');
|
||
var slotPath = sourceNameArray[0] + "/" + sourceNameArray[1] + "/" + sourceNameArray[2] + "/" + sourceNameArray[3] + "/" + sourceNameArray[4] + "/" + sourceNameArray[5] + "/" + sourceNameArray[6] + "/" + sourceNameArray[7] + "/" + sourceNameArray[8];
|
||
var normalTime = this.getDisplay("normalTime");
|
||
|
||
var modify_target_device = {
|
||
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
||
"sourceState": sourceState ? sourceState : null
|
||
}
|
||
totalTargetDevice.push(modify_target_device);
|
||
//取得component當下就更新設備點位
|
||
if (baja_subscribe_alarm_callback_func != undefined && baja_subscribe_alarm_callback_func != null) {
|
||
baja_subscribe_alarm_callback_func(modify_target_device);
|
||
}
|
||
|
||
baja.Ord.make("local:|foxs:|station:|slot:/" + slotPath)
|
||
.get()
|
||
.then(function (component) {
|
||
component_index++;
|
||
|
||
sub.subscribe({
|
||
comps: component,
|
||
});
|
||
|
||
subFinish = new Date(Date.now());
|
||
console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||
});
|
||
},
|
||
after: function () {
|
||
tableFinish = new Date(Date.now());
|
||
if (baja_subscribe_end_alarm_callback_func != undefined && baja_subscribe_end_alarm_callback_func != null) {
|
||
baja_subscribe_end_alarm_callback_func(totalTargetDevice);
|
||
}
|
||
endPageLoading ? endPageLoading() : ""
|
||
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||
},
|
||
limit: -1,
|
||
offset: 0
|
||
});
|
||
});
|
||
});
|
||
}
|
||
|
||
// function getAlarmCountByBaja(callback) {
|
||
// var _result = "";
|
||
// var _index = 0;
|
||
|
||
// require(['baja!'], function (baja) {
|
||
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where sourceState = 'offnormal' order by timestamp desc").get()
|
||
// .then(function (table) {
|
||
// return table.cursor({
|
||
// each: function (record) {
|
||
// _index++;
|
||
// },
|
||
// after: function () {
|
||
// _result += '{' + '"count": ' + _index;
|
||
// _result += '}';
|
||
// if (typeof callback === 'function') {
|
||
// callback(_result);
|
||
// }
|
||
// },
|
||
// limit: -1,
|
||
// offset: 0
|
||
// });
|
||
// });
|
||
// });
|
||
// }
|
||
|
||
// /**
|
||
// * [首頁] 查詢復歸數量
|
||
// * @param {any} callback
|
||
// */
|
||
// function getRecoverCountByBaja(callback) {
|
||
// var _result = "";
|
||
// var _index = 0;
|
||
|
||
// require(['baja!'], function (baja) {
|
||
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where normalTime != null order by timestamp desc").get()
|
||
// .then(function (table) {
|
||
// return table.cursor({
|
||
// each: function (record) {
|
||
// _index++;
|
||
// },
|
||
// after: function () {
|
||
// _result += '{' + '"count": ' + _index;
|
||
// _result += '}';
|
||
// if (typeof callback === 'function') {
|
||
// callback(_result);
|
||
// }
|
||
// },
|
||
// limit: -1,
|
||
// offset: 0
|
||
// });
|
||
// });
|
||
// });
|
||
// }
|
||
|
||
// function getCheckedAckedCountByBaja(callback) {
|
||
// var _result = "";
|
||
// var _index = 0;
|
||
|
||
// require(['baja!'], function (baja) {
|
||
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where ackState ='acked' order by timestamp asc").get()
|
||
// .then(function (table) {
|
||
// return table.cursor({
|
||
// each: function (record) {
|
||
// _index++;
|
||
// },
|
||
// after: function () {
|
||
// _result += '{' + '"count": ' + _index;
|
||
// _result += '}';
|
||
// if (typeof callback === 'function') {
|
||
// callback(_result);
|
||
// }
|
||
// },
|
||
// limit: -1,
|
||
// offset: 0
|
||
// });
|
||
// });
|
||
// });
|
||
// }
|
||
|
||
// function getUnCheckedAckedCountByBaja(callback) {
|
||
// var _result = "";
|
||
// var _index = 0;
|
||
|
||
// require(['baja!'], function (baja) {
|
||
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where ackState ='unacked' order by timestamp asc").get()
|
||
// .then(function (table) {
|
||
// return table.cursor({
|
||
// each: function (record) {
|
||
// _index++;
|
||
// },
|
||
// after: function () {
|
||
// _result += '{' + '"count": ' + _index;
|
||
// _result += '}';
|
||
// if (typeof callback === 'function') {
|
||
// callback(_result);
|
||
// }
|
||
// },
|
||
// limit: -1,
|
||
// offset: 0
|
||
// });
|
||
// });
|
||
// });
|
||
// }
|