[Frontend][系統監控] 熱點放入 forge3D 程序建置 | 串資料庫拿取設備座標放入 3d 圖建置 | [FrontendWebApi] 後端撈取設備座標API 調整 | [系統監控] 電梯判斷node程序調整
This commit is contained in:
		
							parent
							
								
									64e9b8e3f0
								
							
						
					
					
						commit
						34f6022b10
					
				@ -45,8 +45,9 @@
 | 
				
			|||||||
                setLightColor();
 | 
					                setLightColor();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (arr.indexOf(5) != -1) {
 | 
					            if (arr.indexOf(5) != -1) {
 | 
				
			||||||
                setHotspotPoint();
 | 
					                getHotspotPoint(() => {
 | 
				
			||||||
                show3DModel(data.urn_3D);
 | 
					                    show3DModel(data.urn_3D);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
@ -255,38 +256,38 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    function show3DModel(urn) {
 | 
					    function show3DModel(urn) {
 | 
				
			||||||
        launchViewerForHotspot(urn, (viewer, nodeIds) => {
 | 
					        launchViewerForHotspot(urn, (viewer, nodeIds) => {
 | 
				
			||||||
            getHotspotPoint();
 | 
					            
 | 
				
			||||||
        },"[name=forgeViewer]");
 | 
					        },"[name=forgeViewer]");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getHotspotPoint() {
 | 
					    function getHotspotPoint(callback = null) {
 | 
				
			||||||
        let url = baseApiUrl + "/api/GetDevForCor";
 | 
					        let url = baseApiUrl + "/api/GetDevForCor";
 | 
				
			||||||
        let sendData = [{
 | 
					        let sendData = {
 | 
				
			||||||
            "device_area_tag": pageAct.AreaTag,
 | 
					            "device_area_tag": pageAct.AreaTag,
 | 
				
			||||||
            "device_building_tag": pageAct.buiTag,
 | 
					            "device_building_tag": pageAct.buiTag,
 | 
				
			||||||
            "device_system_tag": pageAct.sysMainTag,
 | 
					            "device_system_tag": pageAct.sysMainTag,
 | 
				
			||||||
            "device_name_tag": pageAct.sysSubTag,
 | 
					            "device_name_tag": pageAct.sysSubTag,
 | 
				
			||||||
        }];
 | 
					        };
 | 
				
			||||||
        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 {
 | 
				
			||||||
                devicePointList.push(res.data.device_coordinate_3d);
 | 
					                let myDataList = res.data?.filter(x => x.device_coordinate_3d != null && isJSON(x.device_coordinate_3d)).map(x => { return { position: JSON.parse(x.device_coordinate_3d) } });
 | 
				
			||||||
 | 
					                setHotspotPoint(myDataList);
 | 
				
			||||||
 | 
					                callback ? callback() : "";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }, null, "POST").send();
 | 
					        }, null, "POST").send();
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function setHotspotPoint() {
 | 
					    function setHotspotPoint(myDataList = []) {
 | 
				
			||||||
        //先假設有抓到點位的座標 之後api改input後再接
 | 
					        console.log(myDataList)
 | 
				
			||||||
        const mydatalist = [{ position: { x: -21.95, y: 8.92, z: 63.27 } },
 | 
					        getHopspotPoint(myDataList);
 | 
				
			||||||
                            { position: { x: -21.95, y: 7.61, z: 63.27 } },
 | 
					 | 
				
			||||||
                            { position: { x: -21.95, y: 6.43, z: 63.27 } },
 | 
					 | 
				
			||||||
                            { position: { x: -21.95, y: 5.31, z: 63.27 } }
 | 
					 | 
				
			||||||
                           ];
 | 
					 | 
				
			||||||
        getHopspotPoint(mydatalist);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onEvent("autodesk:click:sprite", "[name=forgeViewer]", function (e, obj) {
 | 
				
			||||||
 | 
					        console.log(e, obj)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@ -314,14 +314,15 @@ function getNodeIdByDbIds(allDbIdsStr, callback = null) {
 | 
				
			|||||||
    let _childId = 0;
 | 
					    let _childId = 0;
 | 
				
			||||||
    let evelMap = new Map();
 | 
					    let evelMap = new Map();
 | 
				
			||||||
    let finTimeout = null;
 | 
					    let finTimeout = null;
 | 
				
			||||||
    let isCalled = false;
 | 
					    let fin2Timeout = null;
 | 
				
			||||||
 | 
					    let hasElec = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    allDbIdsStr.forEach((dbId) => {
 | 
					    allDbIdsStr.forEach((dbId) => {
 | 
				
			||||||
        curDbId = parseInt(dbId);
 | 
					        curDbId = parseInt(dbId);
 | 
				
			||||||
        viewer.getProperties(curDbId, function (e) {
 | 
					        viewer.getProperties(curDbId, function (e) {
 | 
				
			||||||
            e.properties.forEach(function (item, idx) {
 | 
					            e.properties.forEach(function (item, idx) {
 | 
				
			||||||
                if (item.displayName == "tag_id" && e.name == "【電梯】") {
 | 
					                if (item.displayName == "tag_id" && e.name.indexOf("【電梯】") != -1) {
 | 
				
			||||||
 | 
					                    hasElec = true
 | 
				
			||||||
                    tagId = e.dbId;
 | 
					                    tagId = e.dbId;
 | 
				
			||||||
                    viewer.getProperties(tagId, function (e2) {
 | 
					                    viewer.getProperties(tagId, function (e2) {
 | 
				
			||||||
                        e2.properties.forEach(function (item2, idx2) {
 | 
					                        e2.properties.forEach(function (item2, idx2) {
 | 
				
			||||||
@ -341,8 +342,7 @@ function getNodeIdByDbIds(allDbIdsStr, callback = null) {
 | 
				
			|||||||
                                    console.log("map: " + evelMap);
 | 
					                                    console.log("map: " + evelMap);
 | 
				
			||||||
                                    clearTimeout(finTimeout)
 | 
					                                    clearTimeout(finTimeout)
 | 
				
			||||||
                                    finTimeout = setTimeout(() => {
 | 
					                                    finTimeout = setTimeout(() => {
 | 
				
			||||||
                                        if (isCalled == false) {
 | 
					                                        if (hasElec == true) {
 | 
				
			||||||
                                            isCalled = true;
 | 
					 | 
				
			||||||
                                            callback ? callback(evelMap) : "";
 | 
					                                            callback ? callback(evelMap) : "";
 | 
				
			||||||
                                        }
 | 
					                                        }
 | 
				
			||||||
                                    }, 10)
 | 
					                                    }, 10)
 | 
				
			||||||
@ -353,10 +353,9 @@ function getNodeIdByDbIds(allDbIdsStr, callback = null) {
 | 
				
			|||||||
                        });
 | 
					                        });
 | 
				
			||||||
                    })
 | 
					                    })
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    clearTimeout(finTimeout)
 | 
					                    clearTimeout(fin2Timeout)
 | 
				
			||||||
                    finTimeout = setTimeout(() => {
 | 
					                    fin2Timeout = setTimeout(() => {
 | 
				
			||||||
                        if (isCalled == false) {
 | 
					                        if (hasElec == false) {
 | 
				
			||||||
                            isCalled = true;
 | 
					 | 
				
			||||||
                            callback ? callback([]) : "";
 | 
					                            callback ? callback([]) : "";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }, 10)
 | 
					                    }, 10)
 | 
				
			||||||
@ -622,7 +621,7 @@ async function addHotPoint(data) {
 | 
				
			|||||||
    const DataVizCore = Autodesk.DataVisualization.Core;
 | 
					    const DataVizCore = Autodesk.DataVisualization.Core;
 | 
				
			||||||
    const viewableType = Autodesk.DataVisualization.Core.ViewableType.SPRITE;//DataVizCore.ViewableType.SPRITE;
 | 
					    const viewableType = Autodesk.DataVisualization.Core.ViewableType.SPRITE;//DataVizCore.ViewableType.SPRITE;
 | 
				
			||||||
    const spriteColor = new THREE.Color(0xffffff);
 | 
					    const spriteColor = new THREE.Color(0xffffff);
 | 
				
			||||||
    const spriteIcon = "/img/forge/hotspot.svg";
 | 
					    const spriteIcon = "/file/img/forge/hotspot.svg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
 | 
					    const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -654,6 +653,7 @@ async function addHotPoint(data) {
 | 
				
			|||||||
            if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19
 | 
					            if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19
 | 
				
			||||||
                console.log(`Sprite clicked: ${event.dbId}`);
 | 
					                console.log(`Sprite clicked: ${event.dbId}`);
 | 
				
			||||||
                openHotspotModal();
 | 
					                openHotspotModal();
 | 
				
			||||||
 | 
					                $(selector).trigger("autodesk:click:sprite", event);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (event.clickInfo != null) {
 | 
					            if (event.clickInfo != null) {
 | 
				
			||||||
@ -671,11 +671,12 @@ async function addHotPoint(data) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (dbIds.length > 0) {
 | 
					            if (dbIds.length > 0) {
 | 
				
			||||||
                // 處理已選取元件的邏輯
 | 
					                // 處理已選取元件的邏輯
 | 
				
			||||||
 | 
					                $(selector).trigger("autodesk:click:sprite", event);
 | 
				
			||||||
                //openHotspotModal();
 | 
					                //openHotspotModal();
 | 
				
			||||||
                console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}
 | 
					                console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                // 處理沒有選取元件的邏輯
 | 
					                // 處理沒有選取元件的邏輯
 | 
				
			||||||
 | 
					                $(selector).trigger("autodesk:click:sprite", event);
 | 
				
			||||||
                console.log("no item");
 | 
					                console.log("no item");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ var baseApiUrl = "http://localhost:3604";
 | 
				
			|||||||
var baseImgUrl = "https://localhost:44376";
 | 
					var baseImgUrl = "https://localhost:44376";
 | 
				
			||||||
var varRegApiUrl = "/reg/api/";  //註冊API路徑
 | 
					var varRegApiUrl = "/reg/api/";  //註冊API路徑
 | 
				
			||||||
var varApiUrl = "/api/";  //API路徑
 | 
					var varApiUrl = "/api/";  //API路徑
 | 
				
			||||||
 | 
					var varPathDevIcon = "/upload/device_icon/";
 | 
				
			||||||
var varPathImg = "/Upload/Images/";
 | 
					var varPathImg = "/Upload/Images/";
 | 
				
			||||||
var varPathFile = "/Upload/Files/";
 | 
					var varPathFile = "/Upload/Files/";
 | 
				
			||||||
var varGraPath = "/upload/graph_manage";
 | 
					var varGraPath = "/upload/graph_manage";
 | 
				
			||||||
 | 
				
			|||||||
@ -388,4 +388,13 @@ function strToDate(text, type = null, cal = 0) {
 | 
				
			|||||||
        result = calDay(tarDate, cal);
 | 
					        result = calDay(tarDate, cal);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function isJSON(str) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        JSON.parse(str);
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    } catch {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -669,31 +669,29 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        [HttpPost]
 | 
					        [HttpPost]
 | 
				
			||||||
        [Route("api/GetDevForCor")]
 | 
					        [Route("api/GetDevForCor")]
 | 
				
			||||||
        public async Task<ActionResult<List<DevForCor>>> GetDevForCor([FromBody] List<Device> post)
 | 
					        public async Task<ActionResult<List<DevForCor>>> GetDevForCor([FromBody] Device p)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ApiResult<List<DevForCor>> apiResult = new ApiResult<List<DevForCor>>();
 | 
					            ApiResult<List<DevForCor>> apiResult = new ApiResult<List<DevForCor>>();
 | 
				
			||||||
            List<DevForCor> device = new List<DevForCor>();
 | 
					            List<DevForCor> device = new List<DevForCor>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (post != null)
 | 
					                if (p != null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (post.Count > 0)
 | 
					                    var param = new
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        foreach (var p in post)
 | 
					                        @device_area_tag = p.device_area_tag,
 | 
				
			||||||
                        {
 | 
					                        @device_building_tag = p.device_building_tag,
 | 
				
			||||||
                            var param = new { @device_area_tag = p.device_area_tag, @device_building_tag = p.device_building_tag, @device_system_tag = p.device_system_tag, @device_name_tag = p.device_name_tag,
 | 
					                        @device_system_tag = p.device_system_tag,
 | 
				
			||||||
                                                @device_floor_tag = p.device_floor_tag };
 | 
					                        @device_name_tag = p.device_name_tag,
 | 
				
			||||||
                            var d = await backendRepository.GetOneAsync<DevForCor>($@"select * from device where deleted = 0 and select * from device
 | 
					                        @device_floor_tag = p.device_floor_tag
 | 
				
			||||||
                                                                                        where deleted = 0 and device_area_tag = @device_area_tag and device_building_tag = @device_building_tag 
 | 
					                    };
 | 
				
			||||||
                                                                                            and device_system_tag = @device_system_tag and device_name_tag = @device_name_tag 
 | 
					                    var d = await backendRepository.GetAllAsync<DevForCor>($@"select device_guid,device_number,device_floor_tag,device_coordinate_3d,forge_dbid
 | 
				
			||||||
                                                                                            and device_floor_tag = ifnull(@device_floor_tag, device_floor_tag) "
 | 
					                                                                                from device where deleted = 0 and device_area_tag = @device_area_tag and device_building_tag = @device_building_tag 
 | 
				
			||||||
                                                                                    , param);
 | 
					                                                                                and device_system_tag = @device_system_tag and device_name_tag = @device_name_tag 
 | 
				
			||||||
                            if (d != null)
 | 
					                                                                                and device_floor_tag = ifnull(@device_floor_tag, device_floor_tag) ", param);
 | 
				
			||||||
                                device.Add(d);
 | 
					                     
 | 
				
			||||||
                        }
 | 
					                    apiResult.Data = d;
 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    apiResult.Data = device;
 | 
					 | 
				
			||||||
                    apiResult.Code = "0000";
 | 
					                    apiResult.Code = "0000";
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
@ -711,5 +709,49 @@ namespace FrontendWebApi.ApiControllers
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return Ok(apiResult);
 | 
					            return Ok(apiResult);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 燈控排程列表
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="account"></param>
 | 
				
			||||||
 | 
					        /// <returns></returns>
 | 
				
			||||||
 | 
					        [HttpPost]
 | 
				
			||||||
 | 
					        [Route("api/Device/GetLigSchList")]
 | 
				
			||||||
 | 
					        public async Task<ActionResult<ApiResult<BuildBuildingMenu>>> GetLigSchList([FromBody] FindDevice fd)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ApiResult<BuildBuildingMenu> apiResult = new ApiResult<BuildBuildingMenu>(jwt_str);
 | 
				
			||||||
 | 
					            if (!jwtlife)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                apiResult.Code = "5000";
 | 
				
			||||||
 | 
					                return BadRequest(apiResult);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (string.IsNullOrEmpty(fd.device_guid))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                apiResult.Code = "0002";
 | 
				
			||||||
 | 
					                apiResult.Msg = "傳入參數不完整";
 | 
				
			||||||
 | 
					                return apiResult;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var buiMenu = await frontendRepository.GetOneAsync<BuildBuildingMenu>(
 | 
				
			||||||
 | 
					                    @$"SELECT b.urn_3D,bm.* FROM building_menu bm
 | 
				
			||||||
 | 
					                        JOIN building b on b.building_tag = bm.building_tag
 | 
				
			||||||
 | 
					                        WHERE bm.building_tag = @building_tag AND bm.main_system_tag = @main_system_tag AND bm.sub_system_tag = @sub_system_tag",
 | 
				
			||||||
 | 
					                    new { @sub_system_tag = fd.sub_system_tag, @main_system_tag = fd.main_system_tag, @building_tag = fd.building_tag });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                apiResult.Data = buiMenu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                apiResult.Code = "0000";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception exception)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                apiResult.Code = "9999";
 | 
				
			||||||
 | 
					                apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
 | 
				
			||||||
 | 
					                Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
 | 
				
			||||||
 | 
					                return Ok(apiResult);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return Ok(apiResult);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -31,5 +31,7 @@
 | 
				
			|||||||
    </Content>
 | 
					    </Content>
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</Project>
 | 
					</Project>
 | 
				
			||||||
 | 
				
			|||||||
@ -127,6 +127,6 @@ namespace FrontendWebApi.Models
 | 
				
			|||||||
        public string device_number { get; set; }
 | 
					        public string device_number { get; set; }
 | 
				
			||||||
        public string device_floor_tag { get; set; }
 | 
					        public string device_floor_tag { get; set; }
 | 
				
			||||||
        public string device_coordinate_3d { get; set; }
 | 
					        public string device_coordinate_3d { get; set; }
 | 
				
			||||||
        public int forge_dbid { get; set; }
 | 
					        public int? forge_dbid { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -22,8 +22,8 @@
 | 
				
			|||||||
    "MySqlDBConfig": {
 | 
					    "MySqlDBConfig": {
 | 
				
			||||||
      "Server": "FYlY+w0XDIz+jmF2rlZWJw==", //0.201
 | 
					      "Server": "FYlY+w0XDIz+jmF2rlZWJw==", //0.201
 | 
				
			||||||
      "Port": "js2LutKe+rdjzdxMPQUrvQ==",
 | 
					      "Port": "js2LutKe+rdjzdxMPQUrvQ==",
 | 
				
			||||||
      "Database": "VJB2XC+lAtzuHObDGMVOAA==", //三菱
 | 
					      //"Database": "VJB2XC+lAtzuHObDGMVOAA==", //三菱
 | 
				
			||||||
      //"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp
 | 
					      "Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp
 | 
				
			||||||
      "Root": "SzdxEgaJJ7tcTCrUl2zKsA==",
 | 
					      "Root": "SzdxEgaJJ7tcTCrUl2zKsA==",
 | 
				
			||||||
      "Password": "FVAPxztxpY4gJJKQ/se4bQ=="
 | 
					      "Password": "FVAPxztxpY4gJJKQ/se4bQ=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user