From 43751cad36cf5ad3fb735d673729e8169f111179 Mon Sep 17 00:00:00 2001 From: wanli Date: Tue, 22 Nov 2022 01:30:30 +0800 Subject: [PATCH] =?UTF-8?q?[Frontend]=20baja=20function=20:=20=E8=A8=82?= =?UTF-8?q?=E9=96=B1=E9=9B=BB=E8=A1=A8/=E9=9B=BB=E6=A2=AF=20=E3=80=81?= =?UTF-8?q?=E9=9B=BB=E6=A2=AF=E7=9A=84=E5=8D=B3=E6=99=82=E7=8B=80=E6=85=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/js/n4js/bajatest.js | 190 ++++++++++++++++++++++++++++++- Frontend/js/n4js/elevatorbaja.js | 77 +++++++++++++ 2 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 Frontend/js/n4js/elevatorbaja.js diff --git a/Frontend/js/n4js/bajatest.js b/Frontend/js/n4js/bajatest.js index 171fad3..1b74869 100644 --- a/Frontend/js/n4js/bajatest.js +++ b/Frontend/js/n4js/bajatest.js @@ -1,3 +1,191 @@ - +let baja_subscribe_device_callback_func; //設定BQL訂閱之後要回傳的Function +var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅館棟->H,消防偵煙器->F3 + +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 BajaSubscribeDevicesByBql() { + require(['baja!'], function (baja) { + console.log("進入Function 準備執行BQL訂閱"); + 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, + "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參數用在平面圖,刷新畫面 + } + } + }); + + //使用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 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 () { + 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[target_device_number_split.length - 2]; + //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, + "point_name": point_name ? point_name : null, + "value": key + } + + //取得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, + }); + + 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"); + console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec"); + }, + limit: -1, + offset: 0 + }); + }); + }); +} + diff --git a/Frontend/js/n4js/elevatorbaja.js b/Frontend/js/n4js/elevatorbaja.js new file mode 100644 index 0000000..c357cff --- /dev/null +++ b/Frontend/js/n4js/elevatorbaja.js @@ -0,0 +1,77 @@ + + +function getElevatorInfoByBaja(path, callback) { + var _result = ""; + var _ss = '{'; + var _index = 0; + // + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|station:|slot:/" + path + "|bql:select name, displayName, out, out.value, slotPath, parent.name as 'device_number' from control:ControlPoint where name = 'CP' or name = 'RD' or name = 'DS' or name = 'ST' or name = 'LOAD' or name = 'MID' or name = 'HAND' or name = 'IND' or name = 'MD' or name = 'DNO'").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + var item = null; + var value = null; + if (record.get('name') == "CP") { + item = "floor"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "RD") { //UP or DOWN + item = "direction"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "DS") { + item = "door_state"; + value = record.get('out').get('value') == true ? "OPEN" : "CLOSE"; + } + else if (record.get('name') == "ST") { + item = "running_status"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "LOAD") { + item = "loading"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "MID") { + item = "maintenance"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "HAND") { + item = "manual"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "IND") { + item = "independent"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "MD") { + item = "vip"; + value = record.get('out').get('value'); + } + else if (record.get('name') == "DNO") { + item = "automatic"; + value = record.get('out').get('value'); + } + + if (item != null && item != "") { + if (_index == 0) + _ss += '{"item":"' + item + '", "value":"' + value + '"}'; + else + _ss += ',{"item":"' + item + '", "value":"' + value + '"}'; + _index++; + } + + + }, + after: function () { + _result += '{' + '"count": ' + _index + ', "data":['; + _result += _ss; + _result += ']}'; + if (typeof callback === 'function') { + callback(_result); + } + } + }); + }); + }); +}