WJC
2020-04-02 94e4e5b9fd3da964c44b7b14227d6fe2bbb426d7
ZigbeeApp/Shared/Phone/Device/Logic/Send.cs
@@ -12,7 +12,7 @@
{
    public class Send
    {
        #region  ----获取Logic
        #region  ----Logic所有发送命令
        /// <summary>
        /// 获取LogicId的方法
        /// </summary>
@@ -54,11 +54,16 @@
                    return logicIdList;
                }
                mainGateWay.GwResDataAction += action;
                var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2004 } };
                var jObjectdata1 = new JObject { { "LogicType", LogicType } };
                jObject.Add("Data", jObjectdata1);
                mainGateWay?.Send("Logic/GetLogicList", jObject.ToString());
                try
                {
                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2004 } };
                    var jObjectdata1 = new JObject { { "LogicType", LogicType } };
                    jObject.Add("Data", jObjectdata1);
                    mainGateWay?.Send("Logic/GetLogicList", jObject.ToString());
                }
                catch(Exception e) {
                    var d = e.Message;
                }
                //await System.Threading.Tasks.Task.Run(async () =>
                //{
                var dateTime = DateTime.Now;
@@ -260,7 +265,7 @@
                try
                {
                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2000 } };
                    var selectMonthList = new JArray { };
                    foreach (var intvalue in logic.TimeAttribute.SelectMonDate)
@@ -292,6 +297,7 @@
                                    ["RemindTime"] = int.Parse(dictionary["RemindTime"]),
                                    ["EnDelay"] = int.Parse(dictionary["EnDelay"]),
                                    ["DelayTime"] = int.Parse(dictionary["DelayTime"]),
                                    ["DoorLockOpenDelayTime"] = int.Parse(dictionary["DoorLockOpenDelayTime"]),
                                };
                                if (dictionary["DateType"].ToString() == "0")
                                {
@@ -388,7 +394,7 @@
                                    ["Type"] = int.Parse(dictionary["Type"]),
                                    ["IsValid"] = int.Parse(dictionary["IsValid"]),
                                    ["AtHome"] = int.Parse(dictionary["AtHome"]),
                                    ["WhoSiteUId"] =dictionary["WhoSiteUId"],
                                    ["WhoSiteUId"] = dictionary["WhoSiteUId"],
                                };
                                conditions.Add(diliInfo);
                                break;
@@ -462,6 +468,16 @@
                                };
                                actions.Add(timeInfo);
                                break;
                            case 8:
                                var lockInfo = new JObject
                                {
                                    ["LinkType"] = int.Parse(dictionary["LinkType"].ToString()),
                                    ["DeviceAddr"] = dictionary["DeviceAddr"].ToString(),
                                    ["Epoint"] = int.Parse(dictionary["Epoint"].ToString()),
                                    ["PassData"] =dictionary["PassData"].ToString(),
                                };
                                actions.Add(lockInfo);
                                break;
                        }
                    }
                    var accounts = new JArray();
@@ -480,6 +496,7 @@
                                            ["Type"] = int.Parse(dictionary["Type"]),
                                            ["Account"] = dictionary["Account"],
                                            ["UserId"] = dictionary["UserId"],
                                            ["AccountName"] = dictionary["AccountName"],
                                        };
                                        accounts.Add(accounts1);
