dashbord 校區即時契約容量圖表 | 報表棟別改多選

This commit is contained in:
Celeste 2023-08-23 14:33:39 +08:00
parent 0f675b4eba
commit 2c02b75baa
3 changed files with 1747 additions and 1484 deletions

View File

@ -166,7 +166,7 @@
</div>
</div>
<div class="row">
<div class="row h-100">
<div class="col-sm-12 col-lg-4">
<div class="row" id="sysSubBtnList"></div>
</div>
@ -182,9 +182,9 @@
<div class="panel-hdr">
<h2>本月/上月用電比較 (kWh)</h2>
</div>
<div class="panel-container show">
<div class="panel-content poisition-relative">
<div style="width: 100%; min-height: 270px">
<div class="panel-container show h-100">
<div class="panel-content poisition-relative h-100">
<div style="width: 100%; min-height: 450px">
<canvas class="chart" id="eveMonElecChart"></canvas>
</div>
</div>
@ -192,12 +192,30 @@
</div>
</div>
<div class="col-4">
<div id="panel-3" class="panel" style="height: calc(100% - 1.5rem)">
<div class="row h-100">
<div class="col-12 h-50">
<div id="panel-3"
class="panel"
style="height: calc(100% - 1.5rem)">
<div class="panel-hdr">
<h2>契約容量</h2>
<h2>即時契約容量占比 - 第一校區</h2>
</div>
<div class="panel-container show h-100">
<div class="h-100 py-2" id="contractValueChart"></div>
</div>
</div>
</div>
<div class="col-12 h-50">
<div id="panel-3"
class="panel"
style="height: calc(100% - 1.5rem)">
<div class="panel-hdr">
<h2>即時契約容量占比 - 第一校區</h2>
</div>
<div class="panel-container h-100 show">
<div class="h-100" id="contractValueChart"></div>
<div class="h-100 py-2" id="contractValueChart2"></div>
</div>
</div>
</div>
</div>
</div>
@ -268,6 +286,7 @@
var errRecChart = null;
var errChkChart = null;
var contractValueChart = null;
var contractValueChart2 = null;
var loadedCnt = 0;
var chartDataCnt = {
alarmCnt: 0,
@ -283,6 +302,8 @@
show3DModel();
getSubList();
getAutDemVal();
getContractValueChange("Arean1");
getContractValueChange("Arean2");
});
function demoSubList() {
@ -405,19 +426,46 @@
myBaja.setSubscribeElectricmeterByBql(tempOrdPath);
myBaja.setSubscribeElectricmeterCallBack(function (data) {
console.log(data.point_name);
if (data.point_name == "P") {
let value = parseFloat(data.value).roundDecimal(2);
$("#insPower").text(value);
// $("#insPowerPer").text((value / 4).roundDecimal(2));
$("#insPowerPer").text((value / contractCapacity).roundDecimal(2));
chartContractValue((value / contractCapacity).roundDecimal(2) * 100);
}
});
myBaja.setSubscribeElectricmeterEndCallBack(function () {
chkBajaLoaded();
});
}
let contractCapacityForchart1, contractCapacityForchart2;
function getContractValueChange(compus) {
let devPath = `Data/${compus}`;
BajaSubscribeElectricmeterByBql({ devicePath: devPath }, (data) => {
let value = data.find(({ point_name }) => point_name === "P")?.value;
if (compus === "Arean1") {
if (data.some(({ point_name }) => point_name === "Capacity")) {
contractCapacityForchart1 = data.find(
({ point_name }) => point_name === "Capacity"
)?.value;
}
chartContractValue(
"contractValueChart",
(value / contractCapacityForchart1).roundDecimal(2) * 100
);
} else {
if (data.some(({ point_name }) => point_name === "Capacity")) {
contractCapacityForchart2 = data.find(
({ point_name }) => point_name === "Capacity"
)?.value;
}
chartContractValue(
"contractValueChart2",
(value / contractCapacityForchart2).roundDecimal(2) * 100
);
}
});
}
//從 baja 取得電表用電量
function getElectricBaja() {
@ -521,7 +569,6 @@
(data) => {
const cur = new Date().getMonth();
const pre = new Date().getMonth() - 1;
console.log(data.data);
let curMonthData = data.data.filter(
(x) => x.timestamp.$date.$month === cur
);
@ -780,10 +827,6 @@
// 圖表 - 本月即上月用電量
function chartEveMonsElec(curMonData, prevMonData) {
console.log(
curMonData.map((x) => x.sum),
prevMonData.map((x) => x.sum)
);
let eveMonElecChartCanvas = $("#eveMonElecChart").get(0).getContext("2d");
let eveMonElecChartData = {
@ -1058,8 +1101,8 @@
}
// 圖表 - 取得契約容量
function chartContractValue(value) {
var chartDom = document.getElementById("contractValueChart");
function chartContractValue(ele, value) {
var chartDom = document.getElementById(ele);
contractValueChart = echarts.init(chartDom, null, {
renderer: "canvas",
useDirtyRect: false,

View File

@ -207,7 +207,7 @@
month: "ExportElectricList",
year: "ExportElectricList",
compare: "ExportElectricCompareList",
}
},
},
};
var token = cookies.get("JWT-Authorization");
@ -235,7 +235,7 @@
var html = "";
for (let building of pageAct.buildList) {
html += `<label class="btn btn-outline-success waves-effect waves-themed">
<input type="radio" name="buildingRadio" id="radio_${building.building_tag}" value="${building.building_tag}" onChange="SelectBuild(this,'${building.building_tag}')"> ${building.full_name}
<input type="checkbox" name="buildingRadio" id="radio_${building.building_tag}" value="${building.building_tag}" onChange="SelectBuild(this,'${building.building_tag}')"> ${building.full_name}
</label>`;
}
$("#building").find(".item").empty();
@ -457,7 +457,6 @@
$("[name=compareTypeRadio]")
.parent("label")
.on("click", function () {
debugger;
$("[name=compareTypeRadio]").parent("label").removeClass("active");
const oldVal = $("label.active [name=compareTypeRadio]").val();
$(this).addClass("active");
@ -534,7 +533,7 @@
$("li.active [name=reportTypeRadio]").data("value") == "compare"
? $("[name=compareTypeRadio]:checked").val()
: $("li.active [name=reportTypeRadio]").data("value"),
building_tag: $("[name=buildingRadio]:checked").val(),
building_tag: SelectBuildings.join(","),
floor_tag: $("[name=floorCheckbox]:checked")
.map((i, e) => $(e).val())
.toArray(),
@ -596,11 +595,11 @@
}
if (i == 0) {
result = result.concat(rel.data);
result.forEach(r => {
result.forEach((r) => {
r._compare_price = null;
r._compare_total = null;
r._compare_total_price = null;
})
});
} else {
rel.data.forEach((r) => {
let target =
@ -639,12 +638,10 @@
},
});
});
debugger;
setReportTable(result);
}
function getPrice() {
debugger;
var sentdata = {
type: reportTypeDict["RElec"]["name"],
};
@ -760,7 +757,12 @@
return compareResult.map((dc) => {
if (dc._isCompared) {
return { title: dc.value, data: dc.value, sClass: "compare", sWidth: columnWidth };
return {
title: dc.value,
data: dc.value,
sClass: "compare",
sWidth: columnWidth,
};
}
return { title: dc, data: dc, sWidth: columnWidth };
});
@ -830,8 +832,8 @@
}
}
}
console.log("datas", datas)
console.log("totalColumns", totalColumns)
console.log("datas", datas);
console.log("totalColumns", totalColumns);
datatable = $("#report_table").DataTable({
data: datas,
destroy: true,
@ -851,6 +853,7 @@
title: "樓層",
data: "floor_tag",
sWidth: "8%",
className: "text-nowrap",
},
{
title: "設備",
@ -869,23 +872,27 @@
if (!Array.isArray(sent_data)) {
sent_data = [sent_data];
}
if (!sent_data.some((s) => s.building_tag)) {
toast_error("請選擇棟別");
return;
}
if (!sent_data.some((s) => s.floor_tag)) {
toast_error("請選擇樓層");
return;
}
debugger
// if (!sent_data.some((s) => s.building_tag)) {
// toast_error("請選擇棟別");
// return;
// }
// if (!sent_data.some((s) => s.floor_tag)) {
// toast_error("請選擇樓層");
// return;
// }
var url =
baseApiUrl + "/api/" + reportTypeDict["RElec"]["exportListApiUrl"][tableType];
baseApiUrl +
"/api/" +
reportTypeDict["RElec"]["exportListApiUrl"][tableType];
setLoading(true, "匯出中");
$.ajax({
type: "POST",
url: url,
data: tableType == "compare" ? JSON.stringify(sent_data) : JSON.stringify(sent_data[0]),
data:
tableType == "compare"
? JSON.stringify(sent_data)
: JSON.stringify(sent_data[0]),
headers: {
Authorization: "Bearer " + token,
},
@ -915,6 +922,11 @@
//選擇棟別
function SelectBuild(e, building_tag) {
if (SelectBuildings.includes(building_tag)) {
SelectBuildings = SelectBuildings.filter((bui) => bui !== building_tag);
} else {
SelectBuildings.push(building_tag);
}
checkIsSelectedBuilding();
// GetFloors(building_tag);
}

View File

@ -39,67 +39,89 @@ class subscriptionDevices {
if (callBackFunc != undefined && callBackFunc != null) {
this.changeCallback = callBackFunc;
}
}
};
// BQL訂閱結束回傳的Function
setSubscribeDeviceEndCallBack = function (callBackFunc) {
if (callBackFunc != undefined && callBackFunc != null) {
this.changeEndCallback = callBackFunc;
}
}
};
BajaSubscribeDevicesByBql = function () {
let _this = this;
require(['baja!'], function (baja) {
require(["baja!"], function (baja) {
console.log("進入Function 準備執行BQL訂閱");
startPageLoading ? startPageLoading() : ""
startPageLoading ? startPageLoading() : "";
var init_start = new Date(Date.now());
var sub = new baja.Subscriber();
sub.attach('changed', function (prop) {
if (prop.getName() === 'out') {
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 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_split = this.getFacets1().$cEncStr.split("|");
var facets_arr = [];
facets_split.forEach(function (item, index) {
facets_arr.push(item.split('=s:'));
facets_arr.push(item.split("=s:"));
});
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
var facets = facets_arr.reduce(
(obj, cur) => ({ ...obj, [cur[0]]: cur[1] }),
{}
);
var point_out_split = this.getOutDisplay().split(' ');
var point_out_split = this.getOutDisplay().split(" ");
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
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 (_this.changeCallback != undefined && _this.changeCallback != null) {
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 (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
}
}
}, function (err) {
console.log(err)
});
},
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:${port}|station:|slot:/${_this.ordPath.area_tag}/${_this.ordPath.building_tag}/${_this.ordPath.system_tag}/${_this.ordPath.name_tag}${_this.ordPath.flo_tag ? `/${_this.ordPath.flo_tag}` : ""}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`);
baja.Ord.make(`local:|foxs:${port}|station:|slot:/${_this.ordPath.area_tag}/${_this.ordPath.building_tag}/${_this.ordPath.system_tag}/${_this.ordPath.name_tag}${_this.ordPath.flo_tag ? `/${_this.ordPath.flo_tag}` : ""}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`)
.get(
function (table) {
console.log(
`local:|foxs:${port}|station:|slot:/${_this.ordPath.area_tag}/${_this.ordPath.building_tag
}/${_this.ordPath.system_tag}/${_this.ordPath.name_tag}${_this.ordPath.flo_tag ? `/${_this.ordPath.flo_tag}` : ""
}|bql:select name, displayname, slotPath, out.value, out, facets from control:ControlPoint`
);
baja.Ord.make(
`local:|foxs:${port}|station:|slot:/${_this.ordPath.area_tag}/${_this.ordPath.building_tag
}/${_this.ordPath.system_tag}/${_this.ordPath.name_tag}${_this.ordPath.flo_tag ? `/${_this.ordPath.flo_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;
@ -108,14 +130,15 @@ class subscriptionDevices {
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");
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());
},
each: function (item, index) {
if (index < 1) {
@ -125,93 +148,141 @@ class subscriptionDevices {
$("#sub-number").html(index + 1);
total_component_index = index;
var target_device_number_split = this.getDisplay("slotPath").split('/');
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_split = facets.split(",");
var facets_arr = [];
facets_split.forEach(function (item, index) {
facets_arr.push(item.split('='));
facets_arr.push(item.split("="));
});
facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
facets = facets_arr.reduce(
(obj, cur) => ({ ...obj, [cur[0]]: cur[1] }),
{}
);
var point_out_split = this.getDisplay("out").split(' ');
var point_out_split = this.getDisplay("out").split(" ");
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
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
}
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 (_this.changeCallback != undefined && _this.changeCallback != null) {
// _this.changeCallback(modify_target_device);
// }
if (pageAct.sysSubTag === "L1") {
if (point_name === "SSC" || point_name === "TRIP" || point_name === "ONOFF") {
if (_this.changeCallback != undefined && _this.changeCallback != null) {
if (
point_name === "SSC" ||
point_name === "TRIP" ||
point_name === "ONOFF"
) {
if (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
baja.Ord.make(`local:|foxs:${port}|station:|` + this.getDisplay("slotPath"))
baja.Ord.make(
`local:|foxs:${port}|station:|` +
this.getDisplay("slotPath")
)
.get()
.then(function (component) {
// console.log("component",component)
component_index++;
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
var target_device_number = component.$parent
.getDisplayName()
.split("_")
.slice(0, 5)
.join("_");
var out_value = component.getOutDisplay();
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
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_split = component
.getFacets1()
.$cEncStr.split("|");
var facets_arr = [];
facets_split.forEach(function (item, index) {
facets_arr.push(item.split('=s:'));
facets_arr.push(item.split("=s:"));
});
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
var facets = facets_arr.reduce(
(obj, cur) => ({ ...obj, [cur[0]]: cur[1] }),
{}
);
var point_out_split = component.getOutDisplay().split(' ');
var point_out_split = component
.getOutDisplay()
.split(" ");
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
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": component.$parent.getSlotPath().$names.join("_"),
"point_name": point_name ? point_name : null,
"value": key
}
device_number: target_device_number
? target_device_number
: null,
device_number_full: component.$parent
.getSlotPath()
.$names.join("_"),
point_name: point_name ? point_name : null,
value: key,
};
if (pageAct.sysSubTag === "L1") {
if (point_name === "SSC" || point_name === "TRIP" || point_name === "ONOFF") {
if (_this.changeCallback != undefined && _this.changeCallback != null) {
if (
point_name === "SSC" ||
point_name === "TRIP" ||
point_name === "ONOFF"
) {
if (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
}
}
} else {
if (_this.changeCallback != undefined && _this.changeCallback != null) {
if (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
}
}
// //依據Facets判斷回傳的內容值為何
// var facets_split = component.getFacets1().$cEncStr.split('|');
// var facets_arr = [];
@ -246,7 +317,11 @@ class subscriptionDevices {
// }
if (pageAct.sysSubTag === "L1") {
if (point_name === "SSC" || point_name === "TRIP" || point_name === "ONOFF") {
if (
point_name === "SSC" ||
point_name === "TRIP" ||
point_name === "ONOFF"
) {
sub.subscribe({
comps: component,
});
@ -263,60 +338,96 @@ class subscriptionDevices {
tolSubList.push(sub);
subFinish = new Date(Date.now());
$("#sub-end").html(subFinish.toISOString());
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
$("#sub-time").html(
(subFinish.getTime() - subStart.getTime()) / 1000 +
"sec"
);
// console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
});
}
}
} else {
if (_this.changeCallback != undefined && _this.changeCallback != null) {
if (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
baja.Ord.make(`local:|foxs:${port}|station:|` + this.getDisplay("slotPath"))
baja.Ord.make(
`local:|foxs:${port}|station:|` + this.getDisplay("slotPath")
)
.get()
.then(function (component) {
component_index++;
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
var target_device_number = component.$parent
.getDisplayName()
.split("_")
.slice(0, 5)
.join("_");
var out_value = component.getOutDisplay();
var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
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_split = component
.getFacets1()
.$cEncStr.split("|");
var facets_arr = [];
facets_split.forEach(function (item, index) {
facets_arr.push(item.split('=s:'));
facets_arr.push(item.split("=s:"));
});
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
var facets = facets_arr.reduce(
(obj, cur) => ({ ...obj, [cur[0]]: cur[1] }),
{}
);
var point_out_split = component.getOutDisplay().split(' ');
var point_out_split = component.getOutDisplay().split(" ");
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
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": component.$parent.getSlotPath().$names.join("_"),
"point_name": point_name ? point_name : null,
"value": key
}
device_number: target_device_number
? target_device_number
: null,
device_number_full: component.$parent
.getSlotPath()
.$names.join("_"),
point_name: point_name ? point_name : null,
value: key,
};
if (pageAct.sysSubTag === "L1") {
if (point_name === "SSC" || point_name === "TRIP" || point_name === "ONOFF") {
if (_this.changeCallback != undefined && _this.changeCallback != null) {
if (
point_name === "SSC" ||
point_name === "TRIP" ||
point_name === "ONOFF"
) {
if (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
}
}
} else {
if (_this.changeCallback != undefined && _this.changeCallback != null) {
if (
_this.changeCallback != undefined &&
_this.changeCallback != null
) {
_this.changeCallback(modify_target_device, true); //第2參數用在平面圖刷新畫面
}
}
// //依據Facets判斷回傳的內容值為何
// var facets_split = component.getFacets1().$cEncStr.split('|');
// var facets_arr = [];
@ -351,7 +462,11 @@ class subscriptionDevices {
// }
if (pageAct.sysSubTag === "L1") {
if (point_name === "SSC" || point_name === "TRIP" || point_name === "ONOFF") {
if (
point_name === "SSC" ||
point_name === "TRIP" ||
point_name === "ONOFF"
) {
sub.subscribe({
comps: component,
});
@ -368,32 +483,37 @@ class subscriptionDevices {
tolSubList.push(sub);
subFinish = new Date(Date.now());
$("#sub-end").html(subFinish.toISOString());
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
$("#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 (_this.changeEndCallback != undefined && _this.changeEndCallback != null) {
if (
_this.changeEndCallback != undefined &&
_this.changeEndCallback != null
) {
_this.changeEndCallback(totalTargetDevice);
}
endPageLoading ? endPageLoading() : ""
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
endPageLoading ? endPageLoading() : "";
console.log(
"表格完成時間",
(tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec"
);
},
limit: -1,
offset: 0
offset: 0,
});
});
})
}
});
};
}
//function subscriptionDevices() {
@ -427,23 +547,22 @@ function subscriptionAlarms() {
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 subscriptionElectricmeter() {
// 用BQL的方式去訂閱
this.setSubscribeElectricmeterByBql = function (tempOrdPath) {
if(tempOrdPath.devicePath?.includes("/")){
if (tempOrdPath.devicePath?.includes("/")) {
let newDevPath = [];
for(var tag of tempOrdPath.devicePath?.split("/")){
if(!isNaN(parseInt(tag.slice(0,1)))){
for (var tag of tempOrdPath.devicePath?.split("/")) {
if (!isNaN(parseInt(tag.slice(0, 1)))) {
tag = "$3" + tag;
}
newDevPath.push(tag);
@ -457,23 +576,22 @@ function subscriptionElectricmeter() {
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() {
// 取得使用者帳號
this.setMyUserAccount = function (callBackFunc = null) {
require(['baja!'], function (baja) {
require(["baja!"], function (baja) {
user_name = baja.getUserName();
callBackFunc ? callBackFunc(user_name) : "";
});
};
}
@ -482,7 +600,6 @@ function MyBaja() {
*/
//function BajaSubscribeDevicesByBql() {
// require(['baja!'], function (baja) {
// console.log("進入Function 準備執行BQL訂閱");
// startPageLoading ? startPageLoading() : ""
@ -560,8 +677,6 @@ function MyBaja() {
// $("#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);
@ -597,7 +712,6 @@ function MyBaja() {
// baja_subscribe_device_callback_func(modify_target_device);
// }
// baja.Ord.make(`local:|foxs:${port}|station:|` + this.getDisplay("slotPath"))
// .get()
// .then(function (component) {
@ -670,21 +784,34 @@ function MyBaja() {
* 使用者透過BQL指定路徑去訂閱Alarm
*/
function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
require(['baja!'], function (baja) {
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";
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": ordPathForAlarm.area_tag + "_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
"sourceState": sourceState ? sourceState : null
}
system:
ordPathForAlarm.area_tag +
"_" +
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) {
if (
baja_subscribe_alarm_callback_func != undefined &&
baja_subscribe_alarm_callback_func != null
) {
baja_subscribe_alarm_callback_func(modify_target_device);
}
}
@ -692,16 +819,19 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
//使用bql語法
// console.log(`local:|foxs:${port}|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
baja.Ord.make(`local:|foxs:${port}|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
.get(
function (table) {
baja.Ord.make(
`local:|foxs:${port}|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${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");
console.log(
"讀取路徑完成-花費時間",
(readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec"
);
table.cursor({
before: function () {
@ -717,17 +847,45 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
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 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": ordPathForAlarm.area_tag + "_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
"sourceState": sourceState ? sourceState : null
}
system:
ordPathForAlarm.area_tag +
"_" +
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) {
if (
baja_subscribe_alarm_callback_func != undefined &&
baja_subscribe_alarm_callback_func != null
) {
baja_subscribe_alarm_callback_func(modify_target_device);
}
@ -741,19 +899,28 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
});
subFinish = new Date(Date.now());
console.log("訂閱完成時間", (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_alarm_callback_func != undefined && baja_subscribe_end_alarm_callback_func != null) {
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");
endPageLoading ? endPageLoading() : "";
console.log(
"表格完成時間",
(tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec"
);
},
limit: -1,
offset: 0
offset: 0,
});
});
});
@ -762,58 +929,84 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
/**
* 使用者透過BQL指定路徑去訂閱 electricmeter
*/
function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
require(['baja!'], function (baja) {
function BajaSubscribeElectricmeterByBql(
ordPathForElectricmeter,
callback = null
) {
require(["baja!"], function (baja) {
//console.log("進入Function 準備執行BQL訂閱");
startPageLoading ? startPageLoading() : ""
startPageLoading ? startPageLoading() : "";
var init_start = new Date(Date.now());
var sub = new baja.Subscriber();
sub.attach('changed', function (prop) {
if (prop.getName() === 'out') {
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 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_split = this.getFacets1().$cEncStr.split("|");
var facets_arr = [];
facets_split.forEach(function (item, index) {
facets_arr.push(item.split('=s:'));
facets_arr.push(item.split("=s:"));
});
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
var facets = facets_arr.reduce(
(obj, cur) => ({ ...obj, [cur[0]]: cur[1] }),
{}
);
var point_out_split = this.getOutDisplay().split(' ');
var point_out_split = this.getOutDisplay().split(" ");
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
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: target_device_number ? target_device_number : null,
//"device_number_full": this.$parent.getSlotPath().$names.join("_"),
"point_name": point_name ? point_name : null,
"value": key
point_name: point_name ? point_name : null,
value: key,
};
if (callback !== null) {
callback([modify_target_device]);
}
if (baja_subscribe_electricmeter_callback_func != undefined && baja_subscribe_electricmeter_callback_func != null) {
baja_subscribe_electricmeter_callback_func(modify_target_device, true); //第2參數用在平面圖刷新畫面
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)
});
},
function (err) {
console.log(err);
}
);
//使用bql語法
// console.log(`local:|foxs:${port}|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`);
baja.Ord.make(`local:|foxs:${port}|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`)
.get(
function (table) {
// console.log(
// `local:|foxs:${port}|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`
// );
baja.Ord.make(
`local:|foxs:${port}|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;
@ -827,7 +1020,6 @@ function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
tableStart = new Date(Date.now());
$("#table-start-timestamp").html(tableStart.toISOString());
render_start = new Date(Date.now());
},
each: function (item, index) {
if (index < 1) {
@ -837,45 +1029,53 @@ function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
$("#sub-number").html(index + 1);
total_component_index = index;
var target_device_number_split = this.getDisplay("slotPath").split('/');
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_split = facets.split(",");
var facets_arr = [];
facets_split.forEach(function (item, index) {
facets_arr.push(item.split('='));
facets_arr.push(item.split("="));
});
facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
facets = facets_arr.reduce(
(obj, cur) => ({ ...obj, [cur[0]]: cur[1] }),
{}
);
var point_out_split = this.getDisplay("out").split(' ');
var point_out_split = this.getDisplay("out").split(" ");
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
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: 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
}
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) {
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:${port}|station:|` + this.getDisplay("slotPath"))
baja.Ord.make(
`local:|foxs:${port}|station:|` + this.getDisplay("slotPath")
)
.get()
.then(function (component) {
component_index++;
@ -888,23 +1088,31 @@ function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
tolSubList.push(sub);
subFinish = new Date(Date.now());
$("#sub-end").html(subFinish.toISOString());
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
$("#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) {
if (callback !== null) {
callback(totalTargetDevice);
}
if (
baja_subscribe_end_electricmeter_callback_func != undefined &&
baja_subscribe_end_electricmeter_callback_func != null
) {
baja_subscribe_end_electricmeter_callback_func(totalTargetDevice);
}
endPageLoading ? endPageLoading() : ""
endPageLoading ? endPageLoading() : "";
//console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
},
limit: -1,
offset: 0
offset: 0,
});
});
});
})
}
// function getAlarmCountByBaja(callback) {