mac
2024-07-25 3f6685c77beeb12baf840733fb890860f4c26e7c
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -10,20 +10,20 @@
    {
        /// <summary>
        /// 定义一个静态对象
        /// </summary>
        private static LogicMethod logicMethod = null;
        /// </summary>
        private static LogicMethod s_Current = null;
        /// <summary>
        /// 获取静态对象
        /// </summary>
        public static LogicMethod CurrLogicMethod
        public static LogicMethod Current
        {
            get
            {
                if (logicMethod == null)
                if (s_Current == null)
                {
                    return new LogicMethod();
                }
                return logicMethod;
                return s_Current;
            }
        }
@@ -131,7 +131,7 @@
        /// <param name="dic">Dictionary类</param>
        /// <param name="key">健</param>
        /// <param name="value">值</param>
        public void dictionary(Dictionary<string, string> dic, string key, string value)
        public void dictionary(Dictionary<string, string> dic, string key, string value)
        {
            if (dic.ContainsKey(key)) //判断是否存在键值
            {
@@ -148,6 +148,8 @@
        public List<HDL_ON.Entity.Room> GetGatewayRoomList()
        {
            return HDL_ON.Entity.SpatialInfo.CurrentSpatial.RoomList;
        }
        /// <summary>
        /// 获取网关房间列表
@@ -180,7 +182,40 @@
        /// <returns></returns>
        public List<HDL_ON.Entity.Function> GetGatewayDeviceList()
        {
            return Entity.FunctionList.List.GetDeviceFunctionList();
            var list = new List<HDL_ON.Entity.Function>();
            var list1 = Entity.FunctionList.List.GetDeviceFunctionList();
            var list2 = this.GetVideoDeviceList();
            list.AddRange(list1);
            list.AddRange(list2);
            list.AddRange(FunctionList.List.groupControls);
#if DEBUG
            //GetTestDevice(ref list, true);
#endif
            return list;
        }
        /// <summary>
        /// 获取可视对讲设备列表
        /// </summary>
        /// <returns></returns>
        public List<HDL_ON.Entity.Function> GetVideoDeviceList()
        {
            var functionList = new List<Function>();
            foreach (var videoDevice in FunctionList.List.videoIntercom)
            {
                Function function = new Function();
                function.spk = videoDevice.spk;
                function.name = videoDevice.deviceName;
                function.deviceId = videoDevice.deviceId;
                function.setOnine( videoDevice.status == "online");
                function.sid = videoDevice.sid;
                var video = functionList.Find((o) => o.deviceId == function.deviceId);
                if (video == null)
                {
                    functionList.Add(function);
                }
            }
            return functionList;
        }
        /// <summary>
        /// 获取场景列表
@@ -311,101 +346,39 @@
            return roomName.TrimEnd(',');
        }
        #region   动一改四
        /// <summary>
        /// 获取设备类型图标
        /// </summary>
        /// <param name="functionType">设备类型</param>
        /// <param name="device">设备</param>
        /// <returns></returns>
        public string GetIconPath(string functionType)
        public string GetDeviceIconPath(Function device)
        {
            string strPath = "";
            switch (functionType)
            if (SPK.MusicStandard == device.spk
                || SPK.AvMusic == device.spk)
            {
                case SPK.AirSwitch:
                    {
                        strPath = "FunctionIcon/Icon/electricalbreaker.png";
                    }
                    break;
                case SPK.PanelSocket:
                case SPK.ElectricSocket:
                    {
                        strPath = "FunctionIcon/Icon/electricalsocket.png";
                    }
                    break;
                case SPK.LightSwitch:
                case SPK.LightRGB:
                case SPK.LightRGBW:
                case SPK.LightCCT:
                case SPK.LightDimming:
                    {
                        strPath = "LogicIcon/lightloguc.png";
                    }
                    break;
                case SPK.CurtainSwitch:
                case SPK.CurtainRoller:
                case SPK.CurtainTrietex:
                    {
                        strPath = "LogicIcon/curtainlogic.png";
                    }
                    break;
                case SPK.AcStandard:
                case SPK.HvacAC:
                    {
                        strPath = "LogicIcon/airconditionerlogic.png";
                    }
                    break;
                case SPK.HvacCac:
                    strPath = "FunctionIcon/Icon/hvaccac.png";
                    break;
                case SPK.FloorHeatStandard:
                case SPK.HvacFloorHeat:
                    {
                        strPath = "LogicIcon/heatlogic.png";
                    }
                    break;
                case SPK.AirFreshStandard:
                case SPK.HvacAirFresh:
                    {
                        strPath = "LogicIcon/heatlogic.png";
                    }
                    break;
                case SPK.SensorSmoke:
                case SPK.SensorWater:
                case SPK.SensorGas:
                case SPK.SensorDryContact:
                case SPK.SensorDryContact2:
                case SPK.SensorShanLan:
                case SPK.SensorDuiShe:
                case SPK.SensorPir:
                case SPK.SensorDoorWindow:
                case SPK.SensorUtrasonic:
                case SPK.SenesorMegahealth:
                case SPK.SenesorMegahealth2:
                case SPK.SensorEnvironment:
                case SPK.SensorEnvironment2:
                case SPK.SensorEnvironment3:
                case SPK.SensorTemperature:
                case SPK.SensorHumidity:
                case SPK.SensorCO2:
                case SPK.SensorPm25:
                case SPK.SensorTVOC:
                case SPK.SensorHcho:
                case SPK.SensorHelp:
                    {
                        strPath = "LogicIcon/sensor.png";
                    }
                    break;
                case SPK.DoorLock:
                    {
                        strPath = "FunctionIcon/DoorLock/DoorLock.png";
                    }
                    break;
                return "MusicIcon/localMusic.png";
            }
            return strPath;
            else if (SPK.SensorPm10 == device.spk
                || SPK.SensorPirHold == device.spk
               )
            {
                return "LogicIcon/sensor.png";
            }
            else if (SPK.DoorLock == device.spk
                || SPK.VideoDoorLock == device.spk)
            {
                return "FunctionIcon/DoorLock/DoorLock.png";
            }
            else if (SPK.ElectricalTvHisense == device.spk)
            {
                return "LogicIcon/electricaltvhisense.png";
            }
            return $"FunctionIcon/Icon/{device.IconName}.png";
        }
        #region   动一改三
        /// <summary>
        /// 设备类型的列表(灯光类,窗帘类。。。)
        /// </summary>
@@ -415,6 +388,15 @@
        {
            List<string> deviceStrTypeList = new List<string>();
            deviceStrTypeList.Clear();
            //群控
            var gp = deviceList.Find((device) =>
                device.spk == SPK.GroupControl);
            if (gp != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.GroupControl));
            }
            ///灯光类
            var lightjosn = deviceList.Find((device) =>
            device.spk == SPK.LightSwitch
@@ -422,6 +404,7 @@
            || device.spk == SPK.LightCCT
            || device.spk == SPK.LightRGB
            || device.spk == SPK.LightRGBW
            || device.spk == SPK.OtherCommon
            );
            if (lightjosn != null)
            {
@@ -432,13 +415,14 @@
            var curtainjosn = deviceList.Find((device) =>
            device.spk == SPK.CurtainSwitch
            || device.spk == SPK.CurtainTrietex
            || device.spk == SPK.CurtainRoller);
            || device.spk == SPK.CurtainRoller
            || device.spk == SPK.CurtainDream);
            if (curtainjosn != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.Curtain));
            }
            ///空调类
            var ac = deviceList.Find((device) => device.spk == SPK.AcStandard || device.spk == SPK.HvacAC);
            var ac = deviceList.Find((device) => device.spk == SPK.AcStandard || device.spk == SPK.HvacAC|| device.spk == SPK.AcIr);
            if (ac != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.AC));
