wei
2020-12-01 8983da138cb92e35b0bbeaece1cf1c454a5a79d4
HDL_ON/Entity/Function/Scene.cs
@@ -1,18 +1,83 @@
using System;
using System.Collections.Generic;
using Shared;
namespace HDL_ON.Entity
{
    public class Scene : Function
    public class Scene
    {
        public Scene()
        /// <summary>
        /// 远端唯一ID
        /// </summary>
        public string userSceneId = "";
        /// <summary>
        /// 场景sid
        /// </summary>
        public string sid = "";
        /// <summary>
        /// 场景名称
        /// </summary>
        public string name = "";
        /// <summary>
        /// 网关ID
        /// </summary>
        public string gatewayId = "";
        /// <summary>
        /// 云端oss存储图片的路径
        /// </summary>
        public string image = "";
        /// <summary>
        /// 所属房间列表
        /// </summary>
        public List<string> roomIds = new List<string>();
        /// <summary>
        /// 延时
        /// </summary>
        public int 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;
            }
        }
        /// <summary>
        /// 场景分组
        /// </summary>
        public string group = "1";
        /// <summary>
        /// 场景类型
        /// </summary>
        public SceneType sceneType = SceneType.OrdinaryScenes;
        /// <summary>
        /// 收藏标记
        /// </summary>
        public bool collect = false;
        /// <summary>
        /// 场景背景
@@ -22,7 +87,11 @@
        /// <summary>
        /// 场景功能列表
        /// </summary>
        public List<Function> sceneFunctionList = new List<Function>();
        public List<SceneFunction> functions = new List<SceneFunction>();
        /// <summary>
        /// 场景推送配置列表
        /// </summary>
        public List<ScenePushConfig> pushConfigs = new List<ScenePushConfig>();
        /// <summary>
        /// 生成场景sid
@@ -53,7 +122,7 @@
                {
                    sTimeSpan = sTimeSpan.Substring(0, 8);
                }
                else
                else
                {
                    sTimeSpan = "00000000";
                }
