From dce6c3481a37216292724013ff9d2b75ceb82f86 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期三, 10 六月 2020 15:47:28 +0800
Subject: [PATCH] 添加小度的代码
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 273 ++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 224 insertions(+), 49 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index ce36714..b7c17d8 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -79,10 +79,10 @@
/// <summary>
/// 鍒锋柊鏈湴鐨勫叏閮ㄥ満鏅�
/// </summary>
- public async Task<bool> RefreshSceneUIList()
+ public bool RefreshSceneUIList()
{
//鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
- var sceneList = await ZigBee.Device.Scene.GetSceneListAsync();
+ var sceneList = this.RefreshSceneListFromGateway();
if (sceneList == null)
{
return false;
@@ -95,6 +95,8 @@
continue;
}
listEsxit.Add(scene.ScenesId);
+ //鍒锋柊scene鐨勪俊鎭�
+ this.RefreshScene(scene);
}
var listDelete = new List<SceneUI>();
@@ -109,10 +111,103 @@
foreach (var sceneui in listDelete)
{
//鎵ц鍒犻櫎
- this.RemoveScene(sceneui);
+ this.DeleteLocalScene(sceneui);
}
return true;
+ }
+
+ /// <summary>
+ /// 鍒锋柊scene鐨勪俊鎭�
+ /// </summary>
+ /// <param name="sceneInfo"></param>
+ private void RefreshScene(Scene.GetSceneAllInfo sceneInfo)
+ {
+ if (this.dicScenes.ContainsKey(sceneInfo.ScenesId) == true)
+ {
+ var localScene = this.dicScenes[sceneInfo.ScenesId];
+ //鍙埛鏂板悕瀛楀拰缁戝畾琛�
+ localScene.Name = sceneInfo.ScenesName;
+ localScene.AdjustTargetList.Clear();
+ localScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
+ localScene.Save();
+ }
+ else
+ {
+ var newScene = new SceneUI();
+ newScene.Name = sceneInfo.ScenesName;
+ newScene.IconPath = "SceneIcon/0.png";
+ newScene.Id = sceneInfo.ScenesId;
+ newScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
+ //娣诲姞缂撳瓨
+ newScene.Save();
+ //鍔犲叆缂撳瓨
+ this.dicScenes[newScene.Id] = newScene;
+ //澶囦唤
+ HdlAutoBackupLogic.AddOrEditorFile(newScene.FileName);
+ }
+
+ }
+
+ /// <summary>
+ /// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛�
+ /// </summary>
+ /// <returns></returns>
+ private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway()
+ {
+ var mainGateway = ZbGateway.MainGateWay;
+ if (mainGateway == null)
+ {
+ //鑾峰彇缃戝叧瀵硅薄澶辫触
+ this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail));
+ return null;
+ }
+
+ //瓒呮椂鏃堕棿
+ int TimeOut = 0;
+ bool receiptAll = false;
+
+ var listScene = new List<Scene.GetSceneAllInfo>();
+ Action<string, string> action = (topic, message) =>
+ {
+ var gatewayID = topic.Split('/')[0];
+ var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+ if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
+ {
+ var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString());
+ listScene.Add(sceneGetAllInfo);
+
+ if (sceneGetAllInfo.ScenesNum == sceneGetAllInfo.ScenesSum)
+ {
+ //鎺ユ敹瀹屾垚
+ receiptAll = true;
+ TimeOut = 0;
+ }
+ }
+ };
+ mainGateway.Actions += action;
+
+ var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
+ mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+
+ int waitTime = 20 * 6;
+ while (receiptAll == false && TimeOut < waitTime)
+ {
+ //鍏ㄩ儴鎺ユ敹鎵嶉��鍑�
+ System.Threading.Thread.Sleep(50);
+ TimeOut++;
+ }
+ mainGateway.Actions -= action;
+ action = null;
+ if (receiptAll == false)
+ {
+ //缃戠粶涓嶇ǔ瀹氾紝鍦烘櫙鍒楄〃淇℃伅缂烘崯
+ this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull));
+ return null;
+ }
+
+ return listScene;
}
#endregion
@@ -127,25 +222,36 @@
/// <returns></returns>
public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
{
- var result1 = await Scene.GetSceneNewIdAsync(sceneName);
- //鍏遍�氶敊璇娴�
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
- if (error != null)
+ int NewScenesId = -1;
+ //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+ if (Common.Config.Instance.Home.IsVirtually == false)
{
- this.ShowErrorMsg(error);
- return null;
+ var result1 = await Scene.GetSceneNewIdAsync(sceneName);
+ //鍏遍�氶敊璇娴�
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
+ if (error != null)
+ {
+ this.ShowErrorMsg(error);
+ return null;
+ }
+ if (result1 == null || result1.getSceneIdData == null)
+ {
+ //娣诲姞鍦烘櫙澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+ this.ShowTipMsg(msg1);
+ return null;
+ }
+ NewScenesId = result1.getSceneIdData.NewScenesId;
}
- if (result1 == null || result1.getSceneIdData == null)
+ else
{
- //娣诲姞鍦烘櫙澶辫触
- string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
- this.ShowTipMsg(msg1);
- return null;
+ //铏氭嫙鍦烘櫙ID
+ NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
}
//娣诲姞鎵ц鐩爣
- var listSuccess = await this.AddTargetToScene(result1.getSceneIdData.NewScenesId, listAdjustTarget);
+ var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
if (listSuccess == null)
{
return null;
@@ -154,7 +260,7 @@
//鍒涘缓鍦烘櫙瀵硅薄
var newScene = new SceneUI();
newScene.Name = sceneName;
- newScene.Id = result1.getSceneIdData.NewScenesId;
+ newScene.Id = NewScenesId;
newScene.AdjustTargetList.AddRange(listSuccess);
//娣诲姞缂撳瓨
newScene.Save();
@@ -172,6 +278,12 @@
/// <returns></returns>
private async Task<List<Scene.DeviceListData>> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
{
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶉渶瑕佹洿鏂扮綉鍏�
+ return listAdjustTarget;
+ }
var listSuccess = new List<Scene.DeviceListData>();
for (int i = 0; i < listAdjustTarget.Count; i++)
{
@@ -286,32 +398,34 @@
}
/// <summary>
- /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
+ /// 娣诲姞铏氭嫙鍦烘櫙
/// </summary>
- /// <param name="scene"></param>
- public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
+ /// <param name="sceneId">鎸囧畾鍦烘櫙id,濡傛灉涓�-1,鍒欎細鍐呴儴鑷姩缂栧彿(鍙兘浼氶噸澶�)</param>
+ /// <param name="sceneName">鍦烘櫙鍚嶅瓧</param>
+ /// <param name="listAdjustTarget">缁戝畾鐩爣</param>
+ /// <returns></returns>
+ public SceneUI AddVirtualScene(int sceneId, string sceneName, List<Scene.DeviceListData> listAdjustTarget)
{
- //绉婚櫎缂撳瓨
- if (i_room.ListSceneId.Contains(scene.Id) == true)
+ if (sceneId == -1)
{
- i_room.ListSceneId.Remove(scene.Id);
- i_room.Save();
+ sceneId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
}
- }
+ //鍒涘缓鍦烘櫙瀵硅薄
+ var newScene = new SceneUI();
+ newScene.Name = sceneName;
+ newScene.IconPath = "SceneIcon/0.png";
+ //铏氭嫙鍦烘櫙ID
+ newScene.Id = sceneId;
+ if (listAdjustTarget != null)
+ {
+ newScene.AdjustTargetList.AddRange(listAdjustTarget);
+ }
+ //娣诲姞缂撳瓨
+ newScene.Save();
+ //鍔犲叆缂撳瓨
+ this.dicScenes[newScene.Id] = newScene;
- /// <summary>
- /// 鍒犻櫎鎼滆棌鍦烘櫙
- /// </summary>
- /// <param name="scene"></param>
- public void DeleteLoveScene(SceneUI scene)
- {
- var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
- //绉婚櫎缂撳瓨
- if (nowRoom.ListSceneId.Contains(scene.Id) == true)
- {
- nowRoom.ListSceneId.Remove(scene.Id);
- nowRoom.Save();
- }
+ return newScene;
}
#endregion
@@ -326,6 +440,16 @@
/// <returns></returns>
public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
{
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+ sceneUI.AdjustTargetList.Clear();
+ sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
+ sceneUI.Save();
+ return true;
+ }
+
//鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
var deleteData = new Scene.SceneRemoveMemberData();
var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
@@ -401,6 +525,12 @@
/// <returns></returns>
public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
{
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶉渶瑕佹洿鏂扮綉鍏�
+ return true;
+ }
var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
//鍏遍�氶敊璇娴�
string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
@@ -440,10 +570,10 @@
#region 鈻� 鍒犻櫎鍦烘櫙___________________________
/// <summary>
- /// 绉婚櫎鍦烘櫙--璇ヤ粎杩涜浜嗗鏈湴鍦烘櫙鏁版嵁鐨勫垹闄�
+ /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁
/// </summary>
/// <param name="sceneUI">Scene user interface.</param>
- public void RemoveScene(SceneUI sceneUI)
+ public void DeleteLocalScene(SceneUI sceneUI)
{
//绉婚櫎缂撳瓨
this.dicScenes.Remove(sceneUI.Id);
@@ -476,6 +606,35 @@
Global.DeleteFilebyHomeId(sceneUI.IconPath);
HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
}
+ }
+ }
+
+ /// <summary>
+ /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
+ /// </summary>
+ /// <param name="scene"></param>
+ public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
+ {
+ //绉婚櫎缂撳瓨
+ if (i_room.ListSceneId.Contains(scene.Id) == true)
+ {
+ i_room.ListSceneId.Remove(scene.Id);
+ i_room.Save();
+ }
+ }
+
+ /// <summary>
+ /// 鍒犻櫎鎼滆棌鍦烘櫙
+ /// </summary>
+ /// <param name="scene"></param>
+ public void DeleteLoveScene(SceneUI scene)
+ {
+ var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
+ //绉婚櫎缂撳瓨
+ if (nowRoom.ListSceneId.Contains(scene.Id) == true)
+ {
+ nowRoom.ListSceneId.Remove(scene.Id);
+ nowRoom.Save();
}
}
@@ -525,13 +684,14 @@
/// <returns></returns>
public string GetZoneById(int sceneId)
{
- var room =HdlRoomLogic.Current.GetRoomBySceneId(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)
+ var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId);
+ //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥�
+ if (string.IsNullOrEmpty(floorName))
{
return room.Name;
}
@@ -570,11 +730,6 @@
sceneUIs.Add(myScene);
}
}
-
- if (sceneUIs.Count == 0)
- {
- return null;
- }
return sceneUIs;
}
@@ -588,6 +743,11 @@
var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
foreach (var room in listAllRoom)
{
+ if (room.IsLove == true)
+ {
+ //涓嶅寘鍚敹钘忔埧闂�
+ continue;
+ }
foreach (int sceneId in room.ListSceneId)
{
if (this.dicScenes.ContainsKey(sceneId) == true)
@@ -639,6 +799,13 @@
});
return false;
}
+ //濡傛灉鏄櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶈皟鐢ㄧ綉鍏�
+ return true;
+ }
+
//鎵ц璋冪敤鍦烘櫙
var result = await Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
if (result == null || result.sceneOpenData == null)
@@ -681,6 +848,14 @@
/// <returns></returns>
public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
{
+ //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ var listAdjustTarget = new List<Scene.DeviceListData>();
+ listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+ return listAdjustTarget;
+ }
+
var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
//鍏遍�氶敊璇娴�
string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
--
Gitblit v1.8.0