Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
		
						commit
						283f53f22a
					
				@ -410,7 +410,7 @@
 | 
				
			|||||||
										cache: false,
 | 
															cache: false,
 | 
				
			||||||
										contentType: false,
 | 
															contentType: false,
 | 
				
			||||||
										processData: false,
 | 
															processData: false,
 | 
				
			||||||
					beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', "Bearer " + localStorage.getItem("JWT-Authorization")) },
 | 
															beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', "Bearer " + cookies.get("JWT-Authorization")) },
 | 
				
			||||||
										success: function (res) {
 | 
															success: function (res) {
 | 
				
			||||||
												if (!res || res.code != "0000" || !res.data) {
 | 
																	if (!res || res.code != "0000" || !res.data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -618,7 +618,6 @@
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		function callBackFromAllDeviceAlert(res) {
 | 
							function callBackFromAllDeviceAlert(res) {
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
				refTable(res.data);
 | 
									refTable(res.data);
 | 
				
			||||||
				if (historyTable != null) {
 | 
									if (historyTable != null) {
 | 
				
			||||||
						let t = $('#alertTable').dataTable();
 | 
											let t = $('#alertTable').dataTable();
 | 
				
			||||||
@ -658,6 +657,7 @@
 | 
				
			|||||||
						{ "targets": [5], "width": "5%", "sortable": true },
 | 
											{ "targets": [5], "width": "5%", "sortable": true },
 | 
				
			||||||
						{ "targets": [6], "width": "5%", "sortable": true },
 | 
											{ "targets": [6], "width": "5%", "sortable": true },
 | 
				
			||||||
						{ "targets": [7], "width": "5%", "sortable": true },
 | 
											{ "targets": [7], "width": "5%", "sortable": true },
 | 
				
			||||||
 | 
											{ "targets": [8], "width": "5%", "sortable": true },
 | 
				
			||||||
				];
 | 
									];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				let columns = [
 | 
									let columns = [
 | 
				
			||||||
@ -669,13 +669,6 @@
 | 
				
			|||||||
								"title": "異常ID",
 | 
													"title": "異常ID",
 | 
				
			||||||
								"data": "uuid",
 | 
													"data": "uuid",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				"title": "發生時間",
 | 
					 | 
				
			||||||
				"data": "timestamp",
 | 
					 | 
				
			||||||
				"render": function (data) {
 | 
					 | 
				
			||||||
      return new Date(data).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }), displayDate(data, "datetime");
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
								"title": "異常類別",
 | 
													"title": "異常類別",
 | 
				
			||||||
								"data": "alarmClass",
 | 
													"data": "alarmClass",
 | 
				
			||||||
@ -684,8 +677,23 @@
 | 
				
			|||||||
								}
 | 
													}
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
				"title": "設備編號",
 | 
													"title": "設備名稱",
 | 
				
			||||||
								"data": "sourceName_zh",
 | 
													"data": "sourceName_zh",
 | 
				
			||||||
 | 
													render: (data) => {
 | 
				
			||||||
 | 
															console.log(data);
 | 
				
			||||||
 | 
															return allDevices.find(d => d.device_number === data)?.full_name || ""
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
													"title": "設備編號",
 | 
				
			||||||
 | 
													"data": "sourceTmp",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
													"title": "發生時間",
 | 
				
			||||||
 | 
													"data": "timestamp",
 | 
				
			||||||
 | 
													"render": function (data) {
 | 
				
			||||||
 | 
															return new Date(data).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }), displayDate(data, "datetime");
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
								"title": "異常原因",
 | 
													"title": "異常原因",
 | 
				
			||||||
@ -732,7 +740,7 @@
 | 
				
			|||||||
		function selDevice() {
 | 
							function selDevice() {
 | 
				
			||||||
				let url = baseApiUrl + "/operation/DevList";
 | 
									let url = baseApiUrl + "/operation/DevList";
 | 
				
			||||||
				let lsst = [];
 | 
									let lsst = [];
 | 
				
			||||||
		$('a[data-type=alr_sub]').map(function (i, v) { lsst.push($(v).prop('id')); });
 | 
									$('input[data-type=sub]').map(function (i, v) { lsst.push($(v).prop('id')); });
 | 
				
			||||||
				sendData = {
 | 
									sendData = {
 | 
				
			||||||
						device_area_tag: pageAct.AreaTag,
 | 
											device_area_tag: pageAct.AreaTag,
 | 
				
			||||||
						device_building_tag: pageAct.buiTag,
 | 
											device_building_tag: pageAct.buiTag,
 | 
				
			||||||
@ -779,7 +787,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		function selOpeFir() {
 | 
							function selOpeFir() {
 | 
				
			||||||
				let url = baseApiUrl + "/operation/OpeFirSel";
 | 
									let url = baseApiUrl + "/operation/OpeFirSel";
 | 
				
			||||||
		objSendData.Data = { sub_system_tag: $('a[data-type=alr_sub].btn-info').map(function (i, v) { return $(v).prop('id'); }).toArray() };
 | 
									objSendData.Data = { sub_system_tag: $('input[data-type=sub]').map(function (i, v) { return $(v).prop('id'); }).toArray() };
 | 
				
			||||||
 | 
									console.log(objSendData.Data)
 | 
				
			||||||
				ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
									ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
				
			||||||
						if (!res || res.code != "0000" || !res.data) {
 | 
											if (!res || res.code != "0000" || !res.data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -809,7 +818,7 @@
 | 
				
			|||||||
						filesizeBase: 1024,
 | 
											filesizeBase: 1024,
 | 
				
			||||||
						maxFiles: 50,
 | 
											maxFiles: 50,
 | 
				
			||||||
						acceptedFiles: ".pdf, .docx, .doc, .xls, .xlsm, .xlsx, .ppt, .pptx, .gif, .png, .jpg, .jpeg",
 | 
											acceptedFiles: ".pdf, .docx, .doc, .xls, .xlsm, .xlsx, .ppt, .pptx, .gif, .png, .jpg, .jpeg",
 | 
				
			||||||
			headers: { "Authorization": 'Bearer ' + localStorage.getItem("JWT-Authorization") },
 | 
											headers: { "Authorization": 'Bearer ' + cookies.get("JWT-Authorization") },
 | 
				
			||||||
						accept: function (file, done) {
 | 
											accept: function (file, done) {
 | 
				
			||||||
								let fileHelper = new YourTeam.Utility.File();
 | 
													let fileHelper = new YourTeam.Utility.File();
 | 
				
			||||||
								tmpGuidArr = [];
 | 
													tmpGuidArr = [];
 | 
				
			||||||
 | 
				
			|||||||
@ -208,11 +208,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</main>
 | 
					</main>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
 | 
					 | 
				
			||||||
  var tarElePath = '';
 | 
					  var tarElePath = '';
 | 
				
			||||||
  var sysSubList = [];
 | 
					  var sysSubList = [];
 | 
				
			||||||
  var viewer3DNodeIds = [];
 | 
					  var viewer3DNodeIds = [];
 | 
				
			||||||
@ -227,29 +223,28 @@
 | 
				
			|||||||
  var chartDataCnt = { alarmCnt: 0, recCnt: 0, chkedErrCnt: 0, unChkedErrCnt: 0 };
 | 
					  var chartDataCnt = { alarmCnt: 0, recCnt: 0, chkedErrCnt: 0, unChkedErrCnt: 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var sysIconList = [
 | 
					  var sysIconList = [
 | 
				
			||||||
    { mainSys: "EE", subSys: "E1", iconClass: "SVG/fuse-box_white.svg" },
 | 
					    { mainSys: "EE", subSys: "E1", iconClass: "./gif/E1_white.png" },
 | 
				
			||||||
    { mainSys: "EE", subSys: "E2", iconClass: "SVG/electricity_white.svg" },
 | 
					    { mainSys: "EE", subSys: "E2", iconClass: "./gif/E2_white.png" },
 | 
				
			||||||
    { mainSys: "EE", subSys: "E3", iconClass: "SVG/generator_white.svg" },
 | 
					    { mainSys: "EE", subSys: "E3", iconClass: "./gif/E3_white.png" },
 | 
				
			||||||
    { mainSys: "EE", subSys: "E4", iconClass: "SVG/electric-meter_white.svg" }, // 電表
 | 
					    { mainSys: "EE", subSys: "E4", iconClass: "./gif/E4-1_white.png" }, // 電表
 | 
				
			||||||
    { mainSys: "LT", subSys: "L1", iconClass: "SVG/creative_white.svg" },
 | 
					    { mainSys: "LT", subSys: "L1", iconClass: "./gif/L1_white.png" },
 | 
				
			||||||
    { mainSys: "ME", subSys: "M5", iconClass: "SVG/air-flow_white.svg" }, // 送排風
 | 
					    { mainSys: "LT", subSys: "L2", iconClass: "./gif/L2_white.png" },// 景觀照明 0131目前沒有
 | 
				
			||||||
    { mainSys: "ME", subSys: "M10", iconClass: "SVG/ice-crystal_white.svg" },
 | 
					    { mainSys: "ME", subSys: "M1", iconClass: "./gif/M1_white.png" },// 儲冰 0131目前沒有
 | 
				
			||||||
    { mainSys: "ME", subSys: "M12", iconClass: "SVG/leaf_white.svg" },
 | 
					    { mainSys: "ME", subSys: "M5", iconClass: "./gif/M5-2_white.png" }, // 送排風
 | 
				
			||||||
    { mainSys: "ELEV", subSys: "EL", iconClass: "SVG/lift-sign_white.svg" },
 | 
					    { mainSys: "ME", subSys: "M8", iconClass: "./gif/M8_white.png" },// 排油煙0131目前沒有
 | 
				
			||||||
    { mainSys: "FE", subSys: "F1", iconClass: "SVG/fire-hydrant_white.svg" },
 | 
					    { mainSys: "ME", subSys: "M10", iconClass: "./gif/M10_white.png" },
 | 
				
			||||||
    { mainSys: "FE", subSys: "F2", iconClass: "SVG/lamp_white.svg" },// 排煙 0131目前沒有
 | 
					    { mainSys: "ME", subSys: "M12", iconClass: "./gif/M12_white.png" },
 | 
				
			||||||
    { mainSys: "WP", subSys: "W1", iconClass: "SVG/lamp_white.svg" },// 電子水表0131目前沒有
 | 
					    { mainSys: "ELEV", subSys: "EL", iconClass: "./gif/EL_white.png" },
 | 
				
			||||||
    { mainSys: "WP", subSys: "W2", iconClass: "SVG/gear_white.svg" },
 | 
					    { mainSys: "FE", subSys: "F1", iconClass: "./gif/F1_white.png" },
 | 
				
			||||||
    { mainSys: "WP", subSys: "P1", iconClass: "SVG/water-pollution_white.svg" },
 | 
					    { mainSys: "FE", subSys: "F2", iconClass: "./gif/lamp_white.png" }, // 排煙 0131目前沒有
 | 
				
			||||||
    { mainSys: "S", subSys: "C", iconClass: "SVG/security-camera_white.svg" }, // CCTV
 | 
					    { mainSys: "WP", subSys: "W1", iconClass: "./gif/W1_white.png" },// 電子水表0131目前沒有
 | 
				
			||||||
    { mainSys: "S", subSys: "P", iconClass: "SVG/sos_white.svg" }, // 緊急求救
 | 
					    { mainSys: "WP", subSys: "W2", iconClass: "./gif/W2_white.png" },
 | 
				
			||||||
    { mainSys: "S", subSys: "R", iconClass: "SVG/key-card_white.svg" }, // 門禁
 | 
					    { mainSys: "WP", subSys: "P1", iconClass: "./gif/P1_white.png" },
 | 
				
			||||||
    { mainSys: "P", subSys: "PSC", iconClass: "SVG/parking_white.svg" }, // 停管
 | 
					    { mainSys: "S", subSys: "C", iconClass: "./gif/C_white.png" }, // CCTV
 | 
				
			||||||
    { mainSys: "LT", subSys: "L2", iconClass: "SVG/lamp_white.svg" },// 景觀照明 0131目前沒有
 | 
					    { mainSys: "S", subSys: "P", iconClass: "./gif/P_white.png" }, // 緊急求救
 | 
				
			||||||
    { mainSys: "ME", subSys: "M1", iconClass: "SVG/lamp_white.svg" },// 儲冰 0131目前沒有
 | 
					    { mainSys: "S", subSys: "R", iconClass: "./gif/R_white.png" }, // 門禁
 | 
				
			||||||
    { mainSys: "ME", subSys: "M8", iconClass: "SVG/lamp_white.svg" },// 排油煙0131目前沒有
 | 
					    { mainSys: "P", subSys: "PSC", iconClass: "./gif/PSC_white.png" }, // 停管
 | 
				
			||||||
    { mainSys: "W3", subSys: "W1", iconClass: "SVG/lamp_white.svg" },// 0131目前沒有
 | 
					    { mainSys: "W3", subSys: "W1", iconClass: "./gif/W3_white.png" },// 0131目前沒有
 | 
				
			||||||
 | 
					 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var tempSysSubText = [
 | 
					  var tempSysSubText = [
 | 
				
			||||||
@ -265,10 +260,10 @@
 | 
				
			|||||||
    { text: "緊急發電機", mainSys: "EE", subSys: "E3", },//10
 | 
					    { text: "緊急發電機", mainSys: "EE", subSys: "E3", },//10
 | 
				
			||||||
    { text: "消防設備", mainSys: "FE", subSys: "F1", }, //11
 | 
					    { text: "消防設備", mainSys: "FE", subSys: "F1", }, //11
 | 
				
			||||||
    { text: "CCTV系統", mainSys: "S", subSys: "C", }, //12
 | 
					    { text: "CCTV系統", mainSys: "S", subSys: "C", }, //12
 | 
				
			||||||
    { text: "緊急求救系統", mainSys: "S", subSys: "P", }, //13
 | 
					    { text: "門禁系統", mainSys: "S", subSys: "R", }, //13
 | 
				
			||||||
    { text: "門禁系統", mainSys: "S", subSys: "R", }, //14
 | 
					    { text: "停管系統", mainSys: "P", subSys: "PSC", }, //14
 | 
				
			||||||
    { text: "停管系統", mainSys: "P", subSys: "PSC", }, //15
 | 
					    { text: "緊急求救系統", mainSys: "S", subSys: "P", }, //15
 | 
				
			||||||
    { text: "送排風系統", mainSys: "ME", subSys: "M5", }, // 2 //16
 | 
					    { text: "送排風系統", mainSys: "ME", subSys: "M5", }, //16
 | 
				
			||||||
    //{ text: "景觀照明系統", mainSys: "LT", subSys: "L2", },
 | 
					    //{ text: "景觀照明系統", mainSys: "LT", subSys: "L2", },
 | 
				
			||||||
    //{ text: "儲冰系統", mainSys: "ME", subSys: "M1", },
 | 
					    //{ text: "儲冰系統", mainSys: "ME", subSys: "M1", },
 | 
				
			||||||
    // { text: "排油煙設備", mainSys: "ME", subSys: "M8", },
 | 
					    // { text: "排油煙設備", mainSys: "ME", subSys: "M8", },
 | 
				
			||||||
@ -280,10 +275,10 @@
 | 
				
			|||||||
  $(document).ready(function () {
 | 
					  $(document).ready(function () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $(loadEle).Loading("start");
 | 
					    $(loadEle).Loading("start");
 | 
				
			||||||
 | 
					    $(loadEle).Loading("close");
 | 
				
			||||||
    show3DModel();
 | 
					    show3DModel();
 | 
				
			||||||
    getSubList();
 | 
					    getSubList();
 | 
				
			||||||
    getFirstEletric();
 | 
					    getFirstEletric();
 | 
				
			||||||
 | 
					 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function demoSubList() {
 | 
					  function demoSubList() {
 | 
				
			||||||
@ -294,7 +289,9 @@
 | 
				
			|||||||
      if (isExiNames.indexOf(obj.text) == -1 && $("#sysSubBtnList .dev-group").length < 16) {
 | 
					      if (isExiNames.indexOf(obj.text) == -1 && $("#sysSubBtnList .dev-group").length < 16) {
 | 
				
			||||||
        let iconObj = sysIconList.filter(x => x.mainSys == obj.mainSys && x.subSys == obj.subSys)[0];
 | 
					        let iconObj = sysIconList.filter(x => x.mainSys == obj.mainSys && x.subSys == obj.subSys)[0];
 | 
				
			||||||
        strHtml = `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group">
 | 
					        strHtml = `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group">
 | 
				
			||||||
                            <button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4"><img src="${iconObj.iconClass}" class="w-100"></img></button>
 | 
					                            <button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4 d-flex jusity-content-center">
 | 
				
			||||||
 | 
					                                <img src="${iconObj.iconClass}" class="w-100"></img>
 | 
				
			||||||
 | 
					                                </button>
 | 
				
			||||||
                            <button id="sysSubCardBtn${obj.subSys}" type="button" class="btn btn-secondary" data-id="${obj.subSys}">${obj.text}</button>
 | 
					                            <button id="sysSubCardBtn${obj.subSys}" type="button" class="btn btn-secondary" data-id="${obj.subSys}">${obj.text}</button>
 | 
				
			||||||
                        </div>`;
 | 
					                        </div>`;
 | 
				
			||||||
        $("#sysSubBtnList").append(strHtml);
 | 
					        $("#sysSubBtnList").append(strHtml);
 | 
				
			||||||
@ -323,7 +320,9 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            let iconClass = sysIconList.filter(x => x.mainSys == mainSysObj.main_system_tag && x.subSys == subSysObj.sub_system_tag)[0]?.iconClass;
 | 
					            let iconClass = sysIconList.filter(x => x.mainSys == mainSysObj.main_system_tag && x.subSys == subSysObj.sub_system_tag)[0]?.iconClass;
 | 
				
			||||||
            strHtml += `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
 | 
					            strHtml += `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
 | 
				
			||||||
                            <button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4"><img src="${iconClass}" class="w-100"></img></button>
 | 
					                            <button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4">
 | 
				
			||||||
 | 
					                                <img src="${iconClass}" class="w-100 "></img>
 | 
				
			||||||
 | 
					                                </button>
 | 
				
			||||||
                            <button id="sysSubCardBtn${subSysObj.sub_system_tag}" type="button" class="btn btn-secondary" data-id="${subSysObj.sub_system_tag}">${subSysObj.full_name}</button>
 | 
					                            <button id="sysSubCardBtn${subSysObj.sub_system_tag}" type="button" class="btn btn-secondary" data-id="${subSysObj.sub_system_tag}">${subSysObj.full_name}</button>
 | 
				
			||||||
                        </div>`;
 | 
					                        </div>`;
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
@ -536,7 +535,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // 圖表 - 這週與上週用電量 (長條圖)
 | 
					  // 圖表 - 這週與上週用電量 (長條圖)
 | 
				
			||||||
  function chartEveWeeksElec(curWeekData, prevWeekData) {
 | 
					  function chartEveWeeksElec(curWeekData, prevWeekData) {
 | 
				
			||||||
 | 
					    // console.log(curWeekData.map(x => x.sum),prevWeekData.map(x => x.sum))
 | 
				
			||||||
    let eveWeekElecChartCanvas = $('#eveWeekElecChart').get(0).getContext('2d');
 | 
					    let eveWeekElecChartCanvas = $('#eveWeekElecChart').get(0).getContext('2d');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let eveWeekElecChartData = {
 | 
					    let eveWeekElecChartData = {
 | 
				
			||||||
      labels: curWeekData.map(x => dayToChiDay(strToDate(x.timestamp.$cEncStr, "day"))),
 | 
					      labels: curWeekData.map(x => dayToChiDay(strToDate(x.timestamp.$cEncStr, "day"))),
 | 
				
			||||||
      datasets: [
 | 
					      datasets: [
 | 
				
			||||||
@ -566,7 +567,7 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    console.log(eveWeekElecChartData)
 | 
					    // console.log(eveWeekElecChartData)
 | 
				
			||||||
    let eveWeekElecChartOptions = {
 | 
					    let eveWeekElecChartOptions = {
 | 
				
			||||||
      maintainAspectRatio: false,
 | 
					      maintainAspectRatio: false,
 | 
				
			||||||
      responsive: true,
 | 
					      responsive: true,
 | 
				
			||||||
@ -592,17 +593,20 @@
 | 
				
			|||||||
            return isTodayOrYes + "用電量 : " + tooltipItem.value + " kWH";
 | 
					            return isTodayOrYes + "用電量 : " + tooltipItem.value + " kWH";
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          title: function (tooltipItem) {
 | 
					          title: function (tooltipItem) {
 | 
				
			||||||
 | 
					            console.log(tooltipItem)
 | 
				
			||||||
            let result = tooltipItem[0]?.xLabel.toString();
 | 
					            let result = tooltipItem[0]?.xLabel.toString();
 | 
				
			||||||
            return result;
 | 
					            return result;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    // console.log(eveWeekElecChartOptions)
 | 
				
			||||||
    if (eveWeekElecChart == null) {
 | 
					    if (eveWeekElecChart == null) {
 | 
				
			||||||
      eveWeekElecChart = new Chart(eveWeekElecChartCanvas, {
 | 
					      eveWeekElecChart = new Chart(eveWeekElecChartCanvas, {
 | 
				
			||||||
        data: eveWeekElecChartData,
 | 
					        data: eveWeekElecChartData,
 | 
				
			||||||
        options: eveWeekElecChartOptions
 | 
					        options: eveWeekElecChartOptions
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					      // console.log(eveWeekElecChart,eveWeekElecChartData, eveWeekElecChartOptions)
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      eveWeekElecChart.data.datasets.forEach((dataset) => {
 | 
					      eveWeekElecChart.data.datasets.forEach((dataset) => {
 | 
				
			||||||
        if (dataset.order == 1) {
 | 
					        if (dataset.order == 1) {
 | 
				
			||||||
@ -792,21 +796,28 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 從 baja 訂閱 左下角各系統小類異常狀態
 | 
					  // 從 baja 訂閱 左下角各系統小類異常狀態
 | 
				
			||||||
  function getAlarmSub(data) {
 | 
					  function getAlarmSub(data) {
 | 
				
			||||||
    $.each(data.data, (idx, alaObj) => {
 | 
					    $.each(data.data, (idx, alaObj) => {
 | 
				
			||||||
      if (alaObj.alarmClass.indexOf("_") != -1) {
 | 
					      if (alaObj.alarmClass.indexOf("_") != -1) {
 | 
				
			||||||
        let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/");
 | 
					        let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/");
 | 
				
			||||||
        $(`.btn-group.dev-group[data-id*='${mainSubSys}'] i`).addClass("blink");
 | 
					        const img = $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src.split('.')
 | 
				
			||||||
 | 
					        const { length } = img
 | 
				
			||||||
 | 
					        img[length - 1] = 'gif'
 | 
				
			||||||
 | 
					        $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src = img.join('.')
 | 
				
			||||||
 | 
					        // $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`).addClass("blink");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    $(`.dev-group i.fa-lightbulb-on.blink`).each((idx, ele) => {
 | 
					    $(`.dev-group img.blink`).each((idx, ele) => {
 | 
				
			||||||
      let devPath = $(ele).parents(".dev-group").data("id");
 | 
					      let devPath = $(ele).parents(".dev-group").data("id");
 | 
				
			||||||
      let sysPath = devPath.split("/").slice(3, 5).join("/");
 | 
					      let sysPath = devPath.split("/").slice(3, 5).join("/");
 | 
				
			||||||
      let alaDevPath = data.data.map(x => x.alarmClass?.split("_").slice(0, 2).join("/"));
 | 
					      let alaDevPath = data.data.map(x => x.alarmClass?.split("_").slice(0, 2).join("/"));
 | 
				
			||||||
      if (alaDevPath.indexOf(sysPath) == -1) {
 | 
					      if (alaDevPath.indexOf(sysPath) == -1) {
 | 
				
			||||||
        $(ele).removeClass("blink");
 | 
					        const img = $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src.split('.')
 | 
				
			||||||
 | 
					        const { length } = img
 | 
				
			||||||
 | 
					        img[length - 1] = 'png'
 | 
				
			||||||
 | 
					        $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src = img.join('.')
 | 
				
			||||||
 | 
					        // $(ele).removeClass("blink");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -57,22 +57,22 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                <button id="ediAutDemBtn" class="btn btn-success"><i class="fal fa-pencil"></i> 編輯</button>
 | 
					                <button id="ediAutDemBtn" class="btn btn-success"><i class="fal fa-pencil"></i> 編輯</button>
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
              <div class="row align-items-center">
 | 
					              <div class="row align-items-center justify-content-between d-flex flex-column">
 | 
				
			||||||
                <div class="col-sm-12 col-lg-5">
 | 
					                <div class="col d-flex">
 | 
				
			||||||
                  <p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
 | 
					                  <p class="card-text color-white d-flex justify-content-between mr-3">
 | 
				
			||||||
                    <span>契約容量</span>
 | 
					                    <span>契約容量</span>
 | 
				
			||||||
                    <span><span data-id="contract_capacity"></span> kW</span>
 | 
					                    <span><span data-id="contract_capacity"></span> kW</span>
 | 
				
			||||||
                  </p>
 | 
					                  </p>
 | 
				
			||||||
                  <p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
 | 
					                  <p class="card-text color-white d-flex justify-content-between mr-3">
 | 
				
			||||||
                    <span>警戒容量</span>
 | 
					                    <span>警戒容量</span>
 | 
				
			||||||
                    <span><span data-id="warning_capacity"></span> kW</span>
 | 
					                    <span><span data-id="warning_capacity"></span> kW</span>
 | 
				
			||||||
                  </p>
 | 
					                  </p>
 | 
				
			||||||
                  <p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
 | 
					                  <p class="card-text color-white d-flex justify-content-between mr-3">
 | 
				
			||||||
                    <span>復歸值</span>
 | 
					                    <span>復歸值</span>
 | 
				
			||||||
                    <span><span data-id="resetting_value"></span> kW</span>
 | 
					                    <span><span data-id="resetting_value"></span> kW</span>
 | 
				
			||||||
                  </p>
 | 
					                  </p>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-sm-12 col-lg-7" style=" min-height:250px;">
 | 
					                <div class="col" style=" min-height:250px;">
 | 
				
			||||||
                  <canvas class="chart" id="autDemChart"></canvas>
 | 
					                  <canvas class="chart" id="autDemChart"></canvas>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
@ -354,7 +354,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (autDemChart.data.labels.length > 0) {
 | 
					        if (autDemChart.data.labels.length > 0) {
 | 
				
			||||||
          // 當 label 還未補齊,則直接替換 array 裡的值,已補齊之後就從後面補值
 | 
					          // 當 label 還未補齊,則直接替換 array 裡的值,已補齊之後就從後面補值
 | 
				
			||||||
          if (autDemChart.data.labels.filter(x => x != "").length > 10) {
 | 
					          if (autDemChart.data.labels.filter(x => x != "").length > 35) {
 | 
				
			||||||
            autDemChart.data.labels.push(displayDate(time, "Hms"));
 | 
					            autDemChart.data.labels.push(displayDate(time, "Hms"));
 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
            let cnt = autDemChart.data.labels.filter(x => x != "").length;
 | 
					            let cnt = autDemChart.data.labels.filter(x => x != "").length;
 | 
				
			||||||
@ -366,7 +366,7 @@
 | 
				
			|||||||
          autDemChart.data.datasets[3].data.push(value);
 | 
					          autDemChart.data.datasets[3].data.push(value);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (autDemChart.data.labels.filter(x => x != "").length > 10) {
 | 
					        if (autDemChart.data.labels.filter(x => x != "").length > 35) {
 | 
				
			||||||
          autDemChart.data.labels.shift();
 | 
					          autDemChart.data.labels.shift();
 | 
				
			||||||
          autDemChart.data.datasets[0].data.shift();
 | 
					          autDemChart.data.datasets[0].data.shift();
 | 
				
			||||||
          autDemChart.data.datasets[1].data.shift();
 | 
					          autDemChart.data.datasets[1].data.shift();
 | 
				
			||||||
@ -387,7 +387,7 @@
 | 
				
			|||||||
            autDemChart.data.labels.push(displayDate(time, "Hms"));
 | 
					            autDemChart.data.labels.push(displayDate(time, "Hms"));
 | 
				
			||||||
            autDemChart.data.datasets[3].data.push(d.value);
 | 
					            autDemChart.data.datasets[3].data.push(d.value);
 | 
				
			||||||
            // 補齊空缺 最多10個
 | 
					            // 補齊空缺 最多10個
 | 
				
			||||||
            for (let i = autDemChart.data.labels.length; i < 10; i++) {
 | 
					            for (let i = autDemChart.data.labels.length; i < 35; i++) {
 | 
				
			||||||
              autDemChart.data.labels.push("");
 | 
					              autDemChart.data.labels.push("");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -247,13 +247,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      $.each(res.data, function (index, val) {
 | 
					      $.each(res.data, function (index, val) {
 | 
				
			||||||
        if (index == 0) {
 | 
					        if (index == 0) {
 | 
				
			||||||
					strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-info waves-effect waves-themed">${val.full_name} ${val.points}</button>`;
 | 
					          strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-info waves-effect waves-themed">${val.full_name || val.points}</button>`;
 | 
				
			||||||
          pageAct.deviceItem = val.points;
 | 
					          pageAct.deviceItem = val.points;
 | 
				
			||||||
          pageAct.devicePoiName = val.full_name + ' ' + val.points;
 | 
					          pageAct.devicePoiName = val.full_name + ' ' + val.points;
 | 
				
			||||||
          pageAct.deviceComName = val.parent_path;
 | 
					          pageAct.deviceComName = val.parent_path;
 | 
				
			||||||
          getData();
 | 
					          getData();
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
					strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-secondary waves-effect waves-themed">${val.full_name} ${val.points}</button>`;
 | 
					          strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-secondary waves-effect waves-themed">${val.full_name || val.points}</button>`;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -267,6 +267,8 @@
 | 
				
			|||||||
    var edt = new Date(new Date().setDate(sdt.getDate() + 1));
 | 
					    var edt = new Date(new Date().setDate(sdt.getDate() + 1));
 | 
				
			||||||
    start = start ?? sdt.toLocaleDateString();
 | 
					    start = start ?? sdt.toLocaleDateString();
 | 
				
			||||||
    end = end ?? edt.toLocaleDateString();
 | 
					    end = end ?? edt.toLocaleDateString();
 | 
				
			||||||
 | 
					    $(loadEle).Loading("start");
 | 
				
			||||||
 | 
					    callBackFromHistory()
 | 
				
			||||||
    getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
 | 
					    getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
 | 
				
			||||||
      new Date(start).getTime(),
 | 
					      new Date(start).getTime(),
 | 
				
			||||||
      new Date(end).getTime(),
 | 
					      new Date(end).getTime(),
 | 
				
			||||||
@ -275,8 +277,10 @@
 | 
				
			|||||||
      callBackFromHistory);
 | 
					      callBackFromHistory);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function callBackFromHistory(res) {
 | 
					  function callBackFromHistory(res = '{"count":0,"data":[]}') {
 | 
				
			||||||
 | 
					    // console.log("@H1",res)
 | 
				
			||||||
    res = JSON.parse(res);
 | 
					    res = JSON.parse(res);
 | 
				
			||||||
 | 
					    // console.log("@history",res.data)
 | 
				
			||||||
    loadTable(res.data);
 | 
					    loadTable(res.data);
 | 
				
			||||||
    if (historyTable != null) {
 | 
					    if (historyTable != null) {
 | 
				
			||||||
      let t = $('#historyTable').dataTable();
 | 
					      let t = $('#historyTable').dataTable();
 | 
				
			||||||
@ -387,7 +391,8 @@
 | 
				
			|||||||
  function loadTable(data) {
 | 
					  function loadTable(data) {
 | 
				
			||||||
    if (data) {
 | 
					    if (data) {
 | 
				
			||||||
      $.each(data, function (i, v) {
 | 
					      $.each(data, function (i, v) {
 | 
				
			||||||
				v.type = pageAct.devicePoiName;
 | 
					        // console.log("loadTable",pageAct.devicePoiName.split(" ")[0])
 | 
				
			||||||
 | 
					        v.type = pageAct.devicePoiName.split(" ")[0];
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -412,6 +417,9 @@
 | 
				
			|||||||
        "title": "數值",
 | 
					        "title": "數值",
 | 
				
			||||||
        "data": "value",
 | 
					        "data": "value",
 | 
				
			||||||
        "render": function (data) {
 | 
					        "render": function (data) {
 | 
				
			||||||
 | 
					          if (isNaN(data)) {
 | 
				
			||||||
 | 
					            return data
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          return data.roundDecimal(2);
 | 
					          return data.roundDecimal(2);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@ -419,6 +427,7 @@
 | 
				
			|||||||
        "title": "紀錄時間",
 | 
					        "title": "紀錄時間",
 | 
				
			||||||
        "data": "timestamp",
 | 
					        "data": "timestamp",
 | 
				
			||||||
        "render": function (data) {
 | 
					        "render": function (data) {
 | 
				
			||||||
 | 
					          // console.log(data)
 | 
				
			||||||
          return displayDate(data, "datetime");
 | 
					          return displayDate(data, "datetime");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
@ -376,13 +376,17 @@
 | 
				
			|||||||
    function show3DModel(urn) {
 | 
					    function show3DModel(urn) {
 | 
				
			||||||
        $(loadEle).Loading("start");
 | 
					        $(loadEle).Loading("start");
 | 
				
			||||||
        launchViewerForHotspot(urn, (viewer, nodeIds) => {
 | 
					        launchViewerForHotspot(urn, (viewer, nodeIds) => {
 | 
				
			||||||
            let devDbIds = allDevList.map(x => x.forge_dbid);
 | 
					          let devDbIds = allDevList.map(x => x.forge_dbid); // 大類
 | 
				
			||||||
 | 
					          console.log(allDevList);
 | 
				
			||||||
 | 
					          let subDevDbId = [];
 | 
				
			||||||
 | 
					          allDevList.forEach(({ device_nodes }) => {
 | 
				
			||||||
 | 
					            subDevDbId = [...subDevDbId, ...device_nodes.map(n => n.forge_dbid)]
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
            // 從資料庫設定不可視模型的類型,若沒有取道該小類不可視類型,則套用資料庫設定預設類型
 | 
					            // 從資料庫設定不可視模型的類型,若沒有取道該小類不可視類型,則套用資料庫設定預設類型
 | 
				
			||||||
            if (forgeInvType) {
 | 
					            if (forgeInvType) {
 | 
				
			||||||
                setInviForge(forgeInvType, devDbIds);
 | 
					              setInviForge(forgeInvType, [...devDbIds, ...subDevDbId]);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                setInviForge(forgeInvTypeDef, devDbIds);
 | 
					              setInviForge(forgeInvTypeDef, [...devDbIds, ...subDevDbId]);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $(loadEle).Loading("close");
 | 
					            $(loadEle).Loading("close");
 | 
				
			||||||
@ -435,8 +439,10 @@
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					          if (pageAct.sub_system_tag == "W2") {
 | 
				
			||||||
            getWaterNodeId();
 | 
					            getWaterNodeId();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }, () => {
 | 
					        }, () => {
 | 
				
			||||||
            $(loadEle).Loading("close");
 | 
					            $(loadEle).Loading("close");
 | 
				
			||||||
        }, "[name=forgeViewer]");
 | 
					        }, "[name=forgeViewer]");
 | 
				
			||||||
@ -444,20 +450,24 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // 供水系統 - 取得欲染色 dbid
 | 
					    // 供水系統 - 取得欲染色 dbid
 | 
				
			||||||
    function getWaterNodeId() {
 | 
					    function getWaterNodeId() {
 | 
				
			||||||
        let url = baseApiUrl + "/api/Device/GetForgeNodeIdFromVar";
 | 
					        //let url = baseApiUrl + "/api/Device/GetForgeNodeIdFromVar";
 | 
				
			||||||
        let sendData = { forgeNodeKey: "water_wupply" };
 | 
					        //let sendData = { forgeNodeKey: "water_wupply" };
 | 
				
			||||||
        objSendData.Data = sendData;
 | 
					        //objSendData.Data = sendData;
 | 
				
			||||||
        ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
					        //ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
				
			||||||
            if (!res || res.code != "0000" || !res.data) {
 | 
					        //    if (!res || res.code != "0000" || !res.data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            } else {
 | 
					        //    } else {
 | 
				
			||||||
                if (!isNaN(parseInt(res.data[0]?.system_value))) {
 | 
					        //        if (!isNaN(parseInt(res.data[0]?.system_value))) {
 | 
				
			||||||
                    changeColor(parseInt(res.data[0]?.system_value))
 | 
					        //            changeColor(parseInt(res.data[0]?.system_value))
 | 
				
			||||||
                }
 | 
					        //        }
 | 
				
			||||||
                console.log(res.data)
 | 
					        //        console.log(res.data)
 | 
				
			||||||
            }
 | 
					        //    }
 | 
				
			||||||
        }, null, "POST").send();
 | 
					        //}, null, "POST").send();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      viewer.model.search("給水", (nodeIds) => {
 | 
				
			||||||
 | 
					        console.log(nodeIds)
 | 
				
			||||||
 | 
					        viewer.show(nodeIds)
 | 
				
			||||||
 | 
					      }, (e) => { console.log(e) })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getHotspotPoint(callback = null) {
 | 
					    function getHotspotPoint(callback = null) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1410,9 +1410,9 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        "title": "發生/完成時間",
 | 
					                        "title": "發生/完成時間",
 | 
				
			||||||
                        "data": "normalTime",
 | 
					                        "data": "normalTime",
 | 
				
			||||||
                        "render": function (data, type, row) {
 | 
					                        //"render": function (data, type, row) {
 | 
				
			||||||
                            return row.timestamp + "<br>" + data;
 | 
					                        //    return row.timestamp + "<br>" + data;
 | 
				
			||||||
                        },
 | 
					                        //},
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
 | 
				
			|||||||
@ -93,20 +93,28 @@ function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, i
 | 
				
			|||||||
  var _index = 0;
 | 
					  var _index = 0;
 | 
				
			||||||
  var _recoverState = isRecover ? "!= null" : "= null";
 | 
					  var _recoverState = isRecover ? "!= null" : "= null";
 | 
				
			||||||
  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
 | 
					  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
 | 
				
			||||||
  /*console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc")*/
 | 
					  console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc")
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					  require(['baja!'], function (baja) {
 | 
				
			||||||
    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc").get()
 | 
					    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc").get()
 | 
				
			||||||
      .then(function (table) {
 | 
					      .then(function (table) {
 | 
				
			||||||
        return table.cursor({
 | 
					        return table.cursor({
 | 
				
			||||||
          each: function (record) {
 | 
					          each: function (record) {
 | 
				
			||||||
            _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
 | 
					            const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0]
 | 
				
			||||||
 | 
					            //console.log(alarmDisplayName)
 | 
				
			||||||
 | 
					            _sourceTmp = alarmDisplayName.split('_');
 | 
				
			||||||
            _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
 | 
					            _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
 | 
				
			||||||
            _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
 | 
					            _sourceName = _sourceTmp.slice(0, 8).join("_");
 | 
				
			||||||
            _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp').$cEncStr, alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime'), ackedTime: record.get('ackTime').$cEncStr })
 | 
					            _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8];
 | 
				
			||||||
 | 
					            if (!_sourceTmp.includes("undefined")) {
 | 
				
			||||||
 | 
					              _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp').$cEncStr, alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, sourceTmp: _sourceTmp, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime'), ackedTime: record.get('ackTime').$cEncStr })
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            _index++
 | 
					            _index++
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          after: function () {
 | 
					          after: function () {
 | 
				
			||||||
            _result = { count: _index, data: _ss }
 | 
					            _result = { count: _index, data: _ss }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //console.log(552, _result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (typeof callback === 'function') {
 | 
					            if (typeof callback === 'function') {
 | 
				
			||||||
              callback(_result);
 | 
					              callback(_result);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -153,8 +161,8 @@ function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, i
 | 
				
			|||||||
//     });
 | 
					//     });
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
 | 
					function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
 | 
				
			||||||
  var _result = "";
 | 
					  var _result = {};
 | 
				
			||||||
  var _ss = "";
 | 
					  var _ss = [];
 | 
				
			||||||
  var _occurrenceTime = "";
 | 
					  var _occurrenceTime = "";
 | 
				
			||||||
  var _normalTime = "";
 | 
					  var _normalTime = "";
 | 
				
			||||||
  var _index = 0;
 | 
					  var _index = 0;
 | 
				
			||||||
@ -166,28 +174,23 @@ function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
 | 
				
			|||||||
          each: function (record) {
 | 
					          each: function (record) {
 | 
				
			||||||
            _occurrenceTime = "";
 | 
					            _occurrenceTime = "";
 | 
				
			||||||
            _normalTime = "";
 | 
					            _normalTime = "";
 | 
				
			||||||
 | 
					            // console.log(record.get('timestamp'),record.get('normalTime') )
 | 
				
			||||||
            var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60
 | 
					            var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var _timestampTemp = new Date(record.get('timestamp').toString());
 | 
					            var _occurrenceTime = new Date(record.get('timestamp').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" });
 | 
				
			||||||
            _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString();
 | 
					            // _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //var _occurrenceTime = _timestamp.format("yyyy-MM-dd hh:mm:ss");//.toLocaleString();
 | 
					            //var _occurrenceTime = _timestamp.format("yyyy-MM-dd hh:mm:ss");//.toLocaleString();
 | 
				
			||||||
            var _normaltime = new Date(record.get('normalTime').toString());
 | 
					            var _normalTime = new Date(record.get('normalTime').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" });
 | 
				
			||||||
            _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString();
 | 
					            // _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認";
 | 
					            var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認";
 | 
				
			||||||
            var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認";
 | 
					            var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認";
 | 
				
			||||||
 | 
					            _ss.push({ uuid: _resultUuid[0], msgText: _msgText, ackState: _ackText, timestamp: _occurrenceTime, normalTime: _normalTime })
 | 
				
			||||||
            if (_index == 0)
 | 
					 | 
				
			||||||
              _ss += '{"uuid":"' + _resultUuid[0] + '", "msgText":"' + _msgText + '", "ackState":"' + _ackText + '", "timestamp":"' + _occurrenceTime + '", "normalTime":"' + _normalTime + '"}';
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
              _ss += ',{"uuid":"' + _resultUuid[0] + '", "msgText":"' + _msgText + '", "ackState":"' + _ackText + '", "timestamp":"' + _occurrenceTime + '", "normalTime":"' + _normalTime + '"}';
 | 
					 | 
				
			||||||
            _index++;
 | 
					            _index++;
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          after: function () {
 | 
					          after: function () {
 | 
				
			||||||
            _result += '{' + '"count": ' + _index + ', "data":[';
 | 
					            _result = JSON.stringify({ count: _index, data: _ss })
 | 
				
			||||||
            _result += _ss + ']';
 | 
					 | 
				
			||||||
            _result += '}';
 | 
					 | 
				
			||||||
            if (typeof callback === 'function') {
 | 
					            if (typeof callback === 'function') {
 | 
				
			||||||
              callback(_result);
 | 
					              callback(_result);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -233,7 +236,7 @@ function getOneSystemAlarmStateByBaja(systemPath, callback) {
 | 
				
			|||||||
  var _result = "";
 | 
					  var _result = "";
 | 
				
			||||||
  var _ss = "";
 | 
					  var _ss = "";
 | 
				
			||||||
  var _index = 0;
 | 
					  var _index = 0;
 | 
				
			||||||
  console.log("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc")
 | 
					/*  console.log("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc")*/
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					  require(['baja!'], function (baja) {
 | 
				
			||||||
    baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
 | 
					    baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
 | 
				
			||||||
      .then(function (table) {
 | 
					      .then(function (table) {
 | 
				
			||||||
@ -528,7 +531,7 @@ function getOneDeviceAlarmByBaja(devicePath, callback) {
 | 
				
			|||||||
  var _index = 0;
 | 
					  var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					  require(['baja!'], function (baja) {
 | 
				
			||||||
    console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc");
 | 
					/*    console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc");*/
 | 
				
			||||||
    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
 | 
					    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
 | 
				
			||||||
      .then(function (table) {
 | 
					      .then(function (table) {
 | 
				
			||||||
        return table.cursor({
 | 
					        return table.cursor({
 | 
				
			||||||
@ -542,7 +545,7 @@ function getOneDeviceAlarmByBaja(devicePath, callback) {
 | 
				
			|||||||
          after: function () {
 | 
					          after: function () {
 | 
				
			||||||
            _result = { count: _index, data: _ss }
 | 
					            _result = { count: _index, data: _ss }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            console.log(552, _result);
 | 
					            //console.log(552, _result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (typeof callback === 'function') {
 | 
					            if (typeof callback === 'function') {
 | 
				
			||||||
              callback(_result);
 | 
					              callback(_result);
 | 
				
			||||||
@ -561,12 +564,12 @@ function getAllDeviceAlarmByBaja(startDate_millisecond, endDate_millisecond, isR
 | 
				
			|||||||
  var _recoverState = isRecover ? "!= null" : "= null";
 | 
					  var _recoverState = isRecover ? "!= null" : "= null";
 | 
				
			||||||
  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
 | 
					  var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					 | 
				
			||||||
  let startUrl = "";
 | 
					  let startUrl = "";
 | 
				
			||||||
  if (startDate_millisecond) {
 | 
					  if (startDate_millisecond) {
 | 
				
			||||||
    startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
 | 
					    startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // console.log("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
 | 
					  // console.log("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
 | 
				
			||||||
 | 
					  require(['baja!'], function (baja) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
 | 
					    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
 | 
				
			||||||
      .then(function (table) {
 | 
					      .then(function (table) {
 | 
				
			||||||
@ -574,30 +577,35 @@ function getAllDeviceAlarmByBaja(startDate_millisecond, endDate_millisecond, isR
 | 
				
			|||||||
          each: function (record) {
 | 
					          each: function (record) {
 | 
				
			||||||
            // console.log(record,record.get('alarmData').get('sourceName').split(':'))
 | 
					            // console.log(record,record.get('alarmData').get('sourceName').split(':'))
 | 
				
			||||||
            let main = {};
 | 
					            let main = {};
 | 
				
			||||||
            console.log(record.get('alarmData').get('sourceName'), record.get('timestamp').$cEncStr)
 | 
					            // console.log(record.get('alarmData').get('sourceName'),record.get('timestamp').$cEncStr)
 | 
				
			||||||
            _sourcePoint = (record.get('alarmData').get('sourceName')).toString().split(':')[0];
 | 
					            const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0]
 | 
				
			||||||
            _sourceTmp = _sourcePoint.split("_");
 | 
					            //console.log(alarmDisplayName)
 | 
				
			||||||
 | 
					            _sourceTmp = alarmDisplayName.split('_');
 | 
				
			||||||
 | 
					            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]
 | 
				
			||||||
 | 
					            let _sourceName = _sourceTmp.slice(0, 8).join("_");
 | 
				
			||||||
 | 
					            _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
 | 
					 | 
				
			||||||
            let _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
 | 
					 | 
				
			||||||
            main.buildingFloorName_zh = _bfName;
 | 
					            main.buildingFloorName_zh = _bfName;
 | 
				
			||||||
            main.sourceName_zh = _sourceName;
 | 
					            main.sourceName_zh = _sourceName;
 | 
				
			||||||
            main.uuid = record.get('uuid').$val;
 | 
					            main.uuid = record.get('uuid').$val;
 | 
				
			||||||
            main.timestamp = record.get('timestamp').$cEncStr;
 | 
					            main.timestamp = record.get('timestamp').$cEncStr;
 | 
				
			||||||
            main.alarmClass = record.get('alarmClass');
 | 
					            main.alarmClass = record.get('alarmClass');
 | 
				
			||||||
            main.point = _sourcePoint;
 | 
					            main.point = _sourceTmp;
 | 
				
			||||||
            main.devicePath = _sourceTmp.slice(0, 8).join("_");;
 | 
					            main.sourceTmp = _sourceTmp;
 | 
				
			||||||
 | 
					            main.devicePath = _sourceName;
 | 
				
			||||||
            main.msgText = record.get('alarmData').get('msgText');
 | 
					            main.msgText = record.get('alarmData').get('msgText');
 | 
				
			||||||
            main.normalTime = record.get('normalTime');
 | 
					            main.normalTime = record.get('normalTime');
 | 
				
			||||||
            main.priority = record.get('priority');
 | 
					            main.priority = record.get('priority');
 | 
				
			||||||
            main.ackedTime = record.get('ackTime').$cEncStr;
 | 
					            main.ackedTime = record.get('ackTime').$cEncStr;
 | 
				
			||||||
 | 
					            if (!_sourceTmp.includes("undefined")) {
 | 
				
			||||||
              _result.data.push(main);
 | 
					              _result.data.push(main);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            _index++;
 | 
					            _index++;
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          after: function () {
 | 
					          after: function () {
 | 
				
			||||||
            _result.count = _index;
 | 
					            _result.count = _index;
 | 
				
			||||||
            if (typeof callback === 'function') {
 | 
					            if (typeof callback === 'function') {
 | 
				
			||||||
              console.log(_result)
 | 
					              //console.log(_result)
 | 
				
			||||||
              callback(_result);
 | 
					              callback(_result);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
@ -620,16 +628,16 @@ function getDeviceAlarmCardByBaja(startDate_millisecond, endDate_millisecond, is
 | 
				
			|||||||
    if (startDate_millisecond) {
 | 
					    if (startDate_millisecond) {
 | 
				
			||||||
      startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
 | 
					      startUrl = "timestamp.millis >= " + startDate_millisecond + " and ";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    console.log("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
 | 
					/*    console.log("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
 | 
					    baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
 | 
				
			||||||
      .then(function (table) {
 | 
					      .then(function (table) {
 | 
				
			||||||
        return table.cursor({
 | 
					        return table.cursor({
 | 
				
			||||||
          each: function (record) {
 | 
					          each: function (record) {
 | 
				
			||||||
            let main = {};
 | 
					            let main = {};
 | 
				
			||||||
            console.log(record.get('alarmData').get('sourceName'))
 | 
					            //console.log(record.get('alarmData').get('sourceName'))
 | 
				
			||||||
            _sourcePoint = (record.get('alarmData').get('sourceName')).toString().split(':')[1];
 | 
					            _sourcePoint = (record.get('alarmData').get('sourceName')).toString().split(':')[1];
 | 
				
			||||||
            console.log(_sourcePoint)
 | 
					            //console.log(_sourcePoint)
 | 
				
			||||||
            _sourceTmp = _sourcePoint.split("_");
 | 
					            _sourceTmp = _sourcePoint.split("_");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
 | 
					            let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
 | 
				
			||||||
 | 
				
			|||||||
@ -35,8 +35,8 @@
 | 
				
			|||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getHistoryDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) {
 | 
					function getHistoryDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) {
 | 
				
			||||||
    var _result = "";
 | 
					  var _result = {};
 | 
				
			||||||
    var _ss = "";
 | 
					  var _ss = [];
 | 
				
			||||||
  var _index = 0;
 | 
					  var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					  require(['baja!'], function (baja) {
 | 
				
			||||||
@ -45,23 +45,37 @@ function getHistoryDataByBaja(devicePath, startDate_millisecond, endDate_millise
 | 
				
			|||||||
      .then(function (table) {
 | 
					      .then(function (table) {
 | 
				
			||||||
        return table.cursor({
 | 
					        return table.cursor({
 | 
				
			||||||
          each: function (record) {
 | 
					          each: function (record) {
 | 
				
			||||||
                        if (_index == 0)
 | 
					            console.log(record.get('timestamp'))
 | 
				
			||||||
                            _ss += '{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp') + '"}';
 | 
					            // if (_index == 0)
 | 
				
			||||||
                        else
 | 
					            //     _ss += '{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr
 | 
				
			||||||
                            _ss += ',{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp') + '"}';
 | 
					            //     + '"}';
 | 
				
			||||||
 | 
					            // else
 | 
				
			||||||
 | 
					            //     _ss += ',{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr
 | 
				
			||||||
 | 
					            //     + '"}';
 | 
				
			||||||
 | 
					            _ss.push({
 | 
				
			||||||
 | 
					              deviceName: deviceName, value: record.get('value'), timestamp: record.get('timestamp').$cEncStr
 | 
				
			||||||
 | 
					 });
 | 
				
			||||||
            _index++;
 | 
					            _index++;
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          after: function () {
 | 
					          after: function () {
 | 
				
			||||||
                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
					            _result = { count: _index, data: _ss }
 | 
				
			||||||
                        _result += _ss;
 | 
					            // _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
                        _result += ']}';
 | 
					            // _result += _ss;
 | 
				
			||||||
 | 
					            // _result += ']}';
 | 
				
			||||||
            if (typeof callback === 'function') {
 | 
					            if (typeof callback === 'function') {
 | 
				
			||||||
 | 
					              // console.log(_result)
 | 
				
			||||||
 | 
					              _result = JSON.stringify(_result)
 | 
				
			||||||
              callback(_result);
 | 
					              callback(_result);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          limit: -1,
 | 
					          limit: -1,
 | 
				
			||||||
          offset: 0
 | 
					          offset: 0
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					        console.log("error");
 | 
				
			||||||
 | 
					        // const res = JSON.stringify({count:0, data:[]})
 | 
				
			||||||
 | 
					        callback()
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -198,13 +198,15 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                var dbsub = await frontendRepository.GetAllAsync<HistoryDBMainSub>(
 | 
					                var dbsub = await frontendRepository.GetAllAsync<HistoryDBMainSub>(
 | 
				
			||||||
                    @$"select distinct v1.system_key main_name, v1.system_value main_system_tag, v2.system_key sub_name, v2.system_value sub_system_tag, v1.system_priority, v2.system_priority,
 | 
					                    @$"select distinct v1.system_key main_name, v1.system_value main_system_tag, v2.system_key sub_name, v2.system_value sub_system_tag, v1.system_priority, v2.system_priority,
 | 
				
			||||||
                                       d.device_number, d.full_name as device_full_name, d.device_serial_tag
 | 
					                                       d.device_number, d.full_name as device_full_name, d.device_serial_tag ,di.is_show_history device_item_is_show_hsitory
 | 
				
			||||||
                        from role_auth a
 | 
					                        from role_auth a
 | 
				
			||||||
                        join auth_page b on a.AuthCode = b.AuthCode
 | 
					                        join auth_page b on a.AuthCode = b.AuthCode
 | 
				
			||||||
                        join userinfo c on c.role_guid = a.role_guid
 | 
					                        join userinfo c on c.role_guid = a.role_guid
 | 
				
			||||||
                        join variable v2 on b.ShowView = v2.id and v2.system_type = @sub_system_type
 | 
					                        join variable v2 on b.ShowView = v2.id and v2.system_type = @sub_system_type
 | 
				
			||||||
                        join variable v1 on v1.id = v2.system_parent_id and v1.system_type = @main_system_type
 | 
					                        join variable v1 on v1.id = v2.system_parent_id and v1.system_type = @main_system_type
 | 
				
			||||||
                        join device d on v1.system_value = d.device_system_tag and v2.system_value = d.device_name_tag and d.deleted = 0 and  d.visible = 1
 | 
					                        join device d on v1.system_value = d.device_system_tag and v2.system_value = d.device_name_tag and d.deleted = 0 and  d.visible = 1
 | 
				
			||||||
 | 
					                        join device_item di  on  d.device_system_tag=di.device_system_tag and d.device_name_tag=di.device_name_tag 
 | 
				
			||||||
 | 
					                        and   di.is_link = 1
 | 
				
			||||||
                        where c.account = @account
 | 
					                        where c.account = @account
 | 
				
			||||||
                        order by v1.system_priority, v2.system_priority", new { @account = myUser.account, @sub_system_type = sub_system_type, @main_system_type = main_system_type });
 | 
					                        order by v1.system_priority, v2.system_priority", new { @account = myUser.account, @sub_system_type = sub_system_type, @main_system_type = main_system_type });
 | 
				
			||||||
                var dbbuilding = await frontendRepository.GetAllAsync<History_Build>(
 | 
					                var dbbuilding = await frontendRepository.GetAllAsync<History_Build>(
 | 
				
			||||||
@ -231,7 +233,7 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                        History_Sub_system history_Sub_System = new History_Sub_system();
 | 
					                        History_Sub_system history_Sub_System = new History_Sub_system();
 | 
				
			||||||
                        history_Sub_System.full_name = sub.Select(x => x.sub_name).FirstOrDefault();
 | 
					                        history_Sub_System.full_name = sub.Select(x => x.sub_name).FirstOrDefault();
 | 
				
			||||||
                        history_Sub_System.sub_system_tag = sub.Select(x => x.sub_system_tag).FirstOrDefault();
 | 
					                        history_Sub_System.sub_system_tag = sub.Select(x => x.sub_system_tag).FirstOrDefault();
 | 
				
			||||||
 | 
					                        history_Sub_System.is_show_history = sub.Select(x => x.device_item_is_show_hsitory).FirstOrDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var devices = dbsub.Where(x => x.main_system_tag == main.Select(m => m.main_system_tag).FirstOrDefault() && x.sub_system_tag == sub.Select(x => x.sub_system_tag).FirstOrDefault() && x.device_number != null).ToList();
 | 
					                        var devices = dbsub.Where(x => x.main_system_tag == main.Select(m => m.main_system_tag).FirstOrDefault() && x.sub_system_tag == sub.Select(x => x.sub_system_tag).FirstOrDefault() && x.device_number != null).ToList();
 | 
				
			||||||
                        history_Sub_System.device = devices.Count > 0 ? new List<Device>() : null;
 | 
					                        history_Sub_System.device = devices.Count > 0 ? new List<Device>() : null;
 | 
				
			||||||
@ -244,8 +246,12 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
                            history_Sub_System.device.Add(device);
 | 
					                            history_Sub_System.device.Add(device);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (history_Sub_System.is_show_history==1)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
                            history_Main_System.History_Sub_systems.Add(history_Sub_System);
 | 
					                            history_Main_System.History_Sub_systems.Add(history_Sub_System);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    apiResult.Data.history_Main_Systems.Add(history_Main_System);
 | 
					                    apiResult.Data.history_Main_Systems.Add(history_Main_System);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                apiResult.Data.history_Builds = dbbuilding;
 | 
					                apiResult.Data.history_Builds = dbbuilding;
 | 
				
			||||||
 | 
				
			|||||||
@ -78,6 +78,7 @@ namespace FrontendWebApi.Models
 | 
				
			|||||||
        public string device_item_points { get; set; }
 | 
					        public string device_item_points { get; set; }
 | 
				
			||||||
        public string device_item_unit { get; set; }
 | 
					        public string device_item_unit { get; set; }
 | 
				
			||||||
        public byte device_item_is_show { get; set; }
 | 
					        public byte device_item_is_show { get; set; }
 | 
				
			||||||
 | 
					        public byte device_item_is_show_hsitory { get; set; }
 | 
				
			||||||
        public byte device_item_is_show_riserDiagram { get; set; }
 | 
					        public byte device_item_is_show_riserDiagram { get; set; }
 | 
				
			||||||
        public byte device_item_is_controll { get; set; }
 | 
					        public byte device_item_is_controll { get; set; }
 | 
				
			||||||
        public byte device_item_is_bool { get; set; }
 | 
					        public byte device_item_is_bool { get; set; }
 | 
				
			||||||
@ -126,6 +127,7 @@ namespace FrontendWebApi.Models
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    public class History_Sub_system
 | 
					    public class History_Sub_system
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        public byte is_show_history { get; set; }
 | 
				
			||||||
        public string sub_system_tag { get; set; }
 | 
					        public string sub_system_tag { get; set; }
 | 
				
			||||||
        public string full_name { get; set; }
 | 
					        public string full_name { get; set; }
 | 
				
			||||||
        public string device_normal_color { get; set; }
 | 
					        public string device_normal_color { get; set; }
 | 
				
			||||||
 | 
				
			|||||||
@ -656,6 +656,7 @@ namespace Repository.BackendRepository.Implement
 | 
				
			|||||||
                        //先全部關閉
 | 
					                        //先全部關閉
 | 
				
			||||||
                        sb.Append("update device_item set is_show_history=0;");
 | 
					                        sb.Append("update device_item set is_show_history=0;");
 | 
				
			||||||
                        sb.Append("update device_item set is_show_history = 1 " +
 | 
					                        sb.Append("update device_item set is_show_history = 1 " +
 | 
				
			||||||
 | 
					                            "WHERE(device_system_tag, device_name_tag, points) IN " +
 | 
				
			||||||
                            "(select  distinct  device_system_tag, device_name_tag, device_point_name From import_niagara_item);");
 | 
					                            "(select  distinct  device_system_tag, device_name_tag, device_point_name From import_niagara_item);");
 | 
				
			||||||
                        await conn.ExecuteAsync(sb.ToString());
 | 
					                        await conn.ExecuteAsync(sb.ToString());
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user