@@ -79,213 +148,129 @@
            }
        }
        /// <summary>
        /// 获取设备添加到房间的房间名称
        /// </summary>
        /// <returns></returns>
        public string GetRoomListName()
        {
            string roomNameList = "";
            foreach (var roomId in roomIds)
            {
                var findRoom = DB_ResidenceData.rooms.Find(obj => obj.sid == roomId);
                if (findRoom == null)
                {
                    continue;
                }
                if (roomNameList != "")
                {
                    roomNameList += ",";
                }
                roomNameList += findRoom.floorName + findRoom.name;
            }
            if (roomNameList == "" )
            {
                roomNameList = Shared.Language.StringByID(StringId.WholeHouseScene);
            }
            return roomNameList;
        }
        /// <summary>
        /// 数据存储文件名
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string savePath
        {
            get
            {
                return "SceneData_" + sid;
            }
        }
        /// <summary>
        /// 保存功能数据
        /// </summary>
        public void SaveSceneData()
        {
            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
            FileUtils.WriteFileByBytes(savePath + this.sid, ssd);
            MainPage.Log($"Save Scene Data : {this.sid}");
        }
        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime refreshTime = DateTime.MinValue;
    }
    /// <summary>
    /// 场景功能对象
    /// </summary>
    public class SceneFunction
    {
        public string sid = "";
        public List<SceneFunctionStatus> status = new List<SceneFunctionStatus>();
        /// <summary>
        /// 功能延时
        /// </summary>
        public string delay = "0";
        Function _localFunction;
        /// <summary>
        /// 本地对应的功能
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public Function localFunction {
            get
            {
                if(_localFunction == null)
                {
                    _localFunction = ConvertFunctionObject();
                }
                return _localFunction;
            }
        }
        /// <summary>
        /// 转换成功能对象
        /// </summary>
        /// <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 } });
            }
            return localFunction;
        }
    }
    /// <summary>
    /// 场景功能属性
    /// </summary>
    public class SceneFunctionStatus
    {
        public string key = "";
        public string value = "";
    }
    /// <summary>
    /// 场景推送配置
    /// </summary>
    public class ScenePushConfig
    {
        /// <summary>
        /// 推送方式
        /// </summary>
        public string pushMethod = "";
        /// <summary>
        /// 推送内容
        /// </summary>
        public string pushContent = "";
        /// <summary>
        /// 推送目标集合
        /// </summary>
        public List<string> pushTarget = new List<string>();
    }
}
//5.1.14获取场景列表
//请求参数
//{
//   "namespace": "HDL",
//   "type": "scene",
//   "command": "get_list"
//}
//返回值 json格式 所有场景id及场景里执行的目标数据
//返回例子
//{
//   "namespace": "HDL",
//   "command": "get_list_respond",
//   "type": "scene",
//   "number": [{
//      "scene_id": "0001",
//      "scene_name": "dinner",
//      "objects": [{
//            "sid": "00010019101209000025670100010001",
//"data_type": "string ",
//         "value": "on"
//        }]
//   }]
//}
//说明 获取场景列表和属性,只开,只关,既开又关
//5.1.15创建场景
//请求参数
//{
//   "namespace": "HDL",
//   "command": "create",
//   "type": "scene",
//   "objects": [{
//      "scene_name": "Away ",
//      "status": "single_off"
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "create_respond",
//   "type": "scene",
//   "objects": [{
//      "scene_id": "0004",
//      "name": "Away",
//      "status": "single_off"
//   }]
//}
//说明 创建场景
//5.1.16添加目标到场景
//请求参数
//{
//   "namespace": "HDL",
//   "command": "add_member",
//   "type": "scene",
//   "number": [{
//      "scene_id": "0001",
//      "objects": [{
//         "sid": "00010019101209000025670100010001",
//         "function": [{
//            "attri": "switch",
//"data_type": "string ",
//            "value": "on"
//         }]
//      }]
//   }, {
//      "scene_id": "0002",
//      "objects": [{
//         "sid": "00010019101209000025670200010001",
//         "function": [{
//            "attri": "brightness",
//"data_type": "int",
//            "value": 50
//         }]
//      }]
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "add_member_respond",
//   "type": "scene",
//   "scene_id": "0001",
//   "value": "success"
//}
//说明 成功添加目标的场景列表
//5.1.17删除场景命令
//请求参数
//{
//   "namespace": "HDL",
//   "command": "delete",
//   "type": "scene",
//   "objects": [{
//      "scene_id": "0001"
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "delete_respond",
//   "type": "scene",
//   "scene_id": "0001",
//   "value": "success"
//}
//说明 删除场景
//5.1.18删除场景里的目标
//请求参数
//{
//   "Namespace": "HDL",
//   "Command": "delete_member",
//   "type": "scene",
//   "number": [{
//      "scene_id": "0001",
//      "objects": [{
//         "sid": "00010019101209000025670100010001"
//      }, {
//         "sid": "00010019101209000025670100010002"
//      }]
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "delete_member_respond",
//   "type": "scene",
//   "scenesid": "0001",
//   "sid": "00010019101209000025670100010001",
//   "value": "success"
//}
//说明 删除场景内设备
//5.1.19配置场景分组(足内场景状态自动记录最后一次记录)
//请求参数   {
//   "namespace": "HDL",
//   "command": "group",
//   "type": "scene",
//   "objects": [{
//      "group_id": 1,
//      "scene_ids": [{
//         "scene_id": "0001"
//      }, {
//         "scene_id": "0002"
//      }]
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "group_respond",
//   "type": "scene",
//   "group_id": "0001",
//   "value": "success"
//}
//说明 控制场景
//5.1.20读取场景分组
//请求参数
//{
//   "namespace": "HDL",
//   "command": "read_group",
//   "type": "scene",
//   "objects": [{
//      "group_id": 1
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "read_group_respond",
//   "type": "scene",
//   "objects": [{
//      "group_id": 1,
//      "scene_ids": [{
//         "scene_id": "0001"
//      }, {
//         "scene_id": "0002"
//      }]
//   }]
//}
//说明 控制场景
//5.1.21控制场景
//请求参数
//{
//   "namespace": "HDL",
//   "command": "contrl",
//   "type": "scene",
//   "objects": [{
//      "scene_id": "0001",
//      "value": “on”
//   }]
//}
//返回值 json格式
//返回例子   {
//   "namespace": "HDL",
//   "command": "contrl_respond",
//   "type": "scene",
//      "scene_id": "0001",
//      "value": "success"
//}
//说明 控制场景