mac
2024-07-25 f9181a9c8125136f597add7c30cb2ff508d54ba7
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs
@@ -1,22 +1,80 @@
using System;
using System.Collections.Generic;
using HDL_ON.Common;
using HDL_ON.DAL.Server;
using HDL_ON.DriverLayer;
using Shared;
namespace HDL_ON.Entity
{
    public class GroupControl
    public class GroupControl : Function
    {
        public GroupControl()
        {
            spk = "groupControl";
        }
        /// <summary>
        /// 群控ID
        /// </summary>
        public string userDeviceGroupControlId = string.Empty;
        /// <summary>
        /// 群控sid
        /// </summary>
        public string sid = string.Empty;
        //public string sid = string.Empty;
        /// <summary>
        /// 生成群控sid
        /// </summary>
        public string NewGroupControlSid()
        {
            string Id = "";
            try
            {
                string sOidBeginsWith = "000101";//厂商 + 通讯方式
                DateTime dt = DateTime.Now;
                DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
                long m = (long)((dt - startTime).TotalMilliseconds / 10);
                string sTimeSpan = "00000000";
                byte[] arry = new byte[4];
                arry[0] = (byte)(m & 0xFF);
                arry[1] = (byte)((m & 0xFF00) >> 8);
                arry[2] = (byte)((m & 0xFF0000) >> 16);
                arry[3] = (byte)((m >> 24) & 0xFF);
                sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2");
                if (sTimeSpan.Length >= 8)
                {
                    sTimeSpan = sTimeSpan.Substring(0, 8);
                }
                else
                {
                    sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8);
                    //sTimeSpan = "00000000";
                }
                Id = sOidBeginsWith + sTimeSpan;
                Id += "AA";
                Id += "AA01";
                int maxId = 1;
                Random random = new Random(Guid.NewGuid().GetHashCode());
                maxId = random.Next(10);
                Id += (maxId + 1).ToString("X4");
                Id += "0000";
            }
            catch
            {
                return Id;
            }
            return Id;
        }
        /// <summary>
        /// 群控名称
        /// </summary>
        public string name = string.Empty;
        //public string name = string.Empty;
        /// <summary>
        /// 群控类型
        /// </summary>
@@ -24,23 +82,22 @@
        /// <summary>
        /// 房间uid
        /// </summary>
        public List<String> uids = new List<string>();
        public List<String> roomIds = new List<string>();
        [Newtonsoft.Json.JsonIgnore]
        public List<string> uids = new List<string>();
        //public List<String> roomIds = new List<string>();
        /// <summary>
        /// 群控功能sid配置
        /// </summary>
        public List<GroupControlFunction> sids = new List<GroupControlFunction>();
        /// <summary>
        /// 获取设备添加到房间的房间名称
        /// </summary>
        /// <returns></returns>
        public string GetRoomListName()
        public string GetUidListName()
        {
            string roomNameList = "";
            foreach (var roomId in roomIds)
            foreach (var roomId in uids)
            {
                var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId);
                if (findRoom == null)
@@ -59,6 +116,77 @@
            }
            return roomNameList;
        }
        /// <summary>
        /// 群控控制
        /// </summary>
        /// <param name="pairs"></param>
        public void Control(Dictionary<string,string> pairs)
        {
            try
            {
                if (DriverLayer.Control.Ins.GatewayOnline_Local)
                {
                    var functionControlDataObj = GetGatewayAlinkControlData(pairs);
                    var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
                    var sendBytes = DriverLayer.Control.Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlGroupControlTopic, functionControlDataJson);
                    new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 3);
                    MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}");
                }
                else
                {
                    var controlValues = new Dictionary<string, object>();
                    foreach (var p in pairs)
                    {
                        controlValues.Add("key", p.Key);
                        controlValues.Add("value", p.Value);
                    }
                    var pack = ApiUtlis.Ins.HttpRequest.ControlGroupControl(userDeviceGroupControlId, controlValues);
                    if (pack != null)
                    {
                        if (pack.Code == StateCode.SUCCESS)
                        {
                            //DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl.
                        }
                        else
                        {
                            MainPage.Log($"群控控制失败,Code: {pack.Code}");
                        }
                    }
                }
            }
            catch (Exception ex){
                MainPage.Log($"群控控制失败: {ex.Message}");
            }
        }
        public new List<FunctionAttributes> attributes {
            get
            {
                var list = new List<FunctionAttributes>();
                foreach (var temp in sids)
                {
                    var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
                    if (light != null)
                    {
                        foreach(var attr in light.attributes)
                        {
                            if(list.Find((obj)=>obj.key == attr.key) == null)
                            {
                                list.Add(attr);
                            }
                        }
                    }
                }
                return list;
            }
        }
    }
    public class GroupControlFunction
@@ -71,6 +199,29 @@
        /// 功能spk
        /// </summary>
        public string spk = string.Empty;
    }
    public class GroupControlType
    {
        /// <summary>
        /// 类型
        /// </summary>
        public string type = string.Empty;
        /// <summary>
        /// 类型名称
        /// </summary>
        public string typeName = string.Empty;
        /// <summary>
        /// 群控支持的spk
        /// </summary>
        public List<string> spks = new List<string>();
        /// <summary>
        /// 群控支持的spk属性
        /// </summary>
        public List<string> spkAttrs = new List<string>();
    }
}