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(` ${header}
測量日期
`); 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"; }