wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/Entity/Function/Scene.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using HDL_ON.Common;
using HDL_ON.DAL.Server;
using HDL_ON.UI;
using Shared;
namespace HDL_ON.Entity
@@ -27,15 +29,15 @@
        public Scene()
        {
            sid = NewSid();
            if (!DB_ResidenceData.residenceData.CheckWhetherGatewayIdIsNull())
            if (!DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
            {
                gatewayId = DB_ResidenceData.residenceData.HomeGateway.gatewayId;
                gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId;
            }
        }
        /// <summary>
        /// 云端唯一ID
        /// </summary>
        public string userSceneId = "";
        public string userSceneId = null;
        /// <summary>
        /// 场景sid
        /// </summary>
@@ -56,44 +58,18 @@
        /// 所属房间列表
        /// </summary>
        public List<string> roomIds = new List<string>();
        /// <summary>
        /// 所属房间列表
        /// </summary>
        public List<string> uids = new List<string>();
        ///// <summary>
        ///// 所属房间列表
        ///// </summary>
        //public List<string> uids = new List<string>();
        /// <summary>
        /// 延时
        /// </summary>
        public int delay = 0;
        public string delay = "0";
        /// <summary>
        /// 延时显示的文本
        /// 场景的最后一次执行时间
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string delayText
        {
            get
            {
                string text = "";
                switch (delay)
                {
                    case 0:
                        text = Language.StringByID(StringId.NoDelay);
                        break;
                    case 30:
                        text = "30s";
                        break;
                    case 60:
                        text = "1min";
                        break;
                    case 120:
                        text = "2min";
                        break;
                    case 300:
                        text = "5min";
                        break;
                }
                return text;
            }
        }
        public string LastExecutionTime = "";
        /// <summary>
        /// 场景分组
@@ -108,10 +84,10 @@
        /// </summary>
        public bool collect = false;
        ///// <summary>
        ///// 场景背景
        ///// </summary>
        //public string ImagePath = "Intelligence/Gallery/scenebg1.png";//"FunctionIcon/Scene/s1.png";
        /// <summary>
        /// 创建该场景的用户ID
        /// </summary>
        public string userId = "";
        ///// <summary>
        ///// 场景背景
@@ -167,13 +143,14 @@
                sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2");
                if (sTimeSpan.Length > 8)
                if (sTimeSpan.Length >= 8)
                {
                    sTimeSpan = sTimeSpan.Substring(0, 8);
                }
                else
                {
                    sTimeSpan = "00000000";
                    sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8);
                    //sTimeSpan = "00000000";
                }
                sceneId = sOidBeginsWith + sTimeSpan;
@@ -223,7 +200,7 @@
            }
            if (roomNameList == "" )
            {
                roomNameList = Shared.Language.StringByID(StringId.WholeHouseScene);
                roomNameList = Shared.Language.StringByID(StringId.WholeZone);
            }
            return roomNameList;
        }