@@ -466,9 +450,10 @@
            || device.spk == SPK.SensorPir
            || device.spk == SPK.SensorDoorWindow
            || device.spk == SPK.SensorUtrasonic
            || device.spk == SPK.SensorMmvPose
            || device.spk == SPK.SenesorMegahealth
            || device.spk == SPK.SenesorMegahealth2
            || device.spk == SPK.SensorEnvironment
            || device.spk == SPK.SensorEnvironment || device.spk == SPK.SensorEnvironmentHailin
             || device.spk == SPK.SensorEnvironment2
              || device.spk == SPK.SensorEnvironment3
                || device.spk == SPK.SensorTemperature
@@ -478,6 +463,9 @@
                        || device.spk == SPK.SensorTVOC
                          || device.spk == SPK.SensorHcho
                          || device.spk == SPK.SensorHelp
                          || device.spk == SPK.SensorPm10
                          || device.spk == SPK.SensorPirHold
                          || device.spk == SPK.SensorLight
            );
            if (sensor != null)
            {
@@ -488,16 +476,44 @@
            device.spk == SPK.AirSwitch
            || device.spk == SPK.PanelSocket
            || device.spk == SPK.ElectricSocket
            || device.spk == SPK.ElectricalTvHisense
            );
            if (electric != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.Electric));
            }
            ///门锁类
            var doorlock = deviceList.Find((device) => device.spk == SPK.DoorLock);
            var doorlock = deviceList.Find((device) => device.spk == SPK.DoorLock
            || device.spk == SPK.VideoDoorLock);
            if (doorlock != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.DoorLock));
            }
            ///音乐类
            var music = deviceList.Find((device) => device.spk == SPK.MusicStandard || device.spk == SPK.AvMusic);
            if (music != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.Music));
            }
            ///可视对讲
            var doorgate = deviceList.Find((device) => device.spk == SPK.doorgate);
            if (doorgate != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.VideoIntercom));
            }
            ///机械手类
            var MechanicalArm = deviceList.Find((device) =>
            device.spk == SPK.MechanicalArm);
            if (MechanicalArm != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.jixieshou));
            }
            ///摄像头类
            var camera = deviceList.Find((device) =>
            device.spk == SPK.IpCam_Imou || device.spk == SPK.Ev_Ipcam || device.spk == SPK.Peephole);
            if (camera != null)
            {
                deviceStrTypeList.Add(Language.StringByID(StringId.shexiangtou));
            }
            return deviceStrTypeList;