@@ -503,6 +520,7 @@
                        }
                    }
                    var data = new JObject{
                        { "LogicId",logic.LogicId},
                        { "IsEnable", logic.IsEnable} ,
@@ -510,6 +528,7 @@
                        { "Relationship",logic.Relationship} ,
                         { "LogicType",logic.LogicType} ,
                        { "LogicCustomPushText",logic.LogicCustomPushText} ,
                        { "LogicIsCustomPushText",logic.LogicIsCustomPushText} ,
                        { "TimeAttribute", timeAttribute} ,
                        { "Conditions", conditions },
                        { "Actions", actions },
@@ -576,6 +595,7 @@
                date.Add("LogicName", logic.LogicName);
                date.Add("Relationship", logic.Relationship);
                date.Add("LogicCustomPushText", logic.LogicCustomPushText);
                date.Add("LogicIsCustomPushText", logic.LogicIsCustomPushText);
                mainGateWay?.Send("Logic/ReviseAttribute", jObject.ToString());
                //await System.Threading.Tasks.Task.Run(async () =>
                //{
@@ -623,6 +643,8 @@
                        logic.LogicName = Logicifon["LogicName"].ToString();
                        logic.LogicType = int.Parse(Logicifon["LogicType"].ToString());
                        logic.Relationship = int.Parse(Logicifon["Relationship"].ToString());
                        logic.LogicCustomPushText = Logicifon["LogicCustomPushText"].ToString();
                        logic.LogicIsCustomPushText = int.Parse(Logicifon["LogicIsCustomPushText"].ToString());
                        logic.TimeAttribute = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.TimeAttributeObj>(Logicifon["TimeAttribute"].ToString());
                        logic.Conditions = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(Logicifon["Conditions"].ToString());
                        logic.Accounts = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(Logicifon["Accounts"].ToString());
@@ -693,7 +715,7 @@
                }
                catch { }
                var dateTime = DateTime.Now;
                while ((DateTime.Now - dateTime).TotalMilliseconds < 8 * 1000)
                while ((DateTime.Now - dateTime).TotalMilliseconds < 5* 1000)
                {
                    await System.Threading.Tasks.Task.Delay(100);
                    if (sum == listLogic.Count)
@@ -709,44 +731,6 @@
                return listLogic;
            });
        }
        // <summary>
        /// 通过设备找到区域(房间)名称
        /// </summary>
        /// <param name="btnregionname">Btnregionname.</param>
        /// <param name="device">Device.</param>
        public static void RoomNmae(Button btnregionname, CommonDevice device)
        {
            var room = new Common.Room();
            btnregionname.Text = room.GetRoomNameByDevice(device);
        }
        public static List<Common.Room> GetRoomList(string floorId)
        {
            return Common.Room.Lists.FindAll((obj) => obj.FloorId == floorId);
            //var list1 = new List<Common.Room>();
            /////找到某楼层房间列表;
            //var list = Common.Room.Lists.FindAll((obj) => obj.FloorId == floorId);
            //for (int i = 0; i < list.Count; i++)
            //{
            //    if (str == "device")
            //    {
            //        if (list[i].DeviceUIList.Count != 0)
            //        {   ///过滤掉没有设备的房间
            //            list1.Add(list[i]);
            //        }
            //    }
            //    else
            //    {
            //        if (list[i].SceneUIList.Count != 0)
            //        {   ///过滤掉没有场景的房间
            //            list1.Add(list[i]);
            //        }
            //    }
            //}
            /////返回房间列表;
            //return list1;
        }
        /// <summary>
        /// 获取场景信息的方法
@@ -772,7 +756,7 @@
                        sceneui = new SceneUI();
                        sceneui.Name = jObjectdata["Data"]["ScenesName"].ToString();
                        sceneui.Id = int.Parse(jObjectdata["Data"]["ScenesId"].ToString());
                    }
                };
                var mainGateWay = ZbGateway.MainGateWay;
