using Shared.Common; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using ZigBee.Device; namespace Shared.Phone.UserCenter { /// /// 场景的逻辑 /// public class HdlSceneLogic { #region ■ 变量声明___________________________ /// /// 场景的逻辑 /// private static HdlSceneLogic m_Current = null; /// /// 场景的逻辑 /// public static HdlSceneLogic Current { get { if (m_Current == null) { m_Current = new HdlSceneLogic(); } return m_Current; } } /// /// 场景对象 /// private Dictionary dicScenes = new Dictionary(); #endregion #region ■ 刷新场景___________________________ /// /// 从本地刷新场景 /// public void ReFreshByLocal() { //清空场景 this.dicScenes.Clear(); //获取全部文件 var listFile = this.GetAllSceneFile(); foreach (string fileName in listFile) { try { var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName)); var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonInfo); if (tempScene == null) { continue; } this.dicScenes[tempScene.Id] = tempScene; } catch(Exception ex) { HdlLogLogic.Current.WriteLog(ex); try { //删掉错误文件 Global.DeleteFilebyHomeId(fileName); } catch { } } } } /// /// 刷新房间的场景列表 /// public async Task RefreshSceneUIList() { //获取网关存在的场景 var sceneList = await ZigBee.Device.Scene.GetSceneListAsync(); if (sceneList == null) { return false; } var listEsxit = new HashSet(); foreach (var scene in sceneList) { if (scene == null) { continue; } listEsxit.Add(scene.ScenesId); } var listDelete = new List(); foreach (var scId in this.dicScenes.Keys) { if (listEsxit.Contains(scId) == false) { //删除的对象 listDelete.Add(this.dicScenes[scId]); } } foreach (var sceneui in listDelete) { //执行删除 this.RemoveScene(sceneui); } return true; } #endregion #region ■ 添加场景___________________________ /// /// 添加场景(更新网关) 0失败 1成功 -1已经存在 /// /// The scene. /// Scene name. /// 背景图片,不包含住宅路径 如果iconPathType=1或者2 需要拼接住宅 变成 住宅/sceneIconPath /// Commons. /// I场景背景图片来源类型 图片来源 0--本地图库 1--拍照 2--系统图库 默认0 public async Task AddScene(Room i_room, string sceneName, string sceneIconPath, List commons, int iconPathType) { var getSceneIdAllData = await Scene.GetSceneNewIdAsync(sceneName); if (getSceneIdAllData == null || getSceneIdAllData.getSceneIdData == null) { return 0; } var getSceneIdData = getSceneIdAllData.getSceneIdData; bool result = true; foreach (var common in commons) { //添加新成员 var addSceneMemberData = new Scene.AddSceneMemberData { Type = common.Type, DeviceAddr = common.DeviceAddr, Epoint = common.Epoint, ScenesId = getSceneIdData.NewScenesId, TaskList = common.TaskList, DelayTime = common.DelayTime, MemberNumber = common.MemberNumber, ElseScenesId = common.ElseScenesId }; //添加新成员 返回结果 var addSceneMemberResponseAllData = await Scene.AddSceneMemberAsync(addSceneMemberData); if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null) { continue; } var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData; if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1) { result = false; } } //加入成功 if (result) { var sceneUI = new SceneUI { Name = sceneName, Id = getSceneIdData.NewScenesId, IconPath = sceneIconPath, IconPathType = iconPathType, AddSceneMemberDataList = commons }; //添加缓存 sceneUI.Save(); this.dicScenes[sceneUI.Id] = sceneUI; if (i_room.ListSceneId.Contains(sceneUI.Id) == false) { i_room.ListSceneId.Add(sceneUI.Id); i_room.Save(); } return 1; } return 0; } /// /// 添加场景(这个单纯只改房间) /// /// Scene. public void AddScene(Room i_room, SceneUI scene) { //添加缓存 if (i_room.ListSceneId.Contains(scene.Id) == false) { i_room.ListSceneId.Add(scene.Id); i_room.Save(); } } /// /// 添加搜藏场景 /// /// Scene. public void AddLoveScene(SceneUI scene) { var nowRoom = HdlRoomLogic.Current.GetLoveRoom(); //添加缓存 if (nowRoom.ListSceneId.Contains(scene.Id) == false) { nowRoom.ListSceneId.Add(scene.Id); nowRoom.Save(); } } /// /// 删除场景(这个只移除内存) /// /// public void DeleteScene(Room i_room, SceneUI scene) { //移除缓存 if (i_room.ListSceneId.Contains(scene.Id) == true) { i_room.ListSceneId.Remove(scene.Id); i_room.Save(); } } /// /// 删除搜藏场景 /// /// public void DeleteLoveScene(SceneUI scene) { var nowRoom = HdlRoomLogic.Current.GetLoveRoom(); //移除缓存 if (nowRoom.ListSceneId.Contains(scene.Id) == true) { nowRoom.ListSceneId.Remove(scene.Id); nowRoom.Save(); } } #endregion #region ■ 修改场景___________________________ /// /// 修改场景设备 0失败 1成功 /// /// The scene. /// Scene user interface. /// Scene remove member data. /// Add commons. public async Task ModifyScene(SceneUI sceneUI, Scene.SceneRemoveMemberData sceneRemoveMemberData, List addCommons) { bool result = true; //移除成员 返回结果 var removeSceneMemberResponseAllData = await ZigBee.Device.Scene.RemoveSceneMemberAsync(sceneRemoveMemberData); if (removeSceneMemberResponseAllData == null || removeSceneMemberResponseAllData.removeSceneMemberResponseData == null) { return 0; } var removeSceneMemberResponseData = removeSceneMemberResponseAllData.removeSceneMemberResponseData; if (removeSceneMemberResponseData == null) { return 0; } if (removeSceneMemberResponseData.Result != 0) { result = false; } //添加 foreach (var addCommon in addCommons) { //添加新成员 var addSceneMemberData = new ZigBee.Device.Scene.AddSceneMemberData { DeviceAddr = addCommon.DeviceAddr, Type = addCommon.Type, Epoint = addCommon.Epoint, ScenesId = sceneUI.Id, TaskList = addCommon.TaskList, DelayTime = addCommon.DelayTime, ElseScenesId = addCommon.ElseScenesId, MemberNumber = addCommon.MemberNumber }; //添加新成员 返回结果 var addSceneMemberResponseAllData = await ZigBee.Device.Scene.AddSceneMemberAsync(addSceneMemberData); if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null) { result = false; System.Console.WriteLine("添加场景失败"); continue; } var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData; if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1) { result = false; } } //加入成功 if (result) { sceneUI.AddSceneMemberDataList = addCommons; sceneUI.Save(); return 1; } return 0; } #endregion #region ■ 删除场景___________________________ /// /// 移除场景--该仅进行了对本地场景数据的删除 /// /// Scene user interface. public void RemoveScene(SceneUI sceneUI) { //移除缓存 this.dicScenes.Remove(sceneUI.Id); var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id); if (room != null) { room.ListSceneId.Remove(sceneUI.Id); room.Save(); } //移除喜爱 var roomLove = HdlRoomLogic.Current.GetLoveRoom(); if (roomLove.ListSceneId.Contains(sceneUI.Id) == true) { roomLove.ListSceneId.Remove(sceneUI.Id); roomLove.Save(); } //删除文件 if (Global.IsExistsByHomeId(sceneUI.FileName) == true) { Global.DeleteFilebyHomeId(sceneUI.FileName); HdlAutoBackupLogic.DeleteFile(sceneUI.FileName); } //删除图片 if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2) { if (Global.IsExistsByHomeId(sceneUI.IconPath)) { Global.DeleteFilebyHomeId(sceneUI.IconPath); HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath); } } } #endregion #region ■ 获取场景___________________________ /// /// 通过场景id获取场景 /// /// The scene UIB y scene identifier. /// Scene identifier. public SceneUI GetSceneUIBySceneId(int sceneId) { if (this.dicScenes.ContainsKey(sceneId) == true) { return this.dicScenes[sceneId]; } return null; } /// /// 获取该楼层所有场景 /// /// /// public List GetSameFloorScenes(string floorId) { List sceneUIs = new List(); var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId); foreach (var r in rooms) { foreach (int sceneId in r.ListSceneId) { if (this.dicScenes.ContainsKey(sceneId) == true) { sceneUIs.Add(this.dicScenes[sceneId]); } } } return sceneUIs; } /// /// 根据场景Id,获取楼层和房间名字(楼层,房间名字) /// /// public string GetZoneById(int sceneId) { var room =HdlRoomLogic.Current.GetRoomBySceneId(sceneId); if (room == null) { return null; } var floorName = Shared.Common.Config.Instance.Home.GetFloorNameById(room.FloorId); if (floorName == null) { return room.Name; } return $"{floorName},{room.Name}"; } /// /// 获取未分配区域场景 /// /// public List GetUnalloctedScenes() { List sceneUIs = new List(); //已经存在的场景 var listEsxit = new HashSet(); var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { foreach (int sceneId in room.ListSceneId) { if (listEsxit.Contains(sceneId) == false) { listEsxit.Add(sceneId); } } } foreach (var myScene in this.dicScenes.Values) { if (listEsxit.Contains(myScene.Id) == false) { sceneUIs.Add(myScene); } } if (sceneUIs.Count == 0) { return null; } return sceneUIs; } /// /// 获取全部房间的全部场景 /// /// public List GetAllRoomSceneList() { List sceneUIs = new List(); var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { foreach (int sceneId in room.ListSceneId) { if (this.dicScenes.ContainsKey(sceneId) == true) { sceneUIs.Add(this.dicScenes[sceneId]); } } } return sceneUIs; } /// /// 获取指定房间的全部场景 /// /// public List GetRoomSceneList(Room i_room) { List sceneUIs = new List(); foreach (int sceneId in i_room.ListSceneId) { if (this.dicScenes.ContainsKey(sceneId) == true) { sceneUIs.Add(this.dicScenes[sceneId]); } } return sceneUIs; } #endregion #region ■ 一般方法___________________________ /// /// 获取本地全部的场景文件 /// /// public List GetAllSceneFile() { List listSceneFile = new List(); List listAllFile = Global.FileListByHomeId(); foreach (string file in listAllFile) { if (file.StartsWith("Scene_") == false) { //如果不是场景文件 continue; } listSceneFile.Add(file); } return listSceneFile; } #endregion } }