@@ -510,6 +526,7 @@
        public List<string> GetDeviceTypeFunctionList(string deviceType)
        {
            List<string> functionTypeList = new List<string>();
            ///灯光类
            if (deviceType == Language.StringByID(StringId.Lights))
            {
@@ -521,6 +538,12 @@
                functionTypeList.Add(SPK.AirSwitch);
                functionTypeList.Add(SPK.PanelSocket);
                functionTypeList.Add(SPK.ElectricSocket);
                functionTypeList.Add(SPK.OtherCommon);
            }
            //群控
            else if (deviceType == Language.StringByID(StringId.GroupControl))
            {
                functionTypeList.Add(SPK.GroupControl);
            }
            ///窗帘类
            else if (deviceType == Language.StringByID(StringId.Curtain))
@@ -528,6 +551,7 @@
                functionTypeList.Add(SPK.CurtainSwitch);
                functionTypeList.Add(SPK.CurtainRoller);
                functionTypeList.Add(SPK.CurtainTrietex);
                functionTypeList.Add(SPK.CurtainDream);
            }
            ///空调类
            else if (deviceType == Language.StringByID(StringId.AC))
@@ -535,6 +559,7 @@
                functionTypeList.Add(SPK.AcStandard);
                functionTypeList.Add(SPK.HvacAC);
                functionTypeList.Add(SPK.HvacCac);
                functionTypeList.Add(SPK.AcIr);
            }
            ///地暖类
            else if (deviceType == Language.StringByID(StringId.FloorHeating))