@@ -239,56 +216,171 @@
                return "SceneData_" + sid;
            }
        }
        /// <summary>
        /// 保存功能数据
        /// 场景执行\倒计时
        /// </summary>
        public void SaveSceneData(bool upServer)
        /// <param name="btnShowDelay"></param>
        public void SceneCountDown(Button btnShowDelay)
        {
            if (upServer)
            //场景正在倒计时执行中
            if (LastExecutionTime != "" && Convert.ToDouble(LastExecutionTime) + Convert.ToDouble(delay) > Convert.ToDouble(Utlis.GetTimestamp(false)))
            {
                UploadScene();
                int time = 0;
                int.TryParse(Convert.ToInt32(
                    Convert.ToDouble(LastExecutionTime) + Convert.ToDouble(delay) - Convert.ToDouble(Utlis.GetTimestamp(false))
                    ).ToString(), out time);
                if (time > 0)
                {
                    new System.Threading.Thread(() =>
                    {
                        if (time > 0)
                        {
                            while (time > 0)
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    if (time > 60)
                                    {
                                        btnShowDelay.Text = (time / 60).ToString() + "min" + time % 60 + "s";
                                    }
                                    else
                                    {
                                        btnShowDelay.Text = time.ToString() + "s";
                                    }
                                });
                                System.Threading.Thread.Sleep(1000);
                                time--;
                            }
                            Application.RunOnMainThread(() =>
                            {
                                btnShowDelay.Text = "";
                            });
                        }
                    })
                    { IsBackground = true, Priority = System.Threading.ThreadPriority.BelowNormal }.Start();
                }
            }
            else
            {
                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
                Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
                MainPage.Log($"Save Scene Data : {savePath}");
            }
        }
        /// <summary>
        /// 保存场景数据文件
        /// </summary>
        public void SaveSceneFile()
        {
            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
            FileUtlis.Files.WriteFileByBytes(savePath, ssd);
            MainPage.Log($"Save Scene Data : {savePath}");
        }
        /// <summary>
        /// 上传数据到云端
        /// 收藏场景
        /// </summary>
        void UploadScene()
        /// <returns></returns>
        public void CollectScene()
        {
            var result = StateCode.SUCCESS;
            new System.Threading.Thread(() =>
            {
                if (collect)
                {
                    result = ApiUtlis.Ins.HttpRequest.CollectScene(userSceneId);
                }
                else
                {
                    result = ApiUtlis.Ins.HttpRequest.CancelCollectScene(userSceneId);
                }
                //提示错误
                if (result != StateCode.SUCCESS)
                {
                    Application.RunOnMainThread(() =>
                    {
                        collect = !collect;
                        IMessageCommon.Current.ShowErrorInfoAlter(result);
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 编辑场景
        /// </summary>
        public string EditScene()
        {
            var pm = new HttpServerRequest();
            ResponsePackNew revPack;
            if (string.IsNullOrEmpty(createTime) && string.IsNullOrEmpty(modifyTime))
            var revPack = pm.EditScene(this);
            if (revPack.Code == StateCode.SUCCESS)
            {
                revPack = pm.AddScene(this);
                if (revPack.Code == StateCode.SUCCESS)
                var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString());
                var tempScene = scenes.Find((obj) => obj.sid == sid);
                if (tempScene != null)
                {
                    var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
                    var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
                    Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
                }
            }
            else if (!string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime))
            {
                revPack = pm.EditScene(this);
                if (revPack.Code == StateCode.SUCCESS)
                {
                    var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString());
                    var tempScene = scenes.Find((obj) => obj.sid == sid);
                    if (tempScene != null)
                    {
                        var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
                        Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
                    }
                }
            }
            return revPack.Code;
        }
        /// <summary>
        /// 修改场景
        /// </summary>
        public string UpdateScene()
        {
            var pm = new HttpServerRequest();
            var revPack = pm.EditScene(this);
            if (revPack.Code == StateCode.SUCCESS)
            {
                var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString());
                var tempScene = scenes.Find((obj) => obj.sid == sid);
                if (tempScene != null)
                {
                    var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
                    Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
                }
            }
            return revPack.Code;
        }
        /// <summary>
        /// 延时显示的文本
        /// </summary>
        public string GetDelayText()
        {
            var delayInt = 0;
            int.TryParse(delay,out delayInt);
            if(delayInt == 0)
            {
                return Language.StringByID(StringId.NoDelay);
            }
            string text = "";
            if (delayInt > 60)
            {
                text = (delayInt / 60) + Language.StringByID(StringId.m) + (delayInt % 60) + Language.StringByID(StringId.s);
            }else
            {
                text = delayInt + Language.StringByID(StringId.s);
            }
            return text;
            switch (delay)
            {
                case "0":
                    text = Language.StringByID(StringId.NoDelay);
                    break;
                case "30":
                    text = "30s";
                    break;
                case "60":
                    text = "1min";
                    break;
                case "120":
                    text = "2min";
                    break;
                case "300":
                    text = "5min";
                    break;
            }
            return text;
        }
        /// <summary>
        /// 云端数据创建的时间
        /// </summary>
@@ -297,6 +389,8 @@
        /// 云端数据修改的最后时间
        /// </summary>
        public string modifyTime = "";
    }
    /// <summary>
    /// 场景功能对象
@@ -316,10 +410,11 @@
        /// 本地对应的功能
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public Function localFunction {
        public Function localFunction
        {
            get
            {
                if(_localFunction == null)
                if (_localFunction == null)
                {
                    _localFunction = ConvertFunctionObject();
                }
@@ -333,14 +428,60 @@
        /// <returns></returns>
        Function ConvertFunctionObject()
        {
            var localFunction = DB_ResidenceData.functionList.GetAllDeviceFunctionList().Find((obj) => obj.sid == sid);
            foreach (var s in status)
            {
                localFunction.attributes.Add(new FunctionAttributes() { key = s.key, curValue = s.value, value = new List<string>() { s.value } });
            }
            var localFunction = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.sid == sid);
            return localFunction;
        }
        /// <summary>
        /// 解析场景功能数据
        /// </summary>
        /// <param name="sceneFunction"></param>
        public string GetFunctionScnenInfo()
        {
            var sceneFunctionInfo = "";
            foreach (var sfs in status)
            {
                if (sfs.key == FunctionAttributeKey.OnOff)
                {
                    if (sfs.value == "off")
                    {
                        return Language.StringByID(StringId.Close);
                    }
                }
            }
            sceneFunctionInfo += Language.StringByID(StringId.Open) + " ";
            var modeState = status.Find((obj) => obj.key == FunctionAttributeKey.Mode);
            var tempState = status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp);
            var fanState = status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
            if (modeState != null)
            {
                sceneFunctionInfo += modeState.GetValueText() + " ";
            }
            if (tempState != null)
            {
                sceneFunctionInfo += tempState.GetValueText() + " ";
                sceneFunctionInfo += tempState.GetUintString();
            }
            if (fanState != null)
            {
                sceneFunctionInfo += fanState.GetValueText() + " ";
            }
            var briState = status.Find((obj) => obj.key == FunctionAttributeKey.Brightness);
            if (briState != null)
            {
                sceneFunctionInfo += briState.value + "%";
            }
            var perState = status.Find((obj) => obj.key == FunctionAttributeKey.Percent);
            if (perState != null)
            {
                sceneFunctionInfo += perState.value + "%";
            }
            return sceneFunctionInfo;
        }
    }
    /// <summary>
@@ -350,6 +491,171 @@
    {
        public string key = "";
        public string value = "";
        /// <summary>
        /// 属性名称显示文本
        /// 中英文显示
        /// </summary>
        public string GetNameText()
        {
            string text = "";
            switch (key)
            {
                case FunctionAttributeKey.OnOff:
                    text = Language.StringByID(StringId.OnOff);
                    break;
                case FunctionAttributeKey.Brightness:
                    text = Language.StringByID(StringId.Brightness);
                    break;
                case FunctionAttributeKey.RGB:
                    text = Language.StringByID(StringId.ColorValue);
                    break;
                case FunctionAttributeKey.Mode:
                    text = Language.StringByID(StringId.Mode);
                    break;
                case FunctionAttributeKey.FanSpeed:
                    text = Language.StringByID(StringId.FanSpeed);
                    break;
                case FunctionAttributeKey.SetTemp:
                    text = Language.StringByID(StringId.Temp);
                    break;
                case FunctionAttributeKey.RoomTemp:
                    text = Language.StringByID(StringId.IndoorTemp);
                    break;
                case FunctionAttributeKey.Delay:
                    text = Language.StringByID(StringId.Delay);
                    break;
                case FunctionAttributeKey.CCT:
                    text = "CCT";
                    break;
                case FunctionAttributeKey.Percent:
                    text = Language.StringByID(StringId.PercentAdjustment);
                    break;
                case FunctionAttributeKey.FadeTime:
                    text = Language.StringByID(StringId.FadeSpeed);
                    break;
            }
            return text;
        }
        /// <summary>
        /// 属性值单位
        /// </summary>
        public string GetUintString()
        {
            var us = "";
            switch (key)
            {
                case FunctionAttributeKey.SetTemp:
                case FunctionAttributeKey.RoomTemp:
                    us = "°C";
                    break;
                case FunctionAttributeKey.Percent:
                case FunctionAttributeKey.Brightness:
                    us = "%";
                    break;
            }
            return us;
        }
        /// <summary>
        /// 获取指定属性的显示文本
        /// 中英文显示
        /// </summary>
        public string GetValueText()
        {
            string text = "";
            switch (key)
            {
                case FunctionAttributeKey.OnOff:
                    text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF);
                    break;
                case FunctionAttributeKey.SetTemp:
                case FunctionAttributeKey.RoomTemp:
                case FunctionAttributeKey.Brightness:
                case FunctionAttributeKey.Percent:
                    if (value == "")
                    {
                        value = "0";
                    }
                    text = value;
                    break;
                case FunctionAttributeKey.Mode:
                    switch (value)
                    {
                        //----空调
                        case "auto":
                            text = Language.StringByID(StringId.Auto);
                            break;
                        case "cool":
                            text = Language.StringByID(StringId.Cool);
                            break;
                        case "heat":
                            text = Language.StringByID(StringId.Heat);
                            break;
                        case "dry":
                            text = Language.StringByID(StringId.Dry);
                            break;
                        case "fan":
                            text = Language.StringByID(StringId.AirSupply);
                            break;
                        //-----地热
                        case "day":
                            text = Language.StringByID(StringId.Day);
                            break;
                        case "night":
                            text = Language.StringByID(StringId.Night);
                            break;
                        case "away":
                            text = Language.StringByID(StringId.Away);
                            break;
                        case "normal":
                            text = Language.StringByID(StringId.Normal);
                            break;
                        case "timer":
                            text = Language.StringByID(StringId.Timer);
                            break;
                    }
                    break;
                case FunctionAttributeKey.FanSpeed:
                    switch (value)
                    {
                        case "high":
                            text = Language.StringByID(StringId.HighWindSpeed);
                            break;
                        case "medium":
                            text = Language.StringByID(StringId.MiddleWindSpeed);
                            break;
                        case "low":
                            text = Language.StringByID(StringId.LowWindSpeed);
                            break;
                        case "auto":
                            text = Language.StringByID(StringId.Auto);
                            break;
                        default:
                            text = "low";
                            break;
                    }
                    break;
                case "high":
                    text = Language.StringByID(StringId.HighWindSpeed);
                    break;
                case "medium":
                    text = Language.StringByID(StringId.MiddleWindSpeed);
                    break;
                case "low":
                    text = Language.StringByID(StringId.LowWindSpeed);
                    break;
                case "auto":
                    text = Language.StringByID(StringId.Auto);
                    break;
            }
            return text;
        }
    }
    /// <summary>
    /// 场景推送配置