var unityName = "R03Monitor";
var errorTable;
var sites = {};
var display_info = {};
$.ajaxSettings.async = false;
var jqxhr = $.getJSON("/BIM-Monitor/assets/errorTable.json", function (json) {
errorTable = json;
});
var C3Json = $.getJSON("/BIM-Monitor/assets/json/c3-monitorList.json", function (json) {
sites["c3"] = json;
});
var R03Json = $.getJSON("/BIM-Monitor/assets/json/r03-monitorList.json", function (json) {
sites["r03"] = json;
});
$.ajaxSettings.async = true;
var lastNode;
var switchNumber = 0;
passString('SIS');
var wellTBA = [];
var wellNameLists = [];
var isAll = true;
var dataTable;
var sparklinePieData = [];
$(document).ready(function () {
GetCheckAllAJAXValue();
LoadPage();
$("#menu > ul > li.nav-parent.nav-active.nav-expanded > ul > li.nav-parent.nav-active.nav-expanded > ul > li:nth-child(1) > a").css("color", "#0088cc");
$(".monitor").on('click', function () {
$('.monitor').css('color', '#abb4be')
let site = $(this).parent().parent().parent().attr("monitor");
$(this).css("color", "#0088cc");
if (site != 'r03') {
location.href = `../${site}/Index.php`;
} else {
let option = $(this).attr("monitor");
isAll = true;
passString(option);
document.getElementById("monitorName").innerHTML = option + "監測儀器";
LoadPage();
}
});
})
//Pass monitor equipment's name to index.php select form
function passString(option) {
window.localStorage.setItem("option", option);
}
//unity選擇到一個監測儀器後,在selectWell.cs會給一個監測儀器名稱(例:OW-1)給網頁
function GetWellName(wellName) {
showWell(wellName, true);
}
//網頁用SendMessage()傳Initialization()給unity時,unity會回傳一個所有監測儀器名稱(例:OW-1,OW-2 ...)給網頁
function GetWellNameList(wellNameList) {
window.localStorage.setItem("wellNameList", wellNameList);
}
//display well name and send its name to showWell function
function getEquipmentName(equipment) {
$.ajaxSettings.async = false;
$.ajax({
url: '/BIM-Monitor/script/php/getEquipmentName.php',
type: "GET",
data: {
equipment: equipment,
}
}).success(function (data) {
GetWellNameList(data);
}).error(function (error) {
console.log("錯誤");
});
$.ajaxSettings.async = true;
}
//unity載入後會先跑LoadPage();
function LoadPage() {
var option = window.localStorage.getItem("option");
getEquipmentName(option);
$('#' + window.localStorage.getItem("option")).removeClass('hidden').removeAttr('disabled');
document.getElementById("monitorSelect2").innerHTML = "選擇觀測儀器";
var wellTBALocal = getCheckValue();
var dataValue = option;
for (i = 0; i < wellTBALocal.length; i++) {
dataValue = dataValue.concat(',', wellTBALocal[i]);
}
if (isLoad) {
//dataValue = 監測儀器代號,超出警戒值的儀器名稱
//AddDataTable會存option:監測儀器代號(string)
// abnormal:超出警戒值的儀器名稱(array)
// gameObjects:所有監測儀器名稱(array)
// optionGameObjects:包含監測儀器代號的所有監測儀器名稱(array)
// 到unity的DataTable.cs裡面
myGameInstance.SendMessage("Monitor", "AddDataTable", dataValue);
//原本的模型牆被挖空,SID、RS、VG都有建各自的牆,若選擇一種監測儀器則另外兩種隱藏掉
//unity會跑addData(DataTable.option);
//功能是依照DataTable的option將所有optionGameObjects改成normal的顏色
//unity會跑Search(DataTable.option, DataTable.abnormal);
//功能是將所有abnormal的儀器改成abnormal的顏色
myGameInstance.SendMessage("Monitor", "Initialization");
}
var wellNameList = window.localStorage.getItem("wellNameList");
var wellNameListsLocal = wellNameList.split(",");
var order = new Array(wellNameListsLocal.length);
for (i = 0; i < wellNameListsLocal.length; i++) {
order[i] = wellNameListsLocal[i].match(/\d+/g);
}
for (i = 0; i < order.length; i++) {
for (j = 0; j < order.length; j++) {
if (order[j] > order[j + 1]) {
let temp = order[j];
order[j] = order[j + 1];
order[j + 1] = temp;
let temp2 = wellNameListsLocal[j];
wellNameListsLocal[j] = wellNameListsLocal[j + 1];
wellNameListsLocal[j + 1] = temp2;
}
}
}
wellNameLists = wellNameListsLocal;
wellTBA = wellTBALocal;
SetList();
ResetCamera();
showWell(wellNameLists[0], false);
}
//get well info from sql server
function showWell(str, changeCamera) {
var strLocal = "";
strLocal = str;
$("#monitorSelect2").innerHTML = strLocal;
getTable(str);
getChart(str);
if (isLoad) {
//把現在選擇的儀器名稱(例:OW-1)傳到unity,unity找模型名稱相同的改變模型顏色以及鏡頭置中模型
myGameInstance.SendMessage("MainCamera", "GetDataFromWebGL", str);
}
if (!changeCamera) {
ResetCamera();
}
}
function getTable(monitor) {
$.ajax({
url: '/BIM-Monitor/script/php/get_monitor_table.php',
type: "GET",
dataType: "JSON",
data: {
monitor: monitor
}
}).success(function (result) {
let table = result.table;
let unit = result.unit;
let haveDepth = result.haveDepth;
let haveDirection = result.haveDirection;
var header = "";
if (haveDepth) {
for (i = 0; i < table[0].length - 1; i++) {
head = i * 0.5;
if (head == 0)
head = "TOP";
header += `
${head} | `;
}
} else if (haveDirection) {
header = `${monitor}(1~3向) | ${monitor}(2~4向) | `;
} else {
header = `測量值 單位: | `;
}
$("#tabData").empty();
$("#tabData").append(``);
dataTable = $('#dataTable').DataTable({
bProcessing: true,
responsive: true,
"searching": true,
"pageLength": 10,
"language": {
"processing": "處理中...",
"loadingRecords": "載入中...",
"lengthMenu": "顯示 _MENU_ 項結果",
"zeroRecords": "沒有符合的結果或是沒有資料",
"info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
"infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
"infoFiltered": "(從 _MAX_ 項結果中過濾)",
"infoPostFix": "",
"search": "",
"paginate": {
"first": '',
"previous": '',
"next": '',
"last": ''
},
"aria": {
"sortAscending": ": 升冪排列",
"sortDescending": ": 降冪排列"
}
},
});
if (dataTable != null) {
dataTable.clear();
dataTable.draw();
}
if (monitor == '') {
monitor = '查無監測儀器或';
}
$("#tableName").text(monitor + "資料表");
$("#unit").text(`測量值(${unit})`);
table.forEach(function (data) {
dataTable.row.add(data)
dataTable.draw();
});
}).error(function (error) {
console.log(error);
}).complete(function (e) {
});
}
//建立pie chart
function getCheckValue() {
var dataArray = [];
var option = window.localStorage.getItem("option");
$.ajax({
url: "/BIM-Monitor/script/php/get_abnormal.php",
data: {
type: option
},
async: false,
contentType: "application/json",
dataType: "json"
})
.success(function (response) {
dataArray = response['wellTBA'];
var normal_count = response['normal_count'];
var abnormal_count = response['abnormal_count'];
sparklinePieData = [normal_count, abnormal_count];
var all = normal_count + abnormal_count;
var percent = abnormal_count / all;
var url = "/BIM-Monitor/assets/javascripts/ui-elements/pie.charts.js";
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
document.getElementById("percent").innerHTML = Math.round(percent * 100) + "%";
})
.error(function () {
console.log("錯誤統計未正常獲取");
})
.complete(function () {});
return dataArray;
}
//建立左側監測儀器(異常數量/總數量)
function GetCheckAllAJAXValue() {
for (i = 0; i < sites["r03"].length; i++) {
var option = sites["r03"][i].code;
$.ajax({
url: "/BIM-Monitor/script/php/get_abnormal.php",
data: {
type: option
},
async: false,
contentType: "application/json",
dataType: "json"
})
.success(function (response) {
var normal_count = response['normal_count'];
var abnormal_count = response['abnormal_count'];
var all_count = 0 + normal_count + abnormal_count;
$(`.${option}`).html("(" + abnormal_count + "/" + all_count + ")");
})
.error(function () {
console.log("錯誤統計未正常獲取");
})
.complete(function () {});
}
}
function CheckError() {
var checkBox = document.getElementById("errorCheck");
if (checkBox.checked == true) {
isAll = false;
} else {
isAll = true;
}
SetList();
}
//Display chart
function getChart(monitor) {
console.log("monitor: " + monitor);
type = monitor.split("-")[0];
$.ajax({
url: "/BIM-Monitor/script/php/get_monitor_chart.php",
type: "GET",
async: false,
contentType: "application/json",
dataType: "json",
data: {
monitor: monitor
}
}).done(function (response) {
charts = response.chart;
label = response.label;
unit = response.unit;
displayChart(monitor, label, unit, charts);
}).error(function (error) {
console.log(error);
});
}
function displayChart(monitor, label, unit, charts) {
var ctx = document.getElementById("myChart").getContext("2d");
var date = [];
var data = [];
var warning1 = [];
var action1 = [];
var warning2 = [];
var action2 = [];
var type = monitor.split("-")[0];
var SIS_data = {};
if (window.chart != undefined) {
window.chart.destroy();
}
if (type == "SIS" || type == "SID") {
SIS_data["depth"] = [];
SIS_data["warning1"] = [];
SIS_data["warning2"] = [];
SIS_data["action1"] = [];
SIS_data["action2"] = [];
SIS_data["data"] = {};
charts.forEach(element => {
var sis_date = element["Date"];
var sis_warning = element["WarningValue"].split("±")[1];
var sis_action = element["ActionValue"].split("±")[1];
delete element["Date"];
delete element["WarningValue"];
delete element["ActionValue"];
var sis_data_length = Object.keys(element).length;
SIS_data["data"][sis_date] = [];
for (i = 1; i <= sis_data_length; i++) {
SIS_data["data"][sis_date].push(element["" + i * 0.5]);
if (SIS_data["depth"].length < sis_data_length) {
SIS_data["depth"].push(i * 0.5);
SIS_data["warning1"].push(+sis_warning);
SIS_data["warning2"].push(-sis_warning);
SIS_data["action1"].push(+sis_action);
SIS_data["action2"].push(-sis_action);
}
}
});
var datasets = [{
label: "警戒值+",
data: SIS_data["warning1"],
borderColor: "#FF0000",
borderDash: [5, 5],
pointRadius: 0
}, {
label: "警戒值-",
data: SIS_data["warning2"],
borderColor: "#FF0000",
borderDash: [5, 5],
pointRadius: 0
}, {
label: "行動值+",
data: SIS_data["action1"],
borderColor: "#FF0000",
pointRadius: 0
}, {
label: "行動值-",
data: SIS_data["action2"],
borderColor: "#FF0000",
pointRadius: 0
}];
Object.keys(SIS_data["data"]).forEach(element => {
datasets.push({
label: element,
data: SIS_data["data"][element],
borderColor: randomColorBlue(),
pointRadius: 0
});
});
window.chart = new Chart(ctx, {
//Line chart
type: 'line',
data: {
labels: SIS_data["depth"],
datasets: datasets
},
options: {
spanGaps: true,
maintainAspectRatio: false,
responsive: true,
indexAxis: 'y',
scales: {
y: {
title: {
display: true,
text: "觀測深度(m)"
}
},
x: {
title: {
display: true,
text: label + '(' + unit + ')'
}
}
}
}
});
} else {
charts.forEach(function (chart) {
Object.keys(chart).forEach(function (key) {
if (key == "Date") {
date.push(chart[key]);
} else if (key.includes("WarningValue")) {
let value = 0;
if (chart[key].includes("±")) {
value = chart[key].split("±")[1];
warning1.push(+value);
warning2.push(-value);
}
if (key.includes("High")) {
warning1.push(chart[key]);
} else if (key.includes("Low")) {
warning2.push(chart[key]);
}
} else if (key.includes("ActionValue")) {
let value = 0;
if (chart[key].includes("±")) {
value = chart[key].split("±")[1];
action1.push(+value);
action2.push(-value);
}
if (key.includes("High")) {
action1.push(chart[key]);
} else if (key.includes("Low")) {
action2.push(chart[key]);
}
} else {
data.push(chart[key]);
}
});
})
var datasets = [{
label: "警戒值+",
data: warning1,
borderColor: "#FF0000",
borderDash: [5, 5],
pointRadius: 0
}, {
label: "警戒值-",
data: warning2,
borderColor: "#FF0000",
borderDash: [5, 5],
pointRadius: 0
}, {
label: "行動值+",
data: action1,
borderColor: "#FF0000",
pointRadius: 0
}, {
label: "行動值-",
data: action2,
borderColor: "#FF0000",
pointRadius: 0
}];
if (type == "TI") {
var data1 = [];
var data2 = [];
for (i = 0; i < data.length; i += 2) {
data1.push(data[i]);
data2.push(data[i + 1]);
}
datasets.push({
label: monitor + "(1-3)",
data: data1,
borderColor: "#3e95cd"
});
datasets.push({
label: monitor + "(2-4)",
data: data2,
borderColor: "#000000"
});
} else {
datasets.push({
label: monitor,
data: data,
borderColor: "#3e95cd"
});
}
window.chart = new Chart(ctx, {
//Line chart
type: 'line',
data: {
//X-axis displays the date
labels: date,
datasets: datasets
},
options: {
spanGaps: true,
maintainAspectRatio: false,
responsive: true,
scales: {
x: {
title: {
display: true,
text: "日期"
}
},
y: {
title: {
display: true,
text: label + '(' + unit + ')'
}
}
}
}
});
}
}
function ResetCamera() {
if (isLoad) {
myGameInstance.SendMessage("MainCamera", "ResetCamera");
}
}
//選擇觀測儀器
function SetList() {
var wellNameListsLocal = "";
var isError = false;
var monitorSelect = document.getElementById("monitorSelect");
var monitorButton = document.getElementById("monitorButton");
while (monitorSelect.hasChildNodes()) {
monitorSelect.removeChild(monitorSelect.firstChild);
}
while (monitorButton.hasChildNodes()) {
monitorButton.removeChild(monitorButton.firstChild);
}
monitorButton.innerHTML = "綠色為正常|紅色為異常
";
GetCheckAllAJAXValue();
for (i = 0; i < wellNameLists.length; i++) {
wellNameListsLocal = wellNameLists[i];
var option = document.createElement("li");
var createA = document.createElement("a");
var createAText = document.createTextNode(wellNameListsLocal);
var createButton = document.createElement("button");
var createButtonText = document.createTextNode(wellNameListsLocal);
createButton.setAttribute('class', "mb-xs mt-xs mr-xs modal-with-zoom-anim btn btn-success modal-dismiss");
for (j = 0; j < wellTBA.length; j++) {
if (wellNameLists[i] == (wellTBA[j])) {
createA.style = "color:red;";
createButton.setAttribute('class', "mb-xs mt-xs mr-xs btn btn-danger modal-dismiss");
isError = true;
}
}
createA.setAttribute('onclick', "showWell('" + wellNameLists[i] + "',true)");
createButton.setAttribute('onclick', "showWell('" + wellNameLists[i] + "',true)");
createButton.setAttribute('type', "button");
if (isAll || (!isAll && isError)) {
createA.appendChild(createAText);
createButton.appendChild(createButtonText);
option.appendChild(createA);
monitorSelect.appendChild(option);
monitorButton.appendChild(createButton);
}
isError = false;
}
}
function UpdateGPS(GPS) {
if (isLoad) {
myGameInstance.SendMessage("PlayerArmature", "UpdateGPS", GPS);
}
}
function randomColorBlue() {
var mid = Math.floor(Math.random() * 255);
return "#30" + mid.toString(16) + "ff";
}