@@ -558,9 +583,10 @@
                functionTypeList.Add(SPK.SensorPir);
                functionTypeList.Add(SPK.SensorDoorWindow);
                functionTypeList.Add(SPK.SensorUtrasonic);
                functionTypeList.Add(SPK.SensorMmvPose);
                functionTypeList.Add(SPK.SenesorMegahealth);
                functionTypeList.Add(SPK.SenesorMegahealth2);
                functionTypeList.Add(SPK.SensorEnvironment);
                functionTypeList.Add(SPK.SensorEnvironment); functionTypeList.Add(SPK.SensorEnvironmentHailin);
                functionTypeList.Add(SPK.SensorEnvironment2);
                functionTypeList.Add(SPK.SensorEnvironment3);
                functionTypeList.Add(SPK.SensorTemperature);
@@ -570,6 +596,9 @@
                functionTypeList.Add(SPK.SensorTVOC);
                functionTypeList.Add(SPK.SensorHcho);
                functionTypeList.Add(SPK.SensorHelp);
                functionTypeList.Add(SPK.SensorPm10);
                functionTypeList.Add(SPK.SensorPirHold);
                functionTypeList.Add(SPK.SensorLight);
            }
@@ -579,14 +608,43 @@
                functionTypeList.Add(SPK.AirSwitch);
                functionTypeList.Add(SPK.PanelSocket);
                functionTypeList.Add(SPK.ElectricSocket);
                functionTypeList.Add(SPK.ElectricalTvHisense);
            }
            ///门锁类
            else if (deviceType == Language.StringByID(StringId.DoorLock))
            {
                functionTypeList.Add(SPK.DoorLock);
                functionTypeList.Add(SPK.DoorLock);
                functionTypeList.Add(SPK.VideoDoorLock);
            }
            ///音乐类
            else if (deviceType == Language.StringByID(StringId.Music))
            {
                functionTypeList.Add(SPK.MusicStandard);
                functionTypeList.Add(SPK.AvMusic);
            }
            ///HDL可视对讲
            else if (deviceType == Language.StringByID(StringId.VideoIntercom))
            {
                functionTypeList.Add(SPK.doorgate);
            }
            ///机械手类
            else  if (deviceType == Language.StringByID(StringId.jixieshou))
            {
                functionTypeList.Add(SPK.MechanicalArm);
            }
            ///摄像头类
            else if (deviceType == Language.StringByID(StringId.shexiangtou))
            {
                functionTypeList.Add(SPK.IpCam_Imou);
                functionTypeList.Add(SPK.Ev_Ipcam);
                functionTypeList.Add(SPK.Peephole);
            }
            else
            {
                //全部区域
                functionTypeList.Add(SPK.GroupControl);
                functionTypeList.Add(SPK.Peephole);
                functionTypeList.Add(SPK.Ev_Ipcam);
                functionTypeList.Add(SPK.LightSwitch);
                functionTypeList.Add(SPK.LightDimming);
                functionTypeList.Add(SPK.LightRGB);
@@ -600,6 +658,7 @@
                functionTypeList.Add(SPK.CurtainTrietex);
                functionTypeList.Add(SPK.AcStandard);
                functionTypeList.Add(SPK.HvacAC);
                functionTypeList.Add(SPK.AcIr);
                functionTypeList.Add(SPK.FloorHeatStandard);
                functionTypeList.Add(SPK.HvacFloorHeat);
                functionTypeList.Add(SPK.AirFreshStandard);
@@ -614,9 +673,10 @@
                functionTypeList.Add(SPK.SensorPir);
                functionTypeList.Add(SPK.SensorDoorWindow);
                functionTypeList.Add(SPK.SensorUtrasonic);
                functionTypeList.Add(SPK.SensorMmvPose);
                functionTypeList.Add(SPK.SenesorMegahealth);
                functionTypeList.Add(SPK.SenesorMegahealth2);
                functionTypeList.Add(SPK.SensorEnvironment);
                functionTypeList.Add(SPK.SensorEnvironment); functionTypeList.Add(SPK.SensorEnvironmentHailin);
                functionTypeList.Add(SPK.SensorEnvironment2);
                functionTypeList.Add(SPK.SensorEnvironment3);
                functionTypeList.Add(SPK.SensorTemperature);
@@ -631,6 +691,20 @@
                functionTypeList.Add(SPK.HvacCac);
                functionTypeList.Add(SPK.SensorHelp);
                functionTypeList.Add(SPK.DoorLock);
                functionTypeList.Add(SPK.CurtainDream);
                functionTypeList.Add(SPK.MusicStandard);
                functionTypeList.Add(SPK.AvMusic);
                functionTypeList.Add(SPK.doorgate);
                functionTypeList.Add(SPK.MechanicalArm);
                functionTypeList.Add(SPK.IpCam_Imou);
                functionTypeList.Add(SPK.SensorPm10);
                functionTypeList.Add(SPK.VideoDoorLock);
                functionTypeList.Add(SPK.AcIr);
                functionTypeList.Add(SPK.SensorPirHold);
                functionTypeList.Add(SPK.ElectricalTvHisense);
                functionTypeList.Add(SPK.SensorLight);
                functionTypeList.Add(SPK.OtherCommon);
            }