@@ -791,7 +775,7 @@
                while ((DateTime.Now - dateTime).TotalMilliseconds < 3 * 1000)
                {
                    await System.Threading.Tasks.Task.Delay(100);
                    if (sceneui!=null)
                    if (sceneui != null)
                    {
                        break;
                    }
@@ -803,7 +787,7 @@
        #endregion
        #region  ----获取门锁
        /// <summary>
        /// 获取自己+其他成员信息
        /// </summary>
@@ -854,7 +838,13 @@
            if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo != 3)
            {
                var pra = new UserCenter.MemberListInfoPra();
                string result = await UserCenter.UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
                string result = "";
                if (AllUserIfon.Count != 0)
                {
                    //服务返回来没有门锁成员信息,没有必要再去请求成员列表,
                    //原因:节约时间,体验效果好;
                    result = await UserCenter.UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
                }
                var listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UserCenter.MemberInfoRes>>(result);
                for (int i = 0; i < listInfo.Count; i++)
                {
@@ -945,7 +935,7 @@
        {
            string s = null;
            var str = await WebClientAsync(0, CommonPage.RequestHttpsHost + "/App/GetHomePager");//不同区域域名前缀不一样
           // var str = await WebClientAsync(0, "https://global.hdlcontrol.com/HangZhouHdlCloudApi/App/GetHomePager");
            var jObject = JObject.Parse(str);
            if (jObject == null || jObject["StateCode"].ToString() != "Success")
            {
@@ -970,13 +960,11 @@
                        residential.IsOtherAccountCtrl = true;
                        residential.doorlockmac = doorlockMac;
                        residential.Url = CommonPage.RequestHttpsHost + "/App/GetSharedHomeApiControl";
                        //residential.Url = "https://global.hdlcontrol.com/HangZhouHdlCloudApi/App/GetSharedHomeApiControl";
                        s = await ReadUserDoorLock(residential);
                    }
                    else
                    {
                        residential.Url = CommonPage.RequestHttpsHost + "/DoorLock/GetDoorLockPager";
                        //residential.Url = "https://global.hdlcontrol.com/HangZhouHdlCloudApi/DoorLock/GetDoorLockPager";
                        residential.Token = Config.Instance.Token;
                        residential.Id = Config.Instance.HomeId;
                        residential.IsOtherAccountCtrl = false;
@@ -1009,16 +997,7 @@
            lockifon.doorlockmac = residential.doorlockmac;
            return await WebClientAsync(2, lockifon.Url, lockifon);
        }
              //打印NameValueCollection()显示索引, 键,值
        public static void PrintKeysAndValues2(NameValueCollection myCol)
        {
            for (int i = 0; i < myCol.Count; i++)
            {
                //打印显示索引, 键,值
                Console.WriteLine("[{0}]{1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i));
            }
        }
        public class Residential
        {
            /// <summary>
@@ -1127,6 +1106,33 @@
        public static UserCenter.MemberInfoRes UserMemberInfoRes = null;
        #endregion
        /// <summary>
        /// 自己用的发送的方法
        /// </summary>
        /// <param name="tag">标记是那条命令</param>
        /// <param name="logic">逻辑对象</param>
        public static void Zj(bool tag, Common.Logic logic)
        {
            new System.Threading.Thread(() =>
            {
                if (logic.LogicId != 0)
                {
                    if (tag)
                    {
                        Data("添加/更新", "/App/HomeLogicConfig", "POST");
                    }
                    else
                    {
                        Data("删除", "/App/DelHomeLogicConfig", "POST");
                    }
                    ///只改推送内容;
                    LogicControlSwitch(logic);
                }
            })
            { IsBackground = true }.Start();
        }
        #region  请求服务器方法---
        /// <summary>
        /// 请求数据的封装方法
@@ -1136,35 +1142,38 @@
        /// <param name="method">请求方式为POST/GET</param>
        /// <param name="obj">存储发送数据的对象</param>
        /// <returns></returns>
        public static async System.Threading.Tasks.Task<string>Data(string command, string url, string method, object obj = null)
        public static async System.Threading.Tasks.Task<string> Data(string command, string url, string method, object obj = null)
        {
            var getUrl = CommonPage.RequestHttpsHost + url;//请求地址;
            var getUrl = "";
            var jObject = new JObject();
            if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1)
            {
                getUrl = CommonPage.RequestHttpsHost + url;//请求地址;
                jObject.Add("IsOtherAccountCtrl", false);
                jObject.Add("LoginAccessToken", Config.Instance.Token);
            }
            else
            {
                getUrl = Config.Instance.AdminRequestBaseUrl + url;//请求地址;
                jObject.Add("IsOtherAccountCtrl", true);
                jObject.Add("LoginAccessToken", Config.Instance.AdminRequestToken);
            }
            switch (command)
            {
                case "添加/更新":
                    {
                        jObject.Add("RequestVersion", CommonPage.RequestVersion);
                        jObject.Add("LoginAccessToken", Config.Instance.Token);
                        //jObject.Add("LoginAccessToken", Config.Instance.Token);
                        jObject.Add("HomeId", Config.Instance.HomeId);
                        jObject.Add("LogicID", Common.Logic.CurrentLogic.LogicId);
                        jObject.Add("PushUserIds", new JArray { Config.Instance.Guid });
                        jObject.Add("PushContent", Common.Logic.CurrentLogic.LogicCustomPushText);
                    }
                    break;
                case "删除":
                    {
                        jObject.Add("RequestVersion", CommonPage.RequestVersion);
                        jObject.Add("LoginAccessToken", Config.Instance.Token);
                        //jObject.Add("LoginAccessToken", Config.Instance.Token);
                        jObject.Add("HomeId", Config.Instance.HomeId);
                        jObject.Add("LogicID", Common.Logic.CurrentLogic.LogicId);
                    }
@@ -1180,7 +1189,7 @@
        /// <param name="method">请求方式为POST/GET</param>
        /// <param name="second">超时时间</param>
        /// <returns></returns>
        public static async System.Threading.Tasks.Task<string>HttpWebRequest(string getUrl, string str, string method,int second= 3)
        public static async System.Threading.Tasks.Task<string> HttpWebRequest(string getUrl, string str, string method, int second = 3)
        {
            HttpWebRequest request = WebRequest.Create(getUrl) as HttpWebRequest; //创建请求
            request.Method = method; //请求方式为POST/GET
@@ -1233,7 +1242,6 @@
                        postValues.Add("LoginAccessToken", Config.Instance.Token);
                        postValues.Add("MainAccountId", residential.MainUserDistributedMark);
                        postValues.Add("SharedHid", residential.Id);
                    }
                    break;
                case 2:
@@ -1289,5 +1297,22 @@
            return System.Text.Encoding.UTF8.GetString(varByte);
        }
        #endregion
        /// <summary>
        /// 判断字典是否存在的方法
        /// </summary>
        /// <param name="deviceConditionsInfo"></param>
        /// <param name="Key"></param>
        /// <param name="Value"></param>
        public static void dictionary(Dictionary<string, string> deviceConditionsInfo, string Key, string Value)
        {
            if (deviceConditionsInfo.ContainsKey(Key))
            {
                deviceConditionsInfo.Remove(Key);
            }
            deviceConditionsInfo.Add(Key, Value);
        }
    }
}