[Frontend] [首頁] baja語法: 訂閱特定路徑的設備點位
This commit is contained in:
		
							parent
							
								
									2a06f91ea3
								
							
						
					
					
						commit
						cc2f8f6e80
					
				@ -6,6 +6,11 @@ var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅
 | 
				
			|||||||
let baja_subscribe_alarm_callback_func; //設定 alarm BQL訂閱之後要回傳的Function
 | 
					let baja_subscribe_alarm_callback_func; //設定 alarm BQL訂閱之後要回傳的Function
 | 
				
			||||||
let baja_subscribe_end_alarm_callback_func; //設定 alarm BQL訂閱結束之後要回傳的Function
 | 
					let baja_subscribe_end_alarm_callback_func; //設定 alarm BQL訂閱結束之後要回傳的Function
 | 
				
			||||||
var ordPathForAlarm; //當前點選選單的tag,用來抓出alarm路徑
 | 
					var ordPathForAlarm; //當前點選選單的tag,用來抓出alarm路徑
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let baja_subscribe_electricmeter_callback_func;
 | 
				
			||||||
 | 
					let baja_subscribe_end_electricmeter_callback_func;
 | 
				
			||||||
 | 
					var ordPathForElectricmeter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var startPageLoading;  // 開始 loading
 | 
					var startPageLoading;  // 開始 loading
 | 
				
			||||||
var endPageLoading;  // 開始 loading
 | 
					var endPageLoading;  // 開始 loading
 | 
				
			||||||
//window.baja = null;
 | 
					//window.baja = null;
 | 
				
			||||||
@ -57,6 +62,25 @@ function subscriptionAlarms() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function subscriptionElectricmeter() {
 | 
				
			||||||
 | 
					    // 用BQL的方式去訂閱
 | 
				
			||||||
 | 
					    this.setSubscribeElectricmeterByBql = function (tempOrdPath) {
 | 
				
			||||||
 | 
					        BajaSubscribeElectricmeterByBql(tempOrdPath);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    // BQL去訂閱回傳的Function
 | 
				
			||||||
 | 
					    this.setSubscribeElectricmeterCallBack = function (callBackFunc) {
 | 
				
			||||||
 | 
					        if (callBackFunc != undefined && callBackFunc != null) {
 | 
				
			||||||
 | 
					            baja_subscribe_electricmeter_callback_func = callBackFunc;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // BQL訂閱結束回傳的Function
 | 
				
			||||||
 | 
					    this.setSubscribeElectricmeterEndCallBack = function (callBackFunc) {
 | 
				
			||||||
 | 
					        if (callBackFunc != undefined && callBackFunc != null) {
 | 
				
			||||||
 | 
					            baja_subscribe_end_electricmeter_callback_func = callBackFunc;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function MyBaja() {
 | 
					function MyBaja() {
 | 
				
			||||||
    // 取得使用者帳號
 | 
					    // 取得使用者帳號
 | 
				
			||||||
    this.setMyUserAccount = function (callBackFunc = null) {
 | 
					    this.setMyUserAccount = function (callBackFunc = null) {
 | 
				
			||||||
@ -351,6 +375,154 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 使用者透過BQL指定路徑去訂閱 electricmeter
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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_electricmeter_callback_func != undefined && baja_subscribe_electricmeter_callback_func != null) {
 | 
				
			||||||
 | 
					                    baja_subscribe_electricmeter_callback_func(modify_target_device, true); //第2參數用在平面圖,刷新畫面
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }, function (err) {
 | 
				
			||||||
 | 
					            console.log(err)
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //使用bql語法
 | 
				
			||||||
 | 
					        console.log(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`);
 | 
				
			||||||
 | 
					        baja.Ord.make(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, 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());
 | 
				
			||||||
 | 
					                    //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[8];
 | 
				
			||||||
 | 
					                            //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_electricmeter_callback_func != undefined && baja_subscribe_electricmeter_callback_func != null) {
 | 
				
			||||||
 | 
					                                baja_subscribe_electricmeter_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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                    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());
 | 
				
			||||||
 | 
					                            if (baja_subscribe_end_electricmeter_callback_func != undefined && baja_subscribe_end_electricmeter_callback_func != null) {
 | 
				
			||||||
 | 
					                                baja_subscribe_end_electricmeter_callback_func(totalTargetDevice);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            endPageLoading ? endPageLoading() : ""
 | 
				
			||||||
 | 
					                            //console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        limit: -1,
 | 
				
			||||||
 | 
					                        offset: 0
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// function getAlarmCountByBaja(callback) {
 | 
					// function getAlarmCountByBaja(callback) {
 | 
				
			||||||
//     var _result = "";
 | 
					//     var _result = "";
 | 
				
			||||||
//     var _index = 0;
 | 
					//     var _index = 0;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user