@@ -648,6 +722,8 @@
            {
                case condition_if:
                    {
                        deviceTypeList.Add(SPK.Ev_Ipcam);
                        deviceTypeList.Add(SPK.Peephole);
                        deviceTypeList.Add(SPK.LightSwitch);
                        deviceTypeList.Add(SPK.LightRGB);
                        deviceTypeList.Add(SPK.LightRGBW);
@@ -656,7 +732,7 @@
                        deviceTypeList.Add(SPK.CurtainSwitch);
                        deviceTypeList.Add(SPK.CurtainRoller);
                        deviceTypeList.Add(SPK.CurtainTrietex);
                        deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);
                        deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);deviceTypeList.Add(SPK.AcIr);
                        deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
                        deviceTypeList.Add(SPK.SensorSmoke);
@@ -668,9 +744,10 @@
                        deviceTypeList.Add(SPK.SensorPir);
                        deviceTypeList.Add(SPK.SensorDoorWindow);
                        deviceTypeList.Add(SPK.SensorUtrasonic);
                        deviceTypeList.Add(SPK.SensorMmvPose);
                        deviceTypeList.Add(SPK.SenesorMegahealth);
                        deviceTypeList.Add(SPK.SenesorMegahealth2);
                        deviceTypeList.Add(SPK.SensorEnvironment);
                        deviceTypeList.Add(SPK.SensorEnvironment); deviceTypeList.Add(SPK.SensorEnvironmentHailin);
                        deviceTypeList.Add(SPK.SensorEnvironment2);
                        deviceTypeList.Add(SPK.SensorEnvironment3);
                        deviceTypeList.Add(SPK.SensorTemperature);
