Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
		
						commit
						51cf3df27b
					
				@ -41,11 +41,12 @@ namespace Backend.Controllers
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                List<Device_value> ds;
 | 
					                List<Device_value> ds;
 | 
				
			||||||
                string url_slot = "slot:/TPE/B1|";
 | 
					                string url_slot = "slot:/TPE/B1|";
 | 
				
			||||||
                string top100 = " top 100 ";
 | 
					                string top100 = "";//" top 100 ";
 | 
				
			||||||
                webRequestService svc = new webRequestService();
 | 
					                webRequestService svc = new webRequestService();
 | 
				
			||||||
                string bql = url_slot + "bql:select " + top100 + " * from control:ControlPoint ";
 | 
					                string bql = url_slot + "bql:select " + top100 + " * from control:ControlPoint ";
 | 
				
			||||||
                //ds = svc.obixQuery("http://192.168.0.136:8080/obix/config/Arena/Program/ObixQuery/query/", bql);
 | 
					                //ds = svc.obixQuery("http://192.168.0.136:8080/obix/config/Arena/Program/ObixQuery/query/", bql);
 | 
				
			||||||
                ds = svc.obixQuery("http://localhost:8080/obix/config/Program/ObixQuery/query/", bql);
 | 
					                //ds = svc.obixQuery("http://localhost:8080/obix/config/Program/ObixQuery/query/", bql);
 | 
				
			||||||
 | 
					                ds = svc.obixQuery("http://192.168.0.136:8080/obix/config/Program/ObixQuery/query/", bql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                apiResult.Code = "0000";
 | 
					                apiResult.Code = "0000";
 | 
				
			||||||
                apiResult.Data = ds;
 | 
					                apiResult.Data = ds;
 | 
				
			||||||
 | 
				
			|||||||
@ -898,6 +898,9 @@
 | 
				
			|||||||
    var subSeviceData = [];    //每個設備訂閱點位值
 | 
					    var subSeviceData = [];    //每個設備訂閱點位值
 | 
				
			||||||
    var floList = [];          //每個樓層
 | 
					    var floList = [];          //每個樓層
 | 
				
			||||||
    var elevObj = null;        //左側 2D 電梯物件
 | 
					    var elevObj = null;        //左側 2D 電梯物件
 | 
				
			||||||
 | 
					    var viewer3DNodeIds = [223, 228, 233];
 | 
				
			||||||
 | 
					    var elev3DBind = {};
 | 
				
			||||||
 | 
					    var elev3DOption = {};
 | 
				
			||||||
    var subOrdPath = {
 | 
					    var subOrdPath = {
 | 
				
			||||||
        "building_tag": pageAct.buiTag,
 | 
					        "building_tag": pageAct.buiTag,
 | 
				
			||||||
        "system_tag": pageAct.sysMainTag,
 | 
					        "system_tag": pageAct.sysMainTag,
 | 
				
			||||||
@ -1069,9 +1072,15 @@
 | 
				
			|||||||
            elevObj.curElevFloor[matchDevice.device_number] = subData["CP"];
 | 
					            elevObj.curElevFloor[matchDevice.device_number] = subData["CP"];
 | 
				
			||||||
            elevObj.redraw();
 | 
					            elevObj.redraw();
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            elevObj.setElevFloor(matchDevice.device_number, subData["CP"]);
 | 
					            elevObj.setElevFloor(matchDevice.device_number, subData["CP"]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 左側 3D 電梯 nodeID 與 device_number match
 | 
				
			||||||
 | 
					        if (Object.keys(elev3DBind).indexOf(matchDevice.device_number) == -1) {
 | 
				
			||||||
 | 
					            elev3DBind[matchDevice.device_number] = viewer3DNodeIds[elev3DBind.length];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        elevObj.setEleMovStatus(matchDevice.device_number, subData["RD"] == "UP" ? 1 : subData["RD"] == "DOWN" ? 2 : 0);
 | 
					        elevObj.setEleMovStatus(matchDevice.device_number, subData["RD"] == "UP" ? 1 : subData["RD"] == "DOWN" ? 2 : 0);
 | 
				
			||||||
        //現在樓層
 | 
					        //現在樓層
 | 
				
			||||||
        if (subData["CP"]) {
 | 
					        if (subData["CP"]) {
 | 
				
			||||||
@ -2337,11 +2346,27 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //載入3D模型
 | 
					    //載入3D模型
 | 
				
			||||||
    function load3DModel() {
 | 
					    function load3DModel() {
 | 
				
			||||||
 | 
					        let option = {
 | 
				
			||||||
 | 
					            nodes: [223, 228, 233],
 | 
				
			||||||
 | 
					            element: "#forgeViewer",
 | 
				
			||||||
 | 
					            floorHeight: [
 | 
				
			||||||
 | 
					                { floor: 1, height: 15 },
 | 
				
			||||||
 | 
					                { floor: 2, height: 24.5 },
 | 
				
			||||||
 | 
					                { floor: 3, height: 34 },
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDLm53ZA==', option, () => {
 | 
				
			||||||
 | 
					            console.log($("#forgeViewer"))
 | 
				
			||||||
 | 
					            let elevator = $("#forgeViewer")[0]._elevator3D[0];
 | 
				
			||||||
 | 
					            elevator.obj.setElevatorFloor(3)
 | 
				
			||||||
 | 
					            elevator.obj.movElevator()
 | 
				
			||||||
 | 
					            //setElevatorSpeed(0.2)
 | 
				
			||||||
 | 
					            //setElevatorFloor(2)
 | 
				
			||||||
 | 
					            //requestAnimationFrame(movElevator);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MFRFU1QlRTMlODAlOTEubndk');
 | 
					 | 
				
			||||||
        setElevatorSpeed(0.2)
 | 
					 | 
				
			||||||
        setElevatorFloor(3)
 | 
					 | 
				
			||||||
        movElevator()
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    function show3D() {
 | 
					    function show3D() {
 | 
				
			||||||
        if (isFirstLoad3D) {
 | 
					        if (isFirstLoad3D) {
 | 
				
			||||||
 | 
				
			|||||||
@ -2552,6 +2552,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script>
 | 
					    <script>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        /*$('#js-page-content').smartPanel();*/
 | 
					        /*$('#js-page-content').smartPanel();*/
 | 
				
			||||||
        var jwt = localStorage.getItem("JWT-Authorization");
 | 
					        var jwt = localStorage.getItem("JWT-Authorization");
 | 
				
			||||||
        var pageAct = {};  //記錄全頁面已選擇項目
 | 
					        var pageAct = {};  //記錄全頁面已選擇項目
 | 
				
			||||||
@ -2563,7 +2564,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
        if (location.href.indexOf("ord") != -1) {
 | 
					        if (location.href.indexOf("ord") != -1) {
 | 
				
			||||||
            location.href = "/file/index.html"
 | 
					            location.href = "/file/index.html"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        pageLoading(true)
 | 
				
			||||||
        $(function () {
 | 
					        $(function () {
 | 
				
			||||||
            // 二次引用 jquery.js
 | 
					            // 二次引用 jquery.js
 | 
				
			||||||
            // - 在 require 內部程序需要引用 jquery,由於 require 的套件需要依賴 jquery ,就算 HTML 已經引用 jquery, require 也無法參考
 | 
					            // - 在 require 內部程序需要引用 jquery,由於 require 的套件需要依賴 jquery ,就算 HTML 已經引用 jquery, require 也無法參考
 | 
				
			||||||
@ -2741,6 +2742,19 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function pageLoading(isShow = true) {
 | 
				
			||||||
 | 
					            if (isShow) {
 | 
				
			||||||
 | 
					                if ($("body .loading-bg").length == 0) {
 | 
				
			||||||
 | 
					                    let background = $(`<div class="loading-bg"></div>`)
 | 
				
			||||||
 | 
					                    $("body").append(background);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    $("body .loading-bg").show();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $("body .loading-bg").hide();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //==============================================================================
 | 
					        //==============================================================================
 | 
				
			||||||
        //                       ↓  系統監控 - 共用 Function ↓
 | 
					        //                       ↓  系統監控 - 共用 Function ↓
 | 
				
			||||||
        //==============================================================================
 | 
					        //==============================================================================
 | 
				
			||||||
 | 
				
			|||||||
@ -49,7 +49,7 @@ var elevatorSpeed;
 | 
				
			|||||||
//     sensorVals[i] = Math.random();
 | 
					//     sensorVals[i] = Math.random();
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function launchViewer(urn) {
 | 
					function launchViewer(urn, eleOption ,callback) {
 | 
				
			||||||
    var options = {
 | 
					    var options = {
 | 
				
			||||||
        env: 'AutodeskProduction',
 | 
					        env: 'AutodeskProduction',
 | 
				
			||||||
        getAccessToken: getForgeToken
 | 
					        getAccessToken: getForgeToken
 | 
				
			||||||
@ -60,8 +60,14 @@ function launchViewer(urn) {
 | 
				
			|||||||
        //viewer = new Autodesk.Viewing.Viewer3D(document.getElementById('forgeViewer'));
 | 
					        //viewer = new Autodesk.Viewing.Viewer3D(document.getElementById('forgeViewer'));
 | 
				
			||||||
        viewer.start();
 | 
					        viewer.start();
 | 
				
			||||||
        var documentId = 'urn:' + urn;
 | 
					        var documentId = 'urn:' + urn;
 | 
				
			||||||
        Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        Autodesk.Viewing.Document.load(documentId, function (doc) {
 | 
				
			||||||
 | 
					            onDocumentLoadSuccess(doc, eleOption);
 | 
				
			||||||
 | 
					        }, onDocumentLoadFailure);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $("#forgeViewer").on("autodesk:loaded", function () {
 | 
				
			||||||
 | 
					            callback ? callback() : "";
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //test 
 | 
					        //test 
 | 
				
			||||||
@ -118,10 +124,139 @@ function getAllLeafComponents(viewer, callback) {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function onDocumentLoadSuccess(doc) {
 | 
					class elevator3D {
 | 
				
			||||||
 | 
					    constructor(option = {}) {
 | 
				
			||||||
 | 
					        this.ele = option.element;
 | 
				
			||||||
 | 
					        this.viewer = option.viewer;
 | 
				
			||||||
 | 
					        this.nodeId = option.nodeId;
 | 
				
			||||||
 | 
					        this.speed = option.speed ?? 0.3;
 | 
				
			||||||
 | 
					        this.fragProxys = [];
 | 
				
			||||||
 | 
					        this.fragProxy = null;
 | 
				
			||||||
 | 
					        this.initCallback = option.inited ?? null;
 | 
				
			||||||
 | 
					        this.movStatus = 0;
 | 
				
			||||||
 | 
					        this.targetFloorZ = 0;
 | 
				
			||||||
 | 
					        this.floorHeight = option.floorHeight ?? [{}];
 | 
				
			||||||
 | 
					        this.init();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setTreeFrag = function () {
 | 
				
			||||||
 | 
					        let tree = this.viewer.model.getData().instanceTree;
 | 
				
			||||||
 | 
					        let nodeId = this.nodeId;
 | 
				
			||||||
 | 
					        //tree.enumNodeChildren(nodeId, (node) => {
 | 
				
			||||||
 | 
					        //    nodeId = node;
 | 
				
			||||||
 | 
					        //    tree.enumNodeFragments(nodeId, (frag) => {
 | 
				
			||||||
 | 
					        //        this.fragProxy = this.viewer.impl.getFragmentProxy(this.viewer.model, frag);
 | 
				
			||||||
 | 
					        //        this.fragProxy.getAnimTransform();
 | 
				
			||||||
 | 
					        //        let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //        this.fragProxy.position = fragPosition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //        this.fragProxy.updateAnimTransform()
 | 
				
			||||||
 | 
					        //    });
 | 
				
			||||||
 | 
					        //})
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        tree.enumNodeFragments(nodeId, (frag) => {
 | 
				
			||||||
 | 
					            let fragProxy = this.viewer.impl.getFragmentProxy(this.viewer.model, frag);
 | 
				
			||||||
 | 
					            this.fragProxy = fragProxy;
 | 
				
			||||||
 | 
					            this.fragProxys.push({ nodeId: nodeId, frag: fragProxy });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.fragProxy.getAnimTransform();
 | 
				
			||||||
 | 
					            let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.fragProxy.position = fragPosition;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.fragProxy.updateAnimTransform();
 | 
				
			||||||
 | 
					        },true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.viewer.impl.sceneUpdated(true);
 | 
				
			||||||
 | 
					        if (typeof $(this.ele)[0]._elevator3D == "undefined") { 
 | 
				
			||||||
 | 
					            $(this.ele)[0]._elevator3D = [];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        $(this.ele)[0]._elevator3D.push({ nodeId: nodeId, obj: this });
 | 
				
			||||||
 | 
					        this.initCallback ? this.initCallback() : "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init = function () {
 | 
				
			||||||
 | 
					        this.setTreeFrag();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setElevatorFloor = function (floor) {
 | 
				
			||||||
 | 
					        this.targetFloorZ = this.floorHeight.filter(x => x.floor == floor)[0].height;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setElevatorSpeed = function (speed) { //0.01 ~ 1
 | 
				
			||||||
 | 
					        this.speed = speed;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    movElevator = function () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let tree = this.viewer.model.getData().instanceTree;
 | 
				
			||||||
 | 
					        let nodeId = this.nodeId;
 | 
				
			||||||
 | 
					        let fragProxyZ = 0;
 | 
				
			||||||
 | 
					        let movStatus = this.movStatus; // 0=no 1=up 2=down
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.fragProxy.position.z > this.targetFloorZ) {
 | 
				
			||||||
 | 
					            movStatus = 2
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (this.fragProxy.position.z < this.targetFloorZ) {
 | 
				
			||||||
 | 
					            movStatus = 1
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (movStatus == 0) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        tree.enumNodeFragments(nodeId, (frag) => {
 | 
				
			||||||
 | 
					            this.fragProxy = this.viewer.impl.getFragmentProxy(this.viewer.model, frag);
 | 
				
			||||||
 | 
					            this.fragProxy.getAnimTransform();
 | 
				
			||||||
 | 
					            //let fragPosition = new THREE.Vector3(0, 0, 15);// 一樓0 二樓15 三樓 26
 | 
				
			||||||
 | 
					            if (movStatus == 2) {
 | 
				
			||||||
 | 
					                this.fragProxy.position.z -= this.speed;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (movStatus == 1) {
 | 
				
			||||||
 | 
					                this.fragProxy.position.z += this.speed;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fragProxyZ = this.fragProxy.position.z;
 | 
				
			||||||
 | 
					            this.fragProxy.updateAnimTransform()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        },true);
 | 
				
			||||||
 | 
					        this.viewer.impl.sceneUpdated(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let movElevator = $(this.ele)[0]._elevator3D.filter(x => x.nodeId == this.nodeId)[0]?.obj.movElevator.bind(this);
 | 
				
			||||||
 | 
					        if (movStatus == 2) {
 | 
				
			||||||
 | 
					            if (fragProxyZ >= this.targetFloorZ) {
 | 
				
			||||||
 | 
					                requestAnimationFrame(() => {
 | 
				
			||||||
 | 
					                    movElevator();
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (movStatus == 1) {
 | 
				
			||||||
 | 
					            if (fragProxyZ <= this.targetFloorZ) {
 | 
				
			||||||
 | 
					                requestAnimationFrame(() => {
 | 
				
			||||||
 | 
					                    movElevator();
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //let fragPosition = new THREE.Vector3(position);// 一樓0 二樓15 三樓 26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //fragProxy.position = fragPosition;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //fragProxy.updateAnimTransform();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //viewer.impl.sceneUpdated(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function onDocumentLoadSuccess(doc,eleOption) {
 | 
				
			||||||
    var viewables = doc.getRoot().getDefaultGeometry();
 | 
					    var viewables = doc.getRoot().getDefaultGeometry();
 | 
				
			||||||
    viewer.loadDocumentNode(doc, viewables).then(i => {
 | 
					    viewer.loadDocumentNode(doc, viewables).then(i => {
 | 
				
			||||||
        // documented loaded, any action?
 | 
					        // documented loaded, any action?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    // viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => {
 | 
					    // viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => {
 | 
				
			||||||
    //     var currSelection = viewer.getSelection();
 | 
					    //     var currSelection = viewer.getSelection();
 | 
				
			||||||
@ -129,28 +264,46 @@ function onDocumentLoadSuccess(doc) {
 | 
				
			|||||||
    //     domElem.innerText = currSelection[0];
 | 
					    //     domElem.innerText = currSelection[0];
 | 
				
			||||||
    // });
 | 
					    // });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
 | 
					    viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
 | 
				
			||||||
        // var instanceTree = viewer.model.getData().instanceTree;
 | 
					        //var instanceTree = viewer.model.getData().instanceTree;
 | 
				
			||||||
        // var allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex);
 | 
					        //var allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex);
 | 
				
			||||||
        // var domElem = document.getElementById('all_id');
 | 
					        //var domElem = document.getElementById('all_id');
 | 
				
			||||||
        // domElem.innerText = allDbIdsStr;
 | 
					        //domElem.innerText = allDbIdsStr;
 | 
				
			||||||
 | 
					        let nodes = eleOption.nodes ?? [];
 | 
				
			||||||
 | 
					        let element = eleOption.element ?? "";
 | 
				
			||||||
 | 
					        $(element)[0]._elevator3D = [];
 | 
				
			||||||
 | 
					        $.each(nodes, function (idx, node) {
 | 
				
			||||||
 | 
					            let options = {
 | 
				
			||||||
 | 
					                element: $(element),
 | 
				
			||||||
 | 
					                viewer: viewer,
 | 
				
			||||||
 | 
					                nodeId: node,
 | 
				
			||||||
 | 
					                floorHeight: eleOption.floorHeight ?? [],
 | 
				
			||||||
 | 
					                inited: function () {
 | 
				
			||||||
 | 
					                    if (idx == nodes.length - 1) {
 | 
				
			||||||
 | 
					                        $(element).trigger("autodesk:loaded");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            let elevator3DObj = new elevator3D(options);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // let tree = viewer.model.getData().instanceTree;
 | 
					        })
 | 
				
			||||||
        // let nodeId = 10952;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // tree.enumNodeFragments(nodeId, function (frag) {
 | 
					        //let tree = viewer.model.getData().instanceTree;
 | 
				
			||||||
        //     fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
 | 
					        //let nodeId = 10952;
 | 
				
			||||||
        //     fragProxy.getAnimTransform();
 | 
					        //console.log("tree", tree)
 | 
				
			||||||
        //     let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
 | 
					        //tree.enumNodeFragments(nodeId, function (frag) {
 | 
				
			||||||
 | 
					        //    fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
 | 
				
			||||||
 | 
					        //    fragProxy.getAnimTransform();
 | 
				
			||||||
 | 
					        //    let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //     fragProxy.position = fragPosition
 | 
					        //    fragProxy.position = fragPosition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //     fragProxy.updateAnimTransform()
 | 
					        //    fragProxy.updateAnimTransform()
 | 
				
			||||||
 | 
					        //});
 | 
				
			||||||
 | 
					        //viewer.impl.sceneUpdated(true);
 | 
				
			||||||
 | 
					        //$("#forgeViewer").trigger("autodesk:loaded");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // });
 | 
					    });
 | 
				
			||||||
        // viewer.impl.sceneUpdated(true);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,15 @@ var varApiUrl = "/api/";  //API路徑
 | 
				
			|||||||
var varPathImg = "/Upload/Images/";
 | 
					var varPathImg = "/Upload/Images/";
 | 
				
			||||||
var varPathFile = "/Upload/Files/";
 | 
					var varPathFile = "/Upload/Files/";
 | 
				
			||||||
var statusArr = { 1: "啟用", 0: "未啟用", 9: "刪除" };
 | 
					var statusArr = { 1: "啟用", 0: "未啟用", 9: "刪除" };
 | 
				
			||||||
 | 
					var common = {
 | 
				
			||||||
 | 
					    AddSuc: "新增成功",
 | 
				
			||||||
 | 
					    EditSuc: "編輯成功",
 | 
				
			||||||
 | 
					    DelSuc: "刪除成功",
 | 
				
			||||||
 | 
					    AddErr: "新增失敗,",
 | 
				
			||||||
 | 
					    EditErr: "編輯失敗,",
 | 
				
			||||||
 | 
					    DelErr: "刪除失敗,",
 | 
				
			||||||
 | 
					    SysErr: "系統內部發生錯誤,請聯繫系統管理員"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
var objSendData = { Data: null };
 | 
					var objSendData = { Data: null };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//重新轉址 for Niagara4
 | 
					//重新轉址 for Niagara4
 | 
				
			||||||
 | 
				
			|||||||
@ -226,3 +226,40 @@ function getOneSystemAlarmStateByBaja(systemPath, callback) {
 | 
				
			|||||||
            });
 | 
					            });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 在單一系統下,取得各個系統的狀態 異常與否
 | 
				
			||||||
 | 
					 * @param {any} systemPath
 | 
				
			||||||
 | 
					 * @param {any} callback
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getOneSystemStateByBaja(systemPath, callback) {
 | 
				
			||||||
 | 
					    var _result = "";
 | 
				
			||||||
 | 
					    var _ss = "";
 | 
				
			||||||
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    require(['baja!'], function (baja) {
 | 
				
			||||||
 | 
					        baja.Ord.make("local:|foxs:|alarm:|bql:select top 1 alarmData, alarmData.sourceName, sourceState where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
 | 
				
			||||||
 | 
					            .then(function (table) {
 | 
				
			||||||
 | 
					                return table.cursor({
 | 
				
			||||||
 | 
					                    each: function (record) {
 | 
				
			||||||
 | 
					                        //if (_index == 0)
 | 
				
			||||||
 | 
					                        //    _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
 | 
				
			||||||
 | 
					                        //else
 | 
				
			||||||
 | 
					                        //    _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
 | 
				
			||||||
 | 
					                        _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
 | 
				
			||||||
 | 
					                        _index++;
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    after: function () {
 | 
				
			||||||
 | 
					                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
 | 
					                        _result += _ss;
 | 
				
			||||||
 | 
					                        _result += ']}';
 | 
				
			||||||
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
 | 
					                            callback(_result);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    limit: -1,
 | 
				
			||||||
 | 
					                    offset: 0
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -35,3 +35,156 @@ function getElectricMeterTotalByBaja(devicePath, timeType, callback) {
 | 
				
			|||||||
            });
 | 
					            });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 取得電表即時資料 by baja
 | 
				
			||||||
 | 
					 * @param {any} devicePath 
 | 
				
			||||||
 | 
					 * @param {any} callback
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getElectricMeterNoweDataByBaja(devicePath, callback) {
 | 
				
			||||||
 | 
					    var _result = "";
 | 
				
			||||||
 | 
					    var _ss = "";
 | 
				
			||||||
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
 | 
				
			||||||
 | 
					        console.log('local:|foxs:|station:|slot:/' + devicePath + '|bql:select name, out, out.value from control:ControlPoint');
 | 
				
			||||||
 | 
					        baja.Ord.make('local:|foxs:|station:|slot:/' + devicePath + '|bql:select name, out, out.value from control:ControlPoint').get()
 | 
				
			||||||
 | 
					            .then(function (table) {
 | 
				
			||||||
 | 
					                return table.cursor({
 | 
				
			||||||
 | 
					                    each: function (record) {
 | 
				
			||||||
 | 
					                        if (_index == 0)
 | 
				
			||||||
 | 
					                            _ss += '{"name":"' + record.get('name') + '", "value":' + record.get('out').get('value') + '"}';
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            _ss += ',{"name":"' + record.get('name') + '", "value":' + record.get('out').get('value') + '"}';
 | 
				
			||||||
 | 
					                        _index++;
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    after: function () {
 | 
				
			||||||
 | 
					                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
 | 
					                        _result += _ss;
 | 
				
			||||||
 | 
					                        _result += ']}';
 | 
				
			||||||
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
 | 
					                            callback(_result);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    limit: -1,
 | 
				
			||||||
 | 
					                    offset: 0
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 取得電表每小時資料 by baja
 | 
				
			||||||
 | 
					 * @param {any} devicePath 
 | 
				
			||||||
 | 
					 * @param {any} startDate_millisecond
 | 
				
			||||||
 | 
					 * @param {any} endDate_millisecond 
 | 
				
			||||||
 | 
					 * @param {any} callback
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getElectricMeterHourDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, callback) {
 | 
				
			||||||
 | 
					    var _result = "";
 | 
				
			||||||
 | 
					    var _ss = "";
 | 
				
			||||||
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
 | 
				
			||||||
 | 
					        console.log('transform:slot:/' + devicePath + '/History/TR_Daily|bql: select * where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond);
 | 
				
			||||||
 | 
					        baja.Ord.make('transform:slot:/' + devicePath + '/History/TR_Daily|bql: select * where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond).get()
 | 
				
			||||||
 | 
					            .then(function (table) {
 | 
				
			||||||
 | 
					                return table.cursor({
 | 
				
			||||||
 | 
					                    each: function (record) {
 | 
				
			||||||
 | 
					                        if (_index == 0)
 | 
				
			||||||
 | 
					                            _ss += '{"timestamp":' + record.get('timestamp') + ', "value":"' + record.get('kwh1') + '"}';
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            _ss += ',{"timestamp":' + record.get('timestamp') + ', "value":"' + record.get('kwh1') + '"}';
 | 
				
			||||||
 | 
					                        _index++;
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    after: function () {
 | 
				
			||||||
 | 
					                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
 | 
					                        _result += _ss;
 | 
				
			||||||
 | 
					                        _result += ']}';
 | 
				
			||||||
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
 | 
					                            callback(_result);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    limit: -1,
 | 
				
			||||||
 | 
					                    offset: 0
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 取得電表 單日kwh by baja
 | 
				
			||||||
 | 
					 * @param {any} devicePath 
 | 
				
			||||||
 | 
					 * @param {any} date_millisecond
 | 
				
			||||||
 | 
					 * @param {any} callback
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getElectricMeterOneDayKwhByBaja(devicePath, date_millisecond, callback) {
 | 
				
			||||||
 | 
					    var _result = "";
 | 
				
			||||||
 | 
					    var _ss = "";
 | 
				
			||||||
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
 | 
				
			||||||
 | 
					        console.log('transform:slot:/' + devicePath + '/History/TR_Month|bql: select * where timestamp.millis = ' + date_millisecond);
 | 
				
			||||||
 | 
					        baja.Ord.make('transform:slot:/' + devicePath + '/History/TR_Month|bql: select * where timestamp.millis = ' + date_millisecond).get()
 | 
				
			||||||
 | 
					            .then(function (table) {
 | 
				
			||||||
 | 
					                return table.cursor({
 | 
				
			||||||
 | 
					                    each: function (record) {
 | 
				
			||||||
 | 
					                        if (_index == 0)
 | 
				
			||||||
 | 
					                            _ss += '{"timestamp":"' + record.get('timestamp') + '", "value":' + record.get('kwh1') + '"}';
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            _ss += ',{"timestamp":"' + record.get('timestamp') + '", "value":' + record.get('kwh1') + '"}';
 | 
				
			||||||
 | 
					                        _index++;
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    after: function () {
 | 
				
			||||||
 | 
					                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
 | 
					                        _result += _ss;
 | 
				
			||||||
 | 
					                        _result += ']}';
 | 
				
			||||||
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
 | 
					                            callback(_result);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    limit: -1,
 | 
				
			||||||
 | 
					                    offset: 0
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 取得電表每周資料 by baja
 | 
				
			||||||
 | 
					 * @param {any} devicePath 
 | 
				
			||||||
 | 
					 * @param {any} startDate_millisecond
 | 
				
			||||||
 | 
					 * @param {any} endDate_millisecond 
 | 
				
			||||||
 | 
					 * @param {any} callback
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getElectricMeterWeekDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, callback) {
 | 
				
			||||||
 | 
					    var _result = "";
 | 
				
			||||||
 | 
					    var _ss = "";
 | 
				
			||||||
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
 | 
				
			||||||
 | 
					        console.log('transform:slot:/' + devicePath + '/History/TR_Daily|bql: select * where timestamp.millis >= ' + startDate_millisecond + ' and timestamp.millis <= ' + endDate_millisecond);
 | 
				
			||||||
 | 
					        baja.Ord.make('transform:slot:/' + devicePath + '/History/TR_Month|bql: select * where timestamp.millis >= ' + startDate_millisecond + ' and timestamp.millis <= ' + endDate_millisecond).get()
 | 
				
			||||||
 | 
					            .then(function (table) {
 | 
				
			||||||
 | 
					                return table.cursor({
 | 
				
			||||||
 | 
					                    each: function (record) {
 | 
				
			||||||
 | 
					                        if (_index == 0)
 | 
				
			||||||
 | 
					                            _ss += '{"timestamp":' + record.get('timestamp') + ', "value":"' + record.get('kwh1') + '"}';
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            _ss += ',{"timestamp":' + record.get('timestamp') + ', "value":"' + record.get('kwh1') + '"}';
 | 
				
			||||||
 | 
					                        _index++;
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    after: function () {
 | 
				
			||||||
 | 
					                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
 | 
					                        _result += _ss;
 | 
				
			||||||
 | 
					                        _result += ']}';
 | 
				
			||||||
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
 | 
					                            callback(_result);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    limit: -1,
 | 
				
			||||||
 | 
					                    offset: 0
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user