xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -82,6 +82,11 @@
        /// <param name="useLocalConnect">是否强制使用本地连接发送</param>
        public bool RefreshSceneUIList(bool useLocalConnect)
        {
            if (Config.Instance.Home.TemplateMode == 2 && Config.Instance.Home.SendTemplateSuccess == false)
            {
                //如果是有模板有设备模式,但是还没有导入成功的情况下,不允许刷新场景列表
                return true;
            }
            //获取网关存在的场景
            var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
            if (sceneList == null)
@@ -178,7 +183,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;
@@ -243,9 +252,12 @@
            //如果当前住宅不是虚拟住宅
            if (Config.Instance.Home.IsVirtually == false)
            {
                var mainWay = ZbGateway.MainGateWay;
                if (mainWay == null) { return null; }
                //获取新建一个场景的命令字符
                var strCommand = this.GetAddNewSceneCommand(sceneName);
                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
                if (result.ErrorMsg != null)
                {
                    this.ShowTipMsg(result.ErrorMsg);
@@ -322,12 +334,14 @@
                return listAdjustTarget;
            }
            var listSuccess = new List<Scene.DeviceListData>();
            var mainWay = ZbGateway.MainGateWay;
            if (mainWay == null) { return listSuccess; }
            //获取添加执行目标到场景的命令
            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");
                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon");
                if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
                {
                    //出现错误
@@ -359,12 +373,15 @@
        /// <summary>
        /// 获取添加执行目标到场景的命令
        /// </summary>
        /// <param name="sceneId"></param>
        /// <param name="listAdjustTarget"></param>
        /// <param name="sceneId">场景id</param>
        /// <param name="listAdjustTarget">执行目标</param>
        /// <param name="dicChangedMac">交换mac key:listAdjustTarget当前的Mac value:转换的mac</param>
        /// <param name="sceneName">场景名称(特殊用途,请勿设置)</param>
        /// <returns></returns>
        public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
        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 } };
@@ -372,6 +389,17 @@
                //设备
                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)
                    {
@@ -379,25 +407,38 @@
                            { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}};
                        taskList.Add(tInfo);
                    }
                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",data.DeviceAddr} ,
                         { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",i + 1}};
                    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",i + 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",i + 1}};
                         { "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;
        }
@@ -926,11 +967,22 @@
                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
                return listAdjustTarget;
            }
            //如果是有模板,有设备的时候,在没有发送成功之前,不允许刷新执行目标对象
            if (Common.Config.Instance.Home.TemplateMode == 2
                && Common.Config.Instance.Home.SendTemplateSuccess == false)
            {
                var listAdjustTarget = new List<Scene.DeviceListData>();
                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
                return listAdjustTarget;
            }
            var mainWay = ZbGateway.MainGateWay;
            if (mainWay == null) { return null; }
            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");
            var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon");
            if (result.ErrorMsg != null)
            {