@@ -685,11 +762,19 @@
                        deviceTypeList.Add(SPK.HvacCac);
                        deviceTypeList.Add(SPK.SensorHelp);
                        deviceTypeList.Add(SPK.DoorLock);
                        deviceTypeList.Add(SPK.doorgate);
                        deviceTypeList.Add(SPK.IpCam_Imou);
                        deviceTypeList.Add(SPK.SensorPm10);
                        deviceTypeList.Add(SPK.VideoDoorLock);
                        deviceTypeList.Add(SPK.AcIr);
                        deviceTypeList.Add(SPK.SensorPirHold);
                        deviceTypeList.Add(SPK.SensorLight);
                    }
                    break;
                case target_if:
                    {
                        deviceTypeList.Add(SPK.GroupControl);
                        deviceTypeList.Add(SPK.LightSwitch);
                        deviceTypeList.Add(SPK.LightRGB);
                        deviceTypeList.Add(SPK.LightRGBW);
@@ -698,12 +783,19 @@
                        deviceTypeList.Add(SPK.CurtainSwitch);
                        deviceTypeList.Add(SPK.CurtainRoller);
                        deviceTypeList.Add(SPK.CurtainTrietex);
                        deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);
                        deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC); deviceTypeList.Add(SPK.AcIr);
                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
                        deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
                        deviceTypeList.Add(SPK.AirSwitch);
                        deviceTypeList.Add(SPK.PanelSocket);
                        deviceTypeList.Add(SPK.ElectricSocket);
                        deviceTypeList.Add(SPK.CurtainDream);
                        deviceTypeList.Add(SPK.MusicStandard);
                        deviceTypeList.Add(SPK.AvMusic);
                        deviceTypeList.Add(SPK.MechanicalArm);
                        deviceTypeList.Add(SPK.AcIr);
                        deviceTypeList.Add(SPK.ElectricalTvHisense);
                        deviceTypeList.Add(SPK.OtherCommon);
                    }
                    break;
            }
@@ -740,15 +832,15 @@
        /// <returns></returns>
        public List<Entity.Function> GetFunctionDeviceList(Entity.Room room, string str)
        {
            List<string> functionTypeList = GetSupportEquipment(str);
            List<string> functionTypeList = this.GetSupportEquipment(str);
            //返回房间设备列表
            var roomDeviceList = GetRoomDevice(room);
            var roomDeviceList = this.GetRoomDevice(room);
            //返回最终支持显示出来的设备列表
            var list = GetShowDeviceList(functionTypeList, roomDeviceList);
            var list =this.GetShowDeviceList(functionTypeList, roomDeviceList);
            return list;
        }
        /// <summary>
        /// 网关ID(获取嘉乐网关ID)
        /// 网关ID(获取网关ID)
        /// </summary>
        public string GatewayId
        {
@@ -779,6 +871,63 @@
            get
            {
                return Entity.DB_ResidenceData.Instance.CurrentRegion.isOtherShare;
            }
        }
        /// <summary>
        /// 拼接时间格式//"{h}h{m}min{s}s";
        /// </summary>
        /// <param name="totalSeconds">秒(没有默认传入0)</param>
        /// <returns></returns>
        public string getTimeStr(string totalSeconds)
        {
            try
            {
                if (string.IsNullOrEmpty(totalSeconds))
                {
                    return "";
                }
                int time = int.Parse(totalSeconds);
                int h = time / (60 * 60);
                int m = time % (60 * 60) / 60;
                int s = (time % (60 * 60) % 60);
                if (h == 0 && m != 0 && s != 0)
                {
                    return $"{m}min{s}s";
                }
                else if (h == 0 && m == 0 && s != 0)
                {
                    return $"{s}s";
                }
                else if (h == 0 && m != 0 && s == 0)
                {
                    return $"{m}min";
                }
                else if (h != 0 && m == 0 && s != 0)
                {
                    return $"{h}h{s}s";
                }
                else if (h != 0 && m == 0 && s == 0)
                {
                    return $"{h}h";
                }
                else if (h != 0 && m != 0 && s == 0)
                {
                    return $"{h}h{m}min";
                }
                else if (h != 0 && m != 0 && s != 0)
                {
                    return $"{h}h{m}min{s}s";
                }
                else if (h == 0 && m == 0 && s == 0)
                {
                    return $"0s";
                }
                return "";
            }
            catch
            {
                return "";
            }
        }
