From 4f0ab0ad21ce450b7856d50f98322a7899361386 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期二, 22 九月 2020 10:30:01 +0800
Subject: [PATCH] 不要下载这个备份
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 275 ++++++++++++++++++++++++++++++++++++------------------
1 files changed, 184 insertions(+), 91 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index 402cf70..c9d80ec 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -77,12 +77,13 @@
}
/// <summary>
- /// 鍒锋柊鏈湴鐨勫叏閮ㄥ満鏅�
+ /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙
/// </summary>
- public bool RefreshSceneUIList()
+ /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+ public bool RefreshSceneUIList(bool useLocalConnect)
{
//鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
- var sceneList = this.RefreshSceneListFromGateway();
+ var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
if (sceneList == null)
{
return false;
@@ -152,8 +153,8 @@
/// <summary>
/// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛�
/// </summary>
- /// <returns></returns>
- private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway()
+ /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+ private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect)
{
var mainGateway = ZbGateway.MainGateWay;
if (mainGateway == null)
@@ -177,7 +178,11 @@
if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
{
var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString());
- listScene.Add(sceneGetAllInfo);
+ if (sceneGetAllInfo.ScenesSum != 0)
+ {
+ //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵
+ listScene.Add(sceneGetAllInfo);
+ }
//鏇村鎺ユ敹寰楀埌鍦烘櫙
canReceve = true;
@@ -192,7 +197,14 @@
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()));
+ if (useLocalConnect == false)
+ {
+ mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+ }
+ else
+ {
+ mainGateway.SendLocation(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+ }
int waitTime = 20 * 6;
while (receiptAll == false && TimeOut < waitTime)
@@ -229,30 +241,31 @@
/// <param name="sceneName">鍦烘櫙鍚嶇О</param>
/// <param name="listAdjustTarget">鎵ц鐩爣</param>
/// <returns></returns>
- public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
+ public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
{
int NewScenesId = -1;
//濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
- if (Common.Config.Instance.Home.IsVirtually == false)
+ if (Config.Instance.Home.IsVirtually == false)
{
- var result1 = await Scene.GetSceneNewIdAsync(sceneName);
- //鍏遍�氶敊璇娴�
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
- if (error != null)
+ //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+ var strCommand = this.GetAddNewSceneCommand(sceneName);
+ var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
+ if (result.ErrorMsg != null)
{
- this.ShowErrorMsg(error);
+ this.ShowTipMsg(result.ErrorMsg);
return null;
}
- if (result1 == null || result1.getSceneIdData == null)
+ if (result.ErrorMsgDiv == 0)
{
//娣诲姞鍦烘櫙澶辫触
string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
//鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
this.ShowTipMsg(msg1);
return null;
}
- NewScenesId = result1.getSceneIdData.NewScenesId;
+ var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData);
+ NewScenesId = getSceneIdData.NewScenesId;
}
else
{
@@ -260,7 +273,7 @@
NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
}
//娣诲姞鎵ц鐩爣
- var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
+ var listSuccess = this.AddTargetToScene(NewScenesId, listAdjustTarget);
if (listSuccess == null)
{
return null;
@@ -280,12 +293,31 @@
}
/// <summary>
+ /// 鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+ /// </summary>
+ /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
+ /// <returns></returns>
+ public string GetAddNewSceneCommand(string sceneName)
+ {
+ var bytes = new byte[32];
+ var reamarkGwBytes = Encoding.UTF8.GetBytes(sceneName);
+ Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length);
+ sceneName = Encoding.UTF8.GetString(bytes);
+
+ var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 800 } };
+ var data = new Newtonsoft.Json.Linq.JObject { { "ScenesName", sceneName } };
+ jObject.Add("Data", data);
+
+ return jObject.ToString();
+ }
+
+ /// <summary>
/// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�)
/// </summary>
/// <param name="sceneId">鍦烘櫙Id</param>
/// <param name="listAdjustTarget">鎵ц鐩爣</param>
/// <returns></returns>
- private async Task<List<Scene.DeviceListData>> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+ private List<Scene.DeviceListData> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
{
//濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
if (Common.Config.Instance.Home.IsVirtually == true)
@@ -294,48 +326,22 @@
return listAdjustTarget;
}
var listSuccess = new List<Scene.DeviceListData>();
- for (int i = 0; i < listAdjustTarget.Count; i++)
- {
- var data = listAdjustTarget[i];
- var addData = new Scene.AddSceneMemberData();
- if (data.Type == 0)
- {
- //璁惧
- addData.Type = 0;
- addData.ScenesId = sceneId;
- addData.DeviceAddr = data.DeviceAddr;
- addData.Epoint = data.Epoint;
- addData.TaskList = data.TaskList;
- addData.DelayTime = 0;
- addData.MemberNumber = i + 1;
- }
- else if (data.Type == 1)
- {
- //鍦烘櫙
- addData.Type = 1;
- addData.ScenesId = sceneId;
- addData.ElseScenesId = data.ElseScenesId;
- addData.DelayTime = 0;
- addData.MemberNumber = i + 1;
- }
- else
- {
- //寤舵椂
- addData.Type = 2;
- addData.ScenesId = sceneId;
- addData.DelayTime = data.DelayTime;
- addData.MemberNumber = i + 1;
- }
- //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉
- var result2 = await Scene.AddSceneMemberAsync(addData);
- if (result2 == null || result2.addSceneMemberResponseData == null
- || result2.addSceneMemberResponseData.Result != 1)
+ //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+ var listCommand = this.GetAddTargetToSceneCommand(sceneId, listAdjustTarget);
+ for (int i = 0; i < listCommand.Count; i++)
+ {
+ var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon");
+ if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
{
+ //鍑虹幇閿欒
continue;
}
- //鎷ユ湁鎴愬姛鐨�
- listSuccess.Add(data);
+ var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData);
+ if (addSceneMemberData.Result == 1)
+ {
+ listSuccess.Add(listAdjustTarget[i]);
+ }
}
if (listSuccess.Count == 0)
{
@@ -355,6 +361,80 @@
}
/// <summary>
+ /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+ /// </summary>
+ /// <param name="sceneId">鍦烘櫙id</param>
+ /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+ /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param>
+ /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param>
+ /// <returns></returns>
+ public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null)
+ {
+ var listCommand = new List<string>();
+ int index = 1;
+ for (int i = 0; i < listAdjustTarget.Count; i++)
+ {
+ var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } };
+ var data = listAdjustTarget[i];
+ //璁惧
+ if (data.Type == 0)
+ {
+ string deviceAddr = data.DeviceAddr;
+ if (dicChangedMac != null)
+ {
+ //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄
+ if (dicChangedMac.ContainsKey(deviceAddr) == false)
+ {
+ continue;
+ }
+ deviceAddr = dicChangedMac[deviceAddr];
+ }
+
+ var taskList = new Newtonsoft.Json.Linq.JArray { };
+ foreach (var taskInfo in data.TaskList)
+ {
+ var tInfo = new Newtonsoft.Json.Linq.JObject{{ "TaskType", taskInfo.TaskType},
+ { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}};
+ taskList.Add(tInfo);
+ }
+ var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} ,
+ { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}};
+ if (sceneName != null)
+ {
+ data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+ }
+ jObject.Add("Data", data2);
+ }
+ //鍦烘櫙
+ else if (data.Type == 1)
+ {
+ var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} ,
+ { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} };
+ if (sceneName != null)
+ {
+ data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+ }
+ jObject.Add("Data", data2);
+ }
+ //寤舵椂
+ else
+ {
+ var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId},
+ { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}};
+ if (sceneName != null)
+ {
+ data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+ }
+ jObject.Add("Data", data2);
+ }
+ listCommand.Add(jObject.ToString());
+ index++;
+ }
+ return listCommand;
+ }
+
+
+ /// <summary>
/// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
/// </summary>
/// <param name="scene">Scene.</param>
@@ -366,29 +446,6 @@
i_room.ListSceneId.Add(scene.Id);
i_room.Save();
}
- }
-
- /// <summary>
- /// 鏀瑰彉鍦烘櫙鎴块棿
- /// </summary>
- /// <param name="scene">鍦烘櫙瀵硅薄</param>
- /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
- public void ChangedSceneRoom(SceneUI scene, string newRoomId)
- {
- var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
- if (room != null)
- {
- //鎴块棿娌℃湁鏀瑰彉
- if (room.Id == newRoomId)
- {
- return;
- }
- //浠庢埧闂翠腑绉婚櫎缂撳瓨
- this.DeleteSceneFromRoom(room, scene);
- }
- //娣诲姞杩涙柊鎴块棿
- var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
- this.AddSceneToRoom(newRoom, scene);
}
/// <summary>
@@ -517,7 +574,7 @@
sceneUI.AdjustTargetList.Clear();
//鐒跺悗閲嶆柊娣诲姞
- var listSuccess = await this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
+ var listSuccess = this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
if (listSuccess == null)
{
return false;
@@ -891,7 +948,7 @@
/// </summary>
/// <param name="i_scene">鍦烘櫙瀵硅薄</param>
/// <returns></returns>
- public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
+ public List<Scene.DeviceListData> GetAdjustTargetList(SceneUI i_scene)
{
//濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
if (Common.Config.Instance.Home.IsVirtually == true)
@@ -900,16 +957,27 @@
listAdjustTarget.AddRange(i_scene.AdjustTargetList);
return listAdjustTarget;
}
-
- var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
- //鍏遍�氶敊璇娴�
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
- if (error != null)
+ //濡傛灉鏄湁妯℃澘,鏈夎澶囩殑鏃跺��,鍦ㄦ病鏈夊彂閫佹垚鍔熶箣鍓�,涓嶅厑璁稿埛鏂版墽琛岀洰鏍囧璞�
+ if (Common.Config.Instance.Home.TemplateMode == 2
+ && Common.Config.Instance.Home.SendTemplateSuccess == false)
{
- this.ShowErrorMsg(error);
+ var listAdjustTarget = new List<Scene.DeviceListData>();
+ listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+ return listAdjustTarget;
+ }
+
+ var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 806 } };
+ var data = new Newtonsoft.Json.Linq.JObject { { "ScenesId", i_scene.Id } };
+ jObject.Add("Data", data);
+ //鍙戦�佸懡浠�
+ var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon");
+
+ if (result.ErrorMsg != null)
+ {
+ this.ShowTipMsg(result.ErrorMsg);
return null;
}
- if (result == null || result.getSceneDeviceListInfo == null)
+ if (result.ErrorMsgDiv == 0)
{
//鑾峰彇鎵ц鐩爣澶辫触
string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
@@ -919,12 +987,14 @@
this.ShowTipMsg(msg);
return null;
}
- i_scene.AdjustTargetList = result.getSceneDeviceListInfo.DeviceList;
+ var sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneDeviceListInfo>(result.ReceiptData);
+
+ i_scene.AdjustTargetList = sceneGetDeviceListObj.DeviceList;
//淇濆瓨缂撳瓨
i_scene.Save(false);
var listData = new List<Scene.DeviceListData>();
- listData.AddRange(result.getSceneDeviceListInfo.DeviceList);
+ listData.AddRange(sceneGetDeviceListObj.DeviceList);
return listData;
}
@@ -960,6 +1030,29 @@
#region 鈻� 涓�鑸柟娉昣__________________________
/// <summary>
+ /// 鏀瑰彉鍦烘櫙鎴块棿
+ /// </summary>
+ /// <param name="scene">鍦烘櫙瀵硅薄</param>
+ /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
+ public void ChangedSceneRoom(SceneUI scene, string newRoomId)
+ {
+ var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
+ if (room != null)
+ {
+ //鎴块棿娌℃湁鏀瑰彉
+ if (room.Id == newRoomId)
+ {
+ return;
+ }
+ //浠庢埧闂翠腑绉婚櫎缂撳瓨
+ this.DeleteSceneFromRoom(room, scene);
+ }
+ //娣诲姞杩涙柊鎴块棿
+ var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
+ this.AddSceneToRoom(newRoom, scene);
+ }
+
+ /// <summary>
/// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠�
/// </summary>
/// <returns></returns>
--
Gitblit v1.8.0