@@ -931,63 +1080,62 @@
                //不是主账号直接返回
                return;
            }
            List<LogicData> logicDataList = new List<LogicData>();
            List<LogicIdData> logicDataList = new List<LogicIdData>();
            logicDataList.Clear();
            System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
              //获取逻辑ID列表,目前针对所有<备注:如果只针对当前手机的话,可以直接拿缓存数据自动化列表遍历>
              var idStr = Send.GetLogicIdList();
                    if (idStr.Code == "0" && idStr.Data != null && idStr.Data.ToString() != "")
                    //获取逻辑ID列表,目前针对所有<备注:如果只针对当前手机的话,可以直接拿缓存数据自动化列表遍历>
                    var idStrList = Send.Current.GetLogicIdList();
                    if (idStrList != null)
                    {
                        var date = Newtonsoft.Json.JsonConvert.SerializeObject(idStr.Data);
                        logicDataList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LogicData>>(date);
                        logicDataList.AddRange(idStrList);
                    }
              ///有自动列表才处理
              if (logicDataList.Count > 0)
                    ///有自动列表才处理
                    if (logicDataList.Count > 0)
                    {
                  ///遍历所有列表
                  for (int i = 0; i < logicDataList.Count; i++)
                        ///遍历所有列表
                        for (int i = 0; i < logicDataList.Count; i++)
                        {
                            var logicDate = logicDataList[i];
                      ///自动化没有配置地理围栏不处理
                      if (string.IsNullOrEmpty(logicDate.geo_fence.latitude) || string.IsNullOrEmpty(logicDate.geo_fence.longitude))
                            ///自动化没有配置地理围栏不处理
                            if (string.IsNullOrEmpty(logicDate.geo_fence.latitude) || string.IsNullOrEmpty(logicDate.geo_fence.longitude))
                            {
                          //经纬度为空,认为自动化没有配置地理围栏,不处理;
                          continue;
                                //经纬度为空,认为自动化没有配置地理围栏,不处理;
                                continue;
                            }
                      //自动化配置输入条件纬度
                      double lat = Convert.ToDouble(logicDate.geo_fence.latitude.Replace(",", "."));
                      //自动化配置输入条件经度
                      double lon = Convert.ToDouble(logicDate.geo_fence.longitude.Replace(",", "."));
                      //自动化配置输入条件<地理围栏半径><单位,公里、千米.米>
                      int radius = int.Parse(logicDate.geo_fence.radius);
                      //计算2个经纬度之间的距离
                      int r = Infrastructure.Service.Helper.CalculatedDistance.Distance(out_lat, out_lng, lat, lon);
                      //定义一个局部变量
                      string direction = string.Empty;
                      //两点距离小于配置距离<既自动化配置输入条件地理围栏半径>,说明进入区域
                      if (r < radius)
                            //自动化配置输入条件纬度
                            double lat = Convert.ToDouble(logicDate.geo_fence.latitude.Replace(",", "."));
                            //自动化配置输入条件经度
                            double lon = Convert.ToDouble(logicDate.geo_fence.longitude.Replace(",", "."));
                            //自动化配置输入条件<地理围栏半径><单位,公里、千米.米>
                            int radius = int.Parse(logicDate.geo_fence.radius);
                            //计算2个经纬度之间的距离
                            int r = Infrastructure.Service.Helper.CalculatedDistance.Distance(out_lat, out_lng, lat, lon);
                            //定义一个局部变量
                            string direction = string.Empty;
                            //两点距离小于配置距离<既自动化配置输入条件地理围栏半径>,说明进入区域
                            if (r * 1000 < radius)
                            {
                          //到达某地
                          direction = "arrive";
                                //到达某地
                                direction = "arrive";
                            }
                            else
                            {
                          //离开
                          direction = "leave";
                                //离开
                                direction = "leave";
                            }
                      ///遍历缓存列表<不为空说明数据已经推送过,不再推送>
                      var isPush = pushList.Find((o) => o.homeId == HomeId && o.userId == UserInfo.Current.ID && o.userLogicId == logicDate.userLogicId && o.arriveOnLeave == direction);
                            ///遍历缓存列表<不为空说明数据已经推送过,不再推送>
                            var isPush = pushList.Find((o) => o.homeId == HomeId && o.userId == UserInfo.Current.ID && o.userLogicId == logicDate.userLogicId && o.arriveOnLeave == direction);
                            if (isPush == null)
                            {
                          //推送给云端是否成功
                          bool push = Send.GeoFenceStateReport(logicDate.userLogicId, logicDate.sid, direction);
                                //推送给云端是否成功
                                bool push = Send.Current.GetFenceStateReport(logicDate.userLogicId, logicDate.sid, direction);
                                if (push)
                                {
                              ///添加到推送列表
                              pushList.Add(new Push
                                    ///添加到推送列表
                                    pushList.Add(new Push
                                    {
                                        homeId = HomeId,
                                        userId = UserInfo.Current.ID,
@@ -1008,6 +1156,48 @@
        /// 推送列表<这里数据已经推送过>
        /// </summary>
        private static List<Push> pushList = new List<Push>();
        /// <summary>
        /// 获取模拟的设备列表
        /// </summary>
        /// <param name="isBool">是否开启</param>
        /// <returns></returns>
        private List<Entity.Function> GetTestDevice(ref List<HDL_ON.Entity.Function> list, bool isBool)
        {
            if (isBool)
            {
                //模拟设备
                var functions = new List<Function> {
                 new Entity.Function { sid = "1234567890", name = "光照传感器", spk = Entity.SPK.SensorLight },
                  new Entity.Function { sid = "1234567891", name = "干节点", spk = Entity.SPK.SensorDryContact },
                   new Entity.Function { sid = "1234567892", name = "紧急求助传感器", spk = Entity.SPK.SensorHelp },
                        new Entity.Function { sid = "12345678921", name = "通用开关", spk = Entity.SPK.OtherCommon },
                    //new Entity.Function { sid = "12345678933456", name = "门锁", spk = Entity.SPK.DoorLock },
                    //  new Entity.Function { sid = "1234567895444", name = "视频门锁", spk = Entity.SPK.VideoDoorLock },
                      new Entity.Function { sid = "123456789688889", name = "人体存在传感器", spk = Entity.SPK.SensorPirHold },
                      new Entity.Function { sid = "12345678968888", name = "测试猫眼", spk = Entity.SPK.Peephole },
                      new Entity.Function { sid = "12345678968889", name = "测试萤石摄像头", spk = Entity.SPK.Ev_Ipcam },
                      //  new Entity.Function { sid = "1234567897", name = "毫米波传感器1", spk = Entity.SPK.SenesorMegahealth2 },
                      // new Entity.Function { sid = "1234567899", name = "门磁传感器", spk = Entity.SPK.SensorDoorWindow },
                      //  new Entity.Function { sid = "12345678991234", name = "HDL机械手", spk = Entity.SPK.MechanicalArm },
                      //    new Entity.Function { sid = "123456789912345", name = "海曼机械手", spk = Entity.SPK.MechanicalArm },
                              new Entity.Function { sid = "12345678991234566844", name = "大华摄像头", spk = Entity.SPK.IpCam_Imou },
                                 new Entity.Function { sid = "12345678991234567", name = "RGB", spk = Entity.SPK.LightRGB },
                                  new Entity.Function { sid = "123456789912345678", name = "RGBW", spk = Entity.SPK.LightRGBW },
                                     new Function { spk = SPK.ElectricalTvHisense, name = "海信电视1",sid="123456789"},
            };
                foreach (var function in functions)
                {
                    var device = list.Find((o) => { return o.sid == function.sid; });
                    if (device == null)
                    {
                        list.Add(function);
                    }
                }
            }
            return list;
        }
    }